Les 2 Basic filecommandos

Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd
Inhoud: cp, rm, ls, rmdir, mkdir, cd, pwd, ps

Intro

Om met Linux te werken , heb je kennis nodig over hoe je met bestanden omgaat. Hiervoor bestaan in de shell een aantal commandos om met bestanden en directories te werken. Een aantal van de basiscommandos komen hier aan het licht. Om te beginnen worden een aantal uitgangspunten behandeld die licht werpen op hoe de computer de bestanden en commando interpreteert.

Bestanden en folders

Een aantal begrippen voor het werken met bestanden zullen handig zijn om beter te begrijpen hoe bestanden en folder op de computer georganiseerd zijn. 
Bestanden worden op het bestandsysteem opgeslagen onder hun naam. De gebruiker slaat zijn gegevens op in bestanden. Deze bestanden worden onder hun naam opgeslagen op het bestandsysteem van de computer. Groepjes bestanden worden opgeslagen in folders  (ook wel mappen of directories genoemd). Foldes kunnen bestanden bevatten , maar ook andere folders.
De bestanden zijn met behulp van deze naam op te roepen . Met behulp van de bestandscommandos kunnen er bewerkingen worden gedaan op de bestanden, zoals kopieren , hernoemen, wissen en verplaatsen. Andere commandos doen bewerkingen op de folders. Dit kan bijvoorbeeld zijn : folder aanmaken, een folder verwijderen of een folder hernoemen.
Door de naam kan precies worden weergegeven hoe het bestand heet, maar ook hoe de folder heet waarin het bestand is opgeslagen. Door de naam altijd te beginnen met de naam van de hoofdfolder (rootdirectory) is de plaats van een bestanden of folder altijd eenduidig weergegeven.
Er wordt altijd vanuit gegaan dat een folder aktief is. Dit wil zeggen dat alle opdrachten die een gebruiker geeft , betrekking hebben op de bestanden in deze folder. De gebruiker kan de aktieve folder wijzigen. Door een foldernaam te geven bij een opdracht kan het commando betrekking hebben op een andere folder , of bestanden in een andere folder.

Klik voor een  grafische voorstelling van een directory tree

Toon mapinhoud : ls

Het commando ls toont de inhoud van een folder. Het laat de inhoud van de aktieve folder zien, als er geen andere foldernaam is gegeven .  

Parameters

Als parameter kan een foldernaam worden gegeven of een zogenaamde bestandspecificaties. Er kunnen ook jokers (wildcards) gegeven worden om een verzameling bestanden aan te duiden. Een voorbeeld :
ls *.html 
laat alle HTML bestanden zien, dus alle bestanden waarvan de naam eindigt op ".html" .
ls vakantie* 
laat alle bestanden zien waarvan de naam begint met "vakantie" .

Opties

Er kunnen aan het commando enkele opties gegeven worden die het gedrag van het commando ls veranderen Enkele belangrijke opties zijn:
Deze opties kunnen ook worden gecombineerd. Bijvoorbeeld
ls -a -l 
kan worden gecombineerd tot
ls -al

Kopieren: cp

Het commando cp kopieert een bestand. Het is een afkorting van het engelse woord "copy" dat kopieren betekent. Het heeft twee parameters nodig. Het eerste parameter is het bronbestand. De tweede parameter is de bestemmings. De bestemming kan een bestandsnaam zijn, maar het kan ook een bestemmingsfolder aanduiden. In dat geval krijgt de kopie dezelfde naam als het bronbestand. Ook het bronbestand kan een foldernaam zijn. In dat geval wordt een kopie gemaakt van de complete folder naar een nieuwe naam. Het commando cp kan zelfs ook meerdere bestanden in een keer kopieren, wanneer je als bron een bestandspecificatie met een of meer jokers gebruikt.

Opties van cp

Aan het commando kan de optie -f worden meegegeven om het bestemmingsbestand ongevraagd te overschrijven , indien het al bestaat. Ook kan met -R aangegeven worden dat ook alle bestanden in folders moeten worden meegekopieerd.

Bestanden verwijderen: rm

