7.4 Bestanden kopiëren met scp
Hier bouw je op verder: Inloggen met ssh en Kopiëren met cp
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
Met cp kopieer je op één computer. Met scp (secure copy) kopieer je van de ene computer naar de andere, over ssh Secure shell: inloggen op een andere computer, waarbij je in je eigen terminal typt en de commando's daar draaien.Uitgelegd in 7.2 Inloggen op een andere computerAlle begrippen. Je oefent weer op localhost, met de ssh-dienst Een programma dat op de achtergrond blijft draaien, ook als niemand is ingelogd, en na een herstart vanzelf weer start.Uitgelegd in 6.4 DienstenAlle begrippen uit 7.2 aan.
echo hoi > notities.txt
scp notities.txt localhost:kopie.txt
Het lijkt op cp: eerst wat je kopieert, dan waar het heen gaat. Nieuw is de computer met een dubbele punt ervoor: localhost:kopie.txt betekent het bestand kopie.txt in je thuismap Je eigen map, /home/student in de oefenterminal; de prompt kort hem af tot ~.Uitgelegd in 1.1 Je eerste commando'sAlle begrippen op localhost. Op een echte server Een computer of programma dat iets aanbiedt aan andere computers, zoals een website; een servercomputer staat meestal zonder scherm in een datacenter.Uitgelegd in 7.2 Inloggen op een andere computerAlle begrippen staat er bijvoorbeeld sam@server.voorbeeld.nl:kopie.txt.
Andersom haal je iets op, met de server vooraan. De punt is: hier, in deze map:
scp localhost:kopie.txt .
Een hele map
Net als bij cp heb je voor een map -r nodig:
mkdir proef
echo a > proef/a.txt
echo b > proef/b.txt
scp -r proef localhost:kopiemap
Voorspel
Je typt dit, met een spatie maar zonder dubbele punt:
scp notities.txt localhost
Waar komt het bestand terecht?
Klik hier als je het hebt geprobeerd
Er komt geen foutmelding. Kijk met ls: er staat een bestand localhost in je eigen map. Zonder dubbele punt is localhost geen computer maar een bestandsnaam, en doet scp hetzelfde als cp. Gooi het weg met rm localhost.
Opdracht 7.4.a: alleen de tekstbestanden
Haal met één scp alle bestanden die op .txt eindigen uit de map proef op localhost naar een nieuwe map hier.
Klik hier voor een tip
Een * werkt, zoals in 2.4. Maar wie vult hem in: jouw shell Het programma dat leest wat je typt en daarna het commando start; op Ubuntu heet hij bash.Uitgelegd in 2.4 JokertekensAlle begrippen, of de andere computer? Zet er aanhalingstekens omheen, dan gaat hij ongewijzigd mee.
Klik hier voor het antwoord
mkdir hier
scp 'localhost:proef/*.txt' hier/
ls hier
a.txt en b.txt staan in hier. Zonder aanhalingstekens vult jouw shell de * in met bestanden van je eigen computer, als die er zijn, en dan vraagt scp iets anders op dan je bedoelde.
Er gaat iets mis
not a regular file
scp: local "proef" is not a regular file
scp: failed to upload file proef to kopiemap
Oorzaak: je kopieert een map zonder -r.
Oplossing: zet -r erbij: scp -r proef localhost:kopiemap.
No such file or directory
scp: bestaatniet.txt: No such file or directory
Oorzaak: op de andere computer staat geen bestand met die naam, of niet in je thuismap. Een pad De weg naar een bestand of map, met een / tussen de mappen, zoals /home/student/notities.txt.Uitgelegd in 1.2 Door mappen lopenAlle begrippen na de dubbele punt begint in je thuismap op die computer.
Oplossing: log in met ssh en kijk met ls waar het staat.
Permission denied
scp: dest open "/etc/notities.txt": Permission denied
scp: failed to upload file notities.txt to /etc/
Oorzaak: je mag in die map op de andere computer niet schrijven. scp kent geen sudo.
Oplossing: kopieer naar je thuismap, log in met ssh, en verplaats het daar met sudo mv.
Door naar 7.5 Een tunnel met ssh.