Копиране на файлове в Linux. Създаване на файлове и директории. Как да подканя преди презаписване на файлове при копиране в Linux

cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] изходен_файл целеви_файл cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] изходен_файл целева_директория В първата форма, полезността к.п, копира съдържанието на файла оригинален файл v целеви_файл... Във втората форма, съдържанието на всеки посочения файлкопирано в целева_директория... Имената на самите файлове не се променят. Ако к.поткрива опит за копиране на файл в себе си, не се извършва копиране.

Налични са следните опции: -H Ако опцията е посочена , следвайте символичните връзки, дадени в командна линияно не следвайте символни връзки, срещнати по време на преминаване през дървото на директориите. -L Ако е посочена опция следвайте всички символични връзки. -P Ако е посочена опция , не следвайте никакви символични връзки. Това е режимът на работа к.ппо подразбиране. -R Ако аргументът е оригинален файлсочи към директория, к.пкопира тази директория заедно с цялото йерархично дърво на файловете, което съдържа. Ако оригинален файлзавършва в / , не се копира самата директория, а само нейното съдържание. Тази опция също така казва на cp да копира символни връзки, а не обектите, към които сочат, и принуждава cp да създава специални файловевместо да ги копирате както обикновено. Създадените директории имат същото права за достъпкато изходни директории, независимо от стойността на процеса umask... отбележи, че к.пкопира твърди връзки като отделни файлове... Ако трябва да запазите твърди връзки, използвайте катран (1), cpio (1)или човек (1)... -f За всяко съществуващо име на целеви път, изтрийте го и създайте нов файлбез да се изисква потвърждение на операцията, независимо от правата на достъп. (Опция -fотменя някоя от предварително посочените опции -iили ). -i Ако копирането презаписва съществуващ файл, к.пще поиска потвърждение от потребителя. Ако отговорът, получен от stdin, започва с " г" или " Й", ще бъде направен опит за копиране (опция -iотменя някоя от предварително зададените опции -fили ) -l Създаване на твърди връзки към обикновени файловев йерархията, вместо да ги копирате. -n Не презаписвайте съществуващи файлове... (Опция отменя някоя от предходните опции -fили -i). -p Принуждава cp да запази следните атрибути на всеки изходен файл v копието, което се създава: време за промяна, време за достъп, флагове за файлове, режим на достъп, потребителски и групови идентификатори, доколкото е позволено от правата за достъп. Ако стойностите на идентификатора на потребителя и групата не могат да бъдат запазени, не се показва съобщение за грешка и стойността на изходното състояние, върната от програмата, не се променя. Ако оригиналният файл има зададен бит SUID и стойността на потребителския идентификатор не може да бъде запазена, битът SUID в атрибутите на копирания файл не се запазва. Ако оригиналният файл има зададен бит SGID и стойността на ID на групата не може да бъде запазена, битът SGID в атрибутите на копиране не се запазва. Ако оригиналният файл има зададени битове SUID и SGID и стойността на потребителския идентификатор или идентификатора на групата не може да бъде съхранена, нито един от битовете SUID и SGID не се съхраняват в атрибутите на копиране. -v Показва повече информация, показвайки файловете, когато са копирани.

За всеки целеви файл, който вече съществува, съдържанието му се презаписва, ако разрешенията позволяват. Неговият режим на достъп и потребителски и групови идентификатори не се променят, освен ако опцията не е посочена -стр.

Във втората синтактична форма целева_директориятрябва да съществува, освен ако не е посочено едно оригинален файлкоето е директория и опция .

Ако целевият файл не съществува, се използват разрешенията на изходния файл, модифицирани според стойността umask(см. csh (1)). Ако изходният файл има зададен бит SUID, този бит се изчиства, освен ако изходният и целевият файл не споделят един и същ собственик. Ако изходният файл има зададен бит set-user-ID, този бит се изчиства, освен ако изходният файл и целевият файл принадлежат към една и съща група и потребителят е член на тази група. Ако и двете битове SUID и SGID са зададени, и двете от горните условия трябва да бъдат изпълнени, in в противен случайи двата бита се изчистват.

За създаване или презаписване на файлове са необходими подходящи права за достъп.

Програма к.пвинаги следва символни връзки, освен ако не е посочена опция (в този случай той не следва символни връзки по подразбиране). Настроики или (заедно с опцията ) водят до факта, че к.пще следват символни връзки, както е описано по-горе. Настроики , и игнорира се, ако опцията не е посочена ... Освен това тези опции се отменят една друга и действията на командата се определят от опцията, която е посочена последно.

Ако к.пприема сигнал SIGINFO(виж аргумента състояниеза stty (1)), На stdoutще се покажат имената на текущите изходни и целеви файлове, както и прогресът на копирането в проценти.

СТАТУТ НА ЗАВЪРШАВАНЕ

Програма к.псе завръща 0 в случай на успешно завършване и >0 в случай на грешка.

СЪВМЕСТИМОСТ

По-стари версии к.пимаше възможност -r... Тази реализация поддържа тази опция, но нейното поведение се различава от историческото. Използването на тази опция е силно обезкуражено, тъй като поведението й зависи от изпълнението. V , -rе синоним на -RLи работи по същия начин, освен ако не е отменен от други флагове. Изпълнение -rв по-старите версии беше различно по това, че при пресъздаване на файловата йерархия специалните файлове бяха копирани както обикновено.

Настроики -vи са нестандартни и използването им в командни скриптовеНе се препоръчва.

ВИЖТЕ СЪЩО

mv (1), rcp (1), umask (2), fts (3), символна връзка (7)

