Kako učinkovito uporabljati ukaz cp v Linuxu [14 primerov]


Na kratko: V tem preprostem vodniku bomo razpravljali o nekaterih praktičnih primerih ukaza cp. Po upoštevanju tega vodnika bodo uporabniki lahko preprosto kopirali datoteke in imenike v Linuxu z vmesnikom ukazne vrstice.

Kot uporabniki Linuxa sodelujemo s kopiranjem datotek in imenikov. Vsekakor lahko za izvedbo operacije kopiranja uporabimo grafični upravitelj datotek. Vendar pa večina uporabnikov Linuxa raje uporablja ukaz cp zaradi njegove preprostosti in bogate funkcionalnosti.

V tem začetnikom prijaznem vodniku bomo spoznali ukaz cp. Kot že ime pove, se ukaz cp uporablja za kopiranje datotek in imenikov na dani poti.

V tem vodniku bomo razumeli uporabo ukaza cp s praktičnimi primeri, ki jih je mogoče uporabljati vsakodnevno.

Pa začnimo.

Kazalo

Sintaksa ukaza Cp

Sintaksa ukaza cp je enaka drugim ukazom Linuxa. Na visoki ravni je razdeljen na dva dela – možnosti in argumente:

$ cp [OPTIONS] <SOURCE> <DEST>
$ cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>

V zgornji sintaksi oglati oklepaji ([]) predstavljajo neobvezne argumente, medtem ko oglati oklepaji (<>) predstavljajo obvezne argumente.

1. Kako kopirati datoteko v Linuxu

Ena od osnovnih uporab ukaza cp je kopiranje datoteke v trenutni imenik. Večino časa uporabniki izvedejo to operacijo, da naredijo varnostno kopijo pomembne konfiguracije.

Na primer, pogosto ustvarimo varnostno kopijo datoteke /etc/ssh/sshd_config, preden posodobimo konfiguracijo SSH.

Da bi razumeli uporabo, ustvarimo preprosto datoteko:

$ touch file-1.txt

Nato ustvarite kopijo datoteke z naslednjim ukazom:

$ cp file-1.txt file-2.txt

2. Pokaži napredek ukaza za kopiranje

V prejšnjem primeru smo z ukazom ls preverili, ali je kopiranje datoteke uspelo ali ne. Vendar pa ni smiselno uporabiti še enega ukaza samo za preverjanje rezultatov prejšnjih ukazov.

V takih primerih lahko omogočimo podrobni način z možnostjo -v, ki zagotavlja diagnostiko za vsako obdelano datoteko.

Naredimo kopijo datoteke file-1.txt z naslednjim ukazom:

$ cp -v file-1.txt file-3.txt

V zgornjem izhodu puščica predstavlja datoteko, ki se kopira. Levi stranski argument je izvorna datoteka, desni stranski argument pa ciljna datoteka.

3. Kako kopirati več datotek v imenik

Doslej smo delali samo z eno datoteko in trenutnim delovnim imenikom. Vendar pa moramo v realnem produkcijskem okolju delati z velikim številom datotek. Eden od običajnih primerov uporabe v takih okoljih je kopiranje več datotek v en sam imenik.

Očitno lahko ukaz cp izvedemo večkrat, da to dosežemo, vendar to ne bo najbolj učinkovit način. Za učinkovito izvedbo takšne operacije lahko uporabimo alternativno sintakso ukaza cp.

Torej, najprej ustvarite nov imenik z imenom dir-1:

$ mkdir dir-1

Zdaj pa kopirajmo vse tri datoteke v imenik dir-1 z enim samim ukazom:

$ cp -v file-1.txt file-2.txt file-3.txt dir-1

Zgornji izhod kaže, da so bile vse datoteke kopirane v imenik dir-1. Prav tako je pomembno upoštevati, da mora biti za uporabo te alternativne sintakse imenik že prisoten in mora biti zadnji argument ukaza.

4. Kako se izogniti prepisovanju datoteke

Privzeto ukaz cp zamenja ciljno datoteko, kar pomeni, da bo prepisal datoteko, če obstaja na cilju z istim imenom. Vendar pa lahko to privzeto vedenje onemogočimo z možnostjo -n.

Da bi to razumeli, poskusimo prepisati obstoječo datoteko:

$ cp -n -v file-1.txt file-2.txt

V tem primeru smo uporabili možnost -v za ponazoritev, da datoteka file-2.txt ni bila prepisana.

5. Kako prepisati datoteko s potrditvijo

