Таблица 4.6. Параметры команды mv
Параметр
Значение
-i, --interactive
Запрашивать у пользователя подтверждение перед перезаписью существующего файла. Если этот параметр отсутствует, команда mv просто перезапишет существующие файлы
-u, --update
При перемещении файлов из одного каталога в другой перемещать только файлы, отсутствующие в каталоге назначения или более новые
-v, --verbose
Выводить информационные сообщения в процессе перемещения
Таблица 4.7. Примеры использования команды mv
Команда
Результат
mv file1 file2
Переместит file1 в file2. Если file2 существует, он будет заменен на новый файл file1. Если file2 отсутствует, он будет создан. В любом случае появится новый файл file2
mv -i file1 file2
То же, что и выше, но если файл file2 существует, у пользователя будет запрошено подтверждение перед перезаписью файла
mv file1 file2 dir1
Переместит file1 и file2 в каталог dir1. Каталог dir1 должен существовать
mv dir1 dir2
Переместит каталог dir1 (и все его содержимое) в каталог dir2. Если каталог dir2 не существует, он будет создан и заполнен содержимым каталога dir1. Каталог dir1 будет удален
rm — удаление файлов и каталогов
Команда rm используется для удаления (remove) файлов и каталогов, например:
rm элемент...
где элемент — это один или несколько файлов или каталогов.
В табл. 4.8 и 4.9 перечислены некоторые параметры, наиболее часто используемые с командой rm.
Таблица 4.8. Параметры команды rm
Параметр
Значение
-i, --interactive
Запрашивать у пользователя подтверждение перед удалением существующего файла. Если этот параметр отсутствует, команда rm просто удалит существующие файлы
-r, --recursive
Рекурсивно удалить каталоги. То есть вместе с каталогом будут удалены все его подкаталоги. Это обязательный параметр при удалении каталогов
-f, --force
Игнорировать отсутствующие файлы и не запрашивать подтверждения. Этот параметр отменяет действие параметра --interactive
-v, --verbose
Выводить информационные сообщения в процессе удаления
будьте осторожны с командой rm!
Unix-подобные операционные системы, такие как Linux, не имеют команды, отменяющей удаление. Если вы что-то удалили командой rm, это исчезнет навсегда. Linux считает вас достаточно ответственным человеком, отдающим себе отчет в своих действиях.
Будьте особенно осторожны с групповыми символами. Рассмотрим следующий классический пример. Допустим, вы захотели удалить все файлы HTML в каталоге. Для этого вы вводите команду:
rm *.html
которая сделает именно то, что вам нужно, но если вы случайно вставите пробел между * и .html, как в следующей команде:
rm * .html
rm удалит все файлы в каталоге и затем сообщит, что не нашла файла .html.
Полезный совет: всякий раз, используя групповые символы с командой rm (помимо внимательной проверки ввода!), проверьте сначала аргумент с групповым символом с командой ls. Это позволит увидеть, какие файлы будут удалены. Затем нажмите клавишу со стрелкой вверх, чтобы восстановить команду из истории, и замените ls на rm.
Таблица 4.9. Примеры использования команды rm
Команда
Результат
rm file1
Просто удалит файл file1
rm -i file1
Перед удалением file1 запросит подтверждение у пользователя
rm -r file1 dir1
Удалит файл file1 и каталог dir1 со всем его содержимым
rm -rf file1 dir1
То же, что и выше, но в отсутствие file1 и/или dir1 просто продолжит работу, не выводя никаких сообщений
ln — создание ссылок
Команда ln применяется для создания жесткой или символической ссылки. Ее можно использовать одним из двух способов:
ln файл ссылка
создает жесткую ссылку.
ln -s элемент ссылка
создает символическую ссылку, где элементом может быть файл или каталог.
Жесткие ссылки
Жесткие ссылки — это первоначальный способ создания ссылок в Unix; символические ссылки — более позднее изобретение. По умолчанию каждый файл имеет одну жесткую ссылку, определяющую его имя. Создавая жесткую ссылку, мы создаем дополнительную запись в каталоге для файла. Жесткие ссылки имеют два важных ограничения.
• Жесткая ссылка не может указывать на файл за пределами собственной файловой системы. Это означает, что ссылка не может указывать на файл, находящийся в другом разделе диска.
• Жесткая ссылка не может указывать на каталог.
Жесткая ссылка неотличима от самого файла. В отличие от символических ссылок, при выводе списка с содержимым каталогов жесткие ссылки никак не выделяются. При удалении жесткой ссылки удаляется только сама ссылка, а файл остается на месте (то есть пространство, занимаемое файлом, не освобождается), пока не будут удалены все жесткие ссылки на файл.
Знать о существовании жестких ссылок важно, потому что они будут встречаться вам время от времени, но в современной практике предпочтение отдается символическим ссылкам, о которых рассказывается далее.
Символические ссылки
Символические ссылки были придуманы с целью преодолеть ограничения жестких ссылок. Когда создается символическая ссылка, в действительности создается файл особого типа, содержащий текстовый указатель на файл или каталог. В некотором отношении они действуют подобно ярлыкам в Windows, но, конечно же, появились задолго до ярлыков Windows. ;-)
Файл, на который указывает символическая ссылка, и сама символическая ссылка почти неотличимы друг от друга. Например, если попытаться что-то записать в символическую ссылку, запись будет выполнена в файл, на который она указывает. Однако при удалении символической ссылки удаляется только символическая ссылка, но не файл. Если удалить файл до того, как будет удалена символическая ссылка, ссылка останется на месте, но будет указывать в никуда. О таких ссылках говорят, что они «битые». Во многих реализациях команда ls выделяет битые ссылки цветом, например, красным, чтобы обратить на них внимание.
Идея ссылок может показаться странной и непонятной, но оставьте ее пока. Мы опробуем их на практике, и многое, возможно, для вас прояснится.
Давайте построим песочницу
Поскольку мы собираемся на практике опробовать некоторые операции с файлами, давайте выделим безопасный уголок для «игр» с командами управления файлами. Прежде всего нам понадобится каталог, в котором мы будем практиковаться. Создайте такой каталог в своем домашнем каталоге и назовите его playground.
Создание каталогов
Для создания каталогов используется команда mkdir. Чтобы создать каталог playground, проверьте сначала, находитесь ли вы в домашнем каталоге, и только потом создайте новый каталог:
[[email protected] ~]$ cd
[[email protected] ~]$ mkdir playground
Чтобы немножко украсить вашу песочницу, создайте внутри playground пару каталогов с именами dir1 и dir2. Для этого смените текущий рабочий каталог на playground и выполните еще одну команду mkdir:
[[email protected] ~]$ cd playground
[[email protected] playground]$ mkdir dir1 dir2
Обратите внимание, что команда mkdir может принимать несколько аргументов, это позволяет создать два каталога одной командой.
Копирование файлов
Далее, добавим немного данных в нашу песочницу. Для этого скопируем какие-нибудь файлы. Командой cp скопируйте файл passwd из каталога /etc в текущий рабочий каталог.
[[email protected] playground]$ cp /etc/passwd .
Обратите внимание на сокращение, обозначающее текущий рабочий каталог, — точку в конце команды. Если после этого выполнить команду ls, мы увидим наш файл:
[[email protected] playground]$ ls -l
итого 12
drwxrwxr-x 2 me me 4096 2012-01-10 16:40 dir1
drwxrwxr-x 2 me me 4096 2012-01-10 16:40 dir2
-rw-r--r-- 1 me me 1650 2012-01-10 16:07 passwd
Теперь ради развлечения повторите операцию копирования, но на этот раз с параметром -v, чтобы посмотреть, как она работает:
[[email protected] playground]$ cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'
Команда cp вновь скопировала файл, но на этот раз вывела короткое сообщение, указывающее, что операция была выполнена. Обратите внимание, что cp перезаписала первую копию без каких-либо предупреждений. Это как раз тот случай, когда cp полагает, что вы знаете, что делаете. Чтобы вывести предупреждение, включите параметр -i:
[[email protected] playground]$ cp -i /etc/passwd .
cp: переписать `./passwd'?
Если в ответ на запрос ввести y, команда перезапишет существующий файл; если ввести любой другой символ (например, n), cp оставит прежнюю копию файла нетронутой.