Je suis conscient que la touch
commande est utilisée pour mettre à jour la date de la dernière modification sur un fichier. Il est également utilisé pour créer un nouveau fichier si le fichier demandé n'existe pas sur le système de fichiers.
Puisque touch (comme son nom l'indique), devrait simplement mettre à jour la dernière date de modification, pourquoi essaie-t-il également de créer un nouveau fichier?
S'agit-il simplement d'un chèque écrit dans le code tactile, ou est-ce autre chose qui provoque la création d'un fichier?
touch /forcefsck
pour créer un fichier vide appelé/forcefsck
pour forcer la vérification des erreurs des systèmes de fichiers lors du prochain redémarrage. Le fichier lui-même n'a besoin de rien contenir, il doit simplement exister. Sanstouch
, je devrais utiliservi
ounano
enregistrer un fichier vierge. Beaucoup plus rapide à utilisertouch
.>/forcefsck
ouprintf '' >>/forcefsck
(ce dernier conserverait tout contenu existant). Ce que vous décrivez est une façon d'utiliser un utilitaire qui fonctionne d'une certaine manière, mais cela n'a aucune incidence réelle sur la raison pour laquelle il est écrit pour fonctionner de cette façon.touch
plutôt que la façon dont cela fonctionne, je pense que celatouch
viole le principe de responsabilité unique avec l'effet secondaire de création de fichier. Par conséquent, le «pourquoi» est simplement dû aux premiers choix de conception qui se sont bloqués en raison de la popularité et de la prévalence / facilité d'utilisation.Réponses:
Utilisation des
strace touch t
rendements:C'est dans
touch
le code de et je n'appellerais pas ça un chèque . L'horodatage est mis à jour en ouvrant le fichier en écriture puis en le fermant.la source
touch
crée un nouveau fichier vide si le fichier n'existe pas parce que c'est pour cela qu'il a été conçu. L'utilitaire doit contenir du code pour gérer spécifiquement ce cas. L'utilitaire est apparu dans Unix V7 ; son manuel le décrit ainsi:(Je ne sais pas ce qui
touch
s'est passé si le fichier était vide. L' appel système sous-jacent est venu plus tard.)Je ne sais pas exactement pourquoi a
touch
été conçu pour que le fichier existe, mais je pense que c'est à cause de celamake
. Pourquoi voudriez-vous définir l'heure de modification d'un fichier à l'heure actuelle? Il y a des cas où il pourrait être utile de régler l'heure de modification à une heure particulière, mais cette capacité est venue plus tard, l'originaltouch
ne pouvait que régler l'heure de modification à l'heure actuelle. Une raison pour cela est de réexécuter unemake
règle qui dépend du fichier.Autrement dit, supposons que vous ayez un fichier
foo
et un makefile qui déclare une commande àbar
partir de laquelle générerfoo
. Lorsque vous tapezmake bar
, la commande est exécutée etbar
créée. Sibar
existe et est plus récent quefoo
,make bar
ne fait rien, carmake
suppose qu'ilbar
a déjà été généré. Cependant, s'ilbar
est plus ancien quefoo
, pensez qu'ilbar
n'est pas à jour et doit être régénéré.Mais que faire si les règles à générer
bar
ont changé? Ensuite, vous avez deux options:rm bar; make bar
touch foo; make bar
Vous auriez besoin
foo
d'exister pour générerbar
, sinon la commande ne fonctionnerait généralement pas.La terminologie «tactile» était également présente dans l'
make
utilitaire:make -t bar
ne ferait que faire semblant d'exécuter les commandes, c'est-à-dire qu'elle définirait l'heure de modification debar
l'heure actuelle sans réellement exécuter la commande à générerbar
(vous le feriez si vous pensiez que les modificationsfoo
ne devraient pas affecterbar
). L'touch
utilitaire était donc une version autonome de lamake -t
fonctionnalité.la source