Tips en Trucs 2019

Reservekopieën maken met cp opdrachten

Werken in een grafische omgeving met de muis is een wonderlijke ervaring. Maar ook het uitvoeren van opdrachten in de terminal heeft zo zijn voordelen. Zelfs gebruikers die halsstarrig de terminal vermijden, kunnen voordeel halen uit de rijke wereld die terminal opdrachten te bieden hebben.

De meeste beginnende terminal gebruikers beginnen met opdrachten zoals cp om bestanden en mappen te kopiëren. De meest eenvoudige cp opdracht ziet er als volgt uit:

cp bronbestand doelbestand

Dit kopieert een bestand met de naam bronbestand naar het bestand met de naam doelbestand. Bestaat het doelbestand nog niet, dan wordt het aangemaakt, anders wordt het overschreven. Een praktisch voorbeeld is het maken van een reservekopie van een bestaand bestand:

dany@pindabook:~> cp .bashrc .bashrc.bak

Zo kan je nu veilig het bestand .bashrc aanpassen, mocht er iets fout gaan, zet je de reservekopie terug met de opdracht:

dany@pindabook:~> cp .bashrc.bak .bashrc

En alles is hersteld en werkt weer.

Een map met reservekopieën bijwerken

Iedereen heeft wel een verzameling bestanden die belangrijk zijn en waarvan je best een reservekopie bijhoudt. Liefst op een extern apparaat of een andere computer. Mijn map Afbeeldingen bevat een map Achtergronden waarvan ik een reservekopie wil maken op een aangekoppelde USB Stick in de map Backup. De USB stick is gekoppeld aan de map /run/media/dany/Dany\ Pinoy/. Om spaties in mapnamen op te nemen, laat je ze voorafgaan door een backslash.

dany@pindabook:~> cp -r Afbeeldingen/Achtergronden /run/media/dany/Dany\ Pinoy/Backup

Deze opdracht kopieert de map Achtergrond en de inhoud ervan naar de map Backup op de USB stick. Als alles goed verloopt, krijg je geen meldingen. Geen nieuws is dus goed nieuws. De -r (--recursive) optie zorgt dat niet alleen de map, maar ook zijn inhoud wordt gekopieerd. Wil je toch wat feedback over het verloop van de opdracht, gebruik dan de -v (--verbose) optie.

Na een tijd heb je enkele nieuwe achtergrondafbeeldingen in de map Afbeeldingen/Achtergronden geplaatst. Om enkel de nieuwe afbeeldingen aan de reservekopie toe te voegen, gebruiken we de -u (--update) optie.

dany@pindabook:~> cp -r -u -v Afbeeldingen/Achtergronden /run/media/dany/Dany\ Pinoy/Backup
'Afbeeldingen/Achtergronden/canada_banff_national_park_mountains_fog_grass_108652_1920x1080.jpg' -> '/run/media/dany/Dany Pinoy/Backup/Achtergronden/canada_banff_national_park_mountains_fog_grass_108652_1920x1080.jpg'
'Afbeeldingen/Achtergronden/AustralianSeaLionCarnac_ROW7072663026_1920x1080.jpg' -> '/run/media/dany/Dany Pinoy/Backup/Achtergronden/AustralianSeaLionCarnac_ROW7072663026_1920x1080.jpg'
'Afbeeldingen/Achtergronden/building_trees_mountain_hill_autumn_110247_1920x1080.jpg' -> '/run/media/dany/Dany Pinoy/Backup/Achtergronden/building_trees_mountain_hill_autumn_110247_1920x1080.jpg'

Door de -v optie worden de bestanden die gekopieerd werden weergegeven.

Reservekopieën met versiebeheer

Soms is het handig om verschillende versies van bestanden bij te houden. Zeker als bestanden evolueren. Ontwikkelaars zoals programmeurs kunnen zo oude versies bewaren voor mocht het fout gaan. Maar ook mensen die met teksten en andere bestandssoorten werken kunnen profiteren van de voordelen van versiebeheer, namelijk terugkeren in de tijd. Een voorbeeld in de map Test.

