En supposant que les commandes aient réussi, /var/log/messages
y /var/log/wtmp
existent toujours mais sont désormais vierge .
Shell Redirection
>
est un opérateur de redirection, implémenté par le Shell. Sa syntaxe est la suivante :
command > file
Cela redirige command
's sortie standard a file
.
file
peut également être un nœud du dispositif .
- Si
file
n'existe pas, il est créé en tant que fichier régulier .
- Si
file
existe déjà en tant que fichier normal et n'est pas vide, il est écrasé. C'est typiquement le cas dans les commandes que vous avez exécutées, où vous avez redirigé la sortie de cat /dev/null
a messages
y wtmp
.
- Si
file
existe déjà en tant que lien symbolique la cible du lien est utilisée.
- Si
file
existe déjà en tant que répertoire, vous obtiendrez une erreur du type bash: _file_: Is a directory
.
(Bien entendu, ces opérations peuvent échouer pour d'autres raisons, telles que l'absence de autorisations ou une erreur de système de fichiers).
En >>
L'opérateur de redirection est similaire, mais il ajoute à la fin des fichiers réguliers non vides au lieu de écrasement leur contenu. (Un autre opérateur de redirection est <
. _command_ < _file_
utilise file
como command
's entrée standard .)
En null
Dispositif
/dev/null
est un dispositif simple (implémenté dans le logiciel et ne correspondant à aucun dispositif matériel du système).
/dev/null
semble vide lorsqu'on le lit.
- Écrire à
/dev/null
ne fait rien : les données écrites sur ce périphérique "disparaissent" simplement.
Souvent, la sortie standard d'une commande est réduite au silence en la redirigeant vers /dev/null
et c'est peut-être l'élément le plus important. null
L'utilisation la plus courante du périphérique dans les scripts Shell :
command > /dev/null
Vous utilisez /dev/null
différemment. cat /dev/null
produit le "contenu" de /dev/null
c'est-à-dire que sa sortie est vierge. > messages
(o > wtmp
) fait en sorte que cette sortie vide soit redirigée vers le fichier situé à droite de la balise >
de l'opérateur.
Depuis messages
y wtmp
sont des fichiers ordinaires (et non, par exemple, des nœuds de périphériques), ils sont transformés en fichiers vierges (c'est-à-dire vidés).
Vous pouvez utiliser n'importe quelle commande qui ne fait rien et ne produit aucune sortie, à gauche de >
.
Une autre façon d'effacer ces fichiers serait d'exécuter le programme :
echo -n > messages
echo -n > wtmp
En -n
est requis, ou echo
rédige un nouvelle ligne caractère.
(Cette travaille toujours en bash
. Et je croire la valeur par défaut sh
dans toutes les distributions GNU/Linux et autres systèmes de type Unix couramment utilisés aujourd'hui prend en charge l'option -n
dans son echo
builtin. Mais jlliagre a raison que echo -n
devrait être évité pour un Shell Shell vraiment portable, car il n'est pas nécessaire de le faire fonctionner. . C'est peut-être pour cela que le guide que vous utilisez enseigne le cat /dev/null
).
En echo -n
est équivalente dans ses effets, mais constitue sans doute une meilleure solution, en ce sens qu'elle est plus simple.
cat /dev/null > _file_
ouvre trois "dossiers" :
- En
cat
exécutable (généralement /bin/cat
), un fichier ordinaire.
- En
/dev/null
dispositif.
file
En revanche, echo -n > _file_
s'ouvre uniquement file
( echo
est une construction Shell).
Bien que l'on puisse s'attendre à ce que cela améliore les performances, ce n'est pas l'avantage - pas si l'on exécute simplement quelques commandes à la main, en tout cas. L'avantage est qu'il est plus facile de comprendre ce qui se passe.
La redirection et la commande triviale (blanc/vide).
_En tant que jlliagre a souligné_ (voir aussi Réponse de jlliagre ), il est possible de la raccourcir encore en omettant simplement la commande à gauche de >
tout à fait. Bien qu'il ne soit pas possible d'omettre le côté droit d'un >
o >>
la commande vide est valide (c'est la commande que vous exécutez lorsque vous appuyez sur Enter sur une invite vide), et en omettant le côté gauche, vous ne faites que rediriger la sortie de cette commande.
- Notez que cette sortie ne no contiennent une nouvelle ligne. Lorsque vous appuyez sur Enter à l'invite de commande - que vous ayez ou non tapé quelque chose - le Shell (en mode interactif) imprime une nouvelle ligne avant d'exécuter la commande émise. Cette nouvelle ligne ne fait pas partie de la sortie de la commande.
Redirection à partir de la commande vide (au lieu de la commande cat /dev/null
o echo -n
) ressemble à ce qui suit :
> messages
> wtmp