Mustand: sisu ei ole veel tehniliselt ega keeleliselt täielikult kontrollitud ega toimetatud.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki Failide kopeerimine ja sünkroonimine, mis kuulub osasse Osa III: Failid, võrk ja süsteemitöö.

Failide kopeerimine ja sünkroonimine

Selles peatükis võrdleme käske cp, scp, rsync, wget ja curl.

Loogika

Neid käske ühendab üks küsimus:

  • kas liigutad faile samas masinas
  • teise masinasse üle SSH
  • või tõmbad midagi veebist

Just selle järgi tasub valida tööriist:

  • cp kohalik koopia
  • scp kiire kopeerimine üle SSH
  • rsync nutikas sünkroniseerimine
  • curl ja wget veebist toomine

Kiirspikker

  • cp kopeerib lokaalseid faile
  • scp kopeerib üle SSH
  • rsync sünkroonib nutikalt
  • wget laeb alla URL-ist
  • curl teeb HTTP-päringuid ja allalaadimisi

Kõige sagedamini kasutatud lipud:

  • cp -R kopeeri kataloog rekursiivselt
  • cp -a GNU/Linuxis säilitab metaandmeid nii hästi kui võimalik
  • scp -r kopeeri kataloog üle võrgu
  • scp -p säilita faili ajad ja õigused nii hästi kui võimalik
  • rsync -a säilita struktuur ja metaandmed
  • rsync -v näita, mida tehakse
  • rsync -n tee dry-run
  • curl -O salvesta serveri failinimega
  • curl -L järgi ümbersuunamisi

Käivita need käsud


cp fail.txt koopia.txt
cp -R kaust kaust-koopia

scp fail.txt kasutaja@server:/tmp/
rsync -av kaust/ kasutaja@server:/tmp/kaust/

wget https://example.com/fail.txt
curl -O https://example.com/fail.txt

curl -L -O https://example.com/arhiiv.tar.gz
curl -I https://example.com/

Millal mida kasutada

  • cp kui allikas ja sihtkoht on samas masinas
  • scp kui tahad lihtsalt faili üle SSH saata
  • rsync kui sisu muutub ja tahad korduvat sünkroniseerimist
  • curl või wget kui allikas on veebis

Praktiliselt:

  • üks kiire koopia: cp
  • üks kiire ülekanne serverisse: scp
  • korduv sünkroonimine või varukoopia: rsync
  • URL-ist faili tõmbamine: curl -L -O

cp, scp, rsync omavahel

Need kolm näevad sarnased välja, aga loogika on erinev.

cp:


cp fail.txt koopia.txt
cp -R kaust kaust-koopia

scp:


scp fail.txt kasutaja@server:/tmp/
scp -r kaust kasutaja@server:/tmp/

rsync:


rsync -av kaust/ kasutaja@server:/tmp/kaust/
rsync -avn kaust/ kasutaja@server:/tmp/kaust/

rsync on eriti tähtis just sellepärast, et:

  • ta saadab ainult muutused
  • ta sobib korduvaks tööks
  • -n abil saab enne kontrollida, mida ta teeks

Kataloogipuu loogika

Kui kopeerid tervet kaustapuud, siis tasub alati läbi mõelda neli küsimust:

  1. kas allikas ja sihtkoht on samas masinas või üle võrgu
  2. kas teed ühekordset koopiat või korduvat sünkroonimist
  3. kas tahad säilitada õigused, ajatemplid ja lingid
  4. kas tahad pärast kontrollida, et tulemus sai õige

Just siin tuleb vahe eriti selgelt välja:

  • cp -R teeb lihtsa kohaliku koopia
  • scp -r saadab puu üle SSH, aga ei ole kõige mugavam korduva töö jaoks
  • rsync -av sobib kõige paremini korduvaks sünkroonimiseks

