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


9

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

$ your_program > /tmp/output.txt

しかし、以下のコマンドを使用すると、「-bash:/home/user/errors.txt:権限が拒否されました」と表示されます

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

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


1
入力するとどうなりますecho hi > ~/errors.txtか?/home/userあなたの正しいホームディレクトリはありますか(またはbashはどういうわけかあなたのホームディレクトリがどこにあるかについて混乱しましたか?)
cjm 2012年

あるuserコマンドを実行するユーザーには?
不明なユーザー

はい、ユーザーがコマンドを実行するユーザーである
Xianlin

これはの正常な動作ですsudosudoリダイレクトを許可しません。sudoers.confファイルに含まれていないいたずらなことをするために人々がそれを使うことができるにはあまりにも多くの方法。別の方法として、sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"errors.logの終わりをホームディレクトリのファイルにスクレイピングすることもできます。
Tim Kennedy

回答:


17

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

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

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


はい、うまく
いき

権限の問題に関しては、おそらく$ HOMEはrootsquashでNFSマウントされていますか?
Ansgar Esztermann 2012年

$ HOMEはNFSマウントされていません。
Xianlin 2012年

6

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

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

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

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


「/home/user/errors.txt」を削除して上記のコマンドを使用してみました。それは機能しませんでしたが、それでもホームディレクトリに書き込むことを禁止しました。とにかく、あなたが提供したリンクは私の解決策として使用できると思います。これは、この投稿の最初の回答と同じです。しかし、stdoutをファイルにリダイレクトすることについて、いくつかの詳細な説明を提供していただき、ありがとうございます。
Xianlin 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.