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?
linux
bash
gnu-screen
su
Ichorus
fuente
fuente
su
desde una sesión de pantalla.Respuestas:
Bueno, técnicamente no estás redirigiendo nada aquí.
Llamar
script /dev/null
sólo hace quescript
salvar a todo el texto mecanografiado en/dev/null
el cual en la práctica significa descartar el contenido.Consulte
man script
para 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
screen
realidad. Por qué esto funciona es invocarscript
tiene 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 vasu
del usuario A al usuario B , al invocarlo directamentescreen
intentará apoderarse del pseudo terminal del usuario A. Esto no tendrá éxito a menos que seas root . Por eso ves el mensaje de error.fuente
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.
fuente
/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.