Kako učinkovito koristiti naredbu cp u Linuxu [14 primjera]


Ukratko: U ovom vodiču koji je jednostavan za praćenje, raspravljat ćemo o nekim praktičnim primjerima naredbe cp. Nakon što slijede ovaj vodič, korisnici će moći jednostavno kopirati datoteke i direktorije u Linuxu pomoću sučelja naredbenog retka.

Kao korisnici Linuxa, mi komuniciramo s kopiranjem datoteka i direktorija. Naravno, možemo koristiti grafički upravitelj datoteka za izvođenje operacije kopiranja. Međutim, većina korisnika Linuxa radije koristi naredbu cp zbog njezine jednostavnosti i bogate funkcionalnosti.

U ovom vodiču prilagođenom početnicima naučit ćemo o naredbi cp. Kao što ime sugerira, naredba cp koristi se za kopiranje datoteka i direktorija na zadanoj stazi.

U ovom ćemo vodiču razumjeti korištenje naredbe cp koristeći praktične primjere koji se mogu koristiti svakodnevno.

Pa počnimo.

Sadržaj

Sintaksa naredbe Cp

Sintaksa naredbe cp identična je ostalim Linux naredbama. Na visokoj razini podijeljen je na dva dijela – opcije i argumente:

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

U gornjoj sintaksi, uglate zagrade ([]) predstavljaju neobavezne argumente, dok uglate zagrade (<>) predstavljaju obavezne argumente.

1. Kako kopirati datoteku u Linuxu

Jedna od osnovnih upotreba naredbe cp je kopiranje datoteke u trenutni direktorij. Većinu vremena korisnici izvode ovu operaciju kako bi napravili sigurnosnu kopiju važne konfiguracije.

Na primjer, često stvaramo sigurnosnu kopiju datoteke /etc/ssh/sshd_config prije ažuriranja SSH konfiguracije.

Da bismo razumjeli upotrebu, stvorimo jednostavnu datoteku:

$ touch file-1.txt

Zatim stvorite kopiju datoteke pomoću sljedeće naredbe:

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

2. Prikaži napredak naredbe kopiranja

U prethodnom smo primjeru koristili naredbu ls da provjerimo je li operacija kopiranja datoteke uspjela ili nije. Međutim, nema smisla koristiti još jednu naredbu samo za provjeru rezultata prethodnih naredbi.

U takvim slučajevima možemo omogućiti opširni način rada pomoću opcije -v, koja pruža dijagnostiku za svaku obrađenu datoteku.

Napravimo kopiju datoteke file-1.txt pomoću sljedeće naredbe:

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

U gornjem izlazu, strelica predstavlja datoteku koja se kopira. Lijevi argument je izvorna datoteka, dok je desni argument odredišna datoteka.

3. Kako kopirati više datoteka u imenik

Do sada smo radili samo s jednom datotekom i trenutnim radnim direktorijem. Međutim, u stvarnom proizvodnom okruženju moramo raditi s velikim brojem datoteka. Jedan od uobičajenih slučajeva korištenja u takvim okruženjima je kopiranje više datoteka u jedan direktorij.

Očito, možemo izvršiti cp naredbu više puta da to postignemo, ali to neće biti najučinkovitiji način. Za učinkovito izvođenje takve operacije, možemo koristiti alternativnu sintaksu naredbe cp.

Dakle, prvo stvorite novi direktorij s imenom dir-1:

$ mkdir dir-1

Sada, kopirajmo sve tri datoteke u direktorij dir-1 pomoću jedne naredbe:

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

Gornji izlaz pokazuje da su sve datoteke kopirane u direktorij dir-1. Također, važno je napomenuti da, za korištenje ove alternativne sintakse, direktorij već mora biti prisutan i mora biti zadnji argument naredbe.

4. Kako izbjeći prepisivanje datoteke

Prema zadanim postavkama, naredba cp zamjenjuje odredišnu datoteku, što znači da će prebrisati datoteku ako postoji na odredištu s istim imenom. Međutim, možemo onemogućiti ovo zadano ponašanje pomoću opcije -n.

Da bismo ovo razumjeli, pokušajmo prebrisati postojeću datoteku:

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

