Perché il reindirizzamento di "script" su / dev / null / consente a "screen" di funzionare mentre viene citato in giudizio come un altro utente?


37

Sono stato citato in giudizio da un utente per eseguire uno script particolarmente lungo. Volevo usare lo schermo ma ho ricevuto il messaggio di errore "Impossibile aprire il tuo terminale '/ dev / pts / 4' - controlla."

Così ho cercato su Google e mi sono imbattuto in un post sul forum che mi ha chiesto di correre $ script '/dev/null/'. L'ho fatto e poi ho potuto schermare.

Perché funziona? Cosa sta facendo su quella schermata non può essere eseguita come utente citato in giudizio? Perché la reindirizzamento di 'script' su / dev / null fa diversamente che viene impedito? Sta usando lo script per scrivere un registro come l'utente originale da qualche parte?


2
Cleaner dovrebbe essere eseguito suall'interno di una sessione dello schermo.
justarobert,

@justarobert no se si desidera che più utenti possano collegarsi alla stessa schermata per un account di servizio / script di esecuzione batch.
Ashley,

Risposte:


41

Beh, tecnicamente non reindirizzi nulla qui.

Chiamare script /dev/nullsemplicemente scriptsalva l'intero dattiloscritto in /dev/nullcui in pratica significa scartare il contenuto.

Vedi man scriptper informazioni dettagliate e pacchetto util-linux-ng per implementazione ( misc-utils/script.c).

Questo non ha nulla a che fare con in screenrealtà. Perché questo funziona invocare scriptha un effetto collaterale nel creare uno pseudo-terminale per te /dev/pts/X. In questo modo non devi farlo da solo, e lo schermo non avrà problemi di autorizzazione - se passi sudall'utente A all'utente B , invocando direttamente screencerchi di prendere possesso dello pseudo-terminale dell'utente A. Questo non avrà successo se non sei root . Ecco perché viene visualizzato il messaggio di errore.


6

Per eseguire l'output direttamente nella finestra del terminale, il programma in esecuzione deve essere in grado di scrivere sul terminale di controllo. Se stai usando un xterm o ssh o qualche altra connessione virtuale (al contrario di un vero terminale connesso direttamente dal vivo) il tuo terminale di controllo è uno pseudo tty (pty).

Il tuo pty è impostato con il permesso di scrittura solo per te quando accedi, altrimenti altri utenti potrebbero scarabocchiare sul tuo display (o leggerlo). Quindi quando fai un sopralluogo ad un altro utente (e quell'utente non è root), quell'utente non ha accesso al pty sottostante.

Tuttavia, I / O più complessi come lo schermo richiedono l'accesso diretto al pty per funzionare, è magico controllare l'intero schermo. Questo è quando si verificano problemi con la persona che esegue il comando che non ha un accesso adeguato al terminale di controllo.

Il reindirizzamento dello script su / dev / null fa sì che lo schermo non tenti di scrivere sul terminale di controllo, quindi non si verifica il problema dell'autorizzazione.


2
Quindi, come posso vedere quale schermata scrive se va su / dev / null? Sono abbastanza sicuro di aver frainteso e in realtà non va in / dev / null, ma dove va?
user63623

"it", che significa output dello schermo, non va a /dev/null. Primo: lo script registra la sessione (si veda la pagina di manuale), e non è necessario affatto: in modo che va a / dev / null. Ma non ha un effetto collaterale: crea uno pseudo terminale, e ora lo stai usando, e lo schermo può scrivere su questo oneSee @ karol-piczak's anwer.
Nanne,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.