Bagaimana cara mencatat semua input dan output dalam sesi terminal?

46

Bagaimana cara menyimpan log dari semua pekerjaan yang dilakukan melalui terminal? Sebagai contoh, saya ingin catatan semua pekerjaan yang dilakukan pada database melalui terminal.

Ankit
sumber
Ini juga dibangun ke dalam sudo.
Wilhelm Erasmus
Saya telah menambahkan jawaban saya yang dapat Anda tinjau
Mansur Ali

Jawaban:

66

Saat Anda siap untuk mulai merekam file log, ketik:

script screen.log

Sekarang, sampai Anda menghentikan skrip, semua input dan output di Terminal akan disimpan di screen.log. Setelah selesai, ketikkan saja:

exit

File screen.log Anda akan disimpan di direktori lokal. Jika Anda ingin mengarahkan ulang, gunakan nama path absolut seperti ~/screen.log. Ini akan melakukan apa yang Anda cari.

Sumber: Panduan Ubuntu - Cara Log Perintah Terminal

xlukasx
sumber
Hai, terima kasih atas jawabannya. Tetapi apakah ini akan berfungsi jika saya login ke database mysql dari shell menggunakan urutan berikut: - 1) script screen.log 2) mysql -u <user> -p <database> 3) beberapa pekerjaan pada database 4) keluar; Saya melihat bahwa file screen.log dibuat tetapi tidak mengandung log untuk database. Saya akan membagikan file secepatnya. Terima kasih Ankt
Ankit
2
itu harus bekerja dengan semua yang berjalan di konsol membaca dari "input standar" (biasanya keyboard Anda) dan menulis ke output standar (biasanya jendela terminal Anda). Jadi harus menyertakan klien baris perintah mysql. Halaman manual ( man script) bahkan menyebutkan vi(editor) ...
Izzy
10

Anda mungkin ingin mencoba Asciinema . Selain hanya membuat rekaman Anda mendapatkan kemampuan untuk membagikannya dan menanamkan pemain di blog Anda, artikel atau dalam pembicaraan konferensi.

sickill
sumber
6

Saya memiliki cara yang lebih baik untuk menggunakan syslog untuk mencatat setiap perintah shell ini dapat bervariasi berdasarkan distribusi linux tetapi metode akan tetap sama

Anda perlu mengikuti beberapa langkah:

Langkah # 1 (Buat layanan Syslog)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

Langkah # 2 (Buka bashrc dan masukkan perintah di bawah)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ste # 3 (Mulai Ulang Layanan Syslog)

# /etc/init.d/rsyslog

Berikut ini adalah contoh log:

7 Des 22:13:00 validationdb2 mahasan: root @ export [13291]: tail -f /var/log/mysql/mysql.log [0]
7 Des 22:13:09 validationdb2 mahasan: root @ export [13291]: ls -lh [0]
7 Des 22:13:27 validationdb2 mahasan: root @ export [13291]: perintah uji sentuh [0]
Mansur Ali
sumber
taktik nakal !!!
Tom H
Hai Mansur, Bisakah Anda jelaskan apa yang Anda lakukan dengan perintah-perintah itu, sulit dimengerti, setidaknya bagi saya.
Jasser
Pada Langkah 1 saya menamai layanan untuk pembuatan perintah yang akan digunakan oleh proses untuk mengirim log ke "lokal6" akan menjadi titik akhir untuk layanan untuk masuk Dalam Langkah 2 saya menetapkan hal-hal apa yang sebenarnya saya inginkan "PROMPT_COMMAND = 'RETRN_VAL = $? " bagian ini akan merekam input pengguna dan "logger -p local6.debug" ini akan mengirim file log ke layanan yang merekam data log dengan proses syslog bantuan
Mansur Ali