U ovom smo primjeru upotrijebili opciju -v kako bismo ilustrirali da datoteka file-2.txt nije prebrisana.

5. Kako prebrisati datoteku s potvrdom

U prethodnom smo primjeru vidjeli kako izbjeći prepisivanje odredišne datoteke. Međutim, ponekad želimo prebrisati odredište datoteke na sigurniji način.

U takvim slučajevima, možemo koristiti opciju -i naredbe kako bi operacija kopiranja bila interaktivna. Ova opcija prikazuje poruku upozorenja i čeka potvrdu korisnika prije prepisivanja datoteke.

Da bismo to ilustrirali, pokušajmo prebrisati postojeću datoteku:

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

cp: overwrite 'file-2.txt'?

Kao što vidimo, naredba čeka potvrdu. Baš kao i druge Linux naredbe, možemo koristiti y za nastavak ili n za prekid operacije.

Ovo zadano neinteraktivno ponašanje naredbe cp nije baš sigurno. Postoje šanse da korisnik greškom prebriše važnu konfiguraciju. Stoga neke distribucije Linuxa prema zadanim postavkama provode interaktivno ponašanje pomoću alias naredbe:

$ alias cp='cp -i'

6. Prebrišite datoteku samo ako je izvor noviji

U prethodnom primjeru vidjeli smo kako koristiti interaktivni način rada. Međutim, ponekad bi korisnik mogao nenamjerno prebrisati noviju datoteku.

Kako bismo izbjegli takve slučajeve sklone pogreškama, možemo upotrijebiti opciju -u koja pokušava kopirati samo ako je izvor noviji od odredišta ili ako datoteka nije prisutna na odredištu.

Najprije ažurirajte vremensku oznaku izvorne datoteke:

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

U gornjem primjeru upotrijebili smo opciju -t naredbe dodir za postavljanje vremenske oznake datoteke na 10. listopada 2010.

Zatim ažurirajmo vremensku oznaku odredišne datoteke na trenutno vrijeme:

$ touch file-2.txt

Pokušajmo sada izvesti operaciju kopiranja pomoću opcije -u:

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

Ovdje možemo vidjeti da operacija kopiranja nije pokušana jer je odredišna datoteka novija od izvora.

Na kraju, zamijenimo izvorne i odredišne argumente i izvršimo operaciju kopiranja:

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

U gornjem izlazu možemo uočiti da je operacija kopiranja uspjela jer je izvorna datoteka novija od odredišne.

7. Kako sigurnosno kopirati datoteku prije prepisivanja

Možemo uputiti naredbu cp da napravi sigurnosnu kopiju odredišne datoteke prije nego što je prebriše. Da bismo to postigli možemo koristiti opciju --backup, koja izvodi automatizirane sigurnosne kopije.

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

U ovom smo primjeru upotrijebili politiku numerirane sigurnosne kopije. Ovo pravilo koristi inkrementalne brojeve u nazivima datoteka sigurnosne kopije.

Da bismo ovo razumjeli, izvršimo istu naredbu više puta i promatramo izlaz:

$ 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 da biste prebrisali datoteku

U prethodnih nekoliko primjera vidjeli smo kako prebrisati datoteku na sigurniji način. Međutim, u nekim rijetkim slučajevima potrebno je prebrisati datoteku. Međutim, ne postoji jamstvo da će operacija svaki put uspjeti.

Na primjer, operacija kopiranja neće uspjeti ako odredišna datoteka nema dopuštenje za pisanje. Ilustrirajmo to primjerom.

Prvo promijenite dopuštenja odredišne datoteke:

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

Sada pokušajmo prebrisati datoteku file-2.txt:

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

U gornjem izlazu možemo vidjeti da naredba nije uspjela s pogreškom odbijene dozvole.

Da bismo prevladali ovo ograničenje, možemo upotrijebiti opciju -f koja briše odredišne datoteke i pokušava kopirati ako se odredišna datoteka ne može otvoriti.

Sada upotrijebimo opciju -f da nasilno prebrišemo datoteku:

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

9. Kako ukloniti odredišnu datoteku prije kopiranja

U prethodnom smo primjeru vidjeli kako ukloniti odredišnu datoteku ako dođe do pogreške tijekom rada. Međutim, ponekad je potrebno prvo ukloniti odredišnu datoteku, a zatim izvesti operaciju kopiranja.

