Quelqu'un pourrait-il m'expliquer la différence entre >
y >>
lors de l'utilisation des commandes Shell ?
Ejemplo:
ps -aux > log
ps -aux >> log
Il semble que le résultat soit le même dans les deux cas.
Quelqu'un pourrait-il m'expliquer la différence entre >
y >>
lors de l'utilisation des commandes Shell ?
Ejemplo:
ps -aux > log
ps -aux >> log
Il semble que le résultat soit le même dans les deux cas.
>
est utilisé pour écraser (" clobber ") un dossier et >>
est utilisé pour ajouter à un fichier.
Ainsi, lorsque vous utilisez ps aux > file
la sortie de ps aux
sera écrit dans file
et si un fichier nommé file
était déjà présent, son contenu sera écrasé.
Et si vous utilisez ps aux >> file
la sortie de ps aux
sera écrit dans file
et si le fichier nommé file
était déjà présent, le fichier contiendra désormais son contenu précédent ainsi que le contenu du fichier ps aux
écrit après son contenu plus ancien de file
.
La différence la plus importante est que >
fait en sorte que Shell ouvre un fichier ou un objet de type fichier avec O_WRONLY|O_CREAT|O_TRUNC
flags - le fichier sera créé ou tronqué s'il existe, tandis que >>
ouvre le fichier avec O_WRONLY|O_CREAT|O_APPEND
flags - le fichier sera créé ou ajouté s'il existe. Ceci est évident si vous tracez les appels système, par exemple avec
$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
Et avec
$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(10, 1) = 1
+++ exited with 0 +++
Notez que dans les deux cas, le descripteur de fichier du fichier ouvert est dupliqué sur le descripteur de fichier 1 ( stdout ) de la commande, et cela sera hérité par n'importe quelle commande que le Shell bifurque.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.