Копирование файлов
Для выполнения данной операции используется команда cp (от англ. copy). Формат использования выглядит так:
cp файл_источник целевой_файл
Для примера создадим копию файла test.txt под названием test_copy.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_link.txt имеют одинаковые атрибуты, потому что ссылаются на один один и тот же физический файл.
Существует и другая форма записи команды ln, выглядит так:
ln файл каталог
С помощью нее создается жесткая ссылка в указанном существующем каталоге:
Как видно система создала ссылку с таким же именем.
Важно знать, что в Linux файлы не привязываются к своим именам. У каждого файла есть индексный дескриптор - описание файла, которое содержит всю информацию о файле:
- тип файла
- время создания и модификации
- владелец файла
- права доступа
- размер файла
- идентификатор файла, то есть знает в какой области памяти хранится файл
Чтобы обратиться к файлу необходимо указать его идентификатор - метку. Но запоминать все метки нереально, поэтому и используются жесткие ссылки или имена.
Имя файла привязывается к идентификатору определенного файла и таким образом позволяет обращаться к файлу только по имени.
А как узнать идентификатор файла?
С помощью команды ls -i либо ls --inod
Цифры перед каждым файлом указывают на индексный дескриптор.
Заметь, что ссылки, указывающие на один и тот же файл имеют одинаковые идентификатор и прочие атрибуты файла:
У жестких ссылок есть некоторые недостатки:
- нельзя создать ссылку на несуществующий файл
- нельзя создать ссылку на каталог
- нельзя создать ссылку на файл, который находится в другой файловой системе, например, на флэшке или в другом сетевом диске.
А как обойти все эти ограничения?
Легко. Для этого существуют символьные ссылки. Символьная ссылка это просто файл, который содержит путь к указанному файлу или каталогу. Создается она так:
ln -s файл название_ссылки либо ln --symbolic файл название_ссылки.
Ключевым здесь является опция -s. Создадим ссылку на файл test.txt:
Знак -> означает, что данный файл является символьной ссылкой. За знаком следует файл, на который ссылается ссылка.
Чтобы узнать полный путь ссылки воспользуемся командой realpath
А с каким идентификатором будет связана данная ссылка?
Сейчас узнаем:
Как видно из рисунка индексный дескриптор и прочие атрибуты файлов у них разные. Таким образом, данный тип ссылок даже не связан с индексным дескриптором файла, на который он ссылается.
С командой ln используются следующие опции:
-f (--force) - принудительная перезапись ссылок без оповещения
-b (--backup) - создание резервных копий файла