sudo を使用して、書き込み権限のない場所に出力をリダイレクトするにはどうすればよいですか? [closed] 質問する

sudo を使用して、書き込み権限のない場所に出力をリダイレクトするにはどうすればよいですか? [closed] 質問する

開発用の RedHat Linux ボックスの 1 つで sudo アクセス権が付与されているのですが、通常は書き込みアクセス権がない場所に出力をリダイレクトする必要があることが頻繁にあるようです。

問題は、この不自然な例は機能しないことです。

sudo ls -hal /root/ > /root/test.out

私はただ次のような返答を受け取りました:

-bash: /root/test.out: Permission denied

これを動作させるにはどうすればよいですか?

ベストアンサー1

リダイレクトは書き込み権限のないシェルによって実行されるため、コマンドは機能しません/root/test.out。出力のリダイレクトはsudo によって実行されません。

解決策は複数あります:

  • sudo を使用してシェルを実行し、オプションを使用してコマンドを実行します-c

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • コマンドを含むスクリプトを作成し、そのスクリプトを sudo で実行します。

    #!/bin/sh
    ls -hal /root/ > /root/test.out
    

    実行しますsudo ls.sh。スティーブ・ベネットの答え一時ファイルを作成したくない場合は、

  • シェルを起動してsudo -sコマンドを実行します:

    [nobody@so]$ sudo -s
    [root@so]# ls -hal /root/ > /root/test.out
    [root@so]# ^D
    [nobody@so]$
    
  • 使用方法sudo tee(オプションを使用するときに頻繁にエスケープする必要がある場合-c):

    sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
    

    停止するにはリダイレクト/dev/nullが必要ですティー画面に出力されないようにする。出力ファイル()を上書きするのではなく追加するには、または(最後のは>>tee -atee --appendGNU コアユーティリティ)。

感謝しますジェイドアダム・J・フォースターそしてジョナサン2番目、3番目、4番目のソリューションの場合。

おすすめ記事