Шпаргалка сисадмина. Работа с файлами и каталогами

Debian. Шпаргалка сисадмина. Работа с файлами и каталогами
www.debian.org

Вторая статья из серии статей-шпаргалок, предназначенных для быстрого доступа к наиболее часто используемым командам. Как было описано в предыдущей – Debian. Шпаргалка сисадмина. Операции с пользователями – вся упомянутая информация является общедоступной и не представляет из себя чего-то уникального. Рекомендуется к чтению новичкам в Linux


Если интересуетесь Linux, рекомендую обратиться к разделу Unix/Linux на моем блоге.


Работа с файлами и каталогами

Команды сгруппированы по выполняемым изменениям.

Создание, изменение и удаление файлов и каталогов

Создать файл можно разными способами. В большинстве случаев я использую nano, если нужно создать текстовый файл и сразу в него что-то записать. В статье Как создать пустой файл в Linux  есть аж 12 способов.

Примечание: кто-то скажет, что пользоваться nano стыдно, когда есть vim. Я не согласен. Во-первых, новичкам я все же посоветовал бы nano, а когда научитесь закрывать vim без перезагрузки системы (шутка конечно:)), тогда сами решайте что брать. Во-вторых, vim не установлен по умолчанию как минимум в дистрибутивах netinst, а весит vim+зависимости сильно больше nano. Быстрее будет поставить nano, особенно на медленном соединении.

Вообще самым элегантным способом создания пустого файла мне показался вариант простого вывода данных в текстовый файл, этот способ есть в упомянутой выше статье:

А теперь рассмотрим разные утилиты.

touch

Изменяет временные штампы файла. Небольшая выдержка из “манов”:

Если заданный файл еще не существует, то он создается (как пустой файл с правами доступа 0666, с учетом umask), если не задана опция -c.

Создание файла file_test01 в текущем каталоге:

Создание файла с указанием метки времени:

Можно указать и будущую дату.

nano

Файл будет создаy в том случае, если будет не пустым. Создание файла file_test02 в текущем каталоге и сразу же открытие на редактирование:

На мой взгляд nano – отличный универсальный редактор, который к тому же установлен в Debian по умолчанию.

mkdir

Mkdir создает каталоги. Например создать каталог testdir01 в /root/ можно следующей командой:

Создать каталог testdir02 в /root/ с полными правами доступа только у владельца (у остальных нет прав даже на чтение):

-m – Устанавливает права доступа к создаваемым каталогам. Эти права могут быть заданы либо в символьном виде, как описано в chmod(1), либо в виде восьмеричного числа.

А вот так можно одной командой создать сразу два каталога (/tmp/dir1 и /tmp/dir2):

Интересная запись с фигурными скобками называется Brace Expansion, не знали?

Для удаления файлов и каталогов можно воспользоваться командами ниже.

rm

Удаляет файлы или каталоги

Удалить файл testfile01 из каталога /root/:

rm /root/testfile01

Каталог этой командой без дополнительных аргументов удалить не получится:

rm testdir01

rm: невозможно удалить «testdir01»: Это каталог

…но можно удалить каталог рекурсивно со всеми файлами, например, вот так:

rm -r testdir01

-r – Рекурсивное удаление дерева каталогов.

rmdir

Удаляет пустые каталоги

Удалить каталог testdir04 из текущего расположения:

rmdir testdir04

Непустые каталоги удалить не получится:

rmdir /root/testdir02

Придется использовать rm, как описано выше.

Копирование, переименование и перемещение файлов и каталогов

mv 

Перемещает (переименовывает) файлы

Переместить файл file_primer03 из каталога /root/ в каталог /root/testdir02/, при этом задать ему новое имя – fileprimer031:

mv /root/file_primer03 /root/testdir02/fileprimer031

Хотя для изменения имени файла существует и другая команда.

Примечание: изменить имена групп файлов можно командой rename 1 (на самом деле это не команда, а скрипт). Например изменить расширения всех php-файлов на html можно командой rename -v ‘s/\.php$/\.html/’ *.php

Для копирования файлов воспользуйтесь другой командой.

cp 

Копирование файлов и каталогов

Копирование файла test_file01 из текущего расположения в каталог testdir02:

cp test_file01 testdir02/test_file01

Рекурсивное копирование каталога testdir02 из текущего расположения в новый каталог testdir02_copy:

