Pada sistem Linux, apa perbedaan antara /dev/console
, /dev/tty
dan /dev/tty0
?
Apa yang digunakan masing-masing dan bagaimana mereka membandingkan?
Pada sistem Linux, apa perbedaan antara /dev/console
, /dev/tty
dan /dev/tty0
?
Apa yang digunakan masing-masing dan bagaimana mereka membandingkan?
Jawaban:
Dari dokumentasi :
/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
Di masa lalu yang baik /dev/console
adalah konsol Sistem Administrator. Dan TTY adalah perangkat serial pengguna yang dilampirkan ke server. Sekarang /dev/console
dan /dev/tty0
tampilkan tampilan saat ini dan biasanya sama. Anda dapat menimpa itu misalnya dengan menambahkan console=ttyS0
ke grub.conf
. Setelah itu Anda /dev/tty0
adalah monitor dan /dev/console
adalah /dev/ttyS0
.
Latihan untuk menunjukkan perbedaan antara /dev/tty
dan /dev/tty0
:
Beralih ke konsol ke-2 dengan menekan Ctrl+ Alt+ F2. Masuk sebagai root
. Jenis sleep 5; echo tty0 > /dev/tty0
. Tekan Enterdan alihkan ke konsol ke-3 dengan menekan Alt+ F3. Sekarang kembali ke konsol ke-2 dengan menekan Alt+ F2. Ketik sleep 5; echo tty > /dev/tty
, tekan Enterdan alihkan ke konsol ke-3.
Anda dapat melihat bahwa itu tty
adalah konsol tempat proses dimulai, dan tty0
merupakan konsol yang selalu terkini.
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, dan voila - shell root.
sudo anycommand
berhasil, maka sudo -i
untuk melanjutkan pekerjaan root juga. Tidak ada yang namanya Linux / BSD / Unix di mana Anda tidak dapat melakukan root. (Maka itu bukan Linux / BSD / Unix lagi.)
/dev/console
adalah seperangkat perangkat virtual yang dapat ditetapkan sebagai parameter pada saat boot. Mungkin diarahkan ke perangkat serial atau konsol virtual dan secara default menunjuk ke /dev/tty0
. Ketika beberapa console=
opsi dilewatkan ke kernel, output konsol akan menuju lebih dari satu perangkat.
/dev/tty0
adalah konsol virtual saat ini
/dev/tty[1-x]
adalah salah satu konsol virtual yang Anda gunakan untuk control- alt- F1dan seterusnya.
/dev/tty
adalah jenis alias untuk konsol (perangkat fisik, virtual, atau pseudo, jika ada) yang terkait dengan proses yang membukanya. Berbeda dengan perangkat lain, Anda tidak perlu hak root untuk menulisnya. Perhatikan juga bahwa proses seperti yang diluncurkan oleh cron
dan proses batch serupa tidak dapat digunakan /dev/tty
, karena tidak terkait dengan apa pun. Proses-proses ini ada ?
di TTY
kolom ps -ef
output.
/dev/tty
bisa perangkat yang berbeda, jika ada, tergantung pada proses yang membukanya. Jawaban diperbarui.
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
Di Linux, konsol kernel dapat dikonfigurasi menggunakan console=
opsi boot . Kode kernel yang membuat panggilan printk()
dapat menulis pesan, misalnya ketika perangkat dimuat atau terjadi kesalahan. Pesan-pesan ini juga disangga oleh kernel. (Lihat juga dmesg
). Ketika perangkat konsol ditemukan dan dimulai, ia menerima semua pesan yang sebelumnya disangga.
Anda dapat melewati console=
beberapa kali untuk mengonfigurasi beberapa konsol, dan pesan akan ditulis ke semuanya. Tampaknya Anda hanya dapat memilih satu konsol dari setiap "tipe": Anda tidak dapat menggunakan keduanya console=ttyS0
dan console=ttyS1
.
Dokumentasi kernel menentukan /dev/console
sebagai perangkat karakter bernomor (5,1)
. Membuka perangkat karakter ini membuka konsol "utama", yang merupakan tty terakhir dalam daftar konsol. Proses non-kernel pertama, disebut init
atau "PID 1", dimulai dengan /dev/console
terhubung ke output standar, kesalahan standar, dan input standar.
Jika tidak ada konsol yang tty, maka membuka /dev/console
mengembalikan kesalahan ENODEV
("Tidak ada perangkat seperti itu"). Kernel akanmencetakcatat pesan, dan mulai init
terlepas. Untuk contoh konsol kernel yang bukan perangkat tty, lihat netconsole
, atau konsol printer baris favorit saya .
Anda juga dapat melihat daftar konsol tty dengan membaca /sys/class/tty/console/active
. dokumentasi systemd menunjukkan bahwa perangkat pertama yang ditampilkan adalah konsol utama. Daftar ini sebenarnya dalam urutan terbalik dari baris perintah kernel. The dokumentasi kernel saat ini tidak benar menyatakan bahwa perangkat terakhir yang ditampilkan adalah utama atau "aktif" konsol. Untuk beberapa alasan dimungkinkan untuk polling file ini untuk perubahan (jika perangkat konsol dihapus?).
Di dalam systemd-nspawn
wadah, /dev/console
file standar diganti dengan perangkat pseudo-terminal (PTY). Ini akan digambarkan sebagai perangkat terminal virtual. Mereka dibuat secara dinamis dan juga digunakan untuk mengimplementasikan emulator terminal grafis seperti Terminal GNOME, dan untuk akses jarak jauh seperti ssh
.
Linux TTY perangkat node tty1
melalui tty63
adalah terminal virtual. Mereka juga disebut sebagai VT, atau sebagai konsol virtual. Mereka mensimulasikan banyak konsol di atas driver perangkat konsol fisik. Hanya satu konsol virtual yang ditampilkan dan dikendalikan pada satu waktu. Terminal yang aktif dapat diaktifkan, misalnya menggunakan chvt
, atau Ctrl + Alt + F1 melalui banyak tombol fungsi yang Anda miliki.
Anda juga dapat membaca dan menulis ke VT saat ini menggunakan /dev/tty0
. tty0
adalah konsol kernel yang biasa, misalnya jika Anda tidak memilih satu secara eksplisit. "Sistem pertama-tama mencari kartu VGA [yang menjalankan VT] dan kemudian untuk port serial". Anda juga dapat mengatur konsol ke VT tertentu, misalnya console=tty1
.
"Jika Anda tidak memiliki kartu VGA di sistem Anda, port serial pertama akan secara otomatis menjadi konsol." Seperti "konsol serial" ttyS0
mungkin merupakan alternatif yang paling umum tty0
. Tidak mungkin untuk menggunakan sistem VT di atas konsol serial.
/dev/tty
adalah salah satu dari tiga file perangkat standar yang ditentukan oleh POSIX ( /dev/
adalah salah satu dari tiga nama direktori yang ditentukan oleh POSIX). Membuka itu sama dengan membuka terminal pengendali dari proses saat ini. Terminal pengendali diatur ketika sebuah proses pertama kali membuka terminal, setidaknya di Linux . Misalnya, dalam init
, itu akan merujuk /dev/console
.
Melepaskan dari terminal pengendali adalah salah satu langkah yang secara tradisional diperlukan untuk memulai proses latar belakang, misalnya daemon logging sistem . Langkah-langkah untuk menjadi proses latar belakang sangat rumit, tetapi untuk lebih spesifik, langkah yang terlepas dari terminal pengendali adalah panggilan sistem setsid . Dalam sistem yang lebih modern, sistem init misalnya systemd memulai layanan tanpa terminal pengendali.