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:
- -a : laat alle bestanden zien
- -l : laat een lange lijst zien
- --help : toont beknopte help voor het commando
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:
- myfile[12] komt
overeen met met myfile1
en myfile2 .
- [Cc]hange[Ll]og komt
overeen met ChangeLog , changelog , Changelog en changeLog .
- ls /etc/[0-9]* geeft
een lijst met alle bestanden in /etc
die beginnen met een nummer.
- ls /tmp[A-Za-z]*
geeft een lijst met alle bestanden in /tmp die begint met een hoofd-
of kleine letter.
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.