GNU/Linux >> Belajar Linux >  >> Linux

Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

Dari dokumentasi Kernel Linux di Kernel.org:

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

Di masa lalu yang indah /dev/console adalah konsol System Administrator. Dan TTY adalah perangkat serial pengguna yang terhubung ke server.

Sekarang /dev/console dan /dev/tty0 mewakili tampilan saat ini dan biasanya sama. Anda dapat menimpanya misalnya dengan menambahkan console=ttyS0 ke grub.conf . Setelah itu /dev/tty0 Anda 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 . Ketik sleep 5; echo tty0 > /dev/tty0 . Tekan Enter dan beralih ke konsol ke-3 dengan menekan Alt +F3 .Sekarang beralih kembali ke konsol ke-2 dengan menekan Alt +F2 . Ketik sleep 5; echo tty > /dev/tty , tekan Enter dan beralih ke konsol ke-3.

Anda dapat melihat bahwa tty adalah konsol tempat proses dimulai, dan tty0 adalah konsol yang selalu terkini.


  • /dev/console adalah seperangkat perangkat virtual yang dapat diatur sebagai parameter saat boot. Itu mungkin dialihkan ke perangkat serial atau konsol virtual dan secara default mengarah ke /dev/tty0 . Saat beberapa console= opsi diteruskan ke kernel, output konsol akan masuk ke lebih dari satu perangkat;

  • /dev/tty[0-N] (N adalah nomor TTY yang diatribusikan tertinggi, mis. 63) adalah salah satu konsol virtual tempat Anda beralih dengan kontrol -alt -F1 dan seterusnya;

  • /dev/tty0 juga secara default adalah konsol virtual;

  • /dev/tty semacam alias ke konsol (perangkat fisik, virtual atau semu, jika ada) yang terkait dengan proses yang membukanya. Tidak seperti perangkat lain, Anda tidak memerlukan hak akses root untuk menulisnya. Perhatikan juga bahwa proses seperti yang diluncurkan oleh cron dan proses batch serupa tidak memiliki /dev/tty yang dapat digunakan , karena tidak terkait dengan apa pun. Proses ini memiliki ? di TTY kolom ps -ef keluaran.


/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 memanggil printk() dapat menulis pesan untuk itu, mis. ketika perangkat dimuat atau terjadi kesalahan. Pesan-pesan ini juga di-buffer oleh kernel. (Lihat juga dmesg ). Saat perangkat konsol ditemukan dan dimulai, perangkat tersebut menerima semua pesan yang di-buffer sebelumnya.

Anda dapat melewati console= beberapa kali untuk mengonfigurasi banyak 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 akan 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 keluaran standar, kesalahan standar, dan masukan standar.

Jika tidak ada konsol yang tty, buka /dev/console mengembalikan kesalahan ENODEV ("Tidak ada perangkat seperti itu"). Kernel akan mencetak catat pesan, dan mulai init tanpa memedulikan. Untuk contoh konsol kernel yang bukan perangkat tty, lihat netconsole , atau printer baris konsol favorit saya.

Anda juga dapat melihat daftar konsol tty dengan membaca /sys/class/tty/console/active . dokumentasi systemd menunjukkan bahwa pertama perangkat yang ditampilkan adalah konsol utama. Daftar ini sebenarnya dalam urutan terbalik dari baris perintah kernel. Dokumentasi kernel saat ini salah menyatakan bahwa perangkat terakhir yang ditampilkan adalah konsol utama atau "aktif". Untuk beberapa alasan, file ini dapat disurvei untuk perubahan (seandainya perangkat konsol dihapus?).

Di dalam systemd-nspawn wadah, standar /dev/console file 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

Node perangkat Linux TTY tty1 melalui tty63 adalah terminal virtual. Mereka juga disebut sebagai VT, atau sebagai konsol virtual. Mereka mensimulasikan beberapa konsol di atas driver perangkat konsol fisik. Hanya satu konsol virtual yang ditampilkan dan dikontrol dalam satu waktu. Terminal aktif dapat dialihkan, mis. menggunakan chvt , atau Ctrl+Alt+F1 melalui berapa pun tombol fungsi yang Anda miliki.

Anda juga dapat membaca dan menulis ke VT saat ini menggunakan /dev/tty0 . tty0 adalah konsol kernel biasa, mis. jika Anda tidak memilih salah satu secara eksplisit. "Sistem pertama-tama mencari kartu VGA [yang menjalankan VT] dan kemudian mencari port serial". Anda juga dapat menyetel konsol ke VT tertentu, mis. console=tty1 .

"Jika Anda tidak memiliki kartu VGA di sistem Anda, port serial pertama secara otomatis akan menjadi konsol." Sebuah "konsol serial" seperti ttyS0 mungkin merupakan alternatif yang paling umum untuk tty0 . Tidak mungkin 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). Membukanya sama dengan membuka terminal pengendali dari proses saat ini. Terminal pengontrol diatur saat proses pertama kali membuka terminal, setidaknya di Linux. Misalnya, di init , itu akan merujuk ke /dev/console .

Melepaskan dari terminal pengontrol adalah salah satu langkah yang secara tradisional diperlukan untuk memulai proses latar belakang, misalnya daemon pencatatan sistem. Langkah-langkah untuk menjadi proses latar belakang sangat rumit, tetapi untuk lebih spesifik, langkah yang terlepas dari terminal pengontrol adalah pemanggilan sistem setid. Dalam sistem yang lebih modern, sistem init mis. systemd memulai layanan tanpa terminal pengontrol apa pun sejak awal.


Linux
  1. Cara membuat kata sandi acak di linux menggunakan /dev/random

  2. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  3. Kapan Menggunakan /dev/random Vs /dev/urandom?

  1. Cara memetakan perangkat /dev/sdX dan /dev/mapper/mpathY dari perangkat /dev/dm-Z

  2. kernel:menonaktifkan /dev/kmem dan /dev/mem

  3. Bagaimana Linux menggunakan /dev/tty dan /dev/tty0

  1. Apakah salah menautkan /dev/random ke /dev/urandom di Linux?

  2. Mengapa pada beberapa sistem Linux, sistem file root muncul sebagai /dev/root bukan /dev/<real device node>di mtab?

  3. Buat perangkat blok virtual yang menulis ke /dev/null