Kuinka cp-komentoa käytetään tehokkaasti Linuxissa [14 esimerkkiä]


Lyhyesti: Tässä helposti seurattavassa oppaassa käsittelemme joitain käytännön esimerkkejä cp-komennosta. Tämän oppaan jälkeen käyttäjät voivat kopioida tiedostoja ja hakemistoja helposti Linuxissa komentorivikäyttöliittymän avulla.

Linux-käyttäjinä olemme vuorovaikutuksessa tiedostojen ja hakemistojen kanssa ajoittain. Yksi yleinen toiminto, jota käyttäjät suorittavat, on tiedostojen ja hakemistojen kopioiminen. Varmasti voimme käyttää graafista tiedostonhallintaa kopioinnin suorittamiseen. Useimmat Linux-käyttäjät käyttävät kuitenkin mieluummin cp-komentoa sen yksinkertaisuuden ja monipuolisten toimintojen vuoksi.

Tässä aloittelijaystävällisessä oppaassa opimme cp-komennosta. Kuten nimestä voi päätellä, cp-komentoa käytetään tiedostojen ja hakemistojen kopioimiseen tietyllä polulla.

Tämän oppaan aikana ymmärrämme cp-komennon käytön käyttämällä käytännön esimerkkejä, joita voidaan käyttää joka päivä.

Joten aloitetaan.

Cp-komennon syntaksi

cp-komennon syntaksi on identtinen muiden Linux-komentojen kanssa. Korkealla tasolla se on jaettu kahteen osaan – vaihtoehdot ja argumentit:

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

Yllä olevassa syntaksissa hakasulkeet ([]) edustavat valinnaisia argumentteja, kun taas kulmasulut (<>) edustavat pakollisia argumentteja.

1. Tiedoston kopioiminen Linuxissa

Yksi cp-komennon peruskäytöstä on tiedoston kopioiminen nykyiseen hakemistoon. Useimmiten käyttäjät suorittavat tämän toiminnon ottaakseen varmuuskopion tärkeästä kokoonpanosta.

Luomme esimerkiksi usein varmuuskopion /etc/ssh/sshd_config-tiedostosta ennen SSH-määritysten päivittämistä.

Ymmärtääksesi käyttöä, luodaan yksinkertainen tiedosto:

touch file-1.txt

Luo seuraavaksi kopio tiedostosta seuraavalla komennolla:

cp file-1.txt file-2.txt

2. Näytä kopiointikomennon edistyminen

Edellisessä esimerkissä käytimme ls-komentoa varmistaaksemme, onnistuiko tiedoston kopiointitoiminto vai ei. Ei kuitenkaan ole järkevää käyttää yhtä komentoa vain edellisten komentojen tuloksen tarkistamiseen.

Tällaisissa tapauksissa voimme ottaa käyttöön monisanaisen tilan -v-vaihtoehdolla, joka tarjoaa diagnostiikkatiedot jokaiselle käsitellylle tiedostolle.

Tehdään kopio file-1.txt-tiedostosta seuraavalla komennolla:

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

Yllä olevassa tulosteessa nuoli edustaa tiedostoa, jota kopioidaan. Vasemman puolen argumentti on lähdetiedosto, kun taas oikean puolen argumentti on kohdetiedosto.

3. Kuinka kopioida useita tiedostoja hakemistoon

Toistaiseksi olemme työskennelleet vain yhden tiedoston ja nykyisen työhakemiston kanssa. Todellisessa tuotantoympäristössä meidän on kuitenkin työskenneltävä suuren määrän tiedostoja kanssa. Yksi yleisimmistä käyttötapauksista tällaisissa ympäristöissä on kopioida useita tiedostoja yhteen hakemistoon.

Ilmeisesti voimme suorittaa cp-komennon useita kertoja saavuttaaksemme sen, mutta se ei ole tehokkain tapa. Suorittaaksemme tällaisen toiminnon tehokkaasti voimme käyttää cp-komennon vaihtoehtoista syntaksia.

Joten luo ensin uusi hakemisto nimellä dir-1:

mkdir dir-1

Kopioidaan nyt kaikki kolme tiedostoa dir-1-hakemistoon yhdellä komennolla:

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

Yllä oleva tulos osoittaa, että kaikki tiedostot on kopioitu hakemistoon dir-1. Lisäksi on tärkeää huomata, että tämän vaihtoehtoisen syntaksin käyttäminen edellyttää, että hakemisto on jo olemassa ja sen on oltava komennon viimeinen argumentti.

4. Kuinka välttää tiedoston päällekirjoittaminen

