Je suis un peu novice de Linux, et je me demande si oui ou non >
et touch
j'ai le même effet. Je veux dire, les deux commandes suivantes ont-elles le même effet?:
$ > file.txt
$ touch file.txt
Si c'est le cas, ce serait formidable de savoir que je peux simplement taper `> fichier.txt 'pour créer de nouveaux fichiers.
command-line
lmiguelvargasf
la source
la source
file.txt
existent déjà et ne sont pas vides, ils ne le sont certainement pas.touch
un fichier qui contient des données, rien ne se passera mais si vous>
le fichier, il sera effacé.Réponses:
Les deux
touch
et>
créera un nouveau fichier si elle n'existe pas. Comme les commandes de terminal suivantes le montrent lorsque voustouch
un fichier existant, l'heure d'accès / dernière modification est mise à jour. Mais si vous accédez>
à un fichier existant, il est tronqué et la dernière heure modifiée est mise à jour (l'heure d'accès ne l'est pas). Notez que>
cela ne supprime / dissocie pas le fichier. L'inode reste le même - c'est pourquoi>
/ outruncate
sont couramment utilisés pour effacer les fichiers journaux même avec un descripteur de fichier ouvert.Comme mentionné dans les commentaires,
touch
est une commande externe et ne fonctionne que sur les fichiers.>
est une fonction intégrée du shell qui sert à de nombreuses fins différentes. Typiquement, vous le verriez utilisé commecat source.fil > target.fil
.Un long formulaire pour vider un fichier serait:
L'utilisation
> emptme.fil
accomplit la même chose dans un format compact de ne rien rediriger vers le fichier.la source
> file.txt
convient pour effacer les fichiers journaux.ln foo bar
, puis supprimez et recréezfoo
, abar
toujours son contenu antérieur).rm /var/log/nginx/access.log
pendant que nginx avait ce fichier ouvert, il aurait 0 liens mais l'inode existerait toujours.lsof -c nginx | grep access.log
puis avec le pid,ls -l /proc/<pid>/fd/ | grep access.log
et enfin cat / proc / <pid> / fd / <nom de fichier de la commande précédente> `. Commentant même si c'est vieux. J'espère que cela a du sensIl y a une différence substantielle entre les deux.
Touch
est une commande utilisée pour horodater un fichier. Le>
symbole est un redirecteur de sortie standard.Explication de l'utilisation des deux
Utilisation de Touch
Si le fichier n'existe pas, il créera le fichier.
Le toucher est couramment utilisé pour créer des drapeaux. Par exemple, si vous souhaitez rechercher tous les fichiers entre deux fois sur votre système, vous pouvez utiliser cette séquence de commandes:
Cela va créer les fichiers suivants (ou changer l'horodatage s'ils existent):
Vous pouvez maintenant utiliser find pour afficher ou traiter tous les fichiers qui ont été modifiés à cette heure (temps entre ces deux fichiers d'horodatage, c'est-à-dire entre 22 h 00 et 23 h 00 le 29 septembre 2016).
Il s'agit d'une sortie partielle de la commande find ci-dessus:
Utilisation de la redirection de sortie
Le symbole de redirection redirigera la sortie standard vers le fichier spécifié. Selon vos paramètres de clobber / noclobber, si cela peut échouer. Noclobber ne créera le fichier que s'il n'existe pas.
Il existe un certain nombre de versions de la sortie de redirection qui incluent:
Nous pourrions utiliser notre
find
commande ci-dessus pour rediriger le contenu de tous les fichiers créés dans l'heure spécifiée vers un fichier que nous pourrions enregistrer et étudier plus tard:la source
file.txt
existe et n'est pas vide, il> file.txt
effacera son contenu maistouch file.txt
ne le fera pas. Mais personne n'a mentionné que>> file.txt
c'est un bon substituttouch file.txt
- il créera le fichier s'il n'existe pas (en supposant que vous en avez l'autorisation), mais il ne tronquera pas un fichier existant. Voir Quelle est la différence entre «>» et «>>»?Usage of Output redirection
. L'avis est dit>>
=Redirect append>
.>> file.txt
c'est un substitut viabletouch file.txt
. (Le fait que vous êtes la seule personne qui a mentionné>>
tout est pourquoi j'ai posté mon commentaire sous votre réponse, plutôt que dans la question.)>
est l'opérateur de redirection de sortie du shell, utilisé pour rediriger STDOUT des commandes précédentes vers le descripteur de fichier mentionné ci-après>
. Si le fichier est présent, son contenu sera tronqué, comme fichier avecopen(2)
-ed avecO_TRUNC
indicateur, et si le fichier n'existe pas, il sera créé.Chose importante à noter, cet opérateur de redirection sera géré par shell avant l'exécution de la commande précédente, donc cela ne dépend d'aucune commande, et géré par shell lui-même.
Notez que certains shells (par exemple
zsh
) se comporteront différemment avec une redirection vide comme:Une solution de contournement typique consiste à ajouter la commande no-op
:
(true
):Traditionnellement, l'objectif principal de
touch
est de modifier l'horodatage d'un fichier, et non de créer un fichier.touch
crée un fichier, uniquement lorsque le ou les fichiers mentionnés dans l'argument n'existent pas, sinon il change l'heure de modification du fichier en horodatage actuel. Vous pouvez également modifier le temps d'accès et le temps de création d'inode à l'aide detouch
.la source
zsh
prend en charge la redirection vide - il agit de manière assez similaire à la redirectioncat
sans arguments vers un fichier. Fondamentalement, tout ce que vous tapez sera écrit dans le fichier jusqu'à ce qu'un caractère EOF ou une interruption. Cela reflètezsh
le comportement de just<file
, qui imprime simplement le contenu du fichier, comme lecat
ferait. Ceux-ci peuvent être configurables, j'ai vu<file
ouvrir le fichier dans un pager.EOF
(comme fairecat >file.txt
comme vous l'avez dit), où enbash
faisant simplement>file.txt
suffirait.touch
met à jour à la fois l'heure de modification et l'heure d'accès au fichier. Il existe des options pour mettre à jour uniquement l'un ou l'autre. (2) Unix / Linux / POSIX ne prennent pas en charge le «temps de création d'inode», en général. Certains types de systèmes de fichiers le prennent en charge, mais il n'existe aucun moyen universel de le voir, et encore moins de le modifier. Pouvez-vous fournir une référence indiquant qu'il existe une incarnationtouch
qui permet à l'utilisateur de modifier le temps de création de l'inode?