Cum să copiați fișiere folosind comanda cp în Linux

Deși comanda cat este uneori folosită pentru a copia fișiere, în Linux există o comandă specială cp pentru aceasta. Poate fi folosit într-una din două forme:

$cp sursă destinație

$ cp director_sursă director_nou

În primul caz, fișierul sau directorul sursă este copiat, respectiv, în fișierul sau directorul destinație, iar în al doilea caz, fișierele conținute în directorul director_sursă sunt copiate în directorul director_nou. Pentru a copia, trebuie să aveți drepturi de citire pentru fișierele copiate și drepturi de scriere pentru directorul în care copiați.

Dacă un fișier existent este specificat ca țintă, conținutul acestuia va fi suprascris, așa că trebuie să fiți atenți când copiați. Cu toate acestea, puteți utiliza comanda cp cu opțiunea -i, care va cere confirmarea înainte de a suprascrie un fișier existent.

Comanda cp are câteva alte opțiuni utile:

Sens

Salvează timpul de modificare a fișierelor și permisiunile maxime posibile. Fără această opțiune, noului fișier i se atribuie permisiunile corespunzătoare permisiunilor utilizatorului care a lansat comanda

Dacă sursa este un director, atunci atât acesta, cât și toate subdirectoarele incluse în el sunt copiate, adică forma originală a arborelui de directoare este păstrată

Dacă setați această opțiune, atunci legăturile simbolice vor rămâne link-uri (altfel, în loc de link, fișierul la care este dat linkul este copiat)

Suprascrieți fișierele atunci când copiați (dacă există deja) fără avertismente suplimentare

Echipa mv

Dacă trebuie să mutați un fișier dintr-un director în altul în loc să îl copiați, puteți utiliza comanda mv. Sintaxa acestei comenzi este similară cu sintaxa comenzii cp. Mai mult, mai întâi copiază fișierul (sau directorul) și abia apoi șterge fișierul (directorul) original. Și opțiunile sale sunt aceleași cu cele ale cp.

Comanda mv poate fi folosită nu numai pentru a muta, ci și pentru a redenumi fișierele și directoarele (adică, pentru a le muta în același director). Pentru a face acest lucru, trebuie pur și simplu să specificați numele vechi și noul fișier ca argumente:

$mv nume vechi nume nou

Vă rugăm să rețineți că comanda mv nu vă permite să redenumiți mai multe fișiere simultan (folosind un model de nume), astfel încât comanda mv *.xxx *.yyy nu va funcționa.

Când utilizați comanda mv, la fel ca atunci când utilizați cp, nu uitați să utilizați opțiunea -i pentru a primi un avertisment când un fișier este suprascris.

Comenzile rm și rmdir

Pentru a elimina fișierele și directoarele inutile în Linux, utilizați comenzile rm (eliminați fișierele) și rmdir (eliminați un director gol). Pentru a utiliza aceste comenzi, trebuie să aveți acces de scriere la directorul în care se află fișierele sau directoarele de șterse. Cu toate acestea, nu este necesară permisiunea de a schimba fișierele în sine. Dacă doriți să primiți o cerere suplimentară de confirmare a operațiunii înainte de a șterge un fișier, utilizați opțiunea -i.

Dacă încercați să utilizați comanda rm (fără opțiuni) pentru a șterge un director, vi se va cere că este un director și nu va fi șters. Pentru a șterge un director, trebuie să ștergeți toate fișierele din el și apoi să ștergeți directorul în sine folosind comanda rmdir. Cu toate acestea, puteți, de asemenea, să ștergeți un director care nu este gol și toate subdirectoarele și fișierele sale folosind comanda rm cu opțiunea -r.

Dacă lansați comanda rm *, aceasta va șterge toate fișierele din directorul curent. Subdirectoarele nu vor fi șterse. Pentru a șterge atât fișierele, cât și subdirectoarele din directorul curent, trebuie să utilizați și opțiunea -r. Totuși, amintiți-vă întotdeauna că Linux nu are o comandă pentru a restaura fișierele după ce acestea au fost șterse (chiar dacă v-ați prins imediat după ce ați șters din greșeală un fișier sau un director)!

Operațiunile frecvente din structura fișierelor sunt crearea de fișiere și directoare, copierea acestora, mutarea lor, redenumirea lor și ștergerea lor. Evident, trebuie furnizate comenzi speciale în shell-ul de comandă Linux pentru astfel de acțiuni.

Copierea fișierelor și directoarelor

În Bash, comanda folosită pentru a copia fișiere este cp(de la „copiere”), care ia de obicei două argumente:

    adresa cu nume fișier sursă,

    o nouă adresă cu un nume sau pur și simplu adresa directorului în care este plasată copia.

Adresa poate fi absolută sau relativă. Dacă operațiunile cu fișiere sunt efectuate în directorul curent, atunci nu are rost să specificați adresa. Sunt scrise doar numele fișierului original și numele copiei. Deoarece nu pot exista fișiere cu aceleași nume și adrese, numele copiei trebuie să fie diferit de numele fișierului original.

Să ne uităm la exemple.

cp readme readme2

În acest caz, se creează o copie a fișierului readme, care rămâne în același director sub numele readme2.

cp readme desktop/

Fișierul readme este copiat în folderul Desktop. Aici, directorul curent este directorul desktop părinte. Numele copiei și fișierul original se vor potrivi, dar adresele complete nu.

cp / home/ irina/ tux.png / mnt/ D/ pingvin.png

Aici un fișier este copiat dintr-un director în altul, sunt folosite adrese absolute, numele copiei este schimbat.

Dacă trebuie să copiați mai multe fișiere diferite în același director, atunci după comanda cd, toate fișierele originale sunt listate mai întâi, iar directorul în care sunt plasate copiile este indicat ultimul. Este clar că cu o astfel de acțiune de grup, numele fișierelor nu pot fi schimbate.

Pentru a copia un director cu tot conținutul său, trebuie să utilizați opțiunea -r a comenzii cp:

cp -r ./ litere ./ litere vechi

Mutarea și redenumirea

În shell-ul Linux Bash, aceeași comandă este folosită pentru a muta și a redenumi - mv(de la „mutare” - ​​a muta). Redenumirea poate fi considerată ca caz special mișcare, deoarece în esență adresa completă a fișierului se modifică, ceea ce echivalează cu mutarea, chiar dacă fișierul rămâne în același director.

