Linuxのtailプログラムはファイルとして出力されます。

Linuxのtailプログラムはファイルとして出力されます。

次の形式を使用して、画面出力をファイルにリダイレクトできることがわかります。

$ your_program > /tmp/output.txt

ただし、以下のコマンドを使用すると、次のように表示されます。"-bash:/home/user/errors.txt: 権限が拒否されました。"

sudo tail /var/log/apache2/error.log > ~/errors.txt

この出力をどのように動作させるかがわかりますか? ~/errors.txt が存在しません。リダイレクトコマンドを使用する前に、このtxtファイルを作成する必要がありますか?

答え1

パイプの後ろでsudoが機能しません。なぜ家に書けないのかわかりません。ファイルがルートに属しているのではないでしょうか?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

たぶん、パイプの後ろに他のユーザーが必要になるかもしれません。もちろん、既存のファイルは必要ありません。

答え2

を作成するときにsudo somecommand > ~/errors.txt呼び出される(そして一緒に実行される)シェルは、sudoリダイレクトを実行して開くシェルです~/errors.txt。バラより書き込み権限のないファイルに標準出力をリダイレクトします。。一般に、この場合の問題は、ルートがファイルに書き込もうとしていることです。これを行う方法については、リンクされた質問を参照してください。

ここで奇妙なことは、ホームディレクトリのファイルに書き込めないことです。以前にいくつかの出力を root にファイルとして保存しておき、/home/user/errors.txtそのファイルが存在し、root に属することができます。ファイルを削除します(書き込み権限がある場合はこれを実行でき/home/user、その後ユーザーとして作成できます)。

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

ファイルが存在しない場合は、ホームディレクトリに書き込み権限がありません。技術的に可能であり、実際には一部の制限されたユーザーにとって便利ですが、これは非常にまれです。

関連情報