web-dev-qa-db-ja.com

Linuxのファイルへのテールプログラム出力

以下の形式を使用して、画面出力をファイルにリダイレクトできることを知っています。

$ your_program > /tmp/output.txt

ただし、以下のコマンドを使用すると"-bash:/home/user/errors.txt:Permission denied"と表示されます

Sudo tail /var/log/Apache2/error.log > ~/errors.txt

この出力を機能させる方法を教えてください。 〜/ errors.txtは存在しません。リダイレクトコマンドを使用する前に、まずこのtxtファイルを作成する必要がありますか?

9
Xianlin

パイプの後ろでは、Sudoは機能しません。なぜあなたはあなたの家に書き込むことができないのか分かりません-多分ファイルはルートに属していますか?

 Sudo tail /var/log/Apache2/error.log | Sudo tee ~/errors.txt

多分あなたはパイプの後ろに別のユーザーが必要です。確かに、既存のファイルは必要ありません。

17
user unknown

Sudo somecommand > ~/errors.txtを作成すると、Sudoを呼び出している(そして、そのまま実行されている)シェルがリダイレクトを実行し、~/errors.txtを開きます。 stdoutを書き込み権限のないファイルにリダイレクトする を参照してください。通常、その場合の問題は、rootがファイルに書き込むことです。これを行う方法については、リンクされた質問を参照してください。

ここでは、ホームディレクトリのファイルに書き込むことができないのは奇妙です。おそらく、以前に一部の出力をルートとして/home/user/errors.txtに保存し、そのファイルが存在し、ルートに属している可能性があります。ファイルを削除します(/home/userへの書き込み権限がある限り、ファイルを削除できます。そうすると、ユーザーとして作成できます。

rm ~/errors.txt
Sudo tail /var/log/Apache2/error.log > ~/errors.txt

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