/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
Di masa lalu yang baik /dev/consoleadalah konsol Sistem Administrator. Dan TTY adalah perangkat serial pengguna yang dilampirkan ke server. Sekarang /dev/consoledan /dev/tty0tampilkan tampilan saat ini dan biasanya sama. Anda dapat menimpa itu misalnya dengan menambahkan console=ttyS0ke grub.conf. Setelah itu Anda /dev/tty0adalah monitor dan /dev/consoleadalah /dev/ttyS0.
Latihan untuk menunjukkan perbedaan antara /dev/ttydan /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 ttyadalah konsol tempat proses dimulai, dan tty0merupakan konsol yang selalu terkini.
@ SFun28: jika sudo anycommandberhasil, maka sudo -iuntuk 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.)
Evi1M4chine
60
/dev/consoleadalah 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/ttyadalah 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 crondan proses batch serupa tidak dapat digunakan /dev/tty, karena tidak terkait dengan apa pun. Proses-proses ini ada ?di TTYkolom ps -efoutput.
Apa yang Anda maksud dengan menanyakannya dari pernyataan ini "/ dev / tty adalah konsol yang digunakan oleh proses menanyakannya"?
Ron Vince
1
@RonVince saya maksud /dev/ttybisa perangkat yang berbeda, jika ada, tergantung pada proses yang membukanya. Jawaban diperbarui.
jlliagre
Terima kasih. Bolehkah saya tahu apakah proses sebenarnya menulis / membaca ke / dari / dev / tty daripada langsung ke / dari file perangkat yang terkait dengannya?
Ron Vince
@RonVince aku takut aku tidak yakin apa yang kamu minta. Bisakah Anda ulangi lagi?
jlliagre
1
@RonVince Pembukaan / dev / tty (bukan /dev/tty[1,..,n]) adalah standar Unix (dan Linux) untuk proses menulis sesuatu ke terminal pengguna. Langsung menulis ke perangkat lain apa pun yang tidak portabel, lebih kompleks dan kurang dapat diandalkan. Suatu proses tidak perlu tahu apa perangkat sebenarnya dari terminal proses terhubung, kernel sudah tahu itu.
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=ttyS0dan console=ttyS1.
Dokumentasi kernel menentukan /dev/consolesebagai perangkat karakter bernomor (5,1). Membuka perangkat karakter ini membuka konsol "utama", yang merupakan tty terakhir dalam daftar konsol. Proses non-kernel pertama, disebut initatau "PID 1", dimulai dengan /dev/consoleterhubung ke output standar, kesalahan standar, dan input standar.
Jika tidak ada konsol yang tty, maka membuka /dev/consolemengembalikan kesalahan ENODEV("Tidak ada perangkat seperti itu"). Kernel akanmencetakcatat pesan, dan mulai initterlepas. 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-nspawnwadah, /dev/consolefile 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.
/ dev / tty0
Linux TTY perangkat nodetty1 melalui tty63adalah 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. tty0adalah 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" ttyS0mungkin merupakan alternatif yang paling umum tty0. Tidak mungkin untuk menggunakan sistem VT di atas konsol serial.
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.
Jawaban:
Dari dokumentasi :
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 menambahkanconsole=ttyS0
kegrub.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
. Jenissleep 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. Ketiksleep 5; echo tty > /dev/tty
, tekan Enterdan alihkan ke konsol ke-3.Anda dapat melihat bahwa itu
tty
adalah konsol tempat proses dimulai, dantty0
merupakan konsol yang selalu terkini.sumber
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, dan voila - shell root.sudo anycommand
berhasil, makasudo -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 beberapaconsole=
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 olehcron
dan proses batch serupa tidak dapat digunakan/dev/tty
, karena tidak terkait dengan apa pun. Proses-proses ini ada?
diTTY
kolomps -ef
output.sumber
/dev/tty
bisa perangkat yang berbeda, jika ada, tergantung pada proses yang membukanya. Jawaban diperbarui./ dev / console
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 panggilanprintk()
dapat menulis pesan, misalnya ketika perangkat dimuat atau terjadi kesalahan. Pesan-pesan ini juga disangga oleh kernel. (Lihat jugadmesg
). 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 keduanyaconsole=ttyS0
danconsole=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, disebutinit
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 kesalahanENODEV
("Tidak ada perangkat seperti itu"). Kernel akanmencetakcatat pesan, dan mulaiinit
terlepas. Untuk contoh konsol kernel yang bukan perangkat tty, lihatnetconsole
, 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 sepertissh
./ dev / tty0
Linux TTY perangkat node
tty1
melaluitty63
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 menggunakanchvt
, 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, misalnyaconsole=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 umumtty0
. Tidak mungkin untuk menggunakan sistem VT di atas konsol serial./ dev / tty
/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, dalaminit
, 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.
sumber