Oletuksena cp-komento korvaa kohdetiedoston, mikä tarkoittaa, että se korvaa tiedoston, jos se on olemassa samannimisessä kohteessa. Voimme kuitenkin poistaa tämän oletuskäytön käytöstä -n-vaihtoehdolla.

Ymmärtääksesi tämän, yritetään korvata olemassa oleva tiedosto:

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

Tässä esimerkissä olemme käyttäneet vaihtoehtoa -v havainnollistamaan, että file-2.txt-tiedostoa ei ole kirjoitettu päälle.

5. Tiedoston korvaaminen vahvistuksella

Edellisessä esimerkissä näimme kuinka välttää kohdetiedoston päällekirjoittaminen. Joskus haluamme kuitenkin korvata tiedoston määränpään turvallisemmalla tavalla.

Tällaisissa tapauksissa voimme käyttää komennon vaihtoehtoa -i tehdäksemme kopiointitoiminnosta interaktiivisen. Tämä vaihtoehto näyttää varoitusviestin ja odottaa käyttäjän vahvistusta ennen tiedoston korvaamista.

Tämän havainnollistamiseksi yritetään korvata olemassa oleva tiedosto:

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

cp: overwrite 'file-2.txt'?

Kuten näemme, komento odottaa vahvistusta. Kuten muutkin Linux-komennot, voimme käyttää 'y'-komentoa jatkaaksesi tai 'n'-komentoa keskeyttääksesi toiminnon.

Tämä cp-komennon ei-interaktiivinen oletustoiminto ei ole kovin turvallinen. On mahdollista, että käyttäjä korvaa tärkeän kokoonpanon vahingossa. Siksi jotkut Linux-jakeluista pakottavat interaktiivisen toiminnan oletusarvoisesti käyttämällä alias-komentoa:

alias cp='cp -i'

6. Korvaa tiedosto vain, jos lähde on uudempi

Edellisessä esimerkissä näimme kuinka interaktiivista tilaa käytetään. Joskus käyttäjä saattaa kuitenkin korvata uudemman tiedoston vahingossa.

Tällaisten virhealttiiden tapausten välttämiseksi voimme käyttää vaihtoehtoa -u, joka yrittää kopioida vain, jos lähde on kohdetta uudempi tai jos tiedostoa ei ole kohteessa.

Päivitä ensin lähdetiedoston aikaleima:

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

Yllä olevassa esimerkissä olemme käyttäneet kosketuskomennon vaihtoehtoa -t asettaaksesi tiedoston aikaleiman arvoon 10-Oct-2010.

Päivitetään seuraavaksi kohdetiedoston aikaleima nykyiseen aikaan:

touch file-2.txt

Yritetään nyt suorittaa kopiointi käyttämällä -u-vaihtoehtoa:

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

Täällä voimme nähdä, että kopiointitoimintoa ei ole yritetty, koska kohdetiedosto on lähdettä uudempi.

Vaihdetaan lopuksi lähde- ja kohdeargumentit ja suoritetaan kopiointitoiminto:

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

Yllä olevassa tulosteessa voimme havaita, että kopiointitoiminto onnistuu, koska lähdetiedosto on kohdetta uudempi.

7. Kuinka varmuuskopioida tiedosto ennen korvaamista

Voimme käskeä cp-komennon ottamaan varmuuskopion kohdetiedostosta ennen sen korvaamista. Tämän saavuttamiseksi voimme käyttää --backup-vaihtoehtoa, joka suorittaa automaattiset varmuuskopiot.

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

Tässä esimerkissä olemme käyttäneet numeroitua varmuuskopiointikäytäntöä. Tämä käytäntö käyttää lisänumeroita varmuuskopiotiedostojen nimissä.

Ymmärtääksesi tämän suorittamalla sama komento useita kertoja ja tarkkailemalla tulosta:

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. Kopioinnin pakottaminen korvaamaan tiedosto

Muutamissa edellisissä esimerkeissä näimme kuinka tiedosto korvataan turvallisemmalla tavalla. Joissakin harvoissa tapauksissa vaatimus on kuitenkin tiedoston päällekirjoittaminen. Ei kuitenkaan ole takeita siitä, että operaatio onnistuu joka kerta.

Esimerkiksi kopiointi epäonnistuu, jos kohdetiedostolla ei ole kirjoitusoikeuksia. Havainnollistetaan tätä esimerkillä.

Muuta ensin kohdetiedoston käyttöoikeuksia:

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

Yritetään nyt kirjoittaa file-2.txt-tiedoston päälle:

cp file-1.txt file-2.txt

Yllä olevassa lähdössä voimme nähdä, että komento on epäonnistunut lupa estetty -virheen kanssa.

Tämän rajoituksen voittamiseksi voimme käyttää vaihtoehtoa -f, joka poistaa kohdetiedostot ja yrittää kopioida, jos kohdetiedostoa ei voida avata.