cp -r testdir02 testdir02_copy

Очень интересное описание параметра:

-r – Копировать каталоги рекурсивно; выполнять какие-то, неопределенные стандартом действия, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, разрешается, и фактически одобряется, наличие опции-r как синонима для -R. Однако, глупое поведение, которое проявляет версия cp в GNU 4.0 не запрещается.)

Просмотр и редактирование

О консольных текстовых редакторах было упомянуто в самом начале статьи, поэтому в этом разделе рассматриватся они не будут.

cat 

Concatenate files and print on the standard output

Отображение содержимого файла test_file01:

cat test_file01

Объединение файла test_file01 с файлом test_file02, результат записывается в файл test_file03 в текущем расположении:

cat test_file01 test_file02 > test_file03

sort 

Sort lines of text files

Сомневаюсь, что у меня получится описать работу команды “sort” лучше, чем это сделано в статье “HuMan: sort“.

head 

Output the first part of files

Отображение первых строчек файла test_file01 (по умолчанию последние 10 строчек):

head test_file01

Отображение первых 4 строчек файла test_file01:

head -n 4 test_file01

-n – print the first K lines instead of the first 10; with the leading -', print all but the last K lines of each file

tail 

Output the last part of files

Отображение последних строчек файла test_file01 (по умолчанию последние 10 строчек):

tail test_file01

Отображение последних 4 строчек файла test_file01:

tail -n 4 test_file01

-n - output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth

tee 

Read from standard input and write to standard output and files

Удобная команда, предназначеня для одновременного вывода информации на экран и в файл.

Отправка пяти эхо-запросов до узла ya.ru с выводом информации на экран и в файл ping_ya_c_5.ru:

ping -c 5 ya.ru | tee ping_ya_c_5.ru

О всех описанных выше командах можно подробнее прочитать в статье "Операции с файлами и фильтрация".

grep, egrep, fgrep, rgrep 

Print lines matching a pattern

О данных командах, в частности речь идет о grep, в некотором будущем я планирую написать отдельную статью, т.к. модели их применения достаточно объемны.

ls, dir, vdir 

Выводит содержимое каталога

Отобразить список файлов в текущем расположении:

ls -l
-l - Выдавать (в одноколоночном формате) тип файла, права доступа к файлу, количество ссылок на файл, имя владельца, имя группы, размер файла (в байтах), временной штамп и имя файла.

Отобразить список файлов в текущем расположении рекурсивно:

ls -lR

-R - Рекурсивно выдавать список содержимого всех каталогов.

Подробнее о команде ls можно прочитать в статье "15 базовых примеров команды ls в Linux"

Поиск файлов

find 

Search for files in a directory hierarchy

Поиск файлов, начинающихся на testf, с корневого каталога:

find / -name "testf*"

locate 

Find files by name

Описание с официального сайта:

Команда updatedb создаёт индекс всех файлов и папок, имеющихся в системе. Команда locate позволяет быстро находить файлы в системе по этому индексу без необходимости сканирования всей файловой системы каждый раз. Также см. пакеты mlocate и slocate.

whereis

Locate the binary, source, and manual page files for a command

Команду удобно использовать для определения месторасположения исходных файлов, ман-страниц.
Информация о консольном редакторе nano:

whereis nano

which 

Locate a command

Также прочитать подробнее о командах поиска можно в статье "5 способов поиска файлов в Linux, используя терминал.".

Другие команды

Помимо описанных выше существует множество других полезных команд, о которых можно прочитать ниже.

pwd - print name of current/working directory/

Очень полезная команда, которая наиболее часто используется вообще без каких-либо аргументов.

cd - используется для перехода между каталогами.

Для перехода в домашний каталог:

cd

Для перехода в каталог /usr/bin/:

cd /usr/bin/

Переход на один уровень вверх:

cd ..

ln - создает ссылки между файлами

du - оценка места на диске, занимаемого файлом

Вывести размер текущего каталога:

du -sh

-s - Выводить размеры только для указанных явно аргументов, а не для их подкаталогов.
-h - Добавлять букву размера, например M для двоичного мегабайта (
мебибайт’), к каждому размеру.

На этом пока все, по мере необходимости буду дополнять статью другими командами.


Помимо упомянутых выше, при написании статьи использовались следующие источники:

Основные команды Linux – Справочник команд Линукс

Работа с файлами и каталогами

Яндекс.Метрика