Linux Beginner 15 мин • 24.09.2026 г.

Командата cp в Linux — пълно ръководство с примери

Подробно ръководство за командата cp в Linux — синтаксис, всички основни флагове (-r, -a, -i, -v, -p, -u, -l, -d, --preserve) и практически примери за копиране на файлове и директории.

Терминал в Linux с изпълнена команда cp

Предварителни изисквания

  • Основни познания за работа с терминал в Linux
  • Разбиране на понятията файл и директория

Командата cp в Linux

Ако прекараш дори час в терминал под Linux, рано или късно ще ти се наложи да копираш файл или папка. Именно за това служи командата cp (от английското copy) — една от най-старите и най-често използвани команди в UNIX-подобните системи. Тя изглежда съвсем проста на пръв поглед, но крие достатъчно нюанси, за да си заслужава подробен разбор — особено ако тепърва навлизаш в света на Linux.

В тази статия ще разгледаме синтаксиса на cp, най-важните ѝ аргументи, практически примери и типични грешки, които начинаещите допускат.

Какво прави командата cp

cp копира файлове и директории от едно място на друго. За разлика от mv (move), тя не премества оригинала — той остава на мястото си, а на новото местоположение се създава негово копие. Това я прави безопасна за експериментиране: ако нещо се обърка, оригиналният файл все още е там.

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

Основен синтаксис

cp [опции] източник местоназначение

или при работа с множество файлове:

cp [опции] източник1 източник2 ... директория_назначение

Най-простият пример — копиране на един файл в текущата директория с ново име:

cp document.txt document_backup.txt

Тук document.txt е файлът-източник, а document_backup.txt е новото копие. Ако вместо име на файл посочиш само име на директория, cp ще копира файла в нея, запазвайки оригиналното му име:

cp document.txt /home/user/backups/

Основни аргументи (флагове)

По-долу са изброени най-често използваните опции на cp, подредени приблизително по честота на употреба в практиката.

-r или -R (рекурсивно копиране)

Най-важният флаг, ако работиш с директории. Без него cp отказва да копира папка и връща грешка от типа omitting directory.

cp -r /home/user/projects /home/user/projects_backup

Това копира цялата директория projects, заедно с всички файлове и подпапки вътре в нея.

Забележка: -r и -R в GNU cp работят практически еднакво за обикновена употреба. Разликата е в третирането на специални файлове (символни връзки), но за ежедневна работа можеш да ги смяташ за взаимозаменяеми.

-i (интерактивен режим)

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

cp -i report.pdf /home/user/documents/

Ако в documents/ вече има файл report.pdf, ще видиш нещо от рода на:

cp: overwrite '/home/user/documents/report.pdf'? 

-v (verbose / подробен изход)

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

cp -rv projects/ projects_backup/

Изходът изглежда приблизително така:

'projects/main.py' -> 'projects_backup/main.py'
'projects/README.md' -> 'projects_backup/README.md'

--debug

Обяснява как точно cp е решила да копира конкретен файл — например дали използва бърз метод чрез копиране на диапазони на файловата система (reflink/copy-on-write), обикновено четене-запис и т.н. Полезен е при диагностика на производителност при копиране на големи файлове. Флагът автоматично включва и -v, така че виждаш и кой файл се копира.

cp --debug bigfile.iso /mnt/backup/

-u (update — само по-нови файлове)

Копира файла само ако не съществува в местоназначението или ако източникът е по-нов от съществуващото копие. Много полезен при синхронизиране на бекъпи, защото не пренаписва излишно вече актуални файлове.

cp -u -r source/ destination/

-p (preserve — запазване на атрибути)

Запазва оригиналните права за достъп (permissions), собственика, груповата принадлежност и времевите маркери (timestamps) на файла. Без -p, копието получава нови времеви маркери (датата на копиране) и права според текущия umask.

cp -p config.yaml config_backup.yaml

-a, --archive (архивен режим)

Точен еквивалент на -dR --preserve=all (в GNU coreutils документацията е записано буквално така: -a е същото като -dR --preserve=all). С други думи, -a включва едновременно:

  • -R — рекурсивно копиране на директории;
  • -d — запазване на символните връзки (вместо да следва целта им) и запазване на твърдите връзки, където е възможно;
  • --preserve=all — запазване на всички атрибути: права, собственик, група, времеви маркери, контекст (SELinux) и връзки.

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

cp -a /etc /root/etc_backup

-d (запазване на връзки, без dereference)

Съкращение за --no-dereference --preserve=links. Когато копираш символна връзка (symlink) с -d, cp копира самата връзка, а не файла, към който тя сочи. Без този флаг, по подразбиране cp следва връзката и копира съдържанието на целевия файл.

cp -d symlink_to_config copied_symlink

--preserve[=ATTR_LIST]

По-гъвкава версия на -p, която позволява да избереш точно кои атрибути да бъдат запазени, чрез списък, разделен със запетаи (ATTR_LIST). Възможните стойности са:

  • mode — правата за достъп (permissions);
  • ownership — собственик и група (изисква съответните права, обикновено root);
  • timestamps — времена на създаване/промяна;
  • links — запазва твърди връзки между копираните файлове;
  • context — SELinux контекст на сигурност;
  • xattr — разширени атрибути на файловата система;
  • all — всички изброени по-горе едновременно.

Пример — запазват се само правата и времевите маркери, но не и собствеността:

cp --preserve=mode,timestamps report.log report_backup.log

Ако извикаш само --preserve без стойност, поведението е еквивалентно на -p (запазва mode, ownership, timestamps).

-f, --force (принудително презаписване)

