Zostałem pozwany do użytkownika, aby uruchomił konkretny, długo działający skrypt. Chciałem użyć ekranu, ale dostałem komunikat o błędzie „Nie można otworzyć terminala / dev / pts / 4” - sprawdź. ”
Przeszukałem go i natknąłem się na post na forum, w którym polecono bieganie $ script '/dev/null/'
. Zrobiłem to, a potem mogłem przesłać.
Dlaczego to działa? Co robi Su, że ten ekran nie może działać jako su'ed użytkownik? Dlaczego inaczej przekierowanie „skryptu” na / dev / null jest niemożliwe? Czy używa gdzieś skryptu, aby zapisać dziennik jako oryginalny użytkownik?
linux
bash
gnu-screen
su
Ichorus
źródło
źródło
su
z poziomu sesji ekranowej.Odpowiedzi:
Cóż, technicznie nic tu nie przekierowujesz.
Wywołanie
script /dev/null
powoduje po prostuscript
zapisanie całego pisma maszynowego, w/dev/null
którym w praktyce oznacza odrzucenie zawartości.Zobacz
man script
szczegółowe informacje i pakiet util-linux-ng do implementacji (misc-utils/script.c
).To nie ma
screen
właściwie nic wspólnego . Dlaczego to działa, wywoływaniescript
ma efekt uboczny tworzenia dla ciebie pseudo-terminala/dev/pts/X
. W ten sposób nie musisz tego robić sam, a ekran nie będzie miał problemów z uprawnieniami - jeśli przechodziszsu
od użytkownika A do użytkownika B , bezpośrednio wywołującscreen
próbujesz przejąć pseudo-terminal użytkownika A. To się nie powiedzie, chyba że jesteś rootem . Dlatego widzisz komunikat o błędzie.źródło
Aby dane wyjściowe były wysyłane bezpośrednio do okna terminala, uruchomiony program musi mieć możliwość zapisu na terminalu sterującym. Jeśli używasz xterm lub ssh lub innego połączenia wirtualnego (w przeciwieństwie do rzeczywistego bezpośrednio podłączonego terminala), terminal kontrolny jest pseudo tty (pty).
Twój pty jest skonfigurowany z uprawnieniem do zapisu tylko dla ciebie, gdy się logujesz, w przeciwnym razie inni użytkownicy mogliby pisać na twoim wyświetlaczu (lub czytać). Zatem, gdy su do innego użytkownika (i ten użytkownik nie jest rootem), ten użytkownik nie ma dostępu do bazowego pty.
Jednak bardziej złożone operacje wejścia / wyjścia, takie jak ekran, wymagają bezpośredniego dostępu do pty, aby móc sterować całym ekranem. Wtedy napotykasz problemy z tym, że osoba uruchamiająca polecenie nie ma odpowiedniego dostępu do terminala sterującego.
Przekierowanie skryptu do / dev / null powoduje, że screen nie próbuje pisać do terminala sterującego, więc nie trafia w problem z uprawnieniami.
źródło
/dev/null
. Po pierwsze: skrypt zapisuje sesji (zobacz stronę podręcznika) i nie trzeba go w ogóle: tak , że idzie do / dev / null. Ale nie ma to żadnego efektu ubocznego: tworzy pseudo terminal, a teraz go używasz, a screen może pisać do tego anee. Zobacz @ odpowiedź karola-piczaka.