La fel ca și în cazul cp, pentru mv trebuie să specificați câteva argumente. Alegerea între mutare și redenumire depinde de care sunt argumentele. Când este mutat, fișierul își schimbă adresa, prin urmare, dacă sunt specificate adrese diferite în primul și al doilea argument, atunci mutarea va avea loc. Dacă adresele sunt aceleași, dar numai numele diferă, are loc redenumirea. În plus, mutarea poate fi combinată cu redenumirea.

În cazul unei mutari fără redenumire, al doilea argument specifică doar directorul de destinație.

mv document.txt Lucru

mv document.txt Work/ doc23.txt

Aici, în primul caz, fișierul document.txt este mutat în directorul de lucru. În al doilea caz, fișierul este mutat și redenumit în același timp: fișierul document.txt este mutat în directorul de lucru și i se primește un nou nume doc23.txt.

Când utilizați comanda mv pentru a redenumi, al doilea argument este noul nume:

mv order.txt orderNew.txt

mv Work/ list.odt Work/ names.odt

Directoarele sunt mutate și redenumite în același mod ca și fișierele. Mutarea în lot a fișierelor funcționează la fel ca și cu comanda cp.

Crearea de fișiere și directoare

Noile directoare sunt create prin comandă mkdir. De exemplu, pentru a crea un director de lucru în directorul curent, trebuie să rulați următoarea comandă:

mkdir Lucru
sau
mkdir./Work

Există multe modalități de a crea fișiere, de obicei acestea sunt create de un fel de program. Dacă mai este nevoie de a crea dosar gol, acest lucru se poate face folosind programe tactile. Numele îi este transmis ca argument fișier creat. Un alt mod este. Exemplu:

cal > ./ Munca/ ianuarie

Aici programul cal afișează calendarul pentru luna curentă și, deoarece există un semn de redirecționare a ieșirii, ieșirea comenzii va fi scrisă în fișierul ianuarie situat în folderul Work.

Actualizat: 29.12.2017 de Speranța computerului

Despre cp

The cp comanda face copii ale fișierelor și directoarelor.

Sintaxă

cp [opțiune]... [-T] sursă destinaţie cp [opțiune]... sursă... director cp [opțiune]... -t director sursă... cp --ajutor cp --versiune

Opțiuni

-A,
--Arhiva
La fel ca -dR --preserve=ALL. Când efectuați copierea, încercați să păstrați cât mai mult posibil din structura fișierului original, atributele și metadatele asociate. Aceste metadate includ date de context de securitate dacă rulați SELinux.
--doar atribute Nu copiați datele fișierului, doar creați un fișier cu aceleași atribute. Dacă fișierul destinație există deja, nu-i modificați conținutul. Puteți controla exact ce atribute sunt copiate cu ajutorul --conserva opțiune.
--backup[= Control] Faceți o copie de rezervă a fiecărui fișier destinație existent care altfel ar fi suprascris sau eliminat. The Control parametrul specifică ce metodă de control al versiunii să folosească; vezi pentru detalii.

Ca caz special, cp --force --backup va face o copie de rezervă a sursă când sursăși dest sunt aceleași fișiere obișnuite.

-b Ca --backup, dar nu acceptă a Control argument; metoda de control implicită este întotdeauna utilizată.
--copie-conținut Când operați recursiv, copiați conținutul fișierelor speciale, cum ar fi FIFO-urile și dispozitivele găsite în /dev. De obicei, nu doriți să utilizați această opțiune, deoarece poate avea rezultate nedorite, cum ar fi suspendarea pentru totdeauna sau umplerea întregului disc. Cu toate acestea, această opțiune este disponibilă pentru cazuri speciale de utilizare expert.
-d Copiați legăturile simbolice în sine, mai degrabă decât fișierele la care se referă, și păstrați legăturile rigide între fișierele sursă din copii. La fel ca " --no-dereference --preserve=linkuri".
-f,
--forta
Dacă un fișier destinație existent nu poate fi deschis, eliminați-l și încearcă din nou. Această opțiune nu are efect dacă -n/--no-clobber este utilizată opțiunea. Cu toate acestea, se aplică independent de -i/--interactiv; nici una dintre variante nu anulează efectul celeilalte.
-i,
--interactiv
Solicitați înainte de suprascriere (înlocuiește un precedent -n opțiune).
-H Urmați legăturile simbolice specificate pe linia de comandă, dar păstrați legăturile descoperite.

Directorul care reprezintă punctul de montare în sine va fi copiat, dar nu traversat.

Dacă -v este specificat, veți vedea exact ce fișiere au fost sarit.

--Ajutor Afișați un mesaj de ajutor și ieșiți.
--versiune Ieșiți informații despre versiune și ieșiți.

În mod implicit, rar sursă fișierele sunt detectate printr-o euristică brută și corespunzătoare destinaţie fișierul este de asemenea rar. Acesta este comportamentul ales de --sparse=auto. Specifica --sparse=intotdeauna pentru a crea un rar destinaţie dosar oricând sursă fișierul conține o secvență suficient de lungă de zero octeți. Utilizare --sparse=niciodată pentru a inhiba crearea de fișiere rare.

Când --reflink[= întotdeauna] este specificat, cp realizează o copie ușoară, în care blocurile de date sunt copiate numai atunci când sunt modificate. Dacă acest lucru nu este posibil, copia eșuează; sau daca --reflink=auto este specificat, cp revine la o operație de copiere standard.

Controlul versiunii

Atunci când se utilizează -b/--backup, sufixul de rezervă este " ~ ", dacă nu este stabilit cu --sufix sau SIMPLE_BACKUP_SUFFIX. Metoda de control al versiunii poate fi selectată prin intermediul --backup=Control opțiune sau prin intermediul CONTROLUL VERSIUNII variabilă de mediu. Valorile posibile ale Control sau CONTROLUL VERSIUNII sunt:

nici unul, oprit Nu face niciodată copii de rezervă (chiar dacă --backup este dată).
numerotate, t Faceți copii de rezervă numerotate.
existent, zero Numerotat dacă există copii de rezervă numerotate, simplu in caz contrar.
simplu, nu Fă întotdeauna copii de rezervă simple.

Ca caz special, cp face o copie de rezervă a sursă cand fortași backup sunt date opţiuni şi sursăși destinaţie sunt același nume pentru un fișier obișnuit existent.

