Continuiamo il nostro discorso sulle apparenti stranezze della shell Linux motivando un’altra convenzione piuttosto usata: quella di denotare i file nascosti semplicemente anteponendo un punto (“.”) davanti al nome! Si, perché a differenza di Windows in cui il “nascosto” è un attributo di sistema, in Linux (ed in Unix) per nascondere un file basta usare come primo carattere del nome un punto.
Anche questo approccio trova storia nel passato ed è direttamente collegato con i riferimenti “.” e “..” (di cui vi abbiamo fatto la storia in un precedente articolo) relativi a directory corrente e directory superiore. La gestione dei file nascosti, infatti, è un diretto effetto collaterale.
I riferimenti a “.” e “..” sono presenti in tutte le directory di Linux per semplificare la navigazione e sembra proprio che, durante la seconda riscrittura del filesystem Unix, Thompson e Ritchie cercassero un modo di evitare questa ridondanza e di nasconderli quando si invocava il comando per ottenere la lista dei file nelle varie directory.
Tradotto in termini un attimino più comprensibili, Thompson e Ritchie hanno progettato il comando “ls” affinché evitasse di mostrare i due riferimenti ridondanti, purtroppo però l’hanno fatto con una logica errata: anziché evitare soltanto i file “.” e “..”, i nostri due eroi hanno implementato tale comando facendo sì che evitasse di mostrare qualsiasi file che avesse come primo carattere un punto.
Insomma, parlando in termini di pseudocodice il comando ls contiene qualcosa come
if (nome(file).iniziaCon(".")) == true then nonMostrare(file)
anziché contenere
if (nome(file).corrispondeA(".") oppure nome(file).corrispondeA("..")) == true then nonMostrare(file)
il che va a nascondere per impostazione predefinita tutti i file che iniziano con un punto. Questa pigrizia – corretta poi con l’introduzione del parametro -a che permette di mostrare tutti i file in seguito al comando ls – è stata successivamente “ereditata” da un numero enorme di programmatori, ragion per cui quello che era un “errore” è poi diventato una convenzione nonché il modo definitivo di Linux di nascondere i file.
Anche in questo caso… strano ma vero!