
- •Работа с командной строкой
- •Командные оболочки (shells) Общая информация об оболочках
- •Командная оболочка bash
- •Базовые команды
- •Пакет coreutils Антон Бояршинов
- •Операции над файлами и каталогами
- •Фильтры
- •Вычисления
- •Поиск Антон Бояршинов
- •Поиск по атрибутам
- •Выражения
- •Действия
- •Параметры
- •Терминалы
- •Работа с файлами
Пакет coreutils Антон Бояршинов
Пакет coreutils содержит множество маленьких утилит для работы с файлами и каталогами (создание, копирование и проч.) и текстовыми строками (объединение, сортировка и проч.). Принцип работы этих утилит унаследован от операционной системы UNIX: все они не имеют графического интерфейса и вызываются из командной строки с различными аргументами, работают с данными в простом текстовом формате и используют механизм стандартного ввода/вывода, что позволяет передавать вывод одной команды прямо на вход другой для последующей обработки, не используя промежуточных файлов (т. н. конвейер).
Эффективная работа с этими утилитами заключается именно в их комбинировании, они позволяют производить массовые однотипные операции по работе с файлами и текстовыми данными одной (пусть достаточно длинной) командой, что экономит огромное количество человеческого времени. Утилиты из этого пакета часто используются при написании сценариев командной оболочки. Далее описана большая часть утилит, входящих в пакет coreutils, для каждой утилиты приведено краткое описание ее функций. Более подробное описание по каждой утилите на русском языке вы можете получить, вызвав эту утилиту с ключом --help, а наиболее полную документацию (к сожалению, только на английском языке) — отдав команду infoутилита.
Операции над файлами и каталогами
Здесь рассмотрены утилиты, работающие с объектами файловой системы: файлами, каталогами, устройствами, а также с файловыми системами в целом.
cp
Копирует файлы и каталоги.
mv
Перемещает (переименовывает) файлы.
rm
Удаляет файлы и каталоги.
df
Выводит отчёт об использовании дискового пространства (свободном месте на всех дисках).
du
Вычисляет место на диске, занимаемое файлами или каталогами.
ln
Создаёт ссылки на файлы.
ls
Выводит список файлов в каталоге, поддерживает несколько различных форматов вывода.
mkdir
Создаёт каталоги.
touch
Изменяет метки времени файла (последняя модификация, последний доступ), может быть использована для создания пустых файлов.
realpath
Вычисляет абсолютное имя файла по относительному.
basename
Удаляет из полного имени файла путь (т. е. сокращает абсолютное имя файла до относительного).
dirname
Удаляет из полного имени файла имя файла (т. е. выводит полное имя каталога, в котором расположен файл).
pwd
Выводит имя текущего каталога.
Пример 7.1. Выявление каталогов, занимающих много места на диске, при помощи команды du
du -b | sort -nr
Фильтры
Фильтры — это программы, которые читают данные со стандартного ввода, преобразуют их и выводят на стандартный вывод. Использование программ-фильтров позволяет организовывать конвейер: производить несколько последовательных операций над данными в одной команде. Подробнее о перенаправлении стандартного ввода/вывода и конвейере можно прочитать в документации по bash или другой командной оболочке. Многие из команд, приведённых в этом разделе, могут работать и с файлами.
cat
объединяет файлы и выводит их на стандартный вывод;
tac
объединяет файлы и выводит их на стандартный вывод, начиная с конца;
sort
сортирует строки;
uniq
удаляет дублирующиеся строки из отсортированных файлов;
tr
выполняет замену определенных символов в стандартном вводе на другие определенные символы в стандартном выводе, может быть использована для транслитерации, удаления лишних символов и для более сложных подстановок;
cut
систематизированные данные в текстовом формате можно обрабатывать при помощи утилиты cut, которая выводит заданную часть каждой строки файла; cut позволяет выводить только заданные поля (данные из некоторых колонок таблицы, в которой содержимое ячеек разделено стандартным символом — знаком табуляции или любым другим), а также символы, стоящие на определённом месте в строке;
paste
объединяет данные из нескольких файлов в одну таблицу, в которой данные из каждого исходного файла составляют отдельную колонку;
csplit
делит файл на части по шаблону;
expand
преобразует знаки табуляции в пробелы;
unexpand
преобразует пробелы в знаки табуляции;
fmt
форматирует текст по ширине;
fold
переносит слишком длинные текстовые строки на следующую строку;
nl
нумерует строки файла;
od
выводит файл в восьмеричном, шестнадцатеричном и других подобных формах;
tee
дублирует стандартный вывод программы в файле на диске;
Пример 7.2. Получение списка адресов писавших вам людей с помощью команд cat, sort и uniq
cat *| grep ^From: |sort |uniq
Пример 7.3. Получение списка слов, встречающихся в тексте, с указанием количества употреблений
cat big.text.file | tr '[:space:][:punct:]' "\n" |sort
|uniq -c |sort -n -r |less
Прочее
head
выводит начальную часть файла заданного размера;
tail
выводит конечную часть файла заданного размера, поскольку может выводить данные по мере их добавления в конец файла, используется для слежения за файлами журналов и проч.;
echo
выводит текст аргумента на стандартный вывод;
false
ничего не делает, выходит с кодом возврата 1 (ошибка), может быть использована в сценариях оболочки, если треуется неудачно завершающаяся команда;
true
ничего не делает, выходит с кодом возврата 0 (удачное завершение), может быть использована в сценариях, если требуется удачно завершающаяся команда;
yes
бесконечно выводит одну и ту же строку (по умолчанию — yes) пока не будет прервана.
seq
выводит ряд чисел в заданном диапазоне последовательно возрастающих или убывающих на заданную величину;
sleep
приостанавливает выполнение на заданное число секунд;
usleep
приостанавливает выполнение на заданное число милисекунд;
comm
построчно сравнивает 2 предварительно отсортированных (командой sort) файла, выводит таблицу из трёх колонок, где в первой — строки, уникальные для первого файла, во второй — уникальные для второго, в третьей — общие для обоих файлов;
join
объединяет строки двух файлов по общему полю;
paste
Для каждой пары входных строк с одинаковыми общими полями выводит строку на стандартный вывод. По умолчанию общее поле считается первым, поля разделяются пробельными знаками.
split
разбивает файл на части заданного размера.