Grondbeginselen van Bash
Om Bash te begrijpen, moet u weten hoe de Bash-syntaxis werkt. Nadat u de syntaxis kent, kunt u deze toepassen op elke Bash-opdracht die u uitvoert.
De volledige syntaxis voor een Bash-opdracht is:
command [options] [arguments]
Bash behandelt de eerste tekenreeks die wordt aangetroffen als een opdracht. In de volgende opdracht wordt de opdracht ls
(voor lijst) van Bash gebruikt om de inhoud van de huidige werkdirectory weer te geven:
ls
Argumenten zijn vaak gekoppeld aan Bash-opdrachten. U kunt bijvoorbeeld een padnaam opnemen in een ls
-opdracht om de inhoud van een andere directory weer te geven:
ls /etc
De meeste Bash-opdrachten hebben opties voor het wijzigen van de manier waarop ze werken. Opties, ook wel vlaggengenoemd, geven een opdracht meer specifieke instructies. Bestanden en mappen waarvan de namen beginnen met een punt, worden bijvoorbeeld verborgen voor de gebruiker en worden niet weergegeven door ls
. U kunt echter de vlag -a
(voor alles) opnemen in een ls
-opdracht om alles in de doeldirectory te zien:
ls -a /etc
U kunt zelfs vlaggen combineren om een opdracht korter te maken. U hoeft bijvoorbeeld niet ls -a -l /etc
in te voeren om alle bestanden en directory's in de directory /etc van Linux te tonen, maar kunt in plaats daarvan dit gebruiken:
ls -al /etc
Bash is beknopt. Het is opmerkelijk (en iets waar Bash-liefhebbers prat op gaan) hoeveel je soms kunt doen met één opdracht.
Hulp vragen
Welke opties en argumenten kunnen of moeten worden gebruikt, verschilt per opdracht. Gelukkig is de Bash-documentatie ingebouwd in het besturingssysteem. Hulp is altijd maar één opdracht ver. Voor meer informatie over de opties voor een opdracht gebruikt u de opdracht man
(voor manual: handleiding). Als u bijvoorbeeld alle opties voor de opdracht mkdir
(make directory: directory maken) wilt zien, doet u dit:
man mkdir
man
is uw beste vriend terwijl u Bash leert.
man
is hoe u de informatie vindt die u nodig hebt om te begrijpen hoe een opdracht werkt.
De meeste Bash- en Linux-opdrachten ondersteunen de optie --help
. Hier ziet u een beschrijving van de syntaxis en opties van die opdracht. Voer mkdir --help
in om een voorbeeld te zien. De uitvoer ziet er ongeveer zo uit:
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'
De Help-informatie die u op deze manier krijgt, is doorgaans beknopter dan wanneer u man
gebruikt.
Jokertekens gebruiken
Jokertekens zijn symbolen die een of meer tekens in Bash-opdrachten vertegenwoordigen. Het meestgebruikte jokerteken is het sterretje. Het vertegenwoordigt nul tekens of een reeks tekens. Stel dat uw huidige map honderden afbeeldingsbestanden bevat, maar u alleen de PNG-bestanden wilt zien; waarvan de bestandsnamen eindigen op .png. Hier volgt de opdracht om alleen die bestanden weer te geven:
ls *.png
Notitie
Linux heeft geen formeel concept van een bestandsnaamextensie, zoals andere besturingssystemen. Maar dat betekent niet dat PNG-bestanden geen .png-extensie hebben. Het betekent gewoon dat Linux geen speciale betekenis hecht aan het feit dat de bestandsnamen eindigen op .png.
Stel nu dat de huidige directory ook JPEG-bestanden bevat. Sommige eindigen op .jpg, terwijl andere eindigen op .jpeg. Hier volgt een manier om alle JPEG-bestanden weer te geven:
ls *.jpg *.jpeg
En hier is nog een:
ls *.jp*g
Het jokerteken *
komt overeen met nul of meer tekens, maar het jokerteken ?
vertegenwoordigt één teken. Als de huidige directory bestanden bevat met de naam 0001.jpg, 0002.jpg, enzovoort t/m 0009.jpg, worden deze allemaal weergegeven met de volgende opdracht:
ls 000?.jpg
Een andere manier om jokertekens te gebruiken voor het filteren van uitvoer is het gebruiken van vierkante haken, waarmee groepen van tekens worden aangeduid. Met de volgende opdracht worden alle bestanden in de huidige directory weergegeven waarvan de naam een punt bevat die direct gevolgd wordt door een kleine letter J of P. Hiermee wordt een lijst gemaakt van alle .jpg-, .jpeg- en .png-bestanden, maar niet van .gif-bestanden:
ls *.[jp]*
In Linux zijn bestandsnamen en de opdrachten die erop worden uitgevoerd hoofdlettergevoelig. Als u dus alle bestanden in de huidige directory wilt weergeven waarvan de namen een punt bevatten die wordt gevolgd door een hoofd- of een kleine letter J of P, kunt u dit invoeren:
ls *.[jpJP]*
Expressies tussen vierkante haken kunnen tekenbereiken vertegenwoordigen. De volgende opdracht geeft bijvoorbeeld een lijst weer van alle bestanden in de huidige directory waarvan de naam met een kleine letter begint:
ls [a-z]*
Maar deze opdracht geeft juist een lijst weer van alle bestanden in de huidige directory waarvan de naam met een hoofdletter begint:
ls [A-Z]*
En deze opdracht geeft een lijst weer van alle bestanden in de huidige directory waarvan de naam met een kleine letter of een hoofdletter begint:
ls [a-zA-Z]*
Op basis van dit alles kunt u raden wat de volgende opdrachten doen?
ls [0-9]*
ls *[0-9]*
ls *[0-9]
Als u een van de jokertekens als een gewoon teken wilt gebruiken, maakt u dit letterlijk of 'escapet' u het door er een backslash voor te zetten. Als u dus bijvoorbeeld een sterretje hebt gebruikt als deel van een bestandsnaam (iets dat u nooit opzettelijk moet doen) kunt u daarnaar zoek met een opdracht als deze:
$ ls *\**