以下の形式を使用して、画面出力をファイルにリダイレクトできることを知っています。
$ your_program > /tmp/output.txt
ただし、以下のコマンドを使用すると"-bash:/home/user/errors.txt:Permission denied"と表示されます
Sudo tail /var/log/Apache2/error.log > ~/errors.txt
この出力を機能させる方法を教えてください。 〜/ errors.txtは存在しません。リダイレクトコマンドを使用する前に、まずこのtxtファイルを作成する必要がありますか?
パイプの後ろでは、Sudoは機能しません。なぜあなたはあなたの家に書き込むことができないのか分かりません-多分ファイルはルートに属していますか?
Sudo tail /var/log/Apache2/error.log | Sudo tee ~/errors.txt
多分あなたはパイプの後ろに別のユーザーが必要です。確かに、既存のファイルは必要ありません。
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
ファイルが本当に存在しない場合は、ホームディレクトリに書き込み権限がありません。技術的には可能であり、実際には一部の制限付きユーザーにとっては時々役立ちますが、それは非常に珍しいことです。