Chmod 000 / dev / stdin terminali sonsuza kadar devre dışı bırakır mı?


12

Unix The Textbook'tan (bölüm 8, # 16, sayfa 207) sorular üzerinde çalışıyorum :

Ve komutlarıyla chmodaynı görevleri gerçekleştiren komut satırları verin . (İpucu: Terminaliniz dahil her donanım aygıtının dizinde ilişkilendirilmiş bir dosyası vardır .)mesg nmesg y/dev

Cevabın şu olduğuna inanıyorum:

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

Ama eğer kullanırsan ne olacağını merak ediyordum chmod 000 /dev/stdin?

Terminalde komut girmekten kilitleniyor musunuz?


2
İzinlerin yalnızca bir dosya açıldığında kontrol edildiğini anlamak önemlidir. Bu nedenle, kabuğunuzun standart girdisi ne olursa olsun, izinlerini değiştirmek sizi komut girmekten alıkoyamaz, çünkü hem kabuk hem de terminal öykünücüsü veya ssh veya iletişim kanalını zaten açmış olan her şey. mesg nizinleri, writeyalnızca terminali açık write olmadığından geleceği etkilemek için kullanabilir .
zwol

Yanıtlar:


20

Hayır, /dev/stdinve /dev/stdoutyanlış cihaz bulunmaktadır. Bunlar terminal cihazları değil, sırasıyla standart giriş ve standart çıkış için takma adlardır. Standart giriş ve tanımı standart çıkarılır, dosya tanımlayıcıları uygulamalar açık olması beklemek ve geleneksel anlamlara sahip olduğu (sırasıyla dosya tanıtıcısı, 0 ve 1, standart hata olduğu da 2 vardır). Uygulama gibi bir dosya adı gerektirdiğinde /dev/stdinve gibi aygıtlar /dev/stdoutkullanışlıdır, ancak uygulamanın kullanıcısı bir dosyayı açmak yerine belirli bir dosya tanımlayıcıya erişmesini ister. Unix varyantına bağlı olarak, aygıt dosyaları bile olmayabilirler; örneğin, Linux'ta,/proc/self/fd/0 ve bunlar da sürecin o dosya tanımlayıcısında zaten açık olan her dosyaya “sihirli” sembolik bağlardır.

İzinlerini değiştirmek /dev/stdinve /dev/stdoutyalnızca bu dosya adları açıkça kullanıldığında ne olacağını değiştirmek. Terminal ile ilgili hiçbir şeyi etkilemez ve standart giriş ve standart çıkışın normal kullanımını etkilemez, çünkü izinler sadece belirli bir dosya adını açarken önemlidir.

Yapılması mesggereken, sürecin kontrol terminalinin izinlerini değiştirmek . Terminalde çalışan bir uygulama için terminal standart giriş, standart çıkış ve standart hatada açıktır (dosya tanımlayıcıları 0, 1 ve 2). ttyTerminal aygıtının ne olduğunu görmek için komutu kullanabilirsiniz . mesg neşittir chmod g-w "$(tty)"ve mesg yeşittir chmod g+w "$(tty)".


2
ttykontrol terminalini rapor etmez, ancak eğer varsa terminal stdin'de açılır. Yani / dev / stdin'nin bir cihaz ancak dosya açıkken için özel bir sembolik köprü olmadığı durumlarda Linux üzerinde / dev / stdin, chmot "$(tty)"olarak az ya da çok aynı olacaktır chmod /dev/stdin(stdin bir tty cihazdır ve modunu değiştirmeye teşebbüs olsaydı not a ttygeçerli dizindeki bir dosya yoksa). /dev/$(ps -o tty= -p "$$")Kontrol terminali için bakınız .
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.