Exemple

Să presupunem că aveți un fișier numit imagine.jpgîn directorul tău de lucru, și tu vrei să-i faci o copie numită imagine-02.jpg. Ai rula comanda:

Cp imagine.jpg imagine-02.jpg

Și fișierul va fi copiat. Aici, imagine.jpg este sursa operației de copiere și imagine-02.jpg este destinatia. Ambele fișiere există acum în directorul dvs. de lucru.

Fișierele sursă și destinație pot locui, de asemenea, în directoare diferite. De exemplu,

Cp /home/chuck/pictures/picture.jpg /home/chuck/backup/picture.jpg

Va face o copie a dosarului /home/chuck/pictures/picture.jpgîn director /home/chuck/backup. Fișierul destinație va fi, de asemenea, numit imagine.jpg.

Dacă sunteți utilizatorul chuck, puteți prescurta directorul dvs. de acasă (" /home/chuck") folosind un tilde (" ~ "). De exemplu,

Cp ~/pictures/picture.jpg ~/backup/picture.jpg

Funcționează la fel ca comanda de mai sus atunci când este rulată de chuck.

Copierea mai multor fișiere într-un director

Sau poate tu vrei a copia multiplu fișiere într-un alt director. Pentru a realiza acest lucru, puteți specifica mai multe fișiere ca sursă și un nume de director ca destinație. Să presupunem că tu ești utilizatorul sally, și aveți o grămadă de fișiere în director /acasă/sally/poze/ numit imagine-01.jpg, imagine-02.jpg, etc. și doriți să le copiați în director /home/sally/picture-backup/. Această comandă va face truc:

Cp ~/pictures/picture-*.jpg ~/picture-backup cp -i fişier vechi fişier nou

Dacă fişier nou există deja, vi se va solicita:

Cp: ​​suprascrieți „fișier nou”?

Dacă tastezi y(sau da, Y, DA, sau orice altă combinație de litere mari și mici ale acestora), apoi fişier nou va fi suprascris cu o copie a origfile. Dacă introduceți orice altceva, operația va fi anulată.

Copiați un fișier într-un alt director

cp origfile /directory/subdirector

origfile. Copia va fi localizată în director /director/subdirector si va fi numit origfile.

Cp fișierul de origine /director/subdirector/.

La fel ca și comanda de mai sus. Punctul oblic ( /. ) este subînțeles în forma de mai sus a comenzii. (Punctul este un fișier special în fiecare director Linux, ceea ce înseamnă „acest director”).

Copiați un fișier într-un alt director și dați-i un nume nou

cp origfile /directory/subdirectory/newfile

Creează o copie a fișierului în directorul de lucru numit origfile. Copia va fi numită fişier nou, și va fi localizat în director /director/subdirector.

Copiați mai multe fișiere într-un alt director, folosind un wildcard

cp file* /directory/subdirector

fişierîn director /director/subdirector. Asteriscul (" * ") este un caracter metalic — un caracter special care se extinde pentru a se potrivi cu alte caractere. Mai exact, caracterul metalic asterisc se potrivește cu zero sau mai multe caractere care nu fac spații albe. De exemplu, această comandă va copia orice fișiere numite fişier, fisier001, fișier.txt, fileone.jpg, file-archive.zip, etc.

Fișier Cp*.jpg /directory/subdirectory

Copiați fiecare fișier din directorul de lucru al cărui nume începe cu fişier, și se termină cu extensia fișierului .jpg. De exemplu, ar face copii ale oricăror fișiere numite fişier, fisier001.jpg, fisier002.jpg, sau fișier-nou.jpg, etc. Copiile vor fi plasate în director /director/subdirector.

Copiați o întreagă structură de directoare într-o altă locație

cp -R /unu/doi /trei/patru

Copiați directorul Două(situat în director /unu), si totul Două conține, în directorul de destinație /trei patru. Rezultatul va fi sunat /trei/patru/doi. Directorul /Trei trebuie să existe deja pentru ca comanda să reușească. Dacă directorul patru nu există deja în director /Trei, va fi creat.

Cp file1.txt newdir

Copiază fișier1.txtîn directorul de lucru către newdir subdirectorul.

Cp /home/public_html/mylog.txt /home/public_html/backup/mylog.bak

Copiază fișierul mylog.txtîn public_html directorul în public_html/backup director ca mylog.bak.

Cp -u *.txt newdir

Copiați toate fișierele care se termină în .TXTîn newdir director, dar numai dacă fișierele nu există deja în noul director sau dacă fișierele copiate sunt mai noi.