Kako bismo ispunili takav zahtjev, možemo koristiti opciju --remove-destination.

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

U gornjem izlazu možemo vidjeti da naredba cp prvo uklanja odredišnu datoteku, a zatim izvodi operaciju kopiranja.

10. Kako stvoriti datoteku s tvrdom vezom umjesto kopiranja

Možemo stvoriti tvrdu vezu umjesto stvaranja nove kopije izvorne datoteke. Ova opcija igra važnu ulogu kada postoji nedostatak prostora na disku.

Dakle, upotrijebimo opciju -l za stvaranje čvrste veze:

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

Sada provjerimo inode brojeve obje datoteke kako bismo provjerili tvrde veze:

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

U gornjem izlazu, brojevi u prvom stupcu predstavljaju brojeve inoda.

11. Kako stvoriti datoteku s mekom vezom umjesto kopiranja

Na sličan način možemo stvoriti meku vezu umjesto stvaranja nove kopije pomoću opcije -s kao što je prikazano u nastavku:

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

Sada provjerimo je li simbolička veza ispravno kreirana:

$ ls -l file-5.txt

U gornjem izlazu, posljednji stupci predstavljaju odnos simboličke veze.

12. Kako sačuvati atribute datoteke tijekom kopiranja

Postoje različiti atributi povezani s datotekom, kao što je vrijeme pristupa, vrijeme izmjene, dopuštenja itd. Prema zadanim postavkama, ti se atributi ne čuvaju tijekom kopiranja datoteke. Za nadjačavanje ovog zadanog ponašanja možemo koristiti opciju -p.

Da biste ovo razumjeli, prvo ažurirajte vremensku oznaku datoteke-1.txt:

$ touch -t 10101010 file-1.txt

Sada stvorimo kopiju ove datoteke tako da sačuvamo sve njezine atribute:

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

Na kraju provjerite vremensku oznaku datoteke file-6.txt:

$ ls -l file-6.txt

13. Kako izvesti operaciju kopiranja rekurzivno

Do sada smo vidjeli kako kopirati jednu datoteku. Međutim, često moramo kopirati sve datoteke i poddirektorije određenog direktorija.

U takvim slučajevima, možemo koristiti rekurzivni način rada pomoću opcije -r ili -R.

Dakle, stvorimo direktorij i dodajmo nekoliko datoteka i poddirektorija ispod njega:

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

Zatim provjerite je li struktura direktorija ispravno kreirana:

$ tree dir-1

Sada, kopirajmo direktorij dir-1 rekurzivno pomoću sljedeće naredbe:

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

Na kraju, provjerite jesu li sve datoteke i poddirektorije uspješno kopirane:

$ tree dir-3

14. Kako kopirati više direktorija

Slično datotekama, možemo rekurzivno kopirati više direktorija koristeći jednu naredbu. Međutim, da bi se to postiglo odredišni direktorij već mora biti prisutan i mora biti zadnji argument u naredbi. Shvatimo ovo na primjeru.

Najprije stvorite novi imenik:

$ mkdir dir-4

Sada kopirajmo direktorije dir-1 i dir-3 u direktorij dir-4 pomoću naredbe ispod:

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

Na sličan način, možemo koristiti opciju -t naredbe da postignemo isti rezultat. Ova nam opcija omogućuje da odredimo odredišni direktorij. Tako da ga možemo koristiti i kao prvi argument:

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

U ovom smo članku raspravljali o tome kako kopirati datoteke i direktorije pomoću naredbe cp. Početnici se mogu pozvati na ove primjere u svakodnevnom životu dok rade s Linux sustavima.

Također bi vam se moglo svidjeti:

  • Napredak – Prikaži postotak kopiranih podataka za (cp, mv, dd, tar) naredbe
  • Nadgledajte napredak (kopiranje/sigurnosno kopiranje/sažimanje) podataka pomoću naredbe 'pv'
  • Napredna naredba za kopiranje – prikazuje traku napretka tijekom kopiranja velikih datoteka/mapa u Linuxu

Znate li za neki drugi najbolji primjer cp naredbe u Linuxu? Recite nam svoje stavove u komentarima ispod.