Sous Linux et d'autres systèmes liés à Unix, il n'y a que deux caractères qui ne peuvent pas apparaître dans le nom d'un fichier ou d'un répertoire, ce sont NUL '\0'
et slash '/'
. La barre oblique, bien sûr, peut apparaître dans un nom de chemin, séparant les composants du répertoire.
Selon la rumeur 1, Steven Bourne (de renommée `` shell '') avait un répertoire contenant 254 fichiers, un pour chaque lettre (code de caractère) qui peut apparaître dans un nom de fichier (à l'exclusion de /
, '\0'
le nom .
était le répertoire actuel, bien sûr ). Il a été utilisé pour tester le shell Bourne et faire des ravages routiniers sur des programmes imprudents tels que des programmes de sauvegarde.
D'autres personnes ont couvert les règles de Windows.
Notez que MacOS X possède un système de fichiers insensible à la casse.
1 C'est Kernighan & Pike dans
The Practice of Programming qui l'a dit au chapitre 6, Testing, §6.5 Stress Tests:
Lorsque Steve Bourne écrivait son shell Unix (qui est devenu le Bourne shell), il a créé un répertoire de 254 fichiers avec des noms à un caractère, un pour chaque valeur d'octet sauf '\0'
et slash, les deux caractères qui ne peuvent pas apparaître dans Unix noms de fichiers. Il a utilisé ce répertoire pour toutes sortes de tests de correspondance de modèles et de tokenisation. (Le répertoire de test a bien sûr été créé par un programme.) Pendant des années après, ce répertoire a été le fléau des programmes d'arborescence de fichiers; il les a testés jusqu'à la destruction.
Notez que le répertoire doit avoir contenu des entrées .
et ..
, par conséquent, il s'agissait sans doute de 253 fichiers (et de 2 répertoires), ou 255 entrées de nom, plutôt que de 254 fichiers. Cela n'affecte pas l'efficacité de l'anecdote, ni les tests minutieux qu'elle décrit.
echo abc > "ab.;,=[1]"