Käytä nyt vaihtoehtoa -f tiedoston päällekirjoittamiseen väkisin:

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

9. Kohdetiedoston poistaminen ennen kopioimista

Edellisessä esimerkissä näimme, kuinka kohdetiedosto poistetaan, jos sitä käytettäessä tapahtuu virhe. Joskus vaatimus on kuitenkin ensin poistaa kohdetiedosto ja sitten suorittaa kopiointi.

Täyttääksemme tällaisen vaatimuksen voimme käyttää vaihtoehtoa --remove-destination.

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

Yllä olevassa tulosteessa voimme nähdä, että cp-komento poistaa ensin kohdetiedoston ja suorittaa sitten kopiointitoiminnon.

10. Kiintolinkkitiedoston luominen kopioimisen sijaan

Voimme luoda kiinteän linkin uuden kopion luomisen sijaan lähdetiedostosta. Tällä vaihtoehdolla on tärkeä rooli, kun levytilaa on vähän.

Joten, käytetään -l-vaihtoehtoa kiinteän linkin luomiseen:

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

Tarkastetaan nyt molempien tiedostojen inode-numerot kovien linkkien tarkistamiseksi:

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

Yllä olevassa lähdössä ensimmäisen sarakkeen numerot edustavat inodien numeroita.

11. Soft Link -tiedoston luominen kopioimisen sijaan

Samalla tavalla voimme luoda pehmeän linkin uuden kopion luomisen sijaan käyttämällä -s-vaihtoehtoa alla olevan kuvan mukaisesti:

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

Tarkastetaan nyt, että symbolinen linkki on luotu oikein:

ls -l file-5.txt

Yllä olevassa lähdössä viimeiset sarakkeet edustavat symbolista linkkisuhdetta.

12. Tiedoston ominaisuuksien säilyttäminen kopioinnin aikana

Tiedostoon liittyy useita attribuutteja, kuten sen käyttöaika, muokkausaika, käyttöoikeudet jne. Näitä määritteitä ei oletuksena säilytetä tiedostoa kopioitaessa. Tämän oletuskäyttäytymisen ohittamiseksi voimme käyttää -p-vaihtoehtoa.

Ymmärtääksesi tämän, päivitä ensin tiedoston-1.txt aikaleima:

touch -t 10101010 file-1.txt

Luodaan nyt kopio tästä tiedostosta säilyttämällä kaikki sen attribuutit:

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

Tarkista lopuksi file-6.txt-tiedoston aikaleima:

ls -l file-6.txt

13. Kuinka suorittaa kopiointitoiminto rekursiivisesti

Toistaiseksi olemme nähneet, kuinka yksi tiedosto kopioidaan. Usein meidän on kuitenkin kopioitava kaikki tietyn hakemiston tiedostot ja alihakemistot.

Tällaisissa tapauksissa voimme käyttää rekursiivista tilaa joko -r- tai -R-vaihtoehdolla.

Joten luodaan hakemisto ja lisätään siihen muutama tiedosto ja alihakemisto:

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

Tarkista seuraavaksi, että hakemistorakenne on luotu oikein:

tree dir-1

Kopioidaan nyt hakemisto dir-1 rekursiivisesti seuraavalla komennolla:

cp -r -v dir-1 dir-3

Varmista lopuksi, että kaikki tiedostot ja alihakemistot on kopioitu onnistuneesti:

tree dir-3

14. Kuinka kopioida useita hakemistoja

Kuten tiedostot, voimme kopioida useita hakemistoja rekursiivisesti yhdellä komennolla. Kuitenkin tämän saavuttamiseksi kohdehakemiston on oltava jo olemassa ja sen on oltava komennon viimeinen argumentti. Ymmärretään tämä esimerkin avulla.

Luo ensin hakemisto uusi hakemisto:

mkdir dir-4

Kopioidaan nyt hakemistot dir-1 ja dir-3 hakemistoon dir-4 käyttämällä alla olevaa komentoa:

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

Samalla tavalla voimme käyttää komennon vaihtoehtoa -t saavuttaaksemme saman tuloksen. Tämän vaihtoehdon avulla voimme määrittää kohdehakemiston. Joten voimme käyttää sitä myös ensimmäisenä argumenttina:

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

Tässä artikkelissa keskustelimme tiedostojen ja hakemistojen kopioimisesta cp-komennolla. Aloittelijat voivat viitata näihin esimerkkeihin päivittäisessä elämässään työskennellessään Linux-järjestelmien kanssa.

Tiedätkö muita parhaita esimerkkejä cp-komennosta Linuxissa? Kerro meille mielipiteesi alla olevissa kommenteissa.