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:
cpkohalik koopiascpkiire kopeerimine üle SSHrsyncnutikas sünkroniseeriminecurljawgetveebist toomine
Kiirspikker
cpkopeerib lokaalseid failescpkopeerib üle SSHrsyncsünkroonib nutikaltwgetlaeb alla URL-istcurlteeb HTTP-päringuid ja allalaadimisi
Kõige sagedamini kasutatud lipud:
cp -Rkopeeri kataloog rekursiivseltcp -aGNU/Linuxis säilitab metaandmeid nii hästi kui võimalikscp -rkopeeri kataloog üle võrguscp -psäilita faili ajad ja õigused nii hästi kui võimalikrsync -asäilita struktuur ja metaandmedrsync -vnäita, mida tehaksersync -ntee dry-runcurl -Osalvesta serveri failinimegacurl -Ljä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
cpkui allikas ja sihtkoht on samas masinasscpkui tahad lihtsalt faili üle SSH saatarsynckui sisu muutub ja tahad korduvat sünkroniseerimistcurlvõiwgetkui 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
-nabil saab enne kontrollida, mida ta teeks
Kataloogipuu loogika
Kui kopeerid tervet kaustapuud, siis tasub alati läbi mõelda neli küsimust:
- kas allikas ja sihtkoht on samas masinas või üle võrgu
- kas teed ühekordset koopiat või korduvat sünkroonimist
- kas tahad säilitada õigused, ajatemplid ja lingid
- kas tahad pärast kontrollida, et tulemus sai õige
Just siin tuleb vahe eriti selgelt välja:
cp -Rteeb lihtsa kohaliku koopiascp -rsaadab puu üle SSH, aga ei ole kõige mugavam korduva töö jaoksrsync -avsobib 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
allikasise sihtkoha sisse - lõpu kaldkriipsuga kopeeritakse kausta
allikassisu 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 -Rkeskendub eelkõige sisule ja struktuurilecp -aGNU/Linuxis püüab säilitada metaandmeid võimalikult terviklikultscp -psäilitab ajatemplid ja õigused paremini kui paljasscprsync -aon 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:
wgeton klassikaline allalaadijacurlon ü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:
-Osalvesta serveri failinimega-o failsalvesta kindla nimega-Ljärgi ümbersuunamisi-Ikü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
- Kopeeri üks fail uue nime alla.
- Tee kaustast rekursiivne koopia.
- Uuri
rsync --helpabil, mida teeb võti-a. - Tee
curl -Iabil päring mõnele veebiaadressile ja vaata päiseid.