dany@pindabook:~> mkdir Test
dany@pindabook:~> cd Test/
dany@pindabook:~/Test> echo "print 'Programmeren met Python'" > test1.py
dany@pindabook:~/Test> python test1.py 
Programmeren met Python

Met de eerste opdracht maken we de Testmap aan. Die we met de tweede opdracht openen. Met de derde opdracht maken we een eenvoudig python programma die we met de vierde opdracht uitvoeren.

Om een reservekopie met versiebeheer te maken, start je de volgende opdracht:

dany@pindabook:~/Test> cp --force --backup=numbered test1.py test1.py
dany@pindabook:~/Test> ls -l
totaal 8
-rw-r--r-- 1 dany users 32  1 jun 14:34 test1.py
-rw-r--r-- 1 dany users 32  1 jun 14:38 test1.py.~1~

De eerste opdracht maakt de reservekopie met versiebeheer en de tweede opdracht toont de inhoud van de Test map. De --backup=numbered optie zorgt dat opeenvolgende reservekopieën telkens voorzien worden van volgnummers ~1~, ~2~, enz. Dit zal echter enkel uitgevoerd worden indien het bronbestand geëvolueerd is. M.a.w. indien we de volgende opdracht op een onveranderd bestand uitvoert, krijg je de volgende melding:

dany@pindabook:~/Test> cp --backup=numbered test1.py test1.py
cp: 'test1.py' en 'test1.py' zijn hetzelfde bestand

Vandaar de --force optie in de eerste opdracht om de kopie-opdracht toch uit te voeren (te forceren). Voegen we aan het python programma een regel toe, testen het nieuwe programma en maken een nieuwe reservekopie met versiebeheer:

dany@pindabook:~/Test> echo "print 'Ik was hier'" >> test1.py
dany@pindabook:~/Test> python test1.py 
Programmeren met Python
Ik was hier
dany@pindabook:~/Test> cp --force --backup=numbered test1.py test1.py
dany@pindabook:~/Test> ls -l
totaal 12
-rw-r--r-- 1 dany users 52  1 jun 14:54 test1.py
-rw-r--r-- 1 dany users 32  1 jun 14:51 test1.py.~1~
-rw-r--r-- 1 dany users 52  1 jun 14:54 test1.py.~2~

Zoals je merkt wordt de oude reservekopie versie niet overschreven, maar blijft deze bestaan. De Testmap verwijder je met de volgende opdrachten:

dany@pindabook:~/Test> cd ..
dany@pindabook:~> rm -r Test
cp

En verder

Wil je meer mogelijkheden van cp of andere opdrachten ontdekken, gebruik dan de ingebouwde help functies van de opdrachten (meestal de optie -h en/of --help) en/of de uitgebreidere man en info pagina's (man of info opdracht met als optie de opdracht waarvan je de handleiding (man) of informatie (info) wilt opvragen.

dany@pindabook:~> cp --help
Gebruik:  cp [OPTIE...] [-T] BRON BESTEMMING
     of:  cp [OPTIE...] BRON... MAP
     of:  cp [OPTIE...] -t MAP BRON...

Kopieert een BRON naar een BESTEMMING, of BRON(nen) naar een MAP.

