Bagaimana cara mencetak keluaran perintah Linux ke file?

3

Saya membuat skrip untuk menyinkronkan dokumen penting saya antara dua sistem. Saya ingin skrip saya membuat file log untuk tindakan terakhir. dapatkah Anda menyarankan saya cara untuk mencapai ini.

Pertanyaan: Jika saya menjalankan perintah rsync dengan flag -v, itu akan mencetak banyak pesan di konsol. Apakah ada cara Jadi, saya bisa mengarahkan log ini ke file?

vijay.shad
sumber
2
Berikut ini adalah pengantar singkat bagaimana Anda dapat mengarahkan berbagai jenis output: tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Felix

Jawaban:

5

Anda dapat memanggil skrip Anda dan mengarahkan "output standar" (AKA STDOUT) ke file log. Gunakan '>>' untuk menambahkan file log atau '>' untuk menimpa file log. File akan dibuat (jika izin pada direktori itu memungkinkan) jika belum ada. Jika file sudah ada, pastikan file itu dapat Anda tulis (atau siapa pun yang menjalankan skrip Anda).

Jika Anda selalu menambahkan file log daripada menulis di atasnya, adalah praktik yang baik untuk memastikan sejak awal bahwa sesuatu akan "memutar" file log Anda, yaitu, memindahkannya ke nama lain dan menghapus file log yang lebih lama. Jika file log unik untuk skrip Anda, Anda bisa meminta skrip Anda menjaga rotasi file log.

Biasanya, cara yang disukai adalah dengan memanggil skrip Anda dengan STDOUT diarahkan, tetapi mungkin ada saatnya Anda ingin melakukan pengalihan dalam skrip itu sendiri untuk satu atau lebih perintah. Anda dapat menambahkan ">> logfile" setelah pernyataan apa pun dalam skrip shell untuk menambahkan STDOUT dari perintah itu ke logfile. Anda dapat mengubahnya menjadi "2> & 1 >> logfile" untuk menambahkan "standard error" (AKA STDERR) dan STDOUT ke logfile. Anda biasanya tidak ingin memiliki STDERR juga masuk ke file log karena STDERR biasanya digunakan untuk memberi tahu apa pun / siapa pun yang menjalankan skrip masalah. Tetapi ada saat dan situasi di mana Anda menginginkannya. Jika kamu suka,

Marnix A. van Ammers
sumber
atau gunakan "tee", yang menulis barang ke file DAN ke stdout / stderr.
akira
5

Gunakan >operator:

rsync -v > log.txt

akan menulis output dari perintah rsync ke file bernama log.txt.

Mox
sumber
2

Selain yang di atas, jika Anda ingin melihat output dicetak ke layar DAN ke file untuk pengarsipan / grepping / etc, Anda mungkin ingin " tee " output. Ini adalah perintah yang hebat dan dinamai setelah pipa T yang ditemukan di pipa dunia nyata, dan bekerja dengan baik untuk "sub-konsol" seperti mysql, dll.

Perintahnya adalah tee ... inilah contoh yang disalin dari pengguna bernama " toydi ":

Untuk menampilkan dan mencatat output dari perintah secara bersamaan: ls -l | tee -a file.logPada contoh ini, ia akan menampilkan daftar direktori keluaran dan juga, menyimpan keluaran ke file.log. Opsi -a memberi tanda perintah untuk menambahkan daripada menimpa file.

Juga, periksa gambar di wikipedia untuk visualisasi yang bagus tentang cara kerja tee. Saya akan menautkannya, tetapi saya tidak memiliki "poin reputasi" yang cukup untuk mengirim lebih dari 1 tautan, dan saya merasa "toydi" layak mendapatkan kredit tautan :)

aslezak
sumber
1

Jika Anda ingin merekam setiap perintah yang Anda ketikkan, Anda dapat menggunakan perintah skrip .

Millhouse
sumber