СТАНДАРТИ Приема се, че помощната програма cp е съвместима с IEEE Std 1003.2 ("POSIX.2" ").

В предишните раздели вече споменахме някои команди за работа с файлове и директории: pwd, cd, ls, ln, chmod.В този раздел ще разгледаме (много накратко) няколко по-често използвани команди.

4.6.1. Команди chownи chgrp

Тези команди се използват за промяна на собственика на файла и групата на файла. Само суперпотребителят може да промени собственика, собственикът на файла или суперпотребителят може да промени групата. За да има право да променя групата, собственикът трябва допълнително да е член на групата, на която иска да даде права на този файл... Форматът на тези две команди е подобен:

# chown vasja име на файл

# chgrp usergrp име на файл

4.6.2. Команда mkdir

Команда mkdirви позволява да създадете поддиректория в текущата директория. На тази команда трябва да бъде дадено името на директорията, която ще бъде създадена като аргумент. В новосъздадената директория автоматично се създават два записа: . (връзка към същата директория) и .. (връзка към родителската директория). За да създадете поддиректория, трябва да имате достъп за запис до текущата директория. Можете да създадете поддиректория не в текущата, а в друга директория, но след това трябва да посочите пътя до създадената директория:

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

Команда mkdirможе да се използва със следните опции:

    М режим- задава режима на достъп за новата директория (напр. -м 755) ;

    П- създаване на посочените междинни директории (ако не съществуват).

4.6.3. Команда котка

Команда коткачесто се използва за създаване на файлове (въпреки че можете да използвате и командата докосване). По команда коткасъдържанието на посочения файл (или няколко файла, ако имената им са посочени последователно като командни аргументи) се отпечатва на стандартен изход (т.е. на екрана). Ако изходът на командата е коткапренасочване към файл, можете да получите копие на файл:

$ котка файл1> файл2

Всъщност първоначалната цел на екипа коткаТочно това трябваше да пренасочи изхода, тъй като тази команда е създадена за конкатенация, тоест комбиниране на няколко файла в един:

$ cat file1 file2 ... fileN> нов-файл

Именно възможностите за пренасочване на входа и изхода на тази команда се използват за създаване на нови файлове. За да направите това, въведете командата коткаизпращане на данни от стандартен вход (т.е. от клавиатурата) и извеждане на команда към нов файл:

$ cat> нов файл

След като напишете каквото искате, натиснете клавишната комбинация< Ctrl>+или< Ctrl>+и каквото и да сте въвели, ще бъде записано нов файл... Разбира се, по този начин се създават предимно кратки текстови файлове.

4.6.4. Команда к.п

Въпреки че командата понякога се използва за копиране на файлове коткано в Linux има за това специален екип к.п... Може да се използва в една от двете форми:

$ cp източник дестинация

$ cp изходна_директория нова_директория

В първия случай изходният файл или директория се копират съответно в целевия файл или директория, а във втория случай файловете, съдържащи се в директорията source_directory, се копират в директорията new_directory. За да копирате, трябва да имате достъп за четене на копираните файлове и достъп за запис до директорията, в която се прави копирането.

Ако съществуващ файл е посочен като цел, съдържанието му ще бъде презаписано, така че бъдете внимателни, когато копирате. Можете обаче да използвате командата к.пс опцията -i, тогава ще бъде поискано потвърждение, преди да презапишете съществуващия файл (горещо препоръчвам винаги да използвате тази опция!).

Екипът к.пима още няколко полезни опции(Таблица 4.3).

Таблица 4.3.Основните опции за командата cd.

Вариант

смисъл

Запазва времето за промяна на файла и максимално възможните разрешения. Без тази опция разрешенията за новия файл се задават в съответствие с разрешенията на потребителя, който е изпълнил командата.

Рили -r

Ако източникът е директория, тогава и тя, и всички поддиректории, включени в нея, се копират, тоест оригиналната форма на дървото на директориите се запазва

Ако зададете тази опция, тогава символните връзки ще останат връзки (в противен случай вместо връзката се копира файлът, към който е копирана връзката)

Презаписвайте файлове при копиране (ако има такива) без допълнителни предупреждения

4.6.5. Команда mv

Ако не трябва да копирате, а да премествате файл от една директория в друга, можете да използвате командата mv... Синтаксисът за тази команда е същият като за командата к.п... Освен това първо копира файла (или директорията) и едва след това изтрива оригиналния файл (директория). И нейните опции са същите като к.п.

Команда mvможе да се използва не само за преместване, но и за преименуване на файлове и директории (тоест преместването им в рамките на една директория). За да направите това, просто трябва да посочите старото и новите имена на файлове като аргументи:

$ mv старо име ново име

Но имайте предвид, че командата mvне позволява преименуване на няколко файла наведнъж (използвайки шаблон на име), така че командата mv * .xxx * .yyyняма да работи.

При използване на командата mv, както и при използване к.п, не забравяйте да използвате опцията -i, за да получите предупреждение, когато файлът бъде презаписан.

4.6.6. Команди rmи rmdir

За премахване ненужни файловеи директориите в Linux са командите rm(изтрива файлове) и rmdir(премахва празната директория). За да използвате тези команди, трябва да имате достъп за запис до директорията, където се намират файловете или директориите, които трябва да бъдат изтрити. В този случай не се изисква разрешение за промяна на самите файлове. Ако искате да получите допълнителна подкана за потвърждение, преди да изтриете файла, използвайте опцията -i.

Ако се опитате да използвате командата rm(без опции), за да изтриете директория, след което ще се покаже съобщение, че това е директория и изтриването няма да се случи. За да изтриете директория, трябва да изтриете всички файлове в нея и след това да изтриете самата директория с помощта на командата rmdir... Можете обаче да изтриете непразна директория с всички нейни поддиректории и файлове с помощта на командата rmс опцията -r.

Ако дадеш командата rm *след това изтрийте всички файлове в текущата директория. Това няма да изтрие поддиректории. За да изтриете както файлове, така и поддиректории на текущата директория, трябва също да използвате опцията -r... Въпреки това, винаги помнете, че Linux няма команда за възстановяване на файлове, след като ги изтриете (дори ако се хванете веднага след погрешно изтриване на файл или директория)!

Така че помислете два пъти, преди да изтриете нещо и не пренебрегвайте опцията -i.

4.6.7. Команди Повече ▼и по-малко

Команда коткави позволява да показвате съдържанието на всеки файл на стандартния изход (към екрана), но се използва за тази цел много рядко, с изключение на изхода на много малки файлове. Въпросът е, че съдържанието голям файлмигновено се плъзга по екрана и потребителят вижда само последни редовефайл. Ето защо коткасе използва главно по предназначение - за свързване на файлове и за преглед на съдържанието на файлове (разбира се, текст), използвайте командите Повече ▼и по-малко(или текстови редактори).

Команда за филтриране Повече ▼отпечатва съдържанието на файла на екрана отделни страници, размерът е точно в цял екран... Да видиш Следваща страница, натиснете клавиша за интервал. Натискане на клавиш< Enter>води до изместване на един ред. С изключение на интервала и< Enter>в режим на пауза някои други клавиши действат като контролни клавиши (например клавиш ви връща един екран назад), но тук няма да предоставим пълен списък с тях, както и списък с опции за команди. Като начало, просто трябва да запомните, че можете да излезете от режима на гледане с помощта на ключа< Q>, защото ако не знаете това, тогава ще трябва да натискате интервала дълго и досадно, докато стигнете до края дълъг файл... Относно всички опции за команди Повече ▼можете да прочетете онлайн ръководствочовек или информация.

Полезност по-малкоразработен от проекта GNU съдържа всички функции и команди за управление на изхода, налични в програмата Повече ▼, а някои допълнителни, например, ви позволяват да използвате клавишите на курсора (<Стрелка вверх>, <Стрелка вниз>, , ), за да се движите по текста. Не забравяйте, че вече говорихме за това, когато разгледахме интерактивния човек с подсказки.

Команди Повече ▼и по-малкови позволяват да търсите подниз във файла, който се сканира, и командата по-малкови позволява да търсите както напред, така и назад. За да организирате търсенето на низ от знаци, въведете string в командния ред на програмата в долната част на екрана (където е двоеточие) / string. Ако низ за търсенеще бъде намерен, съответният текст ще бъде показан и намереният ред ще бъде в самия горен край на екрана.

4.6.8. Команда намирами заместващи знаци за имена на файлове

Друга често използвана команда за работа с файлове в Linux е командата за намиране на желания файл намирам... Команда намирамможе да търси файлове по име, размер, дата на създаване или модификация и някои други критерии.

Общ команден синтаксис намирамизглежда така:

find [directory_list] search_criteria

Параметърът "directory_list" определя къде да търсите желания файл... Най-лесният начин е да посочите основната директория / като начална директория за търсене, но в този случай търсенето може да отнеме много време, тъй като цялата структура на директорията ще бъде сканирана, включително монтирани файлови системи (включително мрежови файлови системи, Ако някой). Можете да намалите обема на търсене, като посочите вместо една основна директория списък от няколко директории (разбира се, тези, в които може да се намира желания файл):

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

Началото на "search_criteria", който определя какво точно трябва да търси програмата намирам, първият аргумент, започващ с "-", "(", ")" ",", "или"! "се разглежда. Всички аргументи, предхождащи" search_criteria "се третират като имената на директориите, които ще бъдат търсени. няма път, търсенето се извършва само в текущата директория и нейните поддиректории.

Повечето търсения се извършват по имена на файлове, както е показано в предишния пример, тоест „search_criteria“ е посочено като „-name filename“. Вместо опцията -name, можете да използвате опцията -path, след което командата ще търси съвпадения в пълното име на файла, включително пътя. Например командата

$ намерете. -път "./sr*sc"

намира поддиректорията "./src/misc" в текущата директория. Вместо пълното име на файл или директория, този пример използва така наречения "шаблон на име". Тъй като шаблоните за имена на файлове могат да се използват не само с командата намирам, но и с много други команди (включително вече разгледаните команди chmod, chown, chgrp, cp, rm, cat, mv), тогава трябва да се обърне известно внимание на правилата за съставяне на шаблони.

Най-често шаблоните за имена на файлове се изграждат с помощта на специалните символи "*" и "?". "*" се използва за замяна на произволен низ от знаци. На Linux

    "*" - съвпада с всички файлове с изключение на скрити;

    ". *" - отговаря на всички скрити файлове(но също и текущата директория " . "и директорията едно ниво по-горе" .. ": не забравяйте за това!);

    "*. *" - съвпада само с тези файлове и директории, които имат " . „в средата на име или завършва с точка;

    "p * r" - съвпада с "peter" и "piper";

    "* c *" съответства както на "picked", така и на "peck".

икона ? замества един произволен знак, така че index? .htm ще съвпада с имената index0.htm, index5.htm и indexa.htm.

С изключение на "*" и "?" на Linux, когато задавате шаблони на имена, можете да използвате квадратни скоби, в който е даден или списък с възможни знаци, или интервал, в който трябва да попадат възможните знаци. Например, * съответства на всички имена на файлове, започващи с a, b, c; * съответства на файлове, чиито имена завършват на I, J, K, L, M, N, 1, 2, 3.

Сега обратно към командата намирами да ви кажа повече за възможните критерии за търсене. Няколко примера за прости критерии за търсене са изброени в табл. 4.4.

Таблица 4.4.Критерии за търсене за командата find.

Вариант

смисъл

име проба

Търси файлове, чиито имена съответстват на шаблон

Име на групата

Търси файлове, принадлежащи към посочената група

размер номер[° С]

Търси файлове с размер от номер 512-байтови блокове. Ако след числото има символ c, тогава размерът е посочен в байтове (знаци)

Mtime номер

Търси файлове, които са били последно променени от указаното номерпреди дни

По-нова проба

Търси файлове, които са се променили, след като файлът, посочен в извадката, е бил променен

Тип тип файл

Търси файлове от посочения тип. Типът се определя от един от знаците б(блоково ориентирани устройства), ° С(байт-ориентирани устройства), д(файл от директория), е(обикновен файл), стр(наименована тръба) също л(символна връзка)

Можете да разберете други прости критерии, като погледнете man страницата за командата намирам... Тук е необходимо само да се каже, че от прости критерии е възможно да се изградят по-сложни с помощта на логически операции и, илиили операция на отрицание, символизирана с удивителен знак. Например, ако искате да намерите всички файлове, чиито имена завършват на .txt и.doc, тогава критерият може да бъде написан като (-име * .txt -или -име * .doc)... Можете да комбинирате по този начин произволен брой критерии (и не само прости!). Ако операцията не е посочена изрично, тогава се приема , тоест вместо (-име * .txt -и -име * .doc)може да се напише просто (-име * .txt -име * .doc)... Ако се приложи само една операция или ! , тогава скобите обикновено могат да бъдат пропуснати и с операцията -илиа в сложните изрази се изискват скоби. Трябва да използвате обратна наклонена черта преди скобите и интервал след скобите. Например, ако искате да намерите директория по нейното име, можете да направите това с командата

$ find / usr -name doc -type d

или (следвайки правилата за конструиране на сложни критерии)

$ find / usr \ (- име doc -и -type d \)

В следващия пример търсим файлове според този критерий: или името на файла завършва на * .tmp, или размерът на файла е повече от 100 KB.

$ find / home / kos \ (\ (- име * .tmp \) -или \ (- размер +200 \) \)

В последния пример имайте предвид, че има знак "+" пред стойността на размера. Този знак може да се използва с всеки цифров параметър в критериите за търсене на командата намирам... Това означава, че трябва да търсите файлове, чиято стойност на параметъра е по-голяма от посочената. Съответно, знакът " - "означава търсене на файлове, чиято стойност на параметъра е по-малка от посочената. Ако няма знаци + или -, се търсят файлове, чиято стойност на параметъра е равна на посочената.

За да приключите прегледа на екипа намирам, трябва също да кажа, че след критерия за търсене в тази команда, можете веднага да зададете операция, която ще се прилага към всички файлове, намерени по посочения критерий. Най-простият пример за използване на тази функция е определянето на командата -печат.

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

чрез който се извежда списък с имената на всички намерени файлове, показващ пълен пъткъм файла. Тази операция се използва по подразбиране, т.е. когато не са посочени никакви операции (както беше във всички примери по-горе). Друг пример за операция, приложена към всички намерени файлове, е операцията -exec cmd () \;, където cmd- произволен отбор черупка черупка... Тоест в този случай командата се прилага към всички намерени файлове (имената им се заменят на свой ред с къдрави скоби) cmd... Пер cmd ()в този случай трябва да се последва точка и запетая, която се избягва с обратна наклонена черта.

Например, ако искате да изтриете всички файлове в текущата директория, които не са били достъпни от потребители в продължение на 30 дни, изпълнете командата:

# намирам. -type f -atime +30 -exec rm () \;

Вместо -exec, можете да поставите -ok, след това преди да изпълните посочения cmd командище бъде поискано потвърждение за всеки файл.

Като цяло отборът намираме много мощен, полезен и изключително адаптивен инструмент за търсене на файлова система. Всички негови функции не са изброени тук, вижте съответната страница на ръководството. И бъдете много внимателни при използването на командни функции, като извикване на други команди, за да се прилагат към всички файлове, които намери. Не забравяйте, че промените често са необратими!

4.6.9. Команда разделят- разделяме файла на няколко части

Понякога е необходимо да разделите един голям файл на няколко по-малки файла. Например, помислете за ситуация, в която искате да се прехвърлите на вашия домашен компютър song.mp3 файл в MP3 формат, с размер 4 894 425 байта. Нямате възможност да прехвърлите този файл по мрежата и единственият възможен начин за прехвърляне е да използвате флопи дискове. Но тъй като файлът не се побира на една дискета, е необходимо да го разделите на няколко малки файла и след това да го „съберете“ отново. За да разрешите този проблем, можете да използвате командата разделят.

Команда разделяткопира файл, като го разделя на отделни файлове дадена дължина... Като аргументи трябва да посочи името на изходния файл и префикса на имената на изходните файлове. Имената на изходните файлове ще бъдат съставени от този префикс и две допълнителни букви `аа", `ab", `ac" и др.(без интервали или точки между префикса и буквите). Ако не е посочен префикс на името на файла, по подразбиране е 'x', така че изходните файлове ще бъдат именувани `xaa", `xab' и т.н..

В допълнение към аргументите можете да посочите опцията -b, която определя размера на изходните файлове в байтове. -b трябва да бъде последвано от число, последвано от буквата k (указваща, че размерът на изходния файл е в килобайти) или m (което означава, че размерът е в мегабайти). Ако тази опция не е посочена, тогава размерът по подразбиране на изходните файлове се приема за 1 MB. По този начин, за да прехвърлите файла song.mp3 на флопи дискове, първо трябва да издадете командата

$ split -b1400k песен.mp3 песен.

копирайте получените файлове song.aa, song.ab, song.ac, song.ad, song.ae на отделни флопи дискове, прехвърлете ги на домашния си компютър, копирайте в директория и възстановете оригиналния файл с помощта на командата

$ котка песен. *> песен.mp3

след това можете да изтриете временните файлове song.xx.

4.6.10. Сравняване на файлове и командата patch

Забелязахте ли, че задачата за сравняване на съдържанието на две различни файловесе случва изненадващо често при работа с компютър? Разбира се, толкова лесно е да копирате файл и след това забравяте коя версия е по-нова или по-добра (според един автор, ръководени критерии). Така че инструментите за сравняване на файлове са от съществено значение и Linux предоставя такива инструменти.

Най-простата от тях е командата cmp... Тази команда просто сравнява съдържанието на два файла байт по байт:

$ cmp файл1 файл2

Ако файловете са абсолютно еднакви, той излиза безшумно (връща се в командния ред без допълнителни съобщения), а ако файловете се различават, се отпечатват номера на реда и байта в реда, където се появява първата разлика.

Разбира се, информацията, предоставена от командването cmp, не е достатъчно, за да вземем например решение кой от двата файла е по-ценен за нас. Затова си струва да използвате командата разлза пълен отчет какви са разликите в интересуващите ни файлове. За да получите отчет, просто кажете на командата кои файлове да сравните:

$ diff хартия.стара хартия.нова

Докладът за разликата ще бъде издаден на стандартен изход. Естествено, по-добре е да го пренасочите към файл:

$ diff хартия.стара хартия.нова> хартия.диф

За оценка на версиите на един и същи файл може да е по-удобно да използвате командата sdiffкоето дава резултата от сравнението като две колони, разделени с интервали. Ако редовете с еднакви номера във файловете се различават, тогава в изхода на командата sdiffте са разделени с тръба | ... Ако ред присъства само в първия файл, той се маркира с < ... Съответно, ред, който се среща само във втория файл, е маркиран със знака > .

Има и команда diff3, което ви позволява да сравнявате 3 файла наведнъж.

Но все пак най-често използваната команда, която е традиционна за UNIX системите, е разл... Това търсене за него се обяснява с факта, че отчетът за разликите между двата файла, които създава, може да се използва от командата кръпка... Най-честата употреба на тези функции е при разпространението на актуализации. софтуер... Да предположим, че някое софтуерно приложение е изпратено на потребителите като файл program.c, съдържащ източник C програми. След това разработчикът направи някои корекции в програмата и запази текста като файл program.c.new. Необходимо е да се донесе коригираният текст на програмата на потребителите. Очевидно потребителите трябва да съобщават само корекции, т.е. отчет за промяна, генериран от командата

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

Естествено, размерът на файла program.c.diff е значително по-малък от размера на файла program.c.new, така че човек може да постигне значителни спестявания при прехвърляне на файлове, ако само файлът program.c.diff бъде изпратен на потребителите ( в края на краищата, обемите на съвременните софтуерни приложенияса десетки мегабайта); обаче потребителите трябва да могат да правят тези корекции в своята версия на програмата. Тази задача се решава от екипа кръпка... Наличието на файлове program.c и program.c.diff , потребителят може да даде команда

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

в резултат на което ще получи файла program.c.new.

В. Костромин (kos at rus-linux dot net) - 4.6. Команди за работа с файлове и директории cp - копиране на файлове и директории

ПРЕГЛЕД

к.п [ настроики] файл начин к.п [ настроики] файл... каталогОпции на POSIX: [-fiprR] [--] Допълнителни опции POSIX 1003.1-2003: [-HLP] GNU file-utils 4.0 опции ( кратка форма): [-abdfilprsuvxPR] [-С НАСТАВКА] [-V (номериран, съществуващ, прост)] [--backup =КОНТРОЛ] [--рядко =КОГА] [--помогне] [--версия] [--] Допълнителни опции за GNU file-utils 4.1 (кратка форма): [-HLP] [--copy-contents] [--без запазване] [--отговор =КАК] [--премахване-дестинация] [--strip-trailing-slashes] [--целева-директория =DIR]

ОПИСАНИЕ

к.пкопира файлове (или директории, ако бъде поискано). Можете да копирате един файл в друг, даден файл, или копирайте колкото искате файлове в посочената директория. Ако последният аргумент е съществуваща директория, тогава к.пкопира всеки оригинал файлкъм тази директория (запазване на имената). В противен случай, ако са дадени само два файла, тогава к.пкопира първия файл във втория. Ако са дадени повече от два аргумента без опции и последният аргумент не е име на директория, тогава ще бъде генерирана грешка. (Значи, ако / a ~ е директория, тогава cp -r / a / b ще копира / a към / b / a и / a / x към / b / a / x в случай, че / b вече съществува, но същата команда ще копира / a към / b и / a / x към / b / x, ако / b не съществува, или ще се провали, ако / b е обикновен файл). Разрешенията за файлове и директории ще бъдат същите като на оригинални файловелогически умножено (И) по 0777 (с други думи, новите права ще изчистят лепкавите, setuid и setgid битове - Ед.), а също и като се вземат предвид umask(1) потребителят (освен ако не е посочена опцията -p). (Но по време на рекурсивно копиране на директории, новосъздадените директории ще получат временно правата, логически добавени (ИЛИ) със стойността S_IRWXU (0700), за да позволят четене, запис и търсене в новосъздадените директории). Когато се опитате да копирате файл в себе си, нищо няма да се случи (освен възможно съобщение за грешка). Когато файл се копира в друг съществуващ файл, той се отваря с помощта на повикването open (път, O_WRONLY | O_TRUNC). Когато копирате в новосъздадения файл, той се създава с помощта на извикването open (път, O_WRONLY | O_CREAT, режим). Ако тези извиквания не успеят, тогава се счита, че файлът съществува и за к.псе опита да го премахне (прекратяване на връзката), трябва да посочите опцията -f. Ако изтриването е успешно, тогава всичко работи както в случая с нов файл.

НАСТРОИКИ POSIX

POSIX има четири и половина опции: -fАко е необходимо, изтрива съществуващи файлове за копиране. (Виж по-горе) -iПита дали искате да презапишете съществуващите файлове, в които се копират. (Заявката се издава на стандартен изход за грешка и отговорът се чете от стандартен вход. Копирането се извършва само ако отговорът е да). -стрЗапазва оригиналните параметри на файла като собственик, група, разрешения (включително suid и sgid битове), последно модифицирано време и време последен достъпкъм файла. В случай, че настройката на собственика или групата доведе до грешка, битовете suid и sgid се изчистват. (Обърнете внимание, че впоследствие оригиналният файл и неговото копие може да имат различно времепоследен достъп, тъй като операцията по копиране е достъп до оригиналния файл). Копирайте директории рекурсивно; да се справят правилно със ситуации, когато се срещат обекти, които не са обикновени файлове или директории. (Например, копие на FIFO или специален файл също би било FIFO или специален файл). -rКопирайте директории рекурсивно; изпълнява някои действия, недефинирани от стандарта, когато се натъкнат обекти, които не са обикновени файлове или директории. (По този начин е разрешено и всъщност одобрено присъствието на опции -rкато синоним на -R. Въпреки това, глупавото поведение, показано от версията к.пне е забранено в GNU 4.0.) -- Завършва списъка с опции.

ДОПЪЛНИТЕЛЕН НАСТРОИКИ POSIX 2003

Стандартът POSIX 1003.1-2003 добавя три опции, които определят как да се обработват символни връзки. Когато се извършва нерекурсивно копиране, символните връзки се деименуват. Когато се извършва рекурсивно копие с опцията -r, резултатите зависят от реализацията. Когато правите рекурсивно копиране с помощта на опцията -R: Преименува символичните връзки, посочени в списъка с параметри. Не деименува символни връзки, които се появяват по време на рекурсивно копиране, а просто ги копира. Преименува всички символни връзки, както посочени в списъка с параметри, така и срещани по време на рекурсивно копиране. Не деименува никакви символни връзки, посочени в списъка с параметри или срещани по време на рекурсивно копиране. Просто ги копира като символични връзки. Няма опция по подразбиране - трябва да посочите една от опциите, за да постигнете желания резултат.

ПОДРОБНОСТИ ВЕРСИИ GNU

Обикновено файловете се записват точно както са били прочетени. Вижте по-долу за опция -- рядъккоето е изключение. По подразбиране cp не копира директории (вижте опцията -r). к.побикновено отказва да копира файла в себе си, със следното изключение: ако са дадени опциите -- сила -- резервно копиеи при което оригинален файли файл, в които се извършва копиране, са идентични и са обикновени файлове, тогава к.пще направи резервно копие на файла: редовно или номерирано, както казвате. Това е полезно, когато просто искате да архивирате съществуващ файл, преди да го модифицирате. По подразбиране символичните връзки не се деименуват.

НАСТРОИКИ GNU

-а, --архивЗапазва структурата и атрибутите на оригиналните файлове, ако е възможно при копиране (но не запазва структурата на директорията). Еквивалентно на опциите за настройка -dpPR. Вижте дискусията резервни копияПо-долу. --копие-съдържание(след file-utils 4.1) Във file-utils 4.0 се правят глупави неща, опитвайки се да копира съдържанието на устройството и FIFO файловете по време на рекурсивно копиране. Никога не използвайте тази опция. С него `cp" може просто да виси, четейки FIFO или / dev / tty, или да запълни целия диск чрез копиране на / dev / нула. Копира символните връзки като символни връзки, а не файловете, към които сочат, и запазва твърди връзки между оригиналните файлове в копията. Във file-utils 4.0 дългата опция --no-dereference беше синоним на опцията -d, но във file-utils 4.1 тя е синоним на опцията -P, докато опцията -d е еквивалентна на -- no-dereference --preserve options = връзки. -f, -- силаИзтрива съществуващи файлове, ако възникне грешка при отварянето им за четене и никога не иска потвърждение, преди да го направи. (Това поведение започва с file-utils 4.1. Във file-utils 4.0 тази опция беше еквивалентна на нова опция--remove-destination.) (тъй като file-utils 4.1) Вижте описанието на POSIX по-горе. -аз, --интерактивенПита дали искате да презапишете съществуващите обикновени файлове. -л, --връзкаПрави твърди връзки вместо да копира обикновени файлове (не директории). -L, -- дереференция(тъй като file-utils 4.1) Вижте описанието на POSIX по-горе. --без запазване =АТРИБУТИ(тъй като file-utils 4.1) Не запазва посочените атрибути. Вижте опцията --preserve по-долу. -p, --запазиПредпазва оригинални параметрифайл като собственик, група, разрешения и времеви печати. --запази =АТРИБУТИ(от file-utils 4.1) Параметърът ATTRIBUTES тук може да бъде една от стойностите "mode" (разрешения), "ownership" (собственик и група), "timestamps" (timestamps), "links", "all" ( всички от горепосочените). -P, --без преференция(тъй като file-utils 4.1) Вижте описанието на POSIX по-горе. Тази опция заменя опцията -P във file-utils 4.0, която беше синоним на опцията --parents. Вижте също опцията -d по-горе. --родители(тъй като file-utils 4.0 също -P) Конструира името на всеки копиран файл, като добавя наклонена черта (/) към името на копираната директория и посоченото пълно име на изходния файл. Последният даден аргумент к.птрябва да бъде името на съществуваща директория. Например, командата cp --parents a / b / c съществуващ_дир копира файл a / b / c в съществуващ_ката / a / b / c, създавайки липсващи междинни директории. -rВъв file-utils 4.1: синоним на опцията -R. Във file-utils 4.0: Копира директории рекурсивно, копира всякакви не-директории и несимволични връзки (т.е. FIFO и специални файлове), сякаш са обикновени файлове. Това глупаво поведение може да се получи във file-utils 4.1, като посочите опцията --copy-contents. -R, -- рекурсивенКопира директории рекурсивно, като защитава не-директории. --отговор =КАК(тъй като file-utils 4.1) Тук аргументът HOW може да приеме една от стойностите "да", "не", "запитване", определяйки кой отговор ще бъде даден автоматично на всички въпроси: "да", "не" или "заявка" потребител съответно. --remove-destination(от file-utils 4.1) Изтрива всеки съществуващ файл (където е копиран) преди копиране. Във file-utils 4.0 тази опция беше имплицитно включена с опцията -f. --рядко =КОГАРядък файл съдържа дупки - поредици от нулеви байтове, които не заемат физически блокове на диска; системно повикване read ги чете като нули. Този подход може да спести и двете дисково пространствои увеличаване на скоростта на работа, защото много двоични файловесъдържат много последователни нулеви байтове. По подразбиране, к.поткрива дупки в изходния файл с помощта на проста евристика и прави съответния изходен файл рядък. Параметър КОГАможе да приеме следните стойности: АвтоматиченПоведение по подразбиране: Изходният файл е рядък, ако входният файл също е рядък. винагиВинаги редувайте изходния файл. Това е полезно, когато входният файл се намира във файлова система, която не поддържа редки файлове, а изходният файл ще бъде разположен във файлова система, която го поддържа. никогаНикога не оскъдни изходни файлове. Ако намерите приложение за тази опция, моля, уведомете ни. --strip-trailing-slashes(от file-utils 4.1) Премахнете всички последващи символи `´ от всеки аргумент. (Това може да промени интерпретацията на аргумента, ако е символна връзка към директория.) -с, -- символична връзкаПрави символични връзки вместо да копира не-директории. Всички имена на изходни файлове трябва да са пълни, тоест да започват с /, освен ако в текущата директория не бъдат създадени символни връзки. Тази опция генерира съобщение за грешка, ако системата не поддържа символни връзки. Резервен суфикс, вижте по-долу. --target-directory =КАТАЛОГ(тъй като file-utils 4.1) Указва дестинационната директория за копиране. Предназначен за използване с xargs(1) като например в "ls | xargs cp --target- directory = .. / d". -у, --актуализацияНе копирайте не-директории, които вече съществуват на мястото за копиране, ако имат същото или по-ранно време за промяна. -v, -- многословенОтпечатайте името на всеки файл, преди да го копирате. -х, --една файлова системаПропускане на поддиректории, разположени на файлови системиразличен от мястото, където е започнало копирането.

НАСТРОИКИ РЕЗЕРВА КОПИЯ GNU

GNU версии на програми като к.п, mv, вътре, Инсталирайи кръпкаможе, ако е необходимо, да прави резервни копия на файлове, които ще бъдат презаписани, модифицирани или унищожени. По желание файловете се архивират с опцията -b. Как ще бъдат наречени се дава от опцията -V. Ако името на архивния файл е създадено чрез добавяне на суфикс към името на оригиналния файл, тогава суфиксът се посочва с помощта на опцията -S. -b, -- резервно копиеПравете резервни копия на файлове, които ще бъдат презаписани или изтрити. --резервно =КОНТРОЛ(След fileutils-4.1.) НАСТАВКА, --суфикс =НАСТАВКАДобавете НАСТАВКАкъм името на файла, когато го архивирате. Ако тази опция не е посочена, суфиксът може да бъде зададен и с помощта на променливата на средата SIMPLE_BACKUP_SUFFIXАко не са посочени нито опция, нито променлива, суфиксът по подразбиране е ~. -V МЕТОД, --version-control =МЕТОДОпределя как ще бъдат именувани архивираните файлове. Аргумент МЕТОДможе да бъде номериран (или t), съществуващ (или нулев) и никога (или прост). Ако тази опция не е посочена, ще се използва стойността променлива на средата VERSION_CONTROL... Ако стойността на тази променлива не е зададена, тогава по подразбиране типът Резервно копиеинсталирани в съществуващи. Тази опциясъответства на променливата за контрол на версията в Emacs. Валидни стойности МЕТОДса (разрешени са недвусмислени съкращения): T, номериранВинаги правете резервни копия на номерирани файлове. нула, съществуващиПравете резервни копия на номерирани файлове за файлове, които вече ги имат, и прости архиви за други файлове. никога, простоВинаги правете прости резервни копия.

СТАНДАРТ НАСТРОИКИ GNU

--помогнеОтпечатайте намек за стандартен изход и излезте успешно. -- версияОтпечатайте информацията за версията на стандартен изход и излезте успешно. -- Служи за маркиране на края на списъка с опции.

ЗАОБИКАЛЯЩА СРЕДА

На работа по обичайния начинсе използват променливите LANG, LC_ALL, LC_COLLATE, LC_CTYPE и LC_MESSAGES. За версията на GNU променливите SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL също се използват за управление на създаването на архиви, както е описано по-горе.

СЪВМЕСТИМОСТ

POSIX 1003.2

БЕЛЕЖКИ

Тази страницаописва версията к.ппакетът fileutils-4.1; други версии може да се различават леко. Изпращайте корекции и допълнения до [защитен с имейл]... Изпращайте съобщения за грешки в тази програма до [защитен с имейл].

ПРЕВОД

Превод от английски Виктор Вислобоков 2003

Командата cp е онзи спасител, който винаги ще дойде на помощ. Ако току-що сте инсталирали Linux и не сте го инсталирали, но за да настроите достъп до Интернет, трябва да конфигурирате определени файловетогава командата cp ще ни помогне като никой друг.
Например, за да настроите достъп до Интернет, трябва да промените някои файлове, но поради липса на права за достъп до тях, не можете да направите това чрез графичен интерфейс... Но от друга страна, можете да създадете файл с помощта на графичния интерфейс във всяка налична папка (например / home / username), да го попълните според инструкциите или ръководството и след като го стартирате, замените съществуващия файл с този сте създали с помощта на командата cp.
Например, вие, като мен, трябваше да промените файла / etc / network / interfaces. Лично аз създадох файл с интерфейси в / home / viuktor / с помощта на GUI. Копира съдържанието на оригинала (файл / etc / мрежа / интерфейси) в него, добавен линиите, които искатеи спасен. И след това, използвайки cp, замених файла / etc / network / interfaces с файла / home / viuktor / interfaces ..
Вярно, правейки тази операция, трябва да обърнете максимално внимание, защото много често някои файлове трябва да бъдат допълнени с един или повече реда. Ето защо, ако в ръководството пише "добави ...", в никакъв случай не забравяйте да копирате всичко от оригинала във файла, който сте създали.

Командата cp се използва за копиране и преместване на файлове.

Той има следния синтаксис cp (параметър)<источник> <пункт назначения>

ОПИСАНИЕ В първата си форма помощната програма cp копира съдържанието на файла source_file в target_file. Във втората форма съдържанието на всеки посочен файл се копира в целевата_директория. Имената на самите файлове не се променят. Ако cp открие опит да копира файл в себе си, той не копира. Опциите са: -H Ако е посочена опцията -R, следвайте символните връзки, посочени в командния ред, но не следвайте символните връзки, срещани при преминаване през дървото на директориите. -L Ако е посочена опцията -R, следвайте всички символни връзки. -P Ако е посочена опцията -R, не следвайте никакви символни връзки. Това е работният режим по подразбиране. -R Ако source_file сочи към директория, cp копира тази директория заедно с цялото йерархично дърво на файловете, което съдържа. Ако source_file завършва с /, не се копира самата директория, а само нейното съдържание. Тази опция също така казва на cp да копира символни връзки, а не обектите, към които сочат, и принуждава cp да създава специални файлове, вместо да ги копира като нормалните. Създадените директории имат същите разрешения като изходните директории, независимо от стойността на umask на процеса. Имайте предвид, че cp копира твърди връзки като отделни файлове. Ако трябва да запазите твърди връзки, използвайте tar (1), cpio (1) или pax (1). -f За всяко съществуващо име на целеви път, изтрийте го и създайте нов файл, без да се изисква потвърждение на операцията, независимо от правата за достъп. (Опцията -f отменя всяка от предварително посочените опции -i или -n.) -I Причинява cp да издаде заявка чрез стандартен файл грешки преди копирането на файла, което ще презапише съществуващия файл. Ако отговорът от стандартния вход започва с `y 'или` Y', ще се направи опит за копиране. (Опцията -i отменя всяка от предварително посочените опции -f или -n.) -L Създайте твърди връзки към обикновени файлове в йерархията, вместо да ги копирате. -n Не презаписвайте съществуващи файлове. (Опцията -n отменя всяка от предходните опции -f или -i.) -P Кара cp да запази следните атрибути на всеки изходен файл в създаденото копие: време за модификация, време за достъп, флагове на файлове, режим на достъп, потребител и групови идентификатори, доколкото е позволено от правата за достъп. Ако стойностите на идентификатора на потребителя и групата не могат да бъдат запазени, не се показва съобщение за грешка и стойността на състоянието на изход, върната от програмата, не се променя. Ако оригиналният файл има зададен бит set-user-ID и стойността на потребителския идентификатор не може да бъде запазена, битът set-user-ID в атрибутите за копиране не се запазва. Ако в оригиналния файл е зададен битът set-group-ID и стойността на ID на групата не може да бъде запазена, битът set-group-ID в атрибутите за копиране не се запазва. Ако изходният файл има зададени битове set-user-ID и set-group-ID и или потребителският идентификатор, или стойността на ID на групата не могат да бъдат съхранени, нито един от битовете set-user-ID и set-group-ID в атрибутите за копиране се запазват. -v Показва повече информация, показвайки файловете, когато са копирани. За всеки вече съществуващ целеви файл съдържанието му се презаписва, ако правата позволяват. Неговият режим на достъп и потребителски и групови идентификатори не се променят, освен ако не е посочена опцията -p. Във втория синтаксис формуляр целевата_директория трябва да съществува, освен ако не са посочени единичен изходен_файл, който е директория и опцията -R. Ако целевият файл не съществува, се използват разрешенията на изходния файл, модифицирани, за да съответстват на стойността на umask (вижте csh (1)). Ако изходният файл има зададен бит set-user-ID, този бит се изчиства, освен ако изходният файл и целевият файл споделят един и същ собственик. Ако изходният файл има зададен бит set-user-ID, този бит се изчиства, освен ако изходният файл и целевият файл принадлежат към една и съща група и потребителят е член на тази група. Ако са зададени и двата бита set-user-ID и set-group-ID, трябва да бъдат изпълнени и двете от горните условия, в противен случай и двата бита се изчистват. За създаване или презаписване на файлове са необходими подходящи права за достъп. Помощната програма cp винаги следва символни връзки, освен ако не е посочена опцията -R (в този случай тя не следва символни връзки по подразбиране). Опциите -H или -L (във връзка с опцията -R) карат cp да следва символни връзки, както е описано по-горе. Опциите -H, -L и -P се игнорират, освен ако не е посочена опцията -R. Освен това тези опции се отменят една друга и командните действия се определят от опцията, която е посочена последно. Ако cp получи сигнала SIGINFO (вижте аргумента за състоянието към stty (1)), имената на текущите файлове източник и дестинация се отпечатват на стандартен изход, както и процентът на напредъка на копиране. ИЗХОД СТАТУС Помощната програма cp излиза от 0 при успех и > 0, ако възникне грешка. СЪВМЕСТИМОСТ По-старите версии на cp имаха опцията -r. Тази реализация поддържа тази опция, но нейното поведение се различава от историческото. Използването на тази опция е силно обезкуражено, тъй като поведението й зависи от изпълнението. Във FreeBSD -r е синоним на -RL и работи по същия начин, освен ако не е отменен от други флагове. Реализацията на -r в по-старите версии беше различна по това, че когато файловата йерархия беше пресъздадена, специалните файлове бяха копирани както обикновено. Опциите -v и -n са нестандартни и не се препоръчват за използване в командни скриптове. ВИЖ СЪЩО mv (1), rcp (1), umask (2), fts (3), symlink (7) ИСТОРИЯ Командата cp се появи във Версия 1 на AT&T UNIX.

Чести операции в файлова структураса създаването на файлове и директории, тяхното копиране, преместване, преименуване и изтриване. Очевидно за подобни действия в командна обвивка Linux трябва да предоставя специални команди.

Копиране на файлове и директории

Bash използва командата за копиране на файлове к.п(от "copy"), на който обикновено се предават два аргумента:

    адрес с името на изходния файл,

    нов адресс име или само с адреса на директорията, където е поставено копието.

Адресът може да бъде абсолютен или относителен. Ако операциите с файлове се извършват в текущата директория, тогава няма смисъл да посочвате адреса. Записват се само името на изходния файл и името на копието. Тъй като не може да има файлове с еднакви имена и адреси, името на копието трябва да е различно от името на оригиналния файл.

Нека разгледаме някои примери.

cp readme readme2

V в такъв случайкопие на файла readme се създава и остава в същата директория като readme2.

cp readme Desktop /

Файлът readme се копира в папката на работния плот. Тук текущата родителска директория е Desktop Имената на копието и оригиналния файл ще бъдат същите, но пълните адреси не.

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

Тук файлът се копира от една директория в друга, се използват абсолютни адреси, името на копието се променя.

Ако трябва да копирате няколко различни файловев същата директория, след това след командата cd всички оригинални файлове са изброени първи, а последният е директорията, където са поставени копията. Ясно е, че при такова групово действие имената на файловете не могат да се променят.

За да копирате директория с цялото й съдържание, трябва да използвате превключвателя -r на командата cp:

cp -r ./ букви ./ стари букви

Преместете и преименувайте

В Баш- Linux обвивкасъщата команда се използва за преместване и преименуване - mv(от "премествам" - да се движа). Преименуването може да се разглежда като специален случай на преместване, тъй като по същество то се променя пълен адресфайл, което е същото като преместване, дори ако файлът остава в същата директория.

Както при cp, mv изисква няколко аргумента. Изборът между преместване и преименуване зависи от това какви са аргументите. При преместване файлът променя адреса си, следователно, ако първият и вторият аргумент показват различни адреси, тогава ще се получи движение. Ако адресите са еднакви, но само имената са различни, се извършва преименуване. Освен това преместването може да се комбинира с преименуване.

В случай на преместване без преименуване, във втория аргумент се посочва само директорията на местоназначението.

mv document.txt Работа

mv document.txt Работа / doc23.txt

Тук, в първия случай, файлът document.txt се премества в директорията Work. Във втория случай файлът се премества и преименува едновременно: файлът document.txt се премества в директорията Work и получава ново име doc23.txt.

Когато използвате командата mv за преименуване, новото име се посочва като втори аргумент:

mv поръчка.txt поръчкаНова.txt

mv Работа / list.odt Работа / names.odt

Директориите се преместват и преименуват по същия начин като файловете. Пакетирането на файлове работи по същия начин, както с командата cp.

Създаване на файлове и директории

С командата се създават нови директории mkdir... Например, за да създадете директория Work в текущата директория, изпълнете следната команда:

mkdir Работа
или
mkdir ./ Работа

Има много начини за създаване на файлове, обикновено те се създават от някаква програма. Ако все пак се наложи да се създаде празен файл, можете да направите това с сензорни програми... Името му се предава като аргумент. генериран файл... Друг начин е. пример:

cal> ./ Работа / януари

Тук програмата cal показва календара за текущия месец и тъй като има знак за пренасочване на изход, изходът на командата ще бъде записан във файла за януари, намиращ се в папката Work.