Oluline detail rsync juures:

  • rsync -av kaust/ siht/ tähendab tavaliselt “kopeeri kausta sisu”
  • rsync -av kaust siht/ tähendab sagedamini “kopeeri kaust ise sihtkausta sisse”

See kaldkriipsu detail on väike, aga muudab tulemust palju.

rsync ja lõpu kaldkriips

See on üks kõige olulisemaid rsync-i detaile.

Näide:


mkdir -p ~/tmp/rsync-naide/allikas/alam
mkdir -p ~/tmp/rsync-naide/siht
printf 'tere\n' > ~/tmp/rsync-naide/allikas/alam/fail.txt

Nüüd võrdle kahte käsku:


rsync -avn ~/tmp/rsync-naide/allikas ~/tmp/rsync-naide/siht/
rsync -avn ~/tmp/rsync-naide/allikas/ ~/tmp/rsync-naide/siht/

Loogika:

  • ilma lõpu kaldkriipsuta kopeeritakse tavaliselt kaust allikas ise sihtkoha sisse
  • lõpu kaldkriipsuga kopeeritakse kausta allikas sisu sihtkohta

Just sellepärast tasub enne päris sünkroonimist teha:


rsync -avn allikas/ siht/

-n ehk --dry-run aitab enne näha, mida käsk teeks.

Metaandmed: õigused, omanikud, ajatemplid

Suure puu puhul ei ole tähtis ainult faili sisu. Sageli on tähtsad ka:

  • faili õigused
  • omanik ja grupp
  • ajatemplid
  • sümboolsed lingid

Rusikareeglid:

  • cp -R keskendub eelkõige sisule ja struktuurile
  • cp -a GNU/Linuxis püüab säilitada metaandmeid võimalikult terviklikult
  • scp -p säilitab ajatemplid ja õigused paremini kui paljas scp
  • rsync -a on tavaliselt kõige mõistlikum valik, kui metaandmed loevad

Omaniku kohta tasub meeles pidada:

  • tavaline kasutaja ei saa üldjuhul taastada suvalise teise kasutaja omandit
  • kaugserveris sõltub lõplik omanik sageli sellest, mis kasutajana sa sisse logisid
  • seetõttu võib “sisu sama, aga omanik teine” olla täiesti ootuspärane tulemus

curl ja wget

Mõlemad oskavad faile alla laadida, kuid rõhuasetus on veidi erinev:

  • wget on klassikaline allalaadija
  • curl on üldisem HTTP-klient ja sobib hästi ka API-dega rääkimiseks

Kui tahad veebilehte tekstina lugeda, linke kokku koguda või teha väikest crawl'i, siis vaata edasi peatükki Veebist sisu toomine ja tekstivaade: curl, wget, lynx.

Levinud curl võtmed:

  • -O salvesta serveri failinimega
  • -o fail salvesta kindla nimega
  • -L järgi ümbersuunamisi
  • -I küsi ainult päised

Näited:


curl -o naide.html https://example.com/
curl -L -O https://example.com/fail.txt
curl -I https://example.com/

Need käsud on väga kasulikud ka selleks, et kontrollida, kas URL üldse vastab ootuspäraselt.

Kõige tavalisemad päriselu näited

Kopeeri projektikaust varuks:


rsync -av projekt/ projekt-varu/

Saada üks fail serverisse:


scp backup.sql kasutaja@server:/tmp/

Tõmba arhiiv veebist:


curl -L -O https://example.com/arhiiv.tar.gz

Kontrolli enne päris sünkroniseerimist, mida rsync teeks:


rsync -avn projekt/ server:/srv/projekt/

Kui teed suure või tundliku sünkroonimise, siis --dry-run võiks olla peaaegu automaatne esimene samm.

Minitest

  1. Kopeeri üks fail uue nime alla.
  2. Tee kaustast rekursiivne koopia.
  3. Uuri rsync --help abil, mida teeb võti -a.
  4. Tee curl -I abil päring mõnele veebiaadressile ja vaata päiseid.