J'ai été invité à exécuter un script particulier de longue durée. Je voulais utiliser screen mais le message d'erreur "Impossible d'ouvrir votre terminal '/ dev / pts / 4' - veuillez vérifier."
J'ai donc cherché sur Google et suis tombé sur un message du forum qui demandait de courir $ script '/dev/null/'
. Je l'ai fait et j'ai ensuite pu passer au crible.
Pourquoi ça marche? Qu'est-ce que su fait que l'écran ne peut pas s'exécuter en tant qu'utilisateur su'ed? Pourquoi rediriger 'script' vers / dev / null empêche-t-il cela autrement? Utilisez-vous un script pour écrire un journal en tant qu'utilisateur d'origine?
linux
bash
gnu-screen
su
Ichorus
la source
la source
su
partir d'une session d'écran.Réponses:
Eh bien, techniquement, vous ne redirigez rien ici.
L' appel
script /dev/null
est tout simplementscript
enregistrer la totalité tapuscrit en/dev/null
qui signifie la pratique de jeter le contenu.Voir
man script
les informations détaillées et le paquet util-linux-ng pour implementation (misc-utils/script.c
).Cela n'a rien à voir avec
screen
réellement. Pourquoi cela fonctionne-t-il? L'appelscript
a pour effet secondaire de créer un pseudo-terminal pour vous sur/dev/pts/X
. De cette façon, vous n'avez pas à le faire vous-même, et screen n'aura pas de problèmes de permission - si vous passezsu
d'utilisateur A à utilisateur B , appelez directementscreen
pour essayer de prendre possession du pseudo-terminal de l'utilisateur A. Cela ne réussira que si vous êtes root . C'est pourquoi vous voyez le message d'erreur.la source
Pour sortir directement sur la fenêtre de votre terminal, le programme en cours doit pouvoir écrire sur votre terminal de contrôle. Si vous utilisez un xterm ou ssh ou une autre connexion virtuelle (par opposition à un terminal réel directement connecté), votre terminal de contrôle est un pseudo tty (pty).
Votre pty est configuré avec une permission en écriture pour vous seul lorsque vous vous connectez, sinon les autres utilisateurs pourraient gribouiller sur votre écran (ou le lire). Ainsi, lorsque vous appelez un autre utilisateur (et que cet utilisateur n'est pas root), cet utilisateur n'a pas accès au pty sous-jacent.
Cependant, des E / S plus complexes, telles que screen, nécessitent un accès direct à la machine pour fonctionner, il est donc magique de contrôler tout votre écran. C'est alors que vous rencontrez des problèmes avec la personne qui exécute la commande n'a pas accès au terminal de contrôle.
En redirigeant le script vers / dev / null, screen ne tente pas d'écrire sur le terminal de contrôle, ce qui évite le problème des autorisations.
la source
/dev/null
. Premièrement: le script enregistre votre session (voir la page de manuel), et vous n'en avez pas du tout besoin: cela va donc dans / dev / null. Mais cela n’a pas d’effet secondaire: cela crée un pseudo-terminal, et maintenant vous l’utilisez, et screen peut écrire dans l’affichage de one one. Voir @ karol-piczak.