Al deze fantastische directory's zijn erg fraai, maar helpen niet echt tenzij je ergens een plekje hebt om je data op te slaan. De Unix Goden erkenden dit probleem, en corrigeerden dit door de gebruikers bestanden te geven.
In de volgende paar hoofdstukken zullen we meer leren over het aanmaken en wijzigen van bestanden.
De primaire opdrachten voor het manipuleren van bestanden onder Unix zijn cp, mv en rm. Ze staan respectievelijk voor copy, move, remove,
cp [-i] bron doel
cp [-i]
bestand1 bestand2 ... bestandN
doeldirectory
![]() | Wees voorzichtig met cp als je niet zoveel diskruimte hebt. Niemand wenst de melding "Disk full" te zien te krijgen bij het werken aan belangrijke bestanden. Met cp kun je ook zonder dat je een waarschuwing krijgt bestaande bestanden overschrijven. Daar kom ik later nog op terug. |
We zullen het eerst gaan hebben over de eerste regel van het opdrachtensjabloon.
De eerste parameter van cp is het te kopiëren bestand, de tweede is waar het naartoe te kopiëren. Je kunt het of kopiëren naar een bestand met een andere naam, of naar een andere directory. Laten we eens wat voorbeelden proberen:
/home/larry# ls -F /etc/passwd /etc/passwd /home/larry# cp /etc/passwd . /home/larry# ls -F passwd /home/larry# cp passwd frog /home/larry# ls -F frog passwd /home/larry# |
De eerste cp opdracht die ik uitvoerde nam het bestand /etc/passwd , waarin de namen van alle gebruikers op het Unix-systeem met bijbehorende (versleutelde) wachtwoorden staan, en kopieerde dit naar mijn homedirectory. cp houdt het bronbestand intact, het verwijdert dit niet, dus ik deed niets dat schade aan het systeem kon berokkenen. Dus nu bestaan er twee kopieën van /etc/passwd op mijn systeem, allebei met de naam passwd, maar één daarvan staat in de directory /etc en de ander in /home/larry.
Vervolgens creëerde ik met de opdracht cp passwd frog een derde kopie van /etc/passwd. De drie kopieën zijn nu: /etc/passwd, /home/larry/passwd en /home/larry/frog. De inhoud van deze drie bestanden is hetzelfde, ook al zijn de namen niet eender.
cp kan bestanden naar directory's kopiëren als de eerste parameter een bestand is en de tweede parameter een directory. In dit geval blijft de korte naam van het bestand hetzelfde.
Je kunt met cp een bestand kopiëren en tegelijkertijd de naam van het bestand wijzigen als beide parameters bestandsnamen zijn. Hier schuilt een gevaar van cp. Bij het intikken van cp /etc/passwd /etc/group, maakt cp normaal gesproken een nieuw bestand aan met een inhoud die identiek is aan dat van passwd en het zou dit bestand de naam group geven. Als het bestand /etc/group echter reeds bestond, dan zou cp het oude bestand verwijderen zonder je de kans te geven het te bewaren! (Er wordt zelfs geen melding afgedrukt je eraan herinnerend dat je een bestand gaat verwijderen door eroverheen te kopiëren.) Laten we eens een ander voorbeeld van cp bekijken:
/home/larry# ls -F frog passwd /home/larry# mkdir passwd_versie /home/larry# cp frog passwd passwd_versie /home/larry# ls -F frog passwd passwd_versie/ /home/larry# ls -F passwd_versie frog passwd /home/larry# |
Hoe gebruikte ik nu zojuist de opdracht cp? Klaarblijkelijk accepteert cp meer dan twee parameters. (Dit is de tweede regel in het opdrachtensjabloon). Wat de bovenstaande opdracht deed is alle bestanden (frog en passwd) kopiëren en ze in de directory passwd_versie plaatsen. In feite accepteert cp elk aantal parameters, en interpreteert het daarbij de eerste n-1 parameters als te kopiëren bestanden en de ne parameter als de directory waarnaar te kopiëren.
![]() | Je kunt bestanden niet hernoemen wanneer je meerdere bestanden tegelijkertijd kopieert---ze behouden altijd hun korte naam. Dit leidt tot een interessante vraag. Wat als ik cp frog passwd toad typ, waarbij zowel frog als passwd al bestaan en toad geen directory is? Probeer het uit. |
rm [-i] bestand1 bestand2 ... bestandN
Nu we hebben geleerd hoe met cp miljoenen bestanden aan te maken (en geloof me, je zult spoedig nieuwe manieren ontdekken om meer bestanden aan te maken), kan het zinvol zijn te leren hoe ze te verwijderen. In feite is het heel simpel: de opdracht die je zoekt is rm, en het werkt precies zoals je zou verwachten: elk bestand opgegeven als parameter van rm wordt verwijderd.Bijvoorbeeld:
/home/larry# ls -F frog passwd passwd_versie/ /home/larry# rm frog toad passwd rm: toad: No such file or directory /home/larry# ls -F passwd_versie/ /home/larry# |
Zoals je ziet is rm uiterst onvriendelijk. Er wordt je helemaal niet om een bevestiging gevraagd, en bovenal zal het ook nog eens gegevens verwijderen als de gehele opdrachtregel niet juist was. Dit zou weleens heel gevaarlijk kunnen zijn. Neem het verschil tussen deze twee opdrachten:
/home/larry# ls -F toad frog/ /home/larry# ls -F frog toad /home/larry# rm frog/toad /home/larry# |
en deze
/home/larry# rm frog toad rm: frog is a directory /home/larry# ls -F frog/ /home/larry# |
![]() | Zoals je kunt zien maakt één teken in de uitkomst van de opdracht een wereld van verschil. Het is van groot belang dat je de opdrachtregel controleert voordat je met return de opdracht bevestigt! |
mv [-i] oude-naam nieuwe-naam
mv [-i] bestand1 bestand2 ... bestandN nieuwe-directory
/home/larry# cp /etc/passwd . /home/larry# ls -F passwd /home/larry# mv passwd frog /home/larry# ls -F frog /home/larry# mkdir report /home/larry# mv frog report /home/larry# ls -F report/ /home/larry# ls -F report frog /home/larry# |
Zoals je kunt zien, zal mv een bestand hernoemen als de tweede parameter een bestand is. Als de tweede parameter een directory is, zal mv het bestand naar de nieuwe directory verplaatsen, de korte naam hetzelfde behoudend.
![]() | Wees zorgvuldig bij het gebruik van mv. Het controleert niet of het bestand reeds voorkomt, en elk oud bestand dat in de weg staat zal worden verwijderd. Als ik bijvoorbeeld reeds een bestand met de naam frog in mijn directory report heb, dan wordt met de opdracht mv frog report het bestand ~/report/frog verwijderd en wordt het vervangen door ~/frog. |
In feite bestaat er een manier om te zorgen dat rm, cp en mv om bevestiging vragen alvorens bestanden te verwijderen. Deze drie opdrachten accepteren allen de optie -i, wat maakt dat ze de gebruiker vragen om een bevestiging alvorens een bestand wordt verwijderd. Als je gebruik maakt van een alias, dan kun je de shell automatisch een rm -i laten uitvoeren wanneer je zelf rm invoert. Je leert hierover later meer in de paragraaf Aliassen in Hoofdstuk 10.
| [1] | Het sjaboon van cp bestaat uit twee regels omdat de betekenis van de tweede parameter afhankelijk van het aantal parameters anders kan zijn. |