web-dev-qa-db-fra.com

Commande de répertoire Linux Touch

Qu'est-ce que la commande 'touche' lorsqu'elle est appliquée à un répertoire?

$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
7
Dragos Rizescu

Comme indiqué dans la page de manuel , l'utilisation principale de touch est la suivante:

Mettez à jour les heures d'accès et de modification de chaque FICHIER à l'heure actuelle.

Donc, il met à jour les temps d'accès et de modification du répertoire.

7

L'exemple en haut n'indique pas clairement que "touch" définit l'heure du répertoire (la nouvelle heure de la liste était identique à l'originale, tout simplement parce que le contact était si peu de temps après la création du répertoire). oui, la définition de "FILE" dans la documentation inclut les répertoires, vous pouvez donc utiliser touch pour modifier leur horodatage, MAIS ...

Dans certains cas, vous ne pouvez pas modifier l'horodatage d'un répertoire (pour certains types de répertoires montés à distance) même si vous êtes autorisé à effectuer autre chose. par exemple. ce montage NFS:

$ touch -d "2014-07-02 12:15" /public/test.dir    
touch: setting times of ‘/public/test.dir’: Operation not permitted

De plus, vous pouvez avoir des problèmes avec certaines anciennes dates non prises en charge sur certains serveurs, par exemple:

$ mkdir  /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Mar 11 17:40 /Acer/kopies/test.dir

Cela marche:

$ touch "2014-04-01 00:00" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Apr  1  2014 /Acer/kopies/test.dir

Cela fonctionnerait sur un répertoire local mais donnerait une date étrange sous les montages Samba:

$ touch -d "1955-07-02 12:15" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Nov 26  60410 /Acer/kopies/test.dir
                              ~~~~~~~~~~~~~
3
user235510

touch est un programme Unix standard utilisé pour modifier les horodatages d'accès et de modification d'un fichier. Il est également utilisé pour créer un nouveau fichier vide.

La spécification Single Unix (SUS) spécifie que touch devrait modifier les heures d'accès, les heures de modification, ou les deux, pour un fichier. Le fichier est identifié par un chemin d'accès fourni en tant qu'argument unique. Il spécifie également que si le fichier identifié n'existe pas, il est créé et les heures d'accès et de modification sont définies comme indiqué. Si aucun nouvel horodatage n'est spécifié, appuyez sur pour utiliser l'heure actuelle.

-Wikipédia

Vous pouvez trouver des informations plus détaillées sur la commande touch (ou sur toute autre commande que vous souhaitez connaître) en utilisant la commande man comme ceci:

man touch

2
Atari911

La raison immédiate de la question est le fait que la résolution temporelle par défaut de ls -l est en minutes. Ainsi, une entrée de système de fichiers touchée dans la même minute s'affichera exactement de la même manière dans la sortie par défaut de ls -l.

La solution à cela est décrite à https://superuser.com/questions/355318/how-to-have-linux-ls-command-show-second-in-time-stamp et implique essentiellement l'exécution de ls -l --time-style=full-iso à la place.

1
Josip Rodin