(Een verplicht argument bij een lange optie geldt ook voor de korte vorm.)
  -a, --archive             hetzelfde als '-dR --preserve=all'
      --attributes-only     alleen eigenschappen kopiëren, niet bestandsinhoud
      --backup[=METHODE]    van elk bestemmingsbestand een reservekopie maken
  -b                        als '--backup', maar accepteert geen argument
      --copy-contents       de inhoud van speciale bestanden kopiëren als er
                              recursief gekopieerd wordt
  -d                        hetzelfde als '--no-dereference --preserve=links'
  -f, --force               als bestaand bestemmingsbestand niet geopend kan
                              worden, het verwijderen en het opnieuw proberen
                              (wordt genegeerd als ook optie '-n' gegeven is)
  -i, --interactive         voor overschrijven om toestemming vragen
                              (gaat boven een eerdere optie '-n')
  -H                        gegeven symbolische koppelingen in BRON volgen
  -l, --link                harde koppelingen maken in plaats van kopieën
  -L, --dereference         symbolische koppelingen in BRON altijd volgen
  -n, --no-clobber          bestaande bestanden niet overschrijven
                              (gaat boven een eerdere optie '-i')
  -P, --no-dereference      geen symbolische koppelingen in BRON volgen
  -p                        hetzelfde als '--preserve=mode,ownership,timestamps'
      --preserve[=LIJST]    de genoemde eigenschappen indien mogelijk behouden
                              (standaard zijn: mode,ownership,timestamps --
                              oftewel modus, eigenaar en tijdsstempels; verdere
                              mogelijkheden zijn: context, links, xattr, all)
      --no-preserve=LIJST   de genoemde eigenschappen juist niet behouden
      --parents             volledige naam gebruiken van bronbestand onder MAP
  -R, -r, --recursive          mappen recursief kopiëren
      --reflink[=WHEN]         kloon/CoW-kopieën controleren; zie hieronder
      --remove-destination     elke bestaande doelmap verwijderen voordat
                                 u deze probeert te openen (anders dan '--force')
      --sparse=WANNEER          het aanmaken van bestanden met gaten
                                  controleren; zie hieronder
      --strip-trailing-slashes  schuine strepen achter elk BRON-argument
                                  verwijderen
  -s, --symbolic-link           symbolische koppeling maken i.p.v. kopie
  -S, --suffix=SUFFIX           te gebruiken achtervoegsel voor reservekopieën
  -t, --target-directory=MAP    alle BRON-argumenten naar MAP kopiëren
  -T, --no-target-directory     BESTEMMING behandelen als een normaal bestand
  -u, --update             alleen kopiëren als BRON nieuwer is dan bestemming
                             of wanneer dit bestand niet bestaat
  -v, --verbose            tonen wat er gedaan wordt
  -x, --one-file-system    binnen dit bestandssysteem blijven
  -Z                       de SELinux-beveiligingscontext van doelbestand op
                             standaard instellen
      --context[=CNTXT]    de beveiligingscontext van doelbestand op standaard
                             instellen (of op CNTXT indien gegeven)
      --help      deze hulptekst tonen en stoppen
      --version   programmaversie tonen en stoppen

BRONbestanden met gaten worden standaard via een ruwe regel gedetecteerd,
waarna de overeenkomstige BESTEMMINGsbestanden ook met gaten worden gemaakt.
Dit is het gedrag dat geselecteerd wordt met '--sparse=auto'.  Specificeer
'--sparse=always' om een BESTEMMINGsbestand met gaten te maken wanneer het
BRONbestand een voldoend lange reeks nul-bytes bevat.  Gebruik '--sparse=never'
om het aanmaken van bestanden met gaten te voorkomen.

Als '--reflink[=always]' is gespecificeerd, doe dan een lichtgewicht kopieeropdracht,
waar de datablokken alleen worden gekopieerd als ze zijn gewijzigd.  Als dat niet
mogelijk is dan mislukt het kopiëren of als --reflink=auto is gespecificeerd, wordt
teruggevallen op standaard kopiëren.

Het reservekopie-achtervoegsel is '~', tenzij anders ingesteld met '--suffix'
of via omgevingsvariable SIMPLE_BACKUP_SUFFIX.  Het versiebeheer kan worden
ingesteld met de optie '--backup' of via omgevingsvariabele VERSION_CONTROL;
dit zijn de mogelijke waarden (methodes):

  none, off        nooit reservekopieën maken (zelfs niet met '--backup')
  numbered, t      genummerde reservekopieën maken
  existing, nil    genummerde reserves maken als er al zijn, anders simpele
  simple, never    altijd simpele reservekopieën maken

Speciaal geval: 'cp' maakt een reservekopie van BRON als de opties
'--force' en '--backup' gegeven zijn én BRON en BESTEMMING dezelfde
naam van een bestaand gewoon bestand zijn.

Online hulp bij GNU coreutils: 
Report cp translation bugs to 
Volledige documentatie is beschikbaar op: 
of lokaal via: info '(coreutils) cp invocation'