Pourquoi les noms de fichiers commençant par un point sont-ils masqués? Puis-je masquer des fichiers sans utiliser de point comme premier caractère?

15

Au début, je pensais que c'était une coïncidence, mais maintenant je vois qu'il y a même une balise pour cela: tous les noms de fichiers cachés commencent par un point. Est-ce une convention? Pourquoi at-il été choisi? Peut-il être changé? Ou en d'autres termes (comme une question connexe suggérée par @evilsoup implique la réponse à un tas d'autres): puis-je masquer des fichiers sans les renommer (en utilisant .comme premier caractère de leur nom)?

JMCF125
la source
Ou "pourquoi tous les noms de fichiers cachés commencent-ils par un point?", Si vous préférez.
JMCF125
2
Oui c'est une convention, pour savoir pourquoi il a été choisi qui sait, allez demander aux pionniers UNIX, c'est une vieille convention.
terdon
4
Lisez l'article Wikipedia sur les fichiers cachés et plus.google.com/101960720994009339267/posts/R58WgWwN9jp pour les aspects historiques. Cela ne peut pas être changé.
jofel
Je pensais que Linux était entièrement personnalisable ...
JMCF125
1
@ JMCF125 en fait, ce commentaire est apparu un peu plus sarcastique que je ne le pensais, désolé. Demandez-vous réellement: "puis-je masquer des fichiers sans les renommer?" - si tel est le cas, vous devez le modifier dans votre question.
evilsoup

Réponses:

26

Selon Wikipedia ,

L'idée que les noms de fichiers précédés d'un. devrait être caché est le résultat d'un bogue logiciel dans les premiers jours d'Unix. Lorsque les entrées spéciales .et de ..répertoire ont été ajoutées au système de fichiers, il a été décidé que la commande ls ne devait pas les afficher. Cependant, le programme a été écrit par erreur pour exclure tout fichier dont le nom a commencé par un .caractère, plutôt que les noms exacts .ou ...

... donc cela a commencé comme un bug, puis il a été adopté comme une fonctionnalité (pour mémoire, .est un lien vers le répertoire actuel et ..un lien vers le répertoire au-dessus, mais je suis sûr que vous le savez déjà ). Étant donné que cette méthode de masquage de fichiers est en fait assez bonne la plupart du temps, je suppose que personne n'a jamais pris la peine d'implémenter le masquage de fichiers de style Windows.

Il y a aussi le fait que l'implémentation d'un comportement différent produirait une quantité encore plus grande de fragmentation dans le monde * nix, ce qui est la dernière chose que l'on veut.

Il existe une autre méthode pour masquer les fichiers qui ne nécessite pas de les renommer, mais cela ne fonctionne que pour les gestionnaires de fichiers GUI (et ce n'est pas universel parmi ceux-ci - les principaux Linux l'utilisent, mais je ne pense pas que le Finder d'OSX le fasse, et les gestionnaires de fichiers Linux les plus spécialisés sont moins susceptibles de prendre en charge ce comportement): vous pouvez créer un fichier appelé .hiddenet y mettre les noms de fichiers que vous souhaitez masquer, un par ligne. lset les globes shell ne respecteront pas cela, mais cela pourrait encore vous être utile.

evilsoup
la source
Cependant, cette dissimulation ne fonctionne pas sur Unity. Mais comme vous avez directement répondu à toutes les questions, je vais marquer cela comme la réponse acceptée (bien que j'ai voté pour les deux réponses).
JMCF125
3
La page Wikipedia ne contient plus d'informations à ce sujet. Cependant, Rob Pike a travaillé sur UNIX chez Bell Labs et a publié
Alexander
" OS X ", pas "OSX".
Peter Mortensen
14

Les fichiers commençant par un point sont ignorés par défaut par la commande "ls", qui a plus ou moins le même effet que les fichiers "cachés" mais n'est pas le même (d'autres commandes peuvent choisir de faire de même ou non). Les fichiers commençant par un point ne sont pas "masqués" car "masqué" ne fait pas partie de leurs attributs. Contrairement à DOS / Windows, "caché" n'est pas un attribut sous Unix. Il existe de nombreux attributs dans Unix ("man chattr" vous les dira tous) mais masqué n'en fait pas partie.

La raison pour laquelle les fichiers dot sont ignorés par "ls" est en fait assez drôle / embarrassant. Ce n'était pas une décision de conception mais le résultat d'un bug logiciel dans les premiers jours d'Unix . Quand le spécial. et .. des entrées de répertoire ont été ajoutées au système de fichiers, il a été décidé que la commande ls ne devrait pas les afficher car elles gênaient. Cependant, le programme a été écrit à la hâte pour exclure tout fichier dont le nom commençait par a. plutôt que les noms exacts "." ou "..". Et cela a créé un précédent qui a été suivi depuis lors sous Unix. Curieusement, lorsque les gars d'Unix sont passés à la création de Plan 9, ils n'y ont pas mis intentionnellement des fichiers dot .

sergut
la source
J'ai essayé man chattr, même si je pensais que j'aurais peut-être besoin d'un package ou d'un programme spécifique pour rendre d'autres fichiers cachés possibles.
JMCF125
0

Que vous puissiez masquer des fichiers ou non, et à quelles conditions, cela dépend du système de fichiers que vous utilisez et de son pilote. Les systèmes de fichiers Unix traditionnels n'ont pas d'attribut "masquer" pour les fichiers.

Un pilote de système de fichiers peut masquer tous les fichiers qu'il souhaite, en omettant simplement leurs noms lorsqu'il fournit des résultats aux appels système utilisés pour obtenir une liste de répertoires. Comme sergut l'a décrit dans sa réponse, les fichiers commençant par un point ne sont pas vraiment cachés.

(C'est également ainsi que les rootkits peuvent masquer leurs fichiers: ils se connectent aux appels système qui produisent des listes de répertoires et filtrent les fichiers qu'ils souhaitent masquer.)

Par exemple, dans les systèmes de fichiers du cluster Oracle ACFS, le répertoire <filesystem mountpoint>/.ACFS/est vraiment caché: il ne sera tout simplement pas répertorié, pas même avec ls -a. Mais si vous savez que c'est là, vous pouvez y accéder très bien.

Si vous utilisez la fonction de capture instantanée du système de fichiers ACFS, vous pouvez accéder à toutes les captures instantanées de système de fichiers existantes de ce système de fichiers via ce .ACFSrépertoire. S'il n'était pas masqué, un programme de sauvegarde pourrait finir par sauvegarder à la fois le contenu actuel du système de fichiers et le contenu de tout instantané existant, ce qui serait probablement indésirable; normalement, vous souhaitez sauvegarder l'état actuel ou l'état d'un instantané spécifique.

telcoM
la source