開発用の 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 -a
tee --append
GNU コアユーティリティ)。
感謝しますジェイド、アダム・J・フォースターそしてジョナサン2番目、3番目、4番目のソリューションの場合。