Even voor de duidelijkheid, directories zijn ook bestanden. Dus alles wat hier staat, geldt ook directory namen.
Zoals we reeds eerder gezien hebben zijn bestandsnamen hoofdletter gevoelig. Een bestand met de naam konijn is dus niet het zelfde bestand als dat met de naam Konijn.
Een bestandsnaam moet beginnen met een kleine of hoofd letter of een cijfer en mag verder bestaan uit kleine of hoofd letters, cijfers en een paar speciale tekens.
Het streepje -, de underscore _ en de punt . kunnen zonder problemen gebruikt worden in bestandsnamen.
Andere leestekens worden afgeraden omdat ze vaak een andere betekenis voor de shell hebben.
Weer een voorbeeld waarom ik een hekel heb aan vertalingen.
De Nederlandse directory Video's bevat een speciaal teken, wat voor veel verwarring kan zorgen.
Een punt als eerste teken van een bestandsnaam of directorynaam heeft een speciaal effect. Zo’n bestand of directory wordt dan verborgen (hidden) als je de inhoud van de directory bekijkt middels het ls commando. Je kunt de verborgen bestanden wel zien, als je de -a switch gebruikt. Dus ls -a toont alle bestanden en directories, ook als die verborgen zijn. Vergelijk de output maar eens tussen ls ~ en ls -a ~ .
Een punt ergens in de filenaam heeft geen speciale betekenis voor Linux.
Dus bestand.txt had net zo goed konijn kunnen heten.
In Windows is het gebruikelijk om bestandsextensies te gebruiken zodat het systeem weet met wat voor programma zo’n bestand moet worden geopend.
Een bestandsextensie is daar vaak een punt gevolgd door een stuk of 3 letters.
Dit is nog een erfenis van het DOS tijdperk.
Enkele voorbeelden: plaatje.jpg, muziek.mp3, filmpje.avi, of document.doc.
In Linux kennen we dat zoals gezegd niet.
Linux gebruikt een andere, meer betrouwbare, manier om te bepalen om wat voor type bestand het gaat.
Dit neemt niet weg dat jij als mens het best wel handig kan vinden om een mp3 bestand met de extensie .mp3 te laten eindigen, of een plaatje met .jpg.
En die vrijheid heb je gelukkig.
Er zijn een aantal leestekens die iets speciaals betekenen voor de shell. Die tekens mag je daarom niet zomaar in bestandsnamen gebruiken.
De spatie wordt gebruikt om switches en parameters op een commando regel van elkaar te scheiden. Als je een bestand wilt gebruiken met de naam Frans Bauer.mp3, dan zal de shell dat interpreteren als twee bestanden. De eerste met de naam Frans en de tweede als Bauer.mp3.
Dit zijn de zogenaamde wildcard tekens. Het vraagteken is het gemakkelijkste te begrijpen, daarom die maar even eerst. Een vraagteken wordt door de shell geïnterpreteerd als één willekeurige letter. Het kan dus een a zijn, maar ook een 3, of... nou ja het maakt niet uit wat.
ls k?st
Dit commando zou dus bestanden kunnen listen met de naam kast, of kist, als die bestanden zouden bestaan. Een bestand met de naam koest zou niet gelist worden. Die naam begint wel met een k en eindigt met een st, maar daar staat meer dan een letter tussen.
Het * teken doet eigenlijk hetzelfde als een vraagteken. Maar dan met dit verschil dat het aantal willekeurige tekens van 0 tot oneindig kan zijn.
ls k*r
Dit commando zou dus bestanden kunnen listen met namen als koor, kar, kier, kalender, of zelfs kr, als ze zouden bestaan.
ls *a*
Dit, min of meer nutteloze, commando laat alle bestanden zien waar tenminste een letter a in zit.
ls a*
Dit laat alle bestanden zien die met de letter a beginnen.
ls *mp3
Tenslotte nog deze. Dit commando laat alle bestanden zien die op mp3 eindigen.
Dit teken kennen we al. Het wordt gebruikt om directories en bestandsnamen in een pad aan elkaar te plakken.
Deze kunnen gebruikt worden om betandsnamen te maken waarin speciale tekens staan. Wat tussen quotes staat wordt letterlijk geïnterpreteerd. Op die manier kun je bestandsnamen maken waarin bijvoorbeeld spaties staan.
ls 'Frans Bauer.mp3' ls "Video's" ls 'Foto's' dit gaat mis
In het eerste voorbeeld zie je dus een bestand waar een spatie in de naam staat.
Zonder de apostrof aan het begin en einde van de naam zou de shell dit geïnterpreteerd hebben als twee aparte namen.
Het tweede voorbeeld doet eigenlijk hetzelfde, maar nu is de apostrof dus het speciale teken.
In dit geval moeten we dus aanhalingstekens gebruiken, om te voorkomen dat de shell in de war raakt.
Wat er zou gebeuren als we wel apostrofs gebruiken zie je in het derde voorbeeld.
De eerste apostrof start het letterlijk te nemen deel van de naam.
De tweede beëindigt de letterlijke interpretatie.
De derde apostrof begint weer een letterlijk te nemen deel van de naam.
Dus wordt in dit geval ook het einde van de regel letterlijk genomen.
Normaal is het einde van de regel een teken voor de shell om het commando te gaan uitvoeren.
Nu niet, nu wil de shell meer hebben.
Dit is te zien aan de afwijkende prompt.
Je ziet nu enkel een > symbool.
Daarmee geeft de shell aan dat hij nog niet alles gekregen heeft wat hij nodig heeft om het commando te gaan uitvoeren.
Voor nu kun je op Ctrl-C drukken om het commando af te breken.
Er is nog een heel klein verschil in werking tussen apostrofs en aanhalingstekens. Maar dat gaat hier iets te ver.
Dit is het zogenaamde Escape karakter. Niet te verwarren met de ESC toets op je toetsenbord. De letter die volgt op dit Escape karakter wordt letterlijk genomen. Dit is dus een alternatieve manier om speciale tekens in een bestandsnaam toe te kunnen passen.
ls "Frans Bauer.mp3" ls Frans\ Bauer.mp3
Bovenstaande voorbeelden doen beide hetzelfde.
Het \ teken zelf kun je gebruiken door \\ te typen. De eerste \ is dus de Escape, terwijl de tweede \ het echte teken is wat letterlijk gebruikt wordt. Het is echter wel af te raden om tekens als \, * en ? te gebruiken in bestandsnamen. Het mag wel, maar het kan tot heel veel verwarring leiden als je die namen wilt gaan gebruiken.
Ik denk dat dit even genoeg is over bestandsnamen.
Er zijn nog meer speciale tekens.
Maar alles benoemen gaat hier iets te ver.
Er geldt een gouden regel.
Als je twijfelt of een een teken een speciale betekenis heeft voor de shell, gebruik dan een Escape karakter, of omsluit de hele naam met aanhalingstekens.