Het commando rm verwijdert een bestand of een aantal bestanden. Het commando is een afkorting van het engele woord "remove", dat verwijderen betekent. Je kunt het commando een hele rij van bestandsnamen geven en het resultaat is dat alle opgegeven bestanden worden gewist. Ook als daar folders bij zitten. Met jokers kun je ook een verzameling bestanden opgeven. Er zijn de volgende opties.
-r verwijdert recursief, dus ook alle folders
-f verwijdert geforceerd, d.w.z. het commando vraagt niet voor bevestiging.
Wees heel voorzichtig hiermee.
Je kunt deze opties combineren als volgt.
rm -rf mapnaam 
Dit wist de opgegeven bestand of folder en wist onherroepelijk , inclusief alle subfolders en alle bestanden die zich in de map bevinden.

Feedback van de shell

Linux is heel krachtig in zijn commandotaal, maar ook heel kortaf. Wanneer je een commando zoals cp uitvoert en alles gaat goed , dan krijg je helemaal geen feedback,. Je krijgt boodschap dat alles goed gekopieerd is, je krijg zelfs niet eens dat het commadno bezig is, als het langer duurt dan een oogwenk. Niet zoals Windows, waar elk wissewasje is voorzien van een progressieindicator. In Unix en Linux is dat allem aal niet. Geen toetsers en bellen., maar What You See Is What You Get. Jij geeft het commando om 10000 bestanden te kopieren, en dan doet Linux dat , zonder een waarschuwing of wat dan ook.
Waar dit op neer komt is dit in de eerste plaats : Wees voorzichtig met welk commando je geeft. Linux doet het zonder blikken of blozen, ongeacht wat voor gek commando het is. En vooral : Lees dus goed wat voor boodschappen een commando aan jou meldt. Want als Linux jou een boodschap geeft , kun je ervanuit gaan dat het ook belangrijk genoeg is om te lezen!

Bestanden verplaatsen: mv

Het commando mv verplaatst een of meer bestanden, naar een folder , of hernoemt een bestand naar een andere naam. Het is een afkorting van "move" dat verplaatsen betekent. De eerste parameter is het bestand dat verplaatst of hernoemt moet worden, de tweede parameter geeft aan waarheen het verplaatst of hernoemt moet worden. Afhankelijk of de twee parameter een folder of een bestand aanduidt, wordt het bestand dus respectievelijke verplaatst of hernoemt.

Een map aanmaken: mkdir

Het commando mkdir maakt een map aan. Het is een afkorting van het engelse woord "make directory". Het heeft een parameter nodig van de map die je wilt aanmaken.
mkdir MijnMap 
maakt de map met de naam "MijnMap" . Hoofdletters doen er toe, want bestandsnamen in Linux zijn hoofdlettergevoelig.

Map wissen: rmdir

Het commando rmdir is een afkorting voor "remove directory" en verwijdert een of meer mappen. Gebruik als volgt:
rmdir zooi
Dit verwijdert de map zooi, maar alleen als de map leeg is. Dit is een veiligheidsmaatregel om te voorkomen dat je mappen zou wissen met inhoud. Om mappen te wissen compleet met inhoud, gebruik je commando rm .

Toon actieve map: pwd

Het commando pwd laat zien wat de huidige actieve map is. Pwd is een afkorting voor "Print working directory". Het wordt gebruikt als volgt.
pwd
Dit toont de aktieve map vanaf de rootdirectory, of rootmap. Dit commando kan handig zijn als je niet meer precies weet in welke map je je bevindt en de shellprompt laat alleen de laatste map zien, maar niet het hele pad. 
Een voorbeeld : De shellprompt ziet er bijvoorbeeld zo uit:
[paul@localhost Documents]$
Je weet dus dat je je bevindt in de map Documents, maar je niet in welke map Documents zich bevindt. Het commando pwd laat dit zien.
/home/paul/Documents
Pwd laat je nu zien waar Documents zich bevindt ten opzichte van de hoofdmap / .

Verander actieve map : cd

