72 votes

Quelle est la différence entre ">" et ">>" dans la commande Shell ?

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.

78voto

jobin Points 25504

> 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 .

13voto

sourav c. Points 40637

Si vous écrivez dans le terminal

ps aux > log

Il mettra la sortie de ps aux dans le fichier nommé.

alors si vous mettez

ps aux >> log

alors la sortie suivante sera ajoutée au-dessous de la première. Si vous ne mettez qu'une seule > il écrasera le fichier précédent.

4voto

mckenzm Points 345

Oui, >> ajoute, > écrase/détruit toujours le contenu précédent.

ps -aux > log

est la même chose que

rm log 2>/dev/null
ps -aux >> log

Sur Wintel, c'est la même chose pour .bat , .cmd y .ps1 scripts aussi ; patrimoine commun, bon sens.

4voto

Sergiy Kolodyazhnyy Points 97292

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.

SistemesEz.com

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.

Powered by:

X