Saya sedang mengerjakan pertanyaan dari Unix The Textbook (bab 8, # 16, halaman 207) :
Berikan
chmod
baris perintah yang melakukan tugas yang sama dengan yangmesg n
danmesg y
perintah lakukan. (Petunjuk: Setiap perangkat perangkat keras, termasuk terminal Anda, memiliki file terkait dalam/dev
direktori.)
Saya yakin jawabannya adalah:
mesg n
= chmod 770 /dev/stdout
mesg y
= chmod 777 /dev/stdout
Tapi saya bertanya-tanya apa yang terjadi jika Anda menggunakan chmod 000 /dev/stdin
?
Apakah Anda terkunci karena memasukkan perintah di terminal?
mesg n
dapat menggunakan izin untuk mempengaruhi masa depanwrite
s hanya karenawrite
tidak sudah terbuka terminal.Jawaban:
Tidak,
/dev/stdin
dan/dev/stdout
perangkat yang salah. Ini bukan perangkat terminal, mereka alias untuk input standar dan output standar masing-masing. Input standar dan output standar, menurut definisi, deskriptor file yang diharapkan aplikasi akan terbuka dan memiliki makna konvensional (masing-masing deskriptor file 0 dan 1, ada juga 2 yang merupakan kesalahan standar). Perangkat seperti/dev/stdin
dan/dev/stdout
berguna ketika aplikasi membutuhkan nama file, tetapi pengguna aplikasi menginginkannya untuk mengakses deskriptor file tertentu daripada membuka beberapa file. Bergantung pada varian unix, mereka bahkan mungkin bukan file perangkat; misalnya, di Linux, mereka adalah tautan simbolis/proc/self/fd/0
dan teman-teman, dan ini pada gilirannya merupakan "simbolis" tautan simbolis ke file apa pun yang prosesnya sudah terbuka pada file deskriptor itu.Mengubah izin
/dev/stdin
dan/dev/stdout
hanya akan mengubah apa yang terjadi ketika nama file ini digunakan secara eksplisit. Itu tidak mempengaruhi apa pun yang terkait dengan terminal, dan itu tidak mempengaruhi penggunaan normal input standar dan output standar, karena izin hanya penting ketika membuka nama file tertentu.Apa yang
mesg
dilakukan adalah mengubah izin terminal pengendali proses . Untuk aplikasi yang berjalan di terminal, terminal terbuka pada input standar, standar ouput dan kesalahan standar (deskriptor file 0, 1 dan 2). Anda dapat menggunakan perintahtty
untuk melihat apa perangkat terminal itu.mesg n
sama denganchmod g-w "$(tty)"
danmesg y
setara denganchmod g+w "$(tty)"
.sumber
tty
tidak melaporkan terminal pengendali, tetapi terminal terbuka di stdin jika ada. Jadi di Linux di mana / dev / stdin bukan perangkat tetapi symlink khusus ke file yang terbuka di / dev / stdin,chmot "$(tty)"
akan lebih atau kurang sama denganchmod /dev/stdin
(jika stdin adalah perangkat tty, dan akan berusaha mengubah mode dari sebuahnot a tty
file dalam direktori saat ini sebaliknya). Lihat/dev/$(ps -o tty= -p "$$")
untuk terminal pengendali.