Шрифт:
[me@linuxbox playground]$ cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'
Команда cp вновь скопировала файл, но на этот раз вывела короткое сообщение, указывающее, что операция была выполнена. Обратите внимание, что cp перезаписала первую копию без каких-либо предупреждений. Это как раз тот случай, когда cp полагает, что вы знаете, что делаете. Чтобы вывести предупреждение, включите параметр -i:
[me@linuxbox playground]$ cp -i /etc/passwd .
cp: переписать `./passwd'?
Если в ответ на запрос ввести y, команда перезапишет существующий файл; если ввести любой другой символ (например, n), cp оставит прежнюю копию файла нетронутой.
Перемещение и переименование файлов
Имя passwd не выглядит органичным в нашей песочнице, поэтому дадим этому файлу какое-нибудь другое имя:
[me@linuxbox playground]$ mv passwd fun
Теперь немножко позабавимся и переместим переименованный файл в каждый из каталогов и обратно:
[me@linuxbox playground]$ mv fun dir1
переместит файл в каталог dir1. Следующая команда
[me@linuxbox playground]$ mv dir1/fun dir2
переместит файл из каталога dir1 в каталог dir2. Следующая команда
[me@linuxbox playground]$ mv dir2/fun .
вернет его в текущий рабочий каталог. Теперь посмотрим, как mv влияет на каталоги. Сначала переместите файл в каталог dir1:
[me@linuxbox playground]$ mv fun dir1
затем переместите dir1 в dir2 и проверьте их содержимое командой ls:
[me@linuxbox playground]$ mv dir1 dir2
[me@linuxbox playground]$ ls -l dir2
итого 4
drwxrwxr-x 2 me me 4096 2012-01-11 06:06 dir1
[me@linuxbox playground]$ ls -l dir2/dir1
итого 4
– rw-r--r-- 1 me me 1650 2012-01-10 16:33 fun
Обратите внимание: так как dir2 уже существует, mv переместит dir1 в dir2. Если бы каталога dir2 не было, mv просто переименовала бы dir1 в dir2. В заключение верните все на свои места:
[me@linuxbox playground]$ mv dir2/dir1 .
[me@linuxbox playground]$ mv dir1/fun .
Создание жестких ссылок
Теперь попробуем поиграть со ссылками. Сначала займемся жесткими ссылками: создайте несколько жестких ссылок для нашего файла:
[me@linuxbox playground]$ ln fun fun-hard
[me@linuxbox playground]$ ln fun dir1/fun-hard
[me@linuxbox playground]$ ln fun dir2/fun-hard
Теперь у нас есть четыре экземпляра файла fun. Посмотрим, что содержит наш каталог playground:
[me@linuxbox playground]$ ls -l
итого 16
drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir1
drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir2
– rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun
– rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-hard
Прежде всего следует обратить внимание на на второе поле в записях, соответствующих файлам fun и fun-hard. Оба они содержат 4 — число жестких ссылок на файл, существующих в данный момент. Как вы помните, файл всегда имеет хотя бы одну жесткую ссылку, потому что имя файла определяется ссылкой. Но как убедиться, что fun и fun-hard — это один и тот же файл? В этом случае команда ls нам не помощник. Вы, конечно, скажете, что fun и fun-hard имеют одинаковые размеры (поле 5), но по списку файлов нельзя уверенно утверждать, что это один и тот же файл. Чтобы решить эту задачу, заглянем поглубже.
Рассуждая о жестких ссылках, полезно представлять файлы состоящими из двух частей: раздела с данными, где хранится содержимое файла, и раздела с именем, где хранится имя файла. Создавая жесткую ссылку, мы фактически создаем дополнительный раздел с именем, ссылающийся на тот же раздел с данными. Цепочку дисковых блоков система присваивает тому, что называется индексным узлом (inode), который затем присваивается разделу с именем. То есть каждая жесткая ссылка ссылается на определенный индексный узел с содержимым файла.