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