¿Por qué la redirección de 'script' a / dev / null / allow 'screen' funciona mientras se supone que es otro usuario?

37

Fui admitido en un usuario para ejecutar un script particular de larga ejecución. Quería usar la pantalla pero recibí el mensaje de error "No se puede abrir su terminal '/ dev / pts / 4' - por favor verifique".

Así que busqué en Google y me encontré con una publicación en el foro que instruía a ejecutar $ script '/dev/null/'. Lo hice y luego pude filtrar.

¿Por qué funciona esto? ¿Qué está haciendo su pantalla que no puede ejecutarse como el usuario demandado? ¿Por qué la redirección de 'script' a / dev / null hace que se evite de otra manera? ¿Está usando un script para escribir un registro como usuario original en algún lugar?

Ichorus
fuente
2
El limpiador sería ejecutarse sudesde una sesión de pantalla.
justarobert
@justarobert no si desea que varios usuarios puedan adjuntarse a esa misma pantalla para una cuenta de servicio / ejecución de script por lotes.
Ashley

Respuestas:

41

Bueno, técnicamente no estás redirigiendo nada aquí.

Llamar script /dev/nullsólo hace que scriptsalvar a todo el texto mecanografiado en /dev/nullel cual en la práctica significa descartar el contenido.

Consulte man scriptpara obtener información detallada y el paquete util-linux-ng para la implementación ( misc-utils/script.c).

Esto no tiene nada que ver con la screenrealidad. Por qué esto funciona es invocar scripttiene un efecto secundario de crear un pseudo-terminal para usted en /dev/pts/X. De esta manera, no tiene que hacerlo usted mismo, y la pantalla no tendrá problemas de permisos: si va sudel usuario A al usuario B , al invocarlo directamente screenintentará apoderarse del pseudo terminal del usuario A. Esto no tendrá éxito a menos que seas root . Por eso ves el mensaje de error.

Karol J. Piczak
fuente
6

Para enviar directamente a la ventana de su terminal, el programa en ejecución debe poder escribir en su terminal de control. Si está utilizando un xterm o ssh o alguna otra conexión virtual (a diferencia de un terminal real conectado directamente en vivo), su terminal de control es un pseudo tty (pty).

Su pty está configurada con permiso de escritura solo para usted cuando inicia sesión, de lo contrario, otros usuarios podrían garabatear en su pantalla (o leerla). Por lo tanto, cuando su a otro usuario (y ese usuario no es root), ese usuario no tiene acceso a la pty subyacente.

Sin embargo, las E / S más complejas, como la pantalla, requieren acceso directo a la pty para que funcione, es mágico controlar toda la pantalla. Ahí es cuando te encuentras con problemas con la persona que ejecuta el comando que no tiene acceso adecuado al terminal de control.

Redirigir el script a / dev / null hace que la pantalla no intente escribir en el terminal de control, por lo que no se produce el problema de permiso.

Phil Hollenback
fuente
2
Entonces, ¿cómo puedo ver qué pantalla escribe si va a / dev / null? Estoy bastante seguro de que he entendido mal y realmente no va a / dev / null, pero ¿a dónde va?
user63623
"it", que significa salida de pantalla, no va a /dev/null. Primero: el script registra su sesión (vea la página de manual), y no la necesita en absoluto: así que va a / dev / null. Pero no tiene un efecto secundario: crea un pseudo terminal, y ahora lo está utilizando, y la pantalla puede escribirle a este. Consulte la respuesta de @ karol-piczak.
Nanne