Je travaille sur les questions d' Unix The Textbook (chapitre 8, # 16, page 207) :
Donnez des
chmod
lignes de commande qui exécutent les mêmes tâches que les commandesmesg n
etmesg y
. (Astuce: chaque périphérique matériel, y compris votre terminal, a un fichier associé dans le/dev
répertoire.)
Je crois que la réponse est:
mesg n
= chmod 770 /dev/stdout
mesg y
= chmod 777 /dev/stdout
Mais je me demandais ce qui se passe si vous utilisez chmod 000 /dev/stdin
?
Vous verrouillez-vous à entrer des commandes dans le terminal?
mesg n
peut utiliser des autorisations pour affecter les futurswrite
uniquement car le terminalwrite
n'est pas déjà ouvert.Réponses:
Non,
/dev/stdin
et ce/dev/stdout
n'est pas le bon appareil. Ce ne sont pas des terminaux, ce sont des alias respectivement pour l'entrée standard et la sortie standard. L'entrée standard et la sortie standard sont, par définition, des descripteurs de fichiers que les applications s'attendent à voir ouverts et qui ont une signification conventionnelle (descripteurs de fichier 0 et 1 respectivement, il y en a également 2 qui est une erreur standard). Des périphériques tels que/dev/stdin
et/dev/stdout
sont utiles lorsqu'une application nécessite un nom de fichier, mais l'utilisateur de l'application souhaite qu'elle accède à un descripteur de fichier particulier plutôt que d'ouvrir un fichier. Selon la variante unix, il se peut même qu'il ne s'agisse pas de fichiers de périphérique; par exemple, sous Linux, ce sont des liens symboliques vers/proc/self/fd/0
et amis, et ce sont à leur tour des liens symboliques «magiques» vers n'importe quel fichier que le processus a déjà ouvert sur ce descripteur de fichier.La modification des autorisations de
/dev/stdin
et/dev/stdout
ne changerait que ce qui se passe lorsque ces noms de fichiers sont utilisés explicitement. Cela n'affecte rien lié au terminal, et cela n'affecte pas l'utilisation normale de l'entrée et de la sortie standard, car les autorisations n'ont d'importance que lors de l'ouverture d'un nom de fichier particulier.Qu'est
mesg
- ce que c'est de changer les autorisations du terminal de contrôle du processus . Pour une application qui s'exécute dans un terminal, le terminal est ouvert sur l'entrée standard, la sortie standard et l'erreur standard (descripteurs de fichiers 0, 1 et 2). Vous pouvez utiliser la commandetty
pour voir ce qu'est le terminal.mesg n
est équivalent àchmod g-w "$(tty)"
etmesg y
est équivalent àchmod g+w "$(tty)"
.la source
tty
ne signale pas le terminal de contrôle, mais le terminal ouvert sur stdin le cas échéant. Donc, sous Linux où / dev / stdin n'est pas un périphérique mais un lien symbolique spécial vers le fichier ouvert sur / dev / stdin,chmot "$(tty)"
serait plus ou moins le même quechmod /dev/stdin
(si stdin est un périphérique tty et tenterait de changer le mode denot a tty
sinon un fichier dans le répertoire courant). Voir/dev/$(ps -o tty= -p "$$")
pour le terminal de contrôle.