Ако файлът в местоназначението не може да бъде презаписан директно (например поради права), -f първо го изтрива, а после създава нов на негово място. Използва се внимателно, тъй като не пита за потвърждение — комбинира се често с -i, при което последно посоченият флаг “печели” (cp -if се държи като -f, а cp -fi — като -i).

cp -f source.conf /etc/app/source.conf

-H (следване на символни връзки само от командния ред)

Действа само при рекурсивно копиране (-R). Ако някой от аргументите, подадени директно в командния ред, е символна връзка, -H кара cp да следва тази връзка и да копира файла, към който тя сочи, вместо самата връзка. Символните връзки, срещнати вътре в копираните директории (не подадени directно в командния ред), не се засягат от този флаг.

cp -RH my_symlink_dir/ backup_dir/

-n (no-clobber — никога не презаписвай)

Обратното на -f. Ако файлът вече съществува, cp просто го пропуска, без грешка и без въпрос.

cp -n *.log /var/backups/logs/
  • -l, --link — вместо да копира съдържанието на файла, cp създава твърда връзка (hard link) към него. Резултатът е нов “запис” в директорията, който сочи към същите данни на диска — не се заема допълнително пространство, а промяна в единия файл се вижда и в другия, защото физически това е един и същи файл.
  • -s, --symbolic-link — създава символна връзка (symbolic link), подобна на пряк път в Windows. За разлика от твърдата връзка, тя може да сочи и към файл на друга файлова система и лесно се разпознава (командата ls -l я показва със стрелка ->).
cp -s /usr/bin/python3 /usr/local/bin/python

Тези флагове са полезни, когато искаш да пестиш дисково пространство или да поддържаш няколко “входни точки” към един и същи файл.

-b / --backup (резервно копие преди презапис)

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

cp -b important.conf /etc/app/important.conf

-t (target-directory)

Позволява изрично да посочиш директорията назначение, което е удобно при използване в скриптове с xargs или подобни инструменти.

cp -t /home/user/backups/ file1.txt file2.txt

--parents

Запазва пътя (йерархията от папки) на файла-източник при копирането.

cp --parents src/utils/helpers.py /home/user/backup/

Резултатът ще бъде /home/user/backup/src/utils/helpers.py, а не просто /home/user/backup/helpers.py.

Кои флагове се използват най-често?

В реалната ежедневна работа над 90% от случаите се покриват от следната комбинация:

  1. -r/-R — когато копираш папки.
  2. -v — когато искаш да виждаш какво се случва.
  3. -i — когато не искаш случайно да презапишеш нещо важно.
  4. -a — когато искаш пълно, вярно копие, включително права, собственост и връзки (особено за бекъпи).

Много администратори и разработчици комбинират ги в едно, например:

cp -riv source_folder/ destination_folder/

Тази комбинация копира рекурсивно, пита при конфликт и показва подробен изход — добра “безопасна по подразбиране” практика.

Копиране на множество файлове наведнъж

cp приема произволен брой източници, стига последният аргумент да е директория:

cp file1.txt file2.txt file3.txt /home/user/documents/

Работи и с wildcard символи (glob patterns) на самата shell:

cp *.jpg /home/user/pictures/

Тази команда копира всички файлове с разширение .jpg от текущата директория в pictures/.

Копиране на цяла директория – практически пример

Да кажем, че имаш проект в ~/myapp и искаш да направиш пълен бекъп преди голяма промяна:

cp -av ~/myapp ~/myapp_backup_$(date +%F)

Тук $(date +%F) вмъква текущата дата (напр. 2026-09-24), така че резултатната папка ще се казва myapp_backup_2026-09-24. Това е много разпространена практика при ръчно правене на бекъпи преди рискови операции.

Чести грешки на начинаещите

  • Опит за копиране на папка без -r — завършва с грешка cp: -r not specified; omitting directory.
  • Забравено наклонено черта в края на пътя — cp -r folder destination и cp -r folder destination/ могат да дадат различен резултат в зависимост от това дали destination вече съществува.
  • Презаписване без -i — cp не пита по подразбиране, така че лесно можеш да загубиш файл, ако не внимаваш.
  • Объркване между cp и mv — cp оставя оригинала, mv го премества (изтрива от старото място).

Обобщение

Командата cp е фундаментален инструмент в Linux, който всеки потребител — от начинаещ до опитен системен администратор — използва почти ежедневно. Разбирането на основните флагове (-r, -i, -v, -a, -p) е достатъчно, за да работиш уверено с нея в 95% от случаите. С натрупване на опит ще откриеш и по-специализираните опции като --parents, -u или -l, които стават полезни при по-сложни сценарии — синхронизация на бекъпи, работа със символни връзки или скриптиране.

Съветът е прост: докато свикнеш, работи с -i и -v по подразбиране — те те пазят от неприятни изненади и ти показват какво точно прави системата ти.

Кратка справочна таблица

Флаг Пълна форма Какво прави
-r, -R --recursive Копира директории рекурсивно
-a --archive Еквивалент на -dR --preserve=all — пълно копие
-d --no-dereference --preserve=links Копира символните връзки, не целта им
-i --interactive Пита преди презаписване
-f --force Изтрива и презаписва без въпрос
-v --verbose Показва какво се копира
--debug — Обяснява метода на копиране (включва -v)
-u --update Копира само по-нови/липсващи файлове
-p — Запазва mode, ownership, timestamps
--preserve=ATTR_LIST — Избираемо запазване на атрибути (mode, ownership, timestamps, links, context, xattr, all)
-n --no-clobber Никога не презаписва
-l --link Създава твърда връзка вместо копие
-s --symbolic-link Създава символна връзка вместо копие
-H — Следва символни връзки, подадени в командния ред
-b --backup Прави резервно копие преди презапис
-t --target-directory Изрично задава директория назначение
--parents — Запазва пълния път на файла в местоназначението