Hur man använder cp Command effektivt i Linux [14 exempel]


Kort: I den här lättanvända guiden kommer vi att diskutera några praktiska exempel på kommandot cp. Efter att ha följt den här guiden kommer användare att kunna kopiera filer och kataloger enkelt i Linux med hjälp av kommandoradsgränssnittet.

Som Linux-användare interagerar vi med kopieringsfilerna och katalogerna. Visst kan vi använda en grafisk filhanterare för att utföra kopieringsoperationen. De flesta Linux-användare föredrar dock att använda kommandot cp på grund av dess enkelhet och rika funktionalitet.

I denna nybörjarvänliga guide kommer vi att lära oss om kommandot cp. Som namnet antyder används kommandot cp för att kopiera filer och kataloger på en given sökväg.

I den här guiden kommer vi att förstå användningen av kommandot cp med hjälp av praktiska exempel som kan användas dagligen.

Så låt oss komma igång.

Innehållsförteckning

Cp kommandosyntax

Syntaxen för cp-kommandot är identisk med andra Linux-kommandon. På en hög nivå är den uppdelad i två delar – alternativ och argument:

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

I ovanstående syntax representerar hakparenteserna ([]) de valfria argumenten medan vinkelparenteser (<>) representerar de obligatoriska argumenten.

1. Hur man kopierar en fil i Linux

En av de grundläggande användningarna av kommandot cp är att kopiera en fil till en aktuell katalog. Oftast utför användare denna operation för att ta en säkerhetskopia av den viktiga konfigurationen.

Till exempel skapar vi ofta en säkerhetskopia av filen /etc/ssh/sshd_config innan vi uppdaterar SSH-konfigurationen.

För att förstå användningen, låt oss skapa en enkel fil:

$ touch file-1.txt

Skapa sedan en kopia av filen med följande kommando:

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

2. Visa kopieringskommandoförlopp

I föregående exempel använde vi kommandot ls för att verifiera om filkopieringsoperationen lyckades eller inte. Det är dock inte meningsfullt att använda ytterligare ett kommando bara för att verifiera resultatet av de tidigare kommandona.

I sådana fall kan vi aktivera det verbose-läget med alternativet -v, som ger diagnostik för varje bearbetad fil.

Låt oss göra en kopia av filen file-1.txt med följande kommando:

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

I ovanstående utdata representerar pilen filen som kopieras. Det vänstra argumentet är källfilen medan det högra argumentet är målfilen.

3. Hur man kopierar flera filer till katalogen

Hittills har vi arbetat med en enda fil och den nuvarande arbetskatalogen. Men i den verkliga produktionsmiljön måste vi arbeta med ett stort antal filer. Ett av de vanligaste användningsfallen i sådana miljöer är att kopiera flera filer till en enda katalog.

Självklart kan vi köra cp-kommandot flera gånger för att uppnå det, men det kommer inte att vara det mest effektiva sättet. För att utföra en sådan operation effektivt kan vi använda en alternativ syntax för kommandot cp.

Så skapa först en ny katalog med namnet dir-1:

$ mkdir dir-1

Låt oss nu kopiera alla tre filerna till dir-1-katalogen med det enda kommandot:

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

Ovanstående utdata visar att alla filer har kopierats till dir-1-katalogen. Det är också viktigt att notera att för att använda denna alternativa syntax måste katalogen redan finnas och det måste vara det sista argumentet för kommandot.

4. Hur man undviker att skriva över filen

Som standard ersätter kommandot cp destinationsfilen, vilket betyder att den kommer att skriva över filen om den finns på destinationen med samma namn. Vi kan dock inaktivera detta standardbeteende med alternativet -n.

För att förstå detta, låt oss försöka skriva över den befintliga filen:

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

I det här exemplet har vi använt alternativet -v för att illustrera att filen file-2.txt inte har skrivits över.

5. Hur man skriver över filen med bekräftelse

I det föregående exemplet såg vi hur man undviker att målfilen skrivs över. Men ibland vill vi skriva över fildestinationen på ett säkrare sätt.

I sådana fall kan vi använda alternativet -i för kommandot för att göra kopieringsoperationen interaktiv. Det här alternativet visar varningsmeddelandet och väntar på användarens bekräftelse innan filen skrivs över.

För att illustrera detta, låt oss försöka skriva över den befintliga filen:

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

cp: overwrite 'file-2.txt'?

Som vi kan se väntar kommandot på bekräftelse. Precis som andra Linux-kommandon kan vi använda y för att fortsätta eller n för att avbryta operationen.

Detta icke-interaktiva standardbeteende för cp-kommandot är inte särskilt säkert. Det finns chanser att användaren kan skriva över en viktig konfiguration av misstag. Därför upprätthåller vissa av Linux-distributionerna det interaktiva beteendet som standard med hjälp av aliaskommandot:

$ alias cp='cp -i'

6. Skriv över fil endast om källan är nyare

I föregående exempel såg vi hur man använder det interaktiva läget. Men ibland kan en användare skriva över den nyare filen av misstag.

För att undvika sådana felbenägna fall kan vi använda alternativet -u, som försöker kopiera endast om källan är nyare än destinationen eller om filen inte finns på destinationen.

Uppdatera först källfilens tidsstämpel:

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

I exemplet ovan har vi använt alternativet -t för pekkommandot för att ställa in tidsstämpeln för filen till 10-okt-2010.

Låt oss sedan uppdatera tidsstämpeln för målfilen till den aktuella tiden:

$ touch file-2.txt

Låt oss nu försöka utföra kopieringsoperationen med alternativet -u:

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

