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.