Comment renommer le file en .. (dot dot)?

Apparemment, vous pouvez renommer le file en ...

Si j'étais fou, comment renommerais-je le file en .. ou . ? Un tel nom de file est-il autorisé?

La barre oblique inversée ne semble pas désactiver la signification spéciale de dot:

 $ mv test \. mv: `test' and `./test' are the same file 

Vous ne pouvez pas renommer un file en . ou .. parce que tous les directorys contiennent déjà des inputs pour ces deux noms. (Ces inputs pointent vers des directorys et vous ne pouvez pas renommer un file dans un directory.)

mv détecte le cas où la destination est un directory existant et l'interprète comme une requête pour déplacer le file dans ce directory (en utilisant son nom actuel).

Les barres obliques inverses n'ont rien à voir avec cela, parce que . n'est pas un métacaractère shell. \. et . sont les mêmes pour bash .

.. n'est pas spécial, c'est juste qu'il existe déjà.

Sur Unix, Dos et MS-Windows, chaque directory a un directory . il renvoie à lui-même, et un directory .. il lie à son directory parent (ou self si le directory racine).

Si .. et . sont spéciales, c'est seulement parce que vous ne pouvez pas les supprimer (en fait, vous pouvez simplement supprimer le directory qui les contient).

Par conséquent, vous ne pouvez pas nommer un autre file . ou ..

Cependant, vous pouvez créer des files ... , \ , , .. (notez qu'il y a un espace après le .. , mais vous pouvez difficilement le voir ici, ou facilement dans votre directory) ou tout autre nom que vous aimez; Le seul caractère réservé est / (Attention – détails avancés: null, null est un caractère spécial, qui n'est utilisé que pour marquer la fin des choses et parfois comme séparateur). . n'a pas de signification particulière: ne pas déposer les noms, le kernel ou le shell, il n'a pas besoin de s'échapper. En fait si un nom de file commence par un . alors c'est spécial, le file est normalement caché, mais il n'a pas besoin de s'échapper.

De côté

Ce comportement de file caché est apparu dans une implémentation précoce de ls où l'auteur voulait se cacher . et .. , donc ils ont écrit du code pour cacher tous les files commençant par un . . D'autres users ont remarqué ce bug / fonctionnalité et ont commencé à créer des files commençant par un . quand ils voulaient que le file soit caché.

Explication de la question liée

Dans la question que vous liez au questionneur essaie de déplacer le file vers le directory parent .. mais finit par renommer en ... , les files commençant par un point sont par défaut cachés, c'est pourquoi ils ne peuvent pas le find.

Lorsque vous utilisez mv sous la forme mv ab

  • Si vous déménagez . c'est effectivement une opération non, mais mv traite comme une erreur.
  • Si vous déplacez vers .. il déplacera le file vers le directory parent.

Le problème est que vous déplacez un file sur un directory. Ceci est autorisé à échouer.

Je vais vous dire comment c'était autrefois.

mkdir lisait essentiellement ceci (alors que j'écris ceci en sh, il était vraiment écrit en C et setuid-root).

 mknod d $1 ln -d $1 $1/. ln -d `dirname $1` $1/.. 

Donc, comme vous pouvez le voir, il n'y a pas beaucoup de spécial. et .. sauf pour le fait qu'ils sont créés pour vous par mkdir et existent déjà. Il y a du code maintenant qui dit que vous ne pouvez pas les supprimer, mais ce n'était pas toujours le cas.

rmdir ressemblait à ceci:

 rm -d $1/.. rm -d $1/. rm -d $1