output program ekor ke file di Linux


9

Saya tahu kita bisa menggunakan format di bawah ini untuk mengarahkan output layar ke file:

$ your_program > /tmp/output.txt

Namun ketika saya menggunakan perintah di bawah ini, tertulis "-bash: /home/user/errors.txt: Izin ditolak"

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

Bolehkah saya tahu cara membuat output ini berfungsi? The ~ / errors.txt tidak ada. Apakah saya harus membuat file txt ini terlebih dahulu sebelum saya menggunakan perintah redirect?


1
Apa yang terjadi jika Anda mengetik echo hi > ~/errors.txt? Apakah /home/userdirektori home Anda yang benar (atau apakah bash entah bagaimana bingung tentang di mana direktori home Anda)?
cjm

Apakah userpengguna yang menjalankan perintah?
pengguna tidak dikenal

ya, pengguna adalah pengguna yang menjalankan perintah
Xianlin

Ini adalah perilaku normal untuk sudo. sudotidak memungkinkan pengalihan. terlalu banyak cara bagi orang untuk dapat menggunakannya untuk melakukan hal-hal nakal yang tidak tercakup dalam sudoers.conffile. Sebagai alternatif, Anda bisa menjalankan sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"untuk mengikis akhir kesalahan.log ke file di dir rumah Anda.
Tim Kennedy

Jawaban:


17

Di belakang pipa, sudo tidak berfungsi. Saya tidak tahu mengapa Anda tidak bisa menulis ke rumah - mungkin file tersebut milik root?

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

Mungkin Anda membutuhkan pengguna lain di belakang pipa. Yang pasti, Anda tidak perlu file yang sudah ada sebelumnya.


Ya, itu berhasil ...
Xianlin

Adapun masalah izin, mungkin $ HOME adalah NFS-mount dengan rootquash?
Ansgar Esztermann

$ HOME tidak di-mount NFS.
Xianlin

6

Saat Anda menulis sudo somecommand > ~/errors.txt, shell yang memanggil sudo(dan berjalan seperti Anda) adalah yang melakukan pengalihan dan pembukaan ~/errors.txt. Lihat Mengarahkan stdout ke file yang Anda tidak memiliki izin menulis . Biasanya masalah dalam hal ini adalah Anda ingin root untuk menulis ke file; lihat pertanyaan terkait untuk cara melakukan ini.

Di sini, aneh bahwa Anda tidak dapat menulis ke file di direktori home Anda. Kemungkinannya adalah sebelumnya Anda menyimpan beberapa output sebagai root /home/user/errors.txt, dan file itu sekarang ada dan menjadi milik root. Hapus file (Anda dapat melakukannya selama Anda memiliki izin menulis /home/user, dan kemudian Anda akan dapat membuatnya sebagai pengguna Anda.

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

Jika file tersebut benar-benar tidak ada, maka Anda tidak memiliki izin menulis di direktori home Anda. Meskipun secara teknis memungkinkan, dan sebenarnya sesekali bermanfaat bagi beberapa pengguna terbatas, ini sangat tidak biasa.


Saya mencoba menghapus '/home/user/errors.txt' dan menggunakan perintah Anda di atas. Tidak berhasil, masih melarang saya untuk menulis ke direktori home. Pokoknya saya kira tautan yang Anda berikan dapat digunakan sebagai solusi saya. Itu sama dengan jawaban pertama dalam posting ini. Namun Anda telah memberikan beberapa penjelasan terperinci tentang pengalihan stdout ke file dan saya berterima kasih untuk itu.
Xianlin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.