Cp -R /home/hope/files/* /home/hope/backup

Copiază recursiv toate fișierele, directoarele și subdirectoarele din /home/speranță/fișiere directorul în /home/speranță/backup director. Dacă directorul backup nu există în director /acasă/speranță, va fi creat.

cp --backup origfile newfile

Dacă fişier nou fişier nou origfile. În mod implicit, copia de rezervă a fişier nou va fi numit fişier nou~.

cp --backup=fișierul de origine numerotat fișier nou

Dacă fişier nou există deja, faceți o copie de rezervă a celor existente fişier nouînainte de a-l suprascrie cu o copie a origfile. Copia de rezervă a fişier nou va fi numit fişier nou.~1~ dacă nu există altă copie de rezervă sau fişier nou.~2~ dacă fişier nou.~1~ există etc.

Comenzi aferente

dd— Copiați și convertiți codificarea fișierelor.
ln— Creați o legătură sau o legătură simbolică către un fișier sau director.
mv— Mutați fișierele și directoarele dintr-o locație în alta și, opțional, redenumiți-le.

Echipa cp este acel salvator care va veni mereu în ajutor. Dacă tocmai ați instalat Linux și nu îl aveți instalat, iar pentru a configura accesul la Internet trebuie să configurați anumite fișiere, atunci comanda cp ne va ajuta ca nimeni altul.
Să presupunem că pentru a configura accesul la Internet trebuie să modificați unele fișiere, dar din cauza lipsei drepturilor de acces la acestea, nu puteți face acest lucru prin interfața grafică. Dar, pe de altă parte, puteți crea un fișier folosind interfața grafică în orice folder disponibil (de exemplu /home/nume utilizator), îl puteți completa conform instrucțiunilor sau manualului și, rulând următorul, înlocuiți fișierul existent cu unul pe care l-ați creat folosind comanda cp.
De exemplu, tu, ca și mine, trebuia să schimbi /etc/network/interfaces. Personal, folosind interfața grafică, am creat fișierul de interfețe în /home/viuktor/. Am copiat conținutul originalului (fișier /etc/network/interfaces) în el, am adăugat liniile necesare și am salvat. Și apoi, folosind cp, am înlocuit fișierul /etc/network/interfaces cu fișierul /home/viuktor/interfaces..
Adevărat, atunci când efectuați această operațiune, ar trebui să acordați o atenție maximă, deoarece foarte adesea unele fișiere trebuie completate cu una sau mai multe rânduri. Prin urmare, dacă manualul spune „adăugați...”, în niciun caz nu uitați să copiați totul din original în fișierul pe care l-ați creat.

Comanda cp este folosită pentru a copia și muta fișiere.

Are următoarea sintaxă cp (parametru)<источник> <пункт назначения>

DESCRIERE În prima formă, utilitarul cp copiază conținutul fișierului fișier_sursă în fișier_țintă. În a doua formă, conținutul fiecărui fișier specificat este copiat în directorul_țintă. Numele fișierelor în sine nu se schimbă. Dacă cp detectează o încercare de a copia un fișier în sine, copierea nu este efectuată. Sunt disponibile următoarele opțiuni: -H Dacă este specificată opțiunea -R, urmați legăturile simbolice specificate pe linia de comandă, dar nu urmați legăturile simbolice întâlnite în timpul traversării arborelui de directoare. -L Dacă este specificată opțiunea -R, urmați toate legăturile simbolice. -P Dacă este specificată opțiunea -R, nu urmați nicio legătură simbolică. Acesta este modul de operare implicit. -R Dacă fișierul_sursă indică un director, cp copiază acel director împreună cu întregul arbore ierarhic de fișiere pe care îl conține. Dacă fișierul_sursă se termină în /, directorul în sine nu este copiat, ci doar conținutul său. Această opțiune spune, de asemenea, legăturilor simbolice să fie copiate, mai degrabă decât obiectele către care indică și determină crearea cp fisiere specialeîn loc să le copiezi ca pe cele normale. Directoarele create au aceleași drepturi de acces ca și directoarele sursă, indiferent de valoarea umask în vigoare pentru proces. Vă rugăm să rețineți că cp copii link-uri dure ca fișiere separate. Dacă trebuie să stocați link-uri hard, utilizați tar(1), cpio(1) sau pax(1). -f Pentru fiecare cale țintă deja existentă, ștergeți-l și creați un fișier nou fără a necesita confirmarea operațiunii, indiferent de drepturile sale de acces. (Opțiunea -f suprascrie efectul oricărei opțiuni -i sau -n specificate anterior.) -i Determină cp să solicite prin eroare standard înainte de a copia un fișier, care ar suprascrie fișierul existent. Dacă răspunsul primit de la intrarea standard începe cu „y” sau „Y”, se va încerca o copie. (Opțiunea -i suprascrie orice opțiuni -f sau -n specificate anterior.) -l ​​​​Creează legături rigide către fișierele obișnuite din ierarhie în loc să le copiezi. -n Nu suprascrieți fișierele existente. (Opțiunea -n suprascrie efectul oricărei opțiuni -f sau -i precedente.) -p Determină cp să stocheze următoarele atribute ale fiecărui fișier sursă în copia fiind creată: timpul de modificare, timpul de acces, steagurile fișierelor, modul de acces, identificatorii de utilizator și de grup, așa cum sunt permise de drepturile de acces. Dacă valorile ID-ului utilizatorului și grupului nu pot fi salvate, nu este afișat niciun mesaj de eroare și valoarea stării de ieșire returnată de program nu este modificată. Dacă fișierul sursă are set bit set-user-ID și valoarea ID-ului utilizator nu pot fi stocate, iar bitul set-user-ID din atributele de copiere nu este stocat. Dacă fișierul sursă are setat bitul set-group-ID și valoarea ID-ului grupului nu poate fi păstrată, bitul set-group-ID din atributele de copiere nu este păstrat. Dacă fișierul sursă are set-user-ID și set-group-ID setați și fie ID-ul utilizatorului, fie valoarea ID-ului grupului nu pot fi stocate, niciunul dintre biții set-user-ID și set-group-ID nu poate fi stocat în copie atributele sunt salvate. -v Imprimați mai multe informații, arătând fișierele pe măsură ce sunt copiate. Pentru fiecare fișier țintă care există deja, conținutul său este suprascris dacă permisiunile permit. Modul său de acces și ID-urile utilizatorului și grupului nu sunt modificate decât dacă este specificată opțiunea -p. În a doua formă de sintaxă, director_țintă trebuie să existe, cu excepția cazului în care au fost specificate un singur fișier_sursă care este un director și opțiunea -R. Dacă fișierul țintă nu există, se folosesc permisiunile fișierului sursă, modificate în funcție de valoarea umask (vezi csh(1)). Dacă fișierul sursă are setat bitul set-user-ID, acest bit este șters, cu excepția cazului în care fișierul sursă și fișierul destinație sunt deținute de același proprietar. Dacă fișierul sursă are setat bitul set-user-ID, acest bit este șters, cu excepția cazului în care fișierul sursă și fișierul destinație aparțin aceluiași grup și utilizatorul este membru al acelui grup. Dacă sunt setați atât biții set-user-ID cât și set-group-ID, ambele condiții de mai sus trebuie îndeplinite, altfel ambii acești biți sunt șterși. Sunt necesare permisiuni corespunzătoare pentru a crea sau a suprascrie fișiere. Utilitarul cp urmează întotdeauna legături simbolice, cu excepția cazului în care este specificată opțiunea -R (caz în care nu urmează legături simbolice în mod implicit). Opțiunile -H sau -L (împreună cu opțiunea -R) fac ca cp să urmeze legături simbolice așa cum este descris mai sus. Opțiunile -H, -L și -P sunt ignorate dacă nu este specificată opțiunea -R. În plus, aceste opțiuni se anulează reciproc, iar acțiunile comenzii sunt determinate de ultima opțiune specificată. Dacă cp primește semnalul SIGINFO (vezi argumentul de stare pentru stty(1)), numele fișierelor sursă și destinație curente, precum și progresul procentual al copiei, vor fi tipărite la ieșire standard. EXIT STATUS Utilitarul cp returnează 0 dacă are succes și >0 dacă a apărut o eroare. COMPATIBILITATE Versiunile mai vechi de cp aveau opțiunea -r. Această implementare susține această opțiune, dar comportamentul său diferă de cel istoric. Utilizarea acestei opțiuni este puternic descurajată, deoarece comportamentul ei depinde de implementare. Pe FreeBSD, -r este un sinonim pentru -RL și funcționează la fel, dacă nu este suprascris de alte indicatoare. Implementarea lui -r în versiunile mai vechi diferă prin faptul că, la recrearea ierarhiei fișierelor, fișierele speciale au fost copiate ca fiind normale. Opțiunile -v și -n nu sunt standard și utilizarea lor în scripturile de comandă nu este recomandată. VEZI ȘI mv(1), rcp(1), umask(2), fts(3), symlink(7) ISTORIC Comanda cp a fost introdusă în versiunea 1 a AT&T UNIX.

În secțiunile anterioare am menționat deja câteva comenzi pentru lucrul cu fișiere și directoare: pwd, cd, ls, ln, chmod.În această secțiune, ne vom uita (foarte pe scurt) la câteva comenzi mai frecvent utilizate.

4.6.1. Echipe chownȘi chgrp

Aceste comenzi sunt folosite pentru a schimba proprietarul unui fișier și grupul unui fișier. Numai superutilizatorul poate schimba proprietarul; grupul poate fi schimbat chiar de proprietarul fișierului sau de superutilizatorul. Pentru a avea dreptul de a schimba un grup, proprietarul trebuie, în plus, să fie membru al grupului căruia dorește să-i acorde drepturi. acest fișier. Formatul acestor două comenzi este similar:

# chown vasja nume de fișier

# chgrp usergrp nume de fișier

4.6.2. Echipă mkdir

Echipă mkdir vă permite să creați un subdirector în directorul curent. Ca argument, acestei comenzi trebuie să i se dea numele directorului care urmează să fie creat. Două intrări sunt create automat în directorul nou creat: . (link către acest catalog) și .. (link către directorul părinte). Pentru a crea un subdirector, trebuie să aveți acces de scriere la directorul curent. Puteți crea un subdirector nu în cel curent, ci într-un alt director, dar apoi trebuie să specificați calea către directorul creat:

$ mkdir /home/kos/book/glava5/part1

Echipă mkdir poate fi folosit cu următoarele opțiuni:

    modul M— setează modul de acces pentru noul director (de exemplu, -m 755) ;

    P— creați directoarele intermediare specificate (dacă acestea nu există).

4.6.3. Echipă pisică

Echipă pisică folosit adesea pentru a crea fișiere (deși puteți utiliza și comanda atingere). Prin comanda pisică Conținutul fișierului specificat (sau mai multor fișiere, dacă numele lor sunt specificate secvențial ca argumente de comandă) sunt afișate pe ieșirea standard (adică, pe ecran). Dacă comanda iese pisică redirecționați către un fișier, puteți obține o copie a unui fișier:

$ cat fisier1 > fisier2

De fapt, scopul inițial al echipei pisică a fost tocmai destinat redirecționării ieșirii, deoarece această comandă a fost creată pentru concatenare, adică pentru a combina mai multe fișiere într-unul singur:

$ cat fisier1 fisier2 ... fisierN > fisier-nou

Capacitățile de redirecționare de intrare și ieșire ale acestei comenzi sunt folosite pentru a crea fișiere noi. Pentru a face acest lucru, introduceți comanda pisică direcționați datele de la intrarea standard (adică, tastatura) și ieșirea comenzii către un fișier nou:

$ pisică > fișier nou

După ce ați introdus tot ce doriți, apăsați combinația de taste< Ctrl>+sau< Ctrl>+, iar tot ce ați introdus va fi scris fişier nou. Desigur, cele mai multe fișiere text scurte sunt create astfel.

4.6.4. Echipă cp

Deși comanda este uneori folosită pentru a copia fișiere pisică, dar în Linux există o comandă specială pentru aceasta cp. Poate fi folosit într-una din două forme:

$cp sursă destinație

$ cp director_sursă director_nou

În primul caz, fișierul sau directorul sursă este copiat, respectiv, în fișierul sau directorul destinație, iar în al doilea caz, fișierele conținute în directorul director_sursă sunt copiate în directorul director_nou. Pentru a copia, trebuie să aveți drepturi de citire pentru fișierele copiate și drepturi de scriere pentru directorul în care copiați.

Dacă un fișier existent este specificat ca țintă, conținutul acestuia va fi suprascris, așa că trebuie să fiți atenți când copiați. Cu toate acestea, puteți utiliza comanda cp cu opțiunea -i, apoi înainte de suprascriere fișier existent Vi se va cere confirmare (recomand să utilizați întotdeauna această opțiune!).

Echipa cp Există câteva alte opțiuni utile (Tabelul 4.3).

Tabelul 4.3. Opțiuni de bază pentru comanda cd.

Opțiune

Sens

Salvează timpul de modificare a fișierelor și permisiunile maxime posibile. Fără această opțiune, noului fișier i se atribuie permisiunile corespunzătoare permisiunilor utilizatorului care a lansat comanda

R sau -r

Dacă sursa este un director, atunci atât acesta, cât și toate subdirectoarele incluse în el sunt copiate, adică forma originală a arborelui de directoare este păstrată

Dacă setați această opțiune, atunci legăturile simbolice vor rămâne link-uri (altfel, în loc de link, fișierul la care este dat linkul este copiat)

Suprascrieți fișierele atunci când copiați (dacă există deja) fără avertismente suplimentare

4.6.5. Echipă mv

Dacă trebuie să mutați un fișier dintr-un director în altul în loc să îl copiați, puteți utiliza comanda mv. Sintaxa acestei comenzi este similară cu sintaxa comenzii cp. Mai mult, mai întâi copiază fișierul (sau directorul) și abia apoi șterge fișierul (directorul) original. Și opțiunile sale sunt aceleași ca acelea cp.

Echipă mv poate fi folosit nu numai pentru a muta, ci și pentru a redenumi fișiere și directoare (adică, pentru a le muta în același director). Pentru a face acest lucru, trebuie pur și simplu să specificați numele vechi și noul fișier ca argumente:

$mv nume vechi nume nou

Dar rețineți că echipa mv nu vă permite să redenumiți mai multe fișiere simultan (folosind un șablon de nume), deci comanda mv *.xxx *.aaa nu va funcționa.

Când utilizați comanda mv, la fel ca la utilizare cp, nu uitați să utilizați opțiunea -i pentru a primi un avertisment când fișierul este suprascris.

4.6.6. Echipe rmȘi rmdir

Pentru a elimina fișierele și directoarele inutile în Linux, utilizați comenzile rm(șterge fișiere) și rmdir(elimină un director gol). Pentru a utiliza aceste comenzi, trebuie să aveți acces de scriere la directorul în care se află fișierele sau directoarele de șterse. Cu toate acestea, nu este necesară permisiunea de a schimba fișierele în sine. Dacă doriți să primiți o cerere suplimentară de confirmare a operațiunii înainte de a șterge un fișier, utilizați opțiunea -i.

Dacă încercați să utilizați comanda rm(fără opțiuni) pentru a șterge un director, va fi afișat un mesaj că acesta este un director și ștergerea nu va avea loc. Pentru a șterge un director, trebuie să ștergeți toate fișierele din el și apoi să ștergeți directorul în sine folosind comanda rmdir. Cu toate acestea, puteți șterge și un director care nu este gol cu ​​toate subdirectoarele și fișierele sale dacă utilizați comanda rm cu opțiunea -r.

Dacă dai comanda rm*, apoi ștergeți toate fișierele din directorul curent. Subdirectoarele nu vor fi șterse. Pentru a șterge atât fișierele, cât și subdirectoarele din directorul curent, trebuie să utilizați și opțiunea -r. Totuși, amintiți-vă întotdeauna că Linux nu are o comandă pentru a restaura fișierele după ce acestea au fost șterse (chiar dacă v-ați prins imediat după ce ați șters din greșeală un fișier sau un director)!

Așa că gândiți-vă de două ori înainte de a șterge orice și nu neglijați opțiunea -i.

4.6.7. Echipe Mai multȘi Mai puțin

Echipă pisică vă permite să afișați conținutul oricărui fișier pe ieșire standard (pe ecran), dar este folosit în aceste scopuri foarte rar, cu excepția ieșirii fișierelor foarte mici. Faptul este că conținutul unui fișier mare clipește instantaneu pe ecran, iar utilizatorul vede doar ultimele rânduri ale fișierului. De aceea pisică utilizat în principal în scopul propus - pentru a concatena fișiere și pentru a vizualiza conținutul fișierelor (desigur, text) sunt folosite comenzi Mai multȘi Mai puțin(sau editori de text).

Comanda de filtrare Mai mult afișează conținutul unui fișier pe ecran pagini separate, doar dimensiunea tot ecranul. Pentru a vedea pagina următoare, trebuie să apăsați bara de spațiu. Apăsarea tastei< Enter>rezultă o decalare a unei linii. Pe lângă bara de spațiu și< Enter>În modul pauză, alte taste acționează ca taste de control (de exemplu, tastele vă întoarce cu un ecran înapoi), dar nu vom oferi aici o listă completă a acestora, precum și o listă de opțiuni de comandă. Pentru început, trebuie doar să vă amintiți că puteți ieși din modul de vizualizare folosind tasta< Q>, pentru că dacă nu știți acest lucru, atunci va trebui să apăsați pe bara de spațiu mult timp și plictisitor până ajungeți la sfârșitul fișierului lung. Despre toate opțiunile de comandă Mai mult poti citi in manualul online man sau info.

Utilitate Mai puțin, dezvoltat de Proiectul GNU, conține toate funcțiile și comenzile de control a ieșirii găsite în program Mai mult, și unele suplimentare, de exemplu, vă permit să utilizați tastele cursor (<Стрелка вверх>, <Стрелка вниз>, , ) pentru a vă deplasa prin text. Amintiți-vă, am vorbit deja despre asta când ne-am uitat la tooltipman interactiv.

Echipe Mai multȘi Mai puțin vă permit să căutați un subșir în fișierul care este vizualizat și comanda Mai puțin vă permite să căutați atât înainte, cât și înapoi. Pentru a organiza o căutare pentru un șir de caractere, șir trebuie tastat în linia de comandă a programului din partea de jos a ecranului (unde sunt două puncte) /șir. Dacă se găsește șirul de căutare, va fi afișat fragmentul de text corespunzător, cu șirul găsit situat chiar în partea de sus a ecranului.

4.6.8. Echipă găsiși caractere wildcard pentru numele fișierelor

O altă comandă folosită în mod obișnuit pentru a lucra cu fișiere în Linux este comanda pentru a găsi fișierul dorit găsi. Echipă găsi poate căuta fișiere după nume, dimensiune, data creării sau modificării și după alte criterii.

Sintaxa generală a comenzii găsi are următoarea formă:

găsiți [listă_directoare] criterii_de_căutare

Parametrul „directory_list” determină unde să caute fișierul necesar. Cel mai simplu mod este să setați directorul rădăcină / ca director de căutare inițial, totuși, în acest caz, căutarea poate dura foarte mult timp, deoarece va fi căutată întreaga structură de directoare, inclusiv sistemele de fișiere montate (inclusiv cele de rețea, dacă orice). Puteți reduce volumul de căutare specificând, în loc de un director rădăcină, o listă cu mai multe directoare (în mod firesc, cele în care se poate afla fișierul căutat):

$ find /usr/share/doc /usr/doc /usr/locale/doc -name instr.txt

Începutul „criteriilor de căutare”, care determină ce anume ar trebui să caute programul găsi, primul argument care începe cu "-", "(", ")"", "," sau "!" este luat în considerare. Toate argumentele care preced "search_criteria" sunt tratate ca nume ale directoarelor care trebuie căutate. Dacă nu sunt specificate nu o singură cale, căutarea se efectuează numai în directorul curent și subdirectoarele acestuia.

Cel mai adesea, căutarea este efectuată prin nume de fișiere, așa cum se arată în exemplul anterior, adică „criteriul de căutare” este specificat ca „-name nume_fișier”. În loc de opțiunea -name, puteți utiliza opțiunea -path, apoi comanda va căuta potriviri în numele complet al fișierului, urmat de cale. De exemplu, comanda

$găsește. -cale "./sr*sc"

va găsi subdirectorul „./src/misc” în directorul curent. În loc de numele complet al fișierului sau al directorului, acest exemplu folosește așa-numitul „șablon de nume”. Deoarece modelele de nume de fișiere pot fi folosite nu numai cu comanda găsi, dar și cu multe alte comenzi (inclusiv comenzile deja discutate chmod, chown, chgrp, cp, rm, cat, mv), atunci regulilor pentru crearea șabloanelor ar trebui să li se acorde o oarecare atenție.

Cel mai adesea, modelele de nume de fișiere sunt construite folosind caractere speciale „*” și „?”. Simbolul „*” este folosit pentru a înlocui un șir arbitrar de caractere. Pe Linux

    "*" - se potrivește cu toate fișierele, cu excepția celor ascunse;

    „.*” - se potrivește cu toate fișiere ascunse(dar și directorul curent " . " și nivelul directorului de mai sus " .. „: nu uita de asta!);

    „*.*” - se potrivește numai acelor fișiere și directoare care au „ . " în mijlocul numelui sau care se termină cu un punct;

    „p*r” - se potrivește cu „peter” și „piper”;

    „*c*” se potrivește atât cu „alesul” cât și cu „ciugulit”.

Pictogramă ? înlocuiește un caracter arbitrar, deci index?.htm se va potrivi cu numele index0.htm, index5.htm și indexa.htm.

Pe lângă „*” și „?” În Linux, atunci când specificați modele de nume, puteți utiliza paranteze drepte, care oferă fie o listă de caractere posibile, fie un interval în care trebuie să se încadreze caracterele posibile. De exemplu, * se potrivește cu toate numele fișierelor care încep cu a, b, c; * se potrivește cu fișierele ale căror nume se termină cu I, J, K, L, M, N, 1, 2, 3.

Acum să revenim la echipă găsiși vă vom spune mai detaliat despre ce criterii de căutare sunt posibile. Câteva exemple de criterii simple de căutare sunt enumerate în tabel. 4.4.

Tabelul 4.4. Criterii de căutare pentru comanda find.

Opțiune

Sens

Nume probă

Caută fișiere ale căror nume corespund unui model

Numele Grupului

Caută fișiere care aparțin grupului specificat

mărimea număr[c]

Caută fișiere de dimensiune număr blocuri de 512 octeți. Dacă există un c după număr, atunci dimensiunea este indicată în octeți (caractere)

Mtime număr

Caută fișiere care au fost modificate ultima dată de cele specificate număr zile în urmă

Mai nou probă

Caută fișiere care s-au modificat de când a fost modificat fișierul specificat în eșantion

Tip tip fișier

Caută fișiere de tipul specificat. Tipul este specificat de unul dintre caractere b(dispozitive orientate pe blocuri), c(dispozitive orientate pe octeți), d(fișier de catalog), f (dosar obișnuit), p(teava numita) sau l(legatura simbolica)

Puteți afla alte criterii simple dacă vă uitați la pagina de manual despre comandă găsi. Aici trebuie doar să spuneți că din criterii simple puteți construi altele mai complexe folosind operații logice și, sau sau o operație de negație, al cărei semn este un semn de exclamare. De exemplu, dacă doriți să găsiți toate fișierele ale căror nume se termină în .txt și .doc, atunci criteriul poate fi scris ca (-nume *.txt -sau -nume *.doc). Puteți combina în acest fel orice număr de criterii (și nu doar pe cele simple!). Dacă operația nu este specificată în mod explicit, este implicită -și, adică în schimb (-nume *.txt -și -nume *.doc) poate fi scris simplu (-nume *.txt -nume *.doc). Dacă se aplică o singură operaţie -și sau ! , atunci parantezele pot fi de obicei omise, iar odată cu operația -sau iar în expresiile complexe sunt necesare parantezele. Trebuie să puneți o bară oblică inversă înaintea parantezei și un spațiu după paranteză. De exemplu, dacă doriți să găsiți un director după numele său, puteți face acest lucru cu comanda

$ find /usr -name doc -type d

sau (sub rezerva regulilor de construire a criteriilor complexe)

$ find /usr \(-name doc -and -type d \)

În exemplul următor, căutăm fișiere pe baza următoarelor criterii: fie numele fișierului se termină în *.tmp, fie dimensiunea fișierului este mai mare de 100 KB.

$ găsiți /home/kos \(\(-name *.tmp \) -sau \(-size +200 \) \)

În ultimul exemplu, merită să acordați atenție faptului că există un semn „+” în fața valorii mărimii. Acest semn poate fi folosit cu orice parametru numeric din criteriile de căutare a comenzii găsi. Înseamnă că trebuie să căutați fișiere a căror valoare parametru este mai mare decât cea specificată. În consecință, semnul „ - " înseamnă că trebuie să căutați fișiere a căror valoare parametru este mai mică decât cea specificată. Dacă nu există semne + sau -, sunt căutate fișiere pentru care valoarea parametrului este egală cu cea specificată.

Pentru a termina revizuirea comenzii găsi, mai trebuie spus că după criteriul de căutare din această comandă, puteți specifica imediat o operație care va fi aplicată tuturor fișierelor găsite după criteriul specificat. Cel mai simplu exemplu de utilizare a acestei caracteristici este specificarea comenzii -imprimare.

$ find /home/kos -name *.tmp -print

care afișează o listă cu numele tuturor fișierelor găsite indicând calea plină la dosar. Această operație este utilizată implicit, adică atunci când nu sunt specificate operațiuni deloc (cum a fost cazul în toate exemplele de mai sus). Un alt exemplu de operație care se aplică tuturor fișierelor găsite este operația -exec cmd()\;, Unde cmd- comandă arbitrară coajă. Adică, în acest caz, comanda este aplicată tuturor fișierelor găsite (numele lor sunt înlocuite unul câte unul cu acolade) cmd. In spate cmd()în acest caz, trebuie să fie urmată de un punct și virgulă, scăpat de o bară oblică inversă.

De exemplu, dacă doriți să ștergeți toate fișierele din directorul curent care nu au fost accesate de utilizatori timp de 30 de zile, lansați comanda:

# găsi . -tip f -atime +30 -exec rm()\;

În loc de -exec puteți pune -ok, apoi înainte de a executa cele specificate comenzile cmd Se va solicita confirmare pentru fiecare fișier.

În general, echipa găsi este un instrument de căutare a sistemului de fișiere foarte puternic, util și extrem de adaptabil. Toate capabilitățile sale nu sunt enumerate aici, vă rugăm să citiți pagina de manual corespunzătoare. Și fiți foarte atenți la utilizarea funcțiilor de comandă, cum ar fi apelarea altor comenzi care se aplică tuturor fișierelor găsite. Amintiți-vă că schimbările sunt adesea ireversibile!

4.6.9. Echipă Despică— împărțiți fișierul în mai multe părți

Uneori este necesar să împărțiți un fișier mare în mai multe fișiere mai mici. De exemplu, luați în considerare o situație în care doriți să transferați un fișier song.mp3 în format „MP3”, cu o dimensiune de 4.894.425 de octeți, pe computerul dvs. de acasă. Nu aveți posibilitatea de a descărca acest fișier prin rețea și singura metodă posibilă de transfer este utilizarea dischetelor. Dar, deoarece fișierul nu se potrivește pe o singură dischetă, trebuie să îl împărțiți în mai multe fișiere mici și apoi să îl „asamblați” din nou. Pentru a rezolva această problemă puteți folosi comanda Despică.

Echipă Despică copiază un fișier, împărțindu-l în fișiere separate de o anumită lungime. Ca argumente, trebuie să specifice numele fișierului sursă și prefixul numelor fișierelor de ieșire. Numele fișierelor de ieșire vor fi compuse din acest prefix și două litere suplimentare `aa", `ab", `ac" etc.(fără spații sau puncte între prefix și litere). Dacă nu este dat niciun prefix de nume de fișier, atunci implicit este „x”, astfel încât fișierele de ieșire vor fi denumite `xaa", `xab”, etc..

Pe lângă argumente, puteți specifica opțiunea -b, care determină dimensiunea fișierelor de ieșire în octeți. -b trebuie să fie urmat de un număr, urmat de litera k (care indică faptul că dimensiunea fișierului de ieșire este în kiloocteți) sau m (indicând că dimensiunea este în megaocteți). Dacă opțiunea nu este specificată, atunci se presupune implicit că dimensiunea fișierelor de ieșire este de 1 MB. Astfel, pentru a transfera fișierul song.mp3 pe dischete, trebuie mai întâi să dai comanda

$ split -b1400k song.mp3 song.

copiați fișierele rezultate song.aa, song.ab, song.ac, song.ad, song.ae pe dischete separate, transferați-le pe computerul dvs. de acasă, copiați-le într-un director și restaurați fișierul original folosind comanda

$ cântec de pisică.* > cântec.mp3

după care puteți șterge fișierele temporare song.xx.

4.6.10. Comparație de fișiere și comandă de corecție

Ați observat că sarcina de a compara conținutul a două diverse fișiere apare când lucrați cu un computer surprinzător de des? Desigur, este atât de ușor să copiați un fișier și apoi uitați care versiune este mai nouă sau mai bună (în funcție de criteriile unui autor). Deci instrumentele pentru compararea fișierelor sunt pur și simplu necesare, iar Linux oferă astfel de instrumente.

Cea mai simplă dintre ele este comanda cmp. Această comandă compară pur și simplu conținutul a două fișiere octet cu octet:

$ CMP fișier1 fișier2

Dacă fișierele sunt exact aceleași, se termină în tăcere (întorcându-se la linia de comandă fără mesaje suplimentare), iar dacă fișierele diferă, tipărește numărul de linie și numărul de octeți în linia în care a apărut prima diferență.

Desigur, informațiile produse de comandă cmp, nu este suficient pentru a lua, de exemplu, o decizie cu privire la care dintre două dosare este mai valoros pentru noi. Prin urmare, merită să utilizați comanda dif pentru a obține un raport complet despre care sunt diferențele în fișierele care ne interesează. Pentru a obține un raport, spuneți doar comenzii ce fișiere să compare:

Hârtie difer $.hartie veche.noua

Un raport al diferențelor detectate va fi emis către ieșirea standard. Desigur, este mai bine să-l redirecționați către un fișier:

$ dif hârtie.hartie veche.nouă >hartie.dif

Pentru a evalua versiunile aceluiași fișier, comanda poate fi mai convenabilă sdiff, care produce rezultatul comparației ca două coloane separate prin spații. Dacă liniile cu aceleași numere în fișiere sunt diferite, atunci în ieșirea comenzii sdiff sunt separate printr-o linie verticală | . Dacă o linie există doar în primul fișier, este marcată cu < . În consecință, o linie găsită numai în al doilea fișier este marcată cu > .

Există și o comandă dif3, care vă permite să comparați 3 fișiere simultan.

Dar totuși, comanda tradițională pentru sistemele UNIX este cel mai des folosită dif. Această popularitate se explică prin faptul că raportul pe care îl creează asupra diferențelor dintre două fișiere poate fi folosit de către comandă plasture. Cel mai adesea, aceste caracteristici sunt utilizate la distribuirea actualizărilor de software. Să presupunem că unele aplicații software au fost distribuite utilizatorilor sub forma unui fișier program.c care conține sursă programe în limbaj C. După aceasta, dezvoltatorul a făcut unele corecții la program și a salvat textul ca fișier program.c.new. Este necesar să aduceți utilizatorilor textul corectat al programului. Evident, este suficient ca utilizatorii să raporteze doar corecții, adică un raport de modificare generat de comandă

$ diff program.c program.c.new > program.c.diff

Desigur, dimensiunea fișierului program.c.diff este semnificativ mai mică decât dimensiunea fișierului program.c.new, așa că ați putea obține economii semnificative la transferurile de fișiere dacă trimiteți numai fișierul program.c.diff utilizatorilor ( la urma urmei, volumul aplicațiilor software moderne este de zeci de megaocteți. Cu toate acestea, utilizatorii ar trebui să poată face aceste corecții la versiunea programului pe care o au. Această problemă poate fi rezolvată de echipă plasture. Având fișierele program.c și program.c.diff , utilizatorul poate da comanda

$ patch program.c program.c.diff > program.c.new

în urma căreia va primi programul.c.dosar nou.

V. Kostromin (kos la rus-linux dot net) - 4.6. Comenzi pentru lucrul cu fișiere și directoare