V prejšnjem primeru smo videli, kako se izogniti prepisovanju ciljne datoteke. Vendar pa včasih želimo prepisati cilj datoteke na varnejši način.

V takih primerih lahko uporabimo možnost -i ukaza, da naredimo operacijo kopiranja interaktivno. Ta možnost prikaže opozorilno sporočilo in čaka na potrditev uporabnika, preden prepiše datoteko.

Za ponazoritev tega poskusimo prepisati obstoječo datoteko:

$ cp -i file-1.txt file-2.txt

cp: overwrite 'file-2.txt'?

Kot lahko vidimo, ukaz čaka na potrditev. Tako kot druge ukaze Linuxa lahko uporabimo y za nadaljevanje ali n za prekinitev operacije.

To privzeto neinteraktivno vedenje ukaza cp ni zelo varno. Obstaja možnost, da uporabnik pomotoma prepiše pomembno konfiguracijo. Zato nekatere distribucije Linuxa privzeto vsiljujejo interaktivno vedenje z ukazom alias:

$ alias cp='cp -i'

6. Prepiši datoteko samo, če je vir novejši

V prejšnjem primeru smo videli, kako uporabljati interaktivni način. Včasih pa lahko uporabnik nenamerno prepiše novejšo datoteko.

Da bi se izognili takim primerom, ki so nagnjeni k napakam, lahko uporabimo možnost -u, ki poskuša kopirati samo, če je izvor novejši od cilja ali če datoteke ni na cilju.

Najprej posodobite časovni žig izvorne datoteke:

$ touch -t 10101010 file-1.txt
$ ls -l file-1.txt

V zgornjem primeru smo uporabili možnost -t ukaza touch za nastavitev časovnega žiga datoteke na 10. oktober 2010.

Nato posodobimo časovni žig ciljne datoteke na trenutni čas:

$ touch file-2.txt

Zdaj pa poskusimo izvesti kopiranje z možnostjo -u:

$ cp -u -v file-1.txt file-2.txt

Tukaj lahko vidimo, da operacija kopiranja ni bila izvedena, ker je ciljna datoteka novejša od vira.

Na koncu zamenjajmo izvorni in ciljni argument in izvedimo operacijo kopiranja:

$ cp -u -v file-2.txt file-1.txt

V zgornjem izhodu lahko opazimo, da je operacija kopiranja uspela, ker je izvorna datoteka novejša od ciljne.

7. Kako varnostno kopirati datoteko pred prepisovanjem

Ukazu cp lahko naročimo, naj naredi varnostno kopijo ciljne datoteke, preden jo prepiše. Da bi to dosegli, lahko uporabimo možnost --backup, ki izvaja samodejno varnostno kopiranje.

$ cp --backup=numbered -v file-1.txt file-2.txt

V tem primeru smo uporabili politiko oštevilčenega varnostnega kopiranja. Ta pravilnik uporablja inkrementalne številke v imenih datotek varnostne kopije.

Da bi to razumeli, izvedimo isti ukaz večkrat in opazujmo izhod:

$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt
$ cp --backup=numbered -v file-1.txt file-2.txt

8. Kako prisilno kopirati datoteko za prepis

V prejšnjih nekaj primerih smo videli, kako datoteko prepisati na varnejši način. V nekaterih redkih primerih pa je treba datoteko prepisati. Vendar pa ni zagotovila, da bo operacija vsakič uspela.

Operacija kopiranja na primer ne bo uspela, če ciljna datoteka nima dovoljenj za pisanje. Naj to ponazorimo s primerom.

Najprej spremenite dovoljenja ciljne datoteke:

$ chmod 444 file-2.txt
$ ls -l file-2.txt

Zdaj pa poskusimo prepisati datoteko file-2.txt:

$ cp file-1.txt file-2.txt

V zgornjem izhodu lahko vidimo, da ukaz ni uspel z napako zavrnjenega dovoljenja.

Za premagovanje te omejitve lahko uporabimo možnost -f, ki izbriše ciljne datoteke in poskusi kopirati, če ciljne datoteke ni mogoče odpreti.

Zdaj pa uporabimo možnost -f, da prisilno prepišemo datoteko:

$ cp -f -v file-1.txt file-2.txt

9. Kako odstraniti ciljno datoteko pred kopiranjem

V prejšnjem primeru smo videli, kako odstraniti ciljno datoteko, če med upravljanjem pride do napake. Vendar je včasih zahteva, da najprej odstranite ciljno datoteko in nato izvedete operacijo kopiranja.