Het commando cd zorgt ervoor dat je de actieve map verandert. Het commando is een afkorting van "change directory". Het zorgt ervoor dat alle commandos betrekking hebben op de opgegeven map. Je gebruikt het commando zo:
cd Documents
Hiermee maakt je de map Documents de aktieve map. Hierna hebben alle bestandscommandos betrekking op deze map. Je kunt als gevolg hiervan zien dat de prompt verandert en deze mapnaam toont. De prompt zou er dan zo uit kunnen zien:
[paul@deimos Documents]$
Met het commando cd zonder parameters wordt je in de homedirectory of thuismap gezet.
cd
Dit is hetzelfde als intikken van
cd ~
De ~ is een aanduiding voor de thuismap van de gebruiker. Met cd ~ keer je dus terug naar de thuismap, waar je begon.
Aktieve map tonen

Commandoregeluitbreiding

Dit is een functie van de shell om op de commandoregel het tikken van lange bestandsnamen makkelijker te maken. In het engels wordt dit "tab completion" genoemd en het is een functie van de Bash-shell. Na het intikken van een deel van een bestandsnaam , krijg je met de TAB-toets de volledige naam. Voorwaarde hierbij is wel dat de shel dit bestand herkent en het bestand uniek kan worden geidentificeerd met het reeds ingetikte deel van de naam. Het werkt zowel met bestanden als mappen.
Voorbeeld: je tikt het volgende in:
ls Doc<TAB>
Als laatste druk je op de TAB toets. De shell vult dit aan tot:
cd Documents/
Je hoeft alleen maar op <Enter> te drukken om het volledige commando uit te voeren. In de praktijk is dit een heel handige functie.

Jokers

Een belangrijk concept is de joker (engels: wildcard). Het komt in dagelijks gebruik vaak voor dat iemand een aantal bestanden wil wissen . Iemand moet dan bijvoorbeeld het volgende omslachtige commando intikken.
rm bestand1 bestand2 bestand3 bestand4 bestand5 bestand6
Om dit soort toestanden te voorkomen zijn er jokers bedacht. Je zou bijvoorbeeld het volgende ook kunnen typen om hetzelfde resultaat te krijgen als bovenstaand commando.
rm bestand[1-6]
Of je kunt ook dit commando gebruiken om alle bestanden te verwijderen, waarvan de naam begint met "bestand".
rm bestand*
Er zijn een aantal verschillende vormen van jokers.

Joker *

De joker * komt overeen met een of meer tekens. Bijvoorbeeld /etc/g* komt overeen met alle bestanden in de map /etc die beginnen met g, of een bestand dat alleen g heet.

Joker ?

De joker ? komt overeen met precies een teken. De naam mijnbestand? komt precies overeen met alle bestanden die beginnen met "mijnbestand" gevolgd door precies een teken. Dit teken mag een letter of cijfer zijn, of elk andere teken die je in bestandsnamen mag gebruiken.

Joker []

De joker [ en ] geven je de mogelijkheid om een lijst met tekens te geven, of een bereik van tekens. Enkele mogelijkheden:
Nog enkele handige commandos...

Toon bestand : cat

Met het commando cat kun je de inhoud van een bestand zichtbaar maken. Een voorbeeld:
cat /etc/profile

Reset terminal : reset

Met het commando kun je je terminal weer in orde brengen als het in de war is en je ziet alleen maar vreemde tekens. Dit kan bijvoorbeeld gebeuren door het cat-ten van binaire bestanden. Sommige bestanden bevatten codes , die door de terminal geinterpreteerd worden als stuurcode, die ervoor zorgen dat de terminal in een verkeerde toestand komt. Het typen van reset verhelpt dit, waardoor je weer leesbare tekst krijgt.

Een voorbeeld van vreemde tekens krijg je te zien wanneer je de inhoud van een binair bestand op het scherm toont, bijvoorbeeld wanneer je intikt
cat /bin/mkdir
Als je vreemde tekens te zien krijgt, tik dan (blind!)
reset
en alles is weer normaal

Echo commando : echo

Dit commando toont op de terminal wat je als parameters opgeeft. Op zichzelf heeft dit weinig nut, maar in scripts kan dit erg handig zijn. Script zijn geautomatiseerde reeksen van commandos in een bestand, die kunnen worden uitgevoerd door de naam te geven. Voorbeeld van Echo:
echo hallo wereld

Slot

Nu hebben we aardig wat basiscommandos van de shell behandeld. Deze commandos zijn vaak gebruikt voor allerlei dagelijke handelingen op bestand, en het is aan te raden om vertrouwd te raken met de gebruik en werking hiervan.