Här kan vi se att kopieringsoperationen inte har försökts eftersom målfilen är nyare än källan.

Slutligen, låt oss byta käll- och destinationsargument och utföra kopieringsoperationen:

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

I ovanstående utdata kan vi observera att kopieringsoperationen lyckas eftersom källfilen är nyare än destinationen.

7. Hur man säkerhetskopierar filen innan man skriver över

Vi kan instruera cp-kommandot att ta en säkerhetskopia av målfilen innan vi skriver över den. För att uppnå detta kan vi använda alternativet --backup, som utför automatiska säkerhetskopieringar.

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

I det här exemplet har vi använt den numrerade säkerhetskopieringspolicyn. Denna policy använder inkrementella siffror i säkerhetskopiornas filnamn.

För att förstå detta, låt oss köra samma kommando flera gånger och observera resultatet:

$ 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. Så här tvingar du kopiering att skriva över fil

I de föregående exemplen såg vi hur man skriver över filen på ett säkrare sätt. Men i vissa sällsynta fall är kravet att skriva över filen. Det finns dock ingen garanti för att operationen kommer att lyckas varje gång.

Till exempel kommer kopieringsoperationen att misslyckas om målfilen inte har skrivbehörighet. Låt oss illustrera detta med ett exempel.

Ändra först destinationsfilens behörigheter:

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

Låt oss nu försöka skriva över filen file-2.txt:

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

I ovanstående utdata kan vi se att kommandot har misslyckats med felet nekad behörighet.

För att övervinna denna begränsning kan vi använda alternativet -f, som tar bort destinationsfilerna och försöker kopiera om destinationsfilen inte kan öppnas.

Låt oss nu använda alternativet -f för att skriva över filen med kraft:

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

9. Så här tar du bort målfilen innan du kopierar

I föregående exempel såg vi hur man tar bort destinationsfilen om det uppstår ett fel när man använder den. Men ibland är kravet att först ta bort målfilen och sedan utföra kopieringsoperationen.

För att uppfylla ett sådant krav kan vi använda alternativet --remove-destination.

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

I ovanstående utdata kan vi se att cp-kommandot först tar bort målfilen och sedan utför kopieringsoperationen.

10. Hur man skapar en hård länkfil istället för att kopiera

Vi kan skapa en hård länk istället för att skapa en ny kopia av källfilen. Det här alternativet spelar en viktig roll när det är ont om diskutrymme.

Så låt oss använda alternativet -l för att skapa en hård länk:

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

Låt oss nu kontrollera inodnumren för båda filerna för att verifiera de hårda länkarna:

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

I ovanstående utdata representerar siffrorna i den första kolumnen inodnumren.

11. Hur man skapar en mjuk länkfil istället för att kopiera

På liknande sätt kan vi skapa en mjuk länk istället för att skapa en ny kopia med alternativet -s som visas nedan:

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

Låt oss nu verifiera att den symboliska länken har skapats korrekt:

$ ls -l file-5.txt

I ovanstående utdata representerar de sista kolumnerna den symboliska länkrelationen.

12. Hur man bevarar filattributen under kopiering

Det finns olika attribut associerade med filen, såsom dess åtkomsttid, ändringstid, behörigheter, etc. Som standard bevaras inte dessa attribut när filen kopieras. För att åsidosätta detta standardbeteende kan vi använda alternativet -p.

För att förstå detta, uppdatera först tidsstämpeln för filen-1.txt:

$ touch -t 10101010 file-1.txt

Låt oss nu skapa en kopia av den här filen genom att bevara alla dess attribut:

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

Slutligen, verifiera tidsstämpeln för filen file-6.txt:

$ ls -l file-6.txt

13. Hur man utför kopiering rekursivt

Hittills har vi sett hur man kopierar en enda fil. Men ofta måste vi kopiera alla filer och underkataloger till den specifika katalogen.

I sådana fall kan vi använda det rekursiva läget antingen med -r eller -R alternativ.

Så låt oss skapa en katalog och lägga till några filer och underkataloger under den:

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

Kontrollera sedan att katalogstrukturen har skapats korrekt:

$ tree dir-1

Låt oss nu kopiera katalogen dir-1 rekursivt med följande kommando:

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

Slutligen, verifiera att alla filer och underkataloger har kopierats framgångsrikt:

$ tree dir-3

14. Hur man kopierar flera kataloger

I likhet med filer kan vi kopiera flera kataloger rekursiva med ett enda kommando. Men för att uppnå detta måste destinationskatalogen redan finnas och det måste vara det sista argumentet i kommandot. Låt oss förstå detta med ett exempel.

Skapa först en katalog en ny katalog:

$ mkdir dir-4

Låt oss nu kopiera dir-1 och dir-3-katalogerna till dir-4-katalogen med kommandot nedan:

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

På liknande sätt kan vi använda alternativet -t för kommandot för att uppnå samma resultat. Detta alternativ låter oss ange destinationskatalogen. Så vi kan använda det som ett första argument också:

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

I den här artikeln diskuterade vi hur man kopierar filer och kataloger med kommandot cp. Nybörjare kan hänvisa till dessa exempel i det dagliga livet när de arbetar med Linux-system.

Du kanske också gillar:

  • Framsteg – Visa procentandel av kopierade data för (cp, mv, dd, tar) kommandon
  • Övervaka framstegen för (Kopiera/Säkerhetskopiera/komprimera) data med hjälp av pv-kommandot
  • Avancerat kopieringskommando – visar förloppsindikator vid kopiering av stora filer/mappar i Linux

Känner du till något annat bästa exempel på kommandot cp i Linux? Låt oss veta dina åsikter i kommentarerna nedan.