Курс по сетевым технологиям
A A A

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

Для выполнения данной операции используется команда cp (от англ. copy). Формат использования выглядит так:

cp файл_источник целевой_файл 

Для примера создадим копию файла test.txt под названием test_copy.txt

Создание копии файла test.txt


Исходный файл сохранился, кроме того у нас имеется его копия. 

А если в качестве целевого файла указать существующий файл?

Тогда этот файл будет перезаписан.

Чтобы этого не произошло удобно использовать опцию -i (--interactive). Работает также, как и с командой mv - запрашивает у пользователя подтверждение действия.

А можно копировать файл в каталог?

Да, для этого в качестве целевого файла укажи сам каталог. 

Например, скопируем файл test.txt в каталог home/student/video/: 

cp test.txt home/student/video  или просто cp test.txt video/

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

А можно этой командой копировать каталоги со всем содержимым? 

Да, но для этого используется специальная опция -R (--recursive): 

cp -R каталог_источник целевой_каталог

Кстати, у скопированной копии права доступа и прочие атрибуты файла определяются в соответствии с атрибутами самого пользователя, скопировавшего файл. Чтобы сохранить первоначальные атрибуты необходимо использовать опцию -p (--preserve). 

С командой ср можно использовать следующие опции: 

-f (--force)

-u (--update)

-v (--verbose)

Как они работают мы уже знаем.

 

 

Жесткие и символьные ссылки 

Как ты уже знаешь в системе Linux существуют 2 типа ссылок: жесткие и символьные. Поговорим сначала о жестких ссылках.

Содержимое любого файла хранится на определенных секторах запоминающего устройства (жесткого диска, USB флэш, CD). Для обращения к этим областям памяти и используются жесткие ссылки, которые и называются именами файла. 

То есть жесткая ссылка и имя файла это одно и то же? 

Да, так и есть. Содержимое файла да и сам файл ничего не знают о присвоенных ему именах и ссылках, Поэтому можно создавать какие угодно имена/ссылки и в каком угодно количестве. 

То есть можно создать 2 и более имени одного и того же файла?

Совершенно верно. Для этого существует команда ln (сокращенно от link - связывать): 

ln файл жесткая_ссылка 

Например, создадим ссылку для файла student.txt:

Создание жесткой ссылки для файла student.txt


Как видно из рисунка student.txt и student_link.txt имеют одинаковые атрибуты, потому что ссылаются на один один и тот же физический файл.

Существует и другая форма записи команды ln, выглядит так:

 ln файл каталог

С помощью нее создается жесткая ссылка в указанном существующем каталоге:

Создание ссылки в каталоге

 

Как видно система создала ссылку с таким же именем. 

Важно знать, что в Linux файлы не привязываются к своим именам. У каждого файла есть индексный дескриптор - описание файла, которое содержит всю информацию о файле:

  • тип файла
  • время создания и модификации
  • владелец файла
  • права доступа
  • размер файла
  • идентификатор файла, то есть знает в какой области памяти хранится файл

 

Чтобы обратиться к файлу необходимо указать его идентификатор - метку. Но запоминать все метки нереально, поэтому и используются жесткие ссылки или имена.

Имя файла привязывается к идентификатору определенного файла и таким образом позволяет обращаться к файлу только по имени.

 А как узнать идентификатор файла? 

С помощью команды ls -i либо ls --inod

Отображение идентификатора файла

Цифры перед каждым файлом указывают на индексный дескриптор.

Заметь, что ссылки, указывающие на один и тот же файл имеют одинаковые идентификатор и прочие атрибуты файла:

Сравнение атрибутов файлов

 

У жестких ссылок есть некоторые недостатки:

  • нельзя создать ссылку на несуществующий файл
  • нельзя создать ссылку на каталог
  • нельзя создать ссылку на файл, который находится в другой файловой системе, например, на флэшке или в другом сетевом диске.

 

А как обойти все эти ограничения? 

Легко. Для этого существуют символьные ссылки. Символьная ссылка это просто файл, который содержит путь к указанному файлу или каталогу. Создается она так:

ln -s файл название_ссылки либо ln --symbolic файл название_ссылки.

Ключевым здесь является опция -s. Создадим ссылку на файл test.txt:

Создание символьной ссылки

Знак -> означает, что данный файл является символьной ссылкой. За знаком следует файл, на который ссылается ссылка.

Чтобы узнать полный путь ссылки воспользуемся командой realpath

Отображение файла

А с каким идентификатором будет связана данная ссылка?

Сейчас узнаем:

Идентфикатор файла

Как видно из рисунка индексный дескриптор и прочие атрибуты файлов у них разные. Таким образом, данный тип ссылок даже не связан с индексным дескриптором файла, на который он ссылается. 

С командой ln используются следующие опции: 

-f (--force) - принудительная перезапись ссылок без оповещения

-b (--backup) - создание резервных копий файла