Neden 'script' komutunu / dev / null / 'screen' komutunun başka bir kullanıcı olarak kullanılmasına izin veriyor?


36

Belirli bir uzun süre çalışan senaryoyu çalıştırması için bir kullanıcıya dava açıldım. Ekranı kullanmak istedim ama "/ dev / pts / 4 'terminalinizi açamıyorum - lütfen kontrol edin" hata mesajını aldım.

Bu yüzden Googled ve koşmak için talimat bir forum yazıyla karşılaştım $ script '/dev/null/'. Öyle yaptım ve sonra izleyebildim.

Bu neden işe yarıyor? Bu ekranı yapan su, dava edilen kullanıcı olarak çalışamaz mı? Neden 'script' i / dev / null 'a yeniden yönlendirmek bunu başka türlü engelleniyor? Bir günlüğü orijinal kullanıcı olarak bir yere yazmak için komut dosyası mı kullanıyor?


2
Temizleyici, subir ekran oturumu içinden çalıştırmak için olurdu .
justarobert

@justarobert, birden fazla kullanıcının bir hizmet / toplu komut dosyası çalıştıran hesap için aynı ekrana ekleyebilmesini istemiyorsa, hayır.
Ashley

Yanıtlar:


40

Teknik olarak, burada hiçbir şeyi yönlendirmiyorsunuz.

Arayan script /dev/nullsadece yapar scriptbütün tasarruf daktilo içine /dev/nullpratikte araçlarının içeriklerini atarak hangi.

Bkz man scriptdetaylı bilgi için ve util-linux-ng uygulaması için paket ( misc-utils/script.c).

Bunun screenaslında alakası yok . Neden bu işler çağırıyorsa script, sizin için sahte terminal oluşturma yan etkisi var /dev/pts/X. Eğer yoksa bu şekilde kendiniz yapmak ve ekran izin sorunları olmaz - eğer sukullanıcı den A'ya kullanıcı için B , doğrudan çağırarak screenkullanıcı kapmak sahip deneyin A 'nın sözde terminali. Kök olmadığınız sürece bu başarılı olamaz . Bu yüzden hata mesajını görüyorsunuz.


6

Doğrudan terminal pencerenize çıkış yapmak için, çalışan programın kontrol terminalinize yazabilmesi gerekir. Bir xterm veya ssh veya başka bir sanal bağlantı kullanıyorsanız (gerçek bir doğrudan bağlı terminale karşı), kontrol terminaliniz sahte bir tty'dir (pty).

Pty'niz sadece oturum açtığınızda sizin için yazma izniyle kuruludur, aksi takdirde diğer kullanıcılar ekranınıza karalayabilir (veya okuyabilir). Bu nedenle, başka bir kullanıcıya (ve o kullanıcı root olmadığında) dava açtığınızda, bu kullanıcının temel değere erişimi yoktur.

Bununla birlikte, ekran gibi daha karmaşık G / Ç, çalışmak için küçük parçaya doğrudan erişim gerektirir; bu, tüm ekranınızı kontrol etmenin sihridir. O zaman komutu çalıştıran kişi ile kontrol terminaline düzgün bir şekilde erişemeyen problemlerle karşılaştığınızda.

Komut dosyasını / dev / null dizinine yeniden yönlendirmek ekranın kontrol terminaline yazmaya çalışmamasına neden olur, bu nedenle izin sorununu etkilemez.


2
Peki / dev / null'a giderse hangi ekranın yazdığını nasıl görebilirim? Yanlış anladığımdan eminim ve gerçekten / dev / null'a gitmiyor, ama nereye gidiyor?
user63623

Ekran çıktısı olan "it" gitmez /dev/null. Birincisi: Senaryo oturumunuzu (man sayfasına bakınız) kaydeder ve siz hiç buna ihtiyacı yoktur: bu yüzden o kadar / dev / null gider. Ancak bunun bir yan etkisi yok: sahte bir terminal yapıyor ve şimdi bunu kullanıyorsunuz ve ekran bunu oneSee @ karol-piczak'ın anwer'ına yazabilir.
Nanne
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.