Цель работы: ознакомится с стандартными командами, используемых при работе с файлами и содержимым файлов: file, touch, rm, cp, mv, head, tail, cat, tac, more, less.
Имена файлов в Linux (или в любой системе Unix) являются регистрозависимыми. Это означает, что имена FILE1 и file1 не являются равноценными, а путь к файлу /etc/hosts отличен от пути к файлу /etc/Hosts (последнего файла не должно существовать в файловой системе типичного компьютера, работающего под управлением Linux).
В данном примере продемонстрировано различие между двумя файлами, причем имя первого файла начинается с заглавной буквы W, а второго - с прописной буквы w.
Любая директория на самом деле является файлом (с регистрозависмым именем!), хотя этот файл и имеет специальный тип. Каждый терминал (например, /dev/pts/4), любой жесткий диск или раздел на нем (например, /dev/sdb1) и любой процесс представлены где-либо в рамках файловой системы с помощью файла. После изучения данной главы у вас не останется сомнений в том, что в Linux все является файлом.
Утилита file предназначена для определения типа файла. В Linux для определения типов файлов не используются их расширения. Для инструментов с интерфейсом командной строки абсолютно безразлично, оканчивается ли имя файла на .txt или на .pdf. Исполняя обязанности системного администратора, вы должны использовать команду file для установления типа интересующего вас файла. Ниже приведено несколько примеров использования данной утилиты при работе с типичной системой Linux.
Утилита file использует файл со списком "магических последовательностей байт", содержащий шаблоны для распознавания типов данных. Файл со списком "магических последовательностей байт" расположен по пути /usr/share/file/magic. Используйте команду man 5 magic в случае необходимости получения дополнительной информации о нем.
Важно отметить, что для работы с такими специальными файлами, как файлы из директорий /dev и /proc, следует использовать команду file -s.
Один из простых способов создания пустого файла заключается в использовании утилиты touch. (Позднее в данной книге мы рассмотрим множество других способов создания файлов.)
Данный пример начинается с открытия пустой директории, в которой с помощью утилиты touch создаются два файла, после чего выводится список созданных файлов.
Утилита touch позволяет устанавливать набор значений свойств пустых файлов в процессе их создания. Удастся ли вам определить, какие значения свойств были установлены, ознакомившись с приведенным ниже примером? Если вы не смогли разобраться самостоятельно, обратитесь к странице руководства для утилиты touch.
В том случае, если вам больше не нужен файл, следует использовать утилиту rm для его удаления. В отличие от некоторых графических пользовательских интерфейсов, интерфейс командной строки системы не предполагает использования таких хранилищ файлов, как корзина, предназначенных для последующего восстановления удаленных файлов. Если вы удалили файл с помощью утилиты rm, этот файл будет удален навсегда. Исходя из этого, следует проявлять осторожность при удалении файлов!
Для того, чтобы застраховаться от случайного удаления файла, вы можете использовать команду rm -i.
По умолчанию с помощью команды rm -r невозможно удалить непустые директории. Однако, утилита rm принимает параметры, которые позволят вам удалять любую директорию. Команда rm -rf известна благодаря тому, что она позволяет удалять все элементы файловой системы (конечно же, в том случае, если вы имеете достаточные права для выполнения этой операции). В том случае, если вы вошли в систему, воспользовавшись учетной записью пользователя root, следует проявить особую осторожность при использовании команды rm -rf (параметр f расшифровывается как force (принудительное выполнение операции), а параметр r - как recursive (рекурсивный обход директорий)), так как в случае работы с учетной записью пользователя root, упомянутые ограничения прав не будут распространяться на вас. Вы сможете в буквальном смысле удалить все файлы вашей системы по неосторожности.
Для копирования файла следует использовать утилиту cp с аргументами, представленными путями к исходному и целевому файлам.
В том случае, если в качестве пути к целевому файлу используется путь к директории, исходные файлы будут скопированы в эту целевую директорию.
Для копирования директорий целиком следует использовать команду cp -r (параметр -r позволяет осуществлять рекурсивное копирование всех файлов из всех поддиректорий).
Вы также можете использовать утилиту cp для копирования множества файлов в одну директорию. В этом случае последний аргумент (аргумент, указывающий на цель) должен быть представлен путем к директории.
Для предотвращения перезаписи существующих файлов в ходе использования утилиты cp следует использовать параметр -i (для активации интерактивного режима копирования).
Утилита mv используется для переименования файлов или для перемещения файлов в другие директории.
В том случае, если вам необходимо переименовать один файл, утилита mv является предпочтительным инструментом.
Эта же утилита mv может быть использована и для переименования директорий.
Утилита mv поддерживает параметр -i по аналогии с утилитами cp и rm.
В примере ниже показано, как при использовании команды mv -i запрашивается подтверждение перезаписи существующего файла.
Примечание:
При необходимости копирования, удаления и т.д. всех данных (файлов, директорий) из определенный директории можно воспользоваться *.
Пример:
$ cp -r /home/* /home/paul/
Вы можете использовать утилиту head для вывода первых десяти строк файла.
Утилита head также может использоваться для вывода первых n строк файла.
Кроме того, утилита head может использоваться для вывода первых n байт файла.
По аналогии с утилитой head, утилита tail может использоваться для вывода последних десяти строк файла.
Вы можете передать утилите tail число, соответствующее количеству строк, которое вы хотите увидеть в выводе.
Утилита tail поддерживает и другие полезные параметры, причем некоторые из них мы будем использовать в рамках данного курса.
Утилита cat является одним из наиболее универсальных инструментов операционной системы. Все, что она делает - это копирует данные из стандартного потока ввода в стандартный поток вывода. Данная утилита в комбинации с командной оболочкой позволяет реализовать мощные и разнообразные механизмы обработки данных. Воспользуемся примерами для иллюстрации этих механизмов. Первый пример является достаточно простым и вы можете использовать рассмотренную в нем команду в повседневной работе для вывода содержимого файла на экран. В том случае, если данные из файла не умещаются на экране, будет осуществлена прокрутка до конца файла.
Имя утилиты cat является сокращенной формой слова concatenate (объединить). Одним из наиболее простых сценариев использования данной утилиты является объединение файлов в рамках файла большего объема (или полного файла).
Также вы можете использовать утилиту cat для создания текстовых файлов. Введите команду cat > winter.txt, приведенную в примере ниже. После этого введите одну строку или несколько строк текста, завершая ввод каждой из строк нажатием клавиши Enter. После ввода последней строки текста нажмите и удерживайте клавишу Ctrl и одновременно с этим кратковременно нажмите клавишу d.
Комбинация клавиш Ctrl+d позволяет передать исполняющемуся процессу символ окончания файла (End of File - EOF), что приведет к завершению исполнения процесса cat.
Вы можете установить специальный маркер окончания файла для утилиты cat с помощью параметра << таким образом, как показано в примере. Данная конструкция называется локальной директивой (here directive) и позволяет завершать работу процесса cat.
При рассмотрении третьего примера вы можете обнаружить, что утилита cat также может использоваться для копирования файлов. Подробные пояснения относительно происходящих в этом случае процессов будут даны в главе, посвященной командной оболочке bash.
Предназначение утилиты tac (в отличие от утилиты cat) может быть проиллюстрировано с помощью единственного примера.
Утилита more может оказаться полезной в случае возникновения необходимости вывода содержимого файлов, которое не умещается на экране. Утилита more позволяет ознакомится с содержимым файла, разделенным на страницы. После открытия файла с использованием данной утилиты следует использовать клавишу "пробел" для перехода к следующей странице или клавишу q для выхода из режима просмотра содержимого файла. Некоторые пользователи предпочитают использовать утилиту less вместо утилиты more.