Za izpolnitev takšne zahteve lahko uporabimo možnost --remove-destination.

$ cp --remove-destination -v file-1.txt file-2.txt

V zgornjem izhodu lahko vidimo, da ukaz cp najprej odstrani ciljno datoteko in nato izvede operacijo kopiranja.

10. Kako ustvariti datoteko s trdo povezavo namesto kopiranja

Namesto ustvarjanja nove kopije izvorne datoteke lahko ustvarimo trdo povezavo. Ta možnost igra pomembno vlogo, ko na disku primanjkuje prostora.

Torej, uporabimo možnost -l za ustvarjanje trde povezave:

$ cp -l -v file-1.txt file-4.txt

Zdaj pa preverimo številki inode obeh datotek, da preverimo trde povezave:

$ ls -i1 file-1.txt file-4.txt

V zgornjem izhodu številke v prvem stolpcu predstavljajo številke inode.

11. Kako ustvariti datoteko z mehko povezavo namesto kopiranja

Na podoben način lahko ustvarimo mehko povezavo namesto ustvarjanja nove kopije z možnostjo -s, kot je prikazano spodaj:

$ cp -s -v file-1.txt file-5.txt

Zdaj pa preverimo, ali je bila simbolna povezava pravilno ustvarjena:

$ ls -l file-5.txt

V zgornjem izhodu zadnji stolpci predstavljajo razmerje simbolne povezave.

12. Kako ohraniti atribute datoteke med kopiranjem

Z datoteko so povezani različni atributi, na primer čas dostopa, čas spreminjanja, dovoljenja itd. Privzeto se ti atributi med kopiranjem datoteke ne ohranijo. Za preglasitev tega privzetega vedenja lahko uporabimo možnost -p.

Če želite to razumeti, najprej posodobite časovni žig datoteke-1.txt:

$ touch -t 10101010 file-1.txt

Zdaj pa ustvarimo kopijo te datoteke tako, da ohranimo vse njene atribute:

$ cp -p -v file-1.txt file-6.txt

Nazadnje preverite časovni žig datoteke file-6.txt:

$ ls -l file-6.txt

13. Kako izvajati operacijo kopiranja rekurzivno

Doslej smo videli, kako kopirati eno datoteko. Vendar pa moramo pogosto kopirati vse datoteke in podimenike določenega imenika.

V takšnih primerih lahko uporabimo rekurzivni način z možnostjo -r ali -R.

Torej, ustvarimo imenik in mu dodamo nekaj datotek in podimenikov:

$ mkdir -p dir-1/dir-2
$ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt

Nato preverite, ali je struktura imenika pravilno ustvarjena:

$ tree dir-1

Zdaj pa kopirajmo imenik dir-1 rekurzivno z naslednjim ukazom:

$ cp -r -v dir-1 dir-3

Na koncu preverite, ali so bile vse datoteke in podimeniki uspešno kopirani:

$ tree dir-3

14. Kako kopirati več imenikov

Podobno kot pri datotekah lahko kopiramo več imenikov rekurzivno z enim samim ukazom. Da bi to dosegli, pa mora biti ciljni imenik že prisoten in mora biti zadnji argument v ukazu. Razumejmo to s primerom.

Najprej ustvarite imenik nov imenik:

$ mkdir dir-4

Zdaj pa kopirajmo imenika dir-1 in dir-3 v imenik dir-4 s spodnjim ukazom:

$ cp -r -v dir-1 dir-3 dir-4

Na podoben način lahko uporabimo možnost -t ukaza, da dosežemo enak rezultat. Ta možnost nam omogoča, da določimo ciljni imenik. Tako ga lahko uporabimo tudi kot prvi argument:

$ cp -t dir-4 -r -v dir-1 dir-3

V tem članku smo razpravljali o kopiranju datotek in imenikov z ukazom cp. Začetniki se lahko sklicujejo na te primere v vsakdanjem življenju pri delu s sistemi Linux.

Morda vam bo všeč tudi:

  • Napredek – Prikaži odstotek kopiranih podatkov za (cp, mv, dd, tar) ukaze
  • Spremljajte napredek (kopiranje/varnostno kopiranje/stiskanje) podatkov z ukazom 'pv'
  • Ukaz za napredno kopiranje – prikazuje vrstico napredka med kopiranjem velikih datotek/map v sistemu Linux

Ali poznate še kakšen najboljši primer ukaza cp v Linuxu? Sporočite nam svoje poglede v spodnjih komentarjih.