- Core utilities (Русский)
- Contents
- Основные
- Предотвращение потери данных
- Второстепенные
- Альтернативы
- Альтернативы cd
- Альтернативы cp
- Альтернативы ls
- Альтернативы find
- Альтернативы diff
- Альтернативы grep
- Поиск кода
- Поиск в Linux с помощью команды find
- Общий синтаксис
- Описание опций
- Примеры использования find
- Поиск файла по имени
- Поиск по дате
- По типу
- Поиск по правам доступа
- Поиск файла по содержимому
- С сортировкой по дате модификации
- Лимит на количество выводимых результатов
- Поиск с действием (exec)
- Чистка по расписанию
Core utilities (Русский)
Основные утилиты (core utilities) — набор базовых, фундаментальных инструментов операционной системы GNU/Linux. В статье дан неполный обзор этих утилит, приведены ссылки на документацию и перечислены полезные альтернативы. В основном (но не только) в статье рассматривается набор GNU coreutils. Большинство основных утилит являются традиционными инструментами Unix (см. Heirloom); многие из них были стандартизированы POSIX, но продолжили развиваться, расширяя свою функциональность.
Большинство интерфейсов командной строки задокументировано в man-страницах. Утилиты GNU Project используют для этой цели Info-мануалы, а в некоторых оболочках для справки по встроенным командам предусмотрена команда help . Кроме того, большинство утилит выводит краткую справочную информацию о себе при запуске с флагом —help .
Contents
Основные
Некоторые важные утилиты, с которыми должен быть знаком пользователь Arch Linux. См. также intro(1) .
Пакет | Утилита | Описание | Документация | Альтернативы |
---|---|---|---|---|
встроенные команды | cd | смена каталога | cd(1p) | #Альтернативы cd |
GNU coreutils | ls | вывод содержимого каталога | ls(1) , info | tree , #Альтернативы ls |
cat | вывод содержимого файлов в stdout | cat(1) , info | tac(1) , bat | |
mkdir | создание каталога | mkdir(1) , info | ||
rmdir | удаление пустого каталога | rmdir(1) , info | ||
rm | удаление файлов и каталогов | rm(1) , info | shred | |
cp | копирование файлов и каталогов | cp(1) , info | #Альтернативы cp | |
mv | перемещение файлов и каталогов | mv(1) , info | ||
ln | создание жёстких и символических ссылок | ln(1) , info | ||
chown | изменение владельца и группы файла | chown(1) , info | chgrp(1) | |
chmod | изменение прав доступа к файлу | chmod(1) , info | ||
dd | преобразование и копирование файла | dd(1) , info | ||
df | вывод информации об использовании файловой системой дискового пространства | df(1) , info | ||
GNU tar | tar | архиватор tar | tar(1) , info | архиваторы |
GNU less | less | постраничный просмотр в терминале | less(1) | программы постраничного просмотра |
GNU findutils | find | поиск файлов и каталогов | find(1) , info, GregsWiki | #Альтернативы find |
GNU diffutils | diff | построчное сравнение файлов | diff(1) , info | #Альтернативы diff |
GNU grep | grep | вывод строк, совпадающих с шаблоном | grep(1) , info | #Альтернативы grep |
GNU sed | sed | потоковый редактор | sed(1) , info, one-liners | |
GNU gawk | awk | язык поиска и обработки шаблонов | gawk(1) , info | nawk , mawk AUR |
util-linux | dmesg | вывод содержимого буфера ядра и управление им | dmesg(1) | журнал systemd |
lsblk | вывод информации о блочных устройствах | lsblk(8) | ||
mount | монтирование файловой системы | mount(8) | ||
umount | размонтирование файловой системы | umount(8) | ||
su | замена пользователя | su(1) | sudo, opendoas | |
kill | завершение процесса | kill(1) | pkill(1) , killall(1) | |
procps-ng | pgrep | поиск процесса по имени или атрибутам | pgrep(1) | pidof(1) |
ps | вывод информации о процессах | ps(1) | top(1) , htop | |
free | вывод информации о свободной/используемой памяти | free(1) |
Предотвращение потери данных
rm , mv , cp и перенаправления ввода/вывода в оболочке удаляют или перезаписывают файлы молча, не уведомляя пользователя. С флагом -i команды rm , mv и cp будут запрашивать разрешение перед каждым удалением/перезаписью. Некоторые предпочитают использовать этот флаг по умолчанию, создав соответствующий псевдоним. Тем не менее, такой подход чреват потенциальными проблемами, если в какой-то момент вы будете работать на другой системе или от другого пользователя, в которых подобный псевдоним отсутствует. Лучший способ защитить данные от случайного удаления — регулярно создавать резервные копии.
Второстепенные
Утилиты, которые также могут быть полезны.
Пакет | Утилита | Описание | Документация | Альтернативы |
---|---|---|---|---|
встроенные команды | alias | создание или вывод списка псевдонимов | alias(1p) | |
type | определение типа команды | type(1p) | which(1) | |
time | вывод времени выполнения команды | time(1p) | ||
GNU coreutils | tee | считывание stdin и запись в stdout и файлы | tee(1) , info | |
mktemp | создание временного файла или каталога | mktemp(1) , info | ||
cut | вывод отдельных частей строк | cut(1) , info | ||
tr | замена или удаление символов | tr(1) , info | ||
od | отображение файлов в восьмеричном и других форматах | od(1) , info | hexdump(1) , xxd(1) в vim | |
sort | сортировка строк | sort(1) , info | ||
uniq | поиск или исключение повторяющихся строк | uniq(1) , info | ||
comm | построчное сравнение двух отсортированных файлов | comm(1) , info | ||
head | вывод первых строк файла | head(1) , info | ||
tail | вывод последних строк файла или отслеживание изменений в файле | tail(1) , info | ||
wc | вывод количества строк, слов и байтов | wc(1) , info | ||
GNU binutils | strings | вывод содержащихся в двоичном файле текстовых строк | strings(1) , info | |
GNU glibc | iconv | конвертация кодировок символов | iconv(1) | recode |
file | file | определение типа файла | file(1) |
Пакет moreutils содержит другие полезные инструменты вроде sponge(1) , которые не вошли в GNU coreutils.
Альтернативы
Альтернативные основные утилиты предоставляются следующими пакетами: BusyBox, Heirloom Toolchest, 9base , sbase-git AUR и ubase-git AUR .
Альтернативы cd
- zoxide — Умная команда cd, которая изучает ваши привычки и позволяет перемещаться повсюду буквально несколькими нажатиями клавиш.
https://github.com/ajeetdsouza/zoxide || zoxide
Альтернативы cp
rsync#Как альтернатива cp/mv позволяет продолжить прерванную передачу файла, выводить состояние передачи, пропускать уже существующие файлы и проверять целостность итоговых файлов по контрольным суммам.
Альтернативы ls
- broot — Новый способ просмотра дерева каталогов и перемещения по нему.
https://github.com/Canop/broot || broot
- exa — Замена ls с поддержкой цветности, отображением дерева каталогов, интеграцией с git и другими возможностями.
https://github.com/ogham/exa || exa
- lsd — Современный ls с большим набором цветов и замечательными иконками.
https://github.com/Peltoche/lsd || lsd
Альтернативы find
- fd — Простая, быстрая и удобная альтернатива find. По умолчанию игнорирует скрытые файлы и файлы, указанные в .gitignore .
https://github.com/sharkdp/fd || fd
- fuzzy-find — Fuzzy-завершение имён файлов при поиске.
https://github.com/silentbicycle/ff || ff-gitAUR
- mlocate — Объединение locate и updatedb.
https://pagure.io/mlocate || mlocate
- plocate — Намного более быстрый locate.
https://plocate.sesse.net/ || plocate
Графические программы для поиска файлов перечислены в List of applications/Utilities#File searching.
Альтернативы diff
Некоторые программы предоставляют сравнение по словам, которого нет в diffutils :
- git diff выполняет сравнение по словам с флагом —color-words ; с флагом —no-index работает также и с файлами вне рабочего дерева Git.
- dwdiff — Фронт-енд для diff со сравнением по словам; поддержка цветности.
https://os.ghalkes.nl/dwdiff.html || dwdiff
- GNU wdiff — Реализация GNU diff со сравнением по словам; нет поддержки цветности.
https://www.gnu.org/software/wdiff/ || wdiff
- cwdiff — Обёртка для GNU wdiff с поддержкой цветности.
https://github.com/junghans/cwdiff || cwdiffAUR , cwdiff-gitAUR
- icdiff — diff с поддержкой цветности, написанный на Python. Название расшифровывается как «Improved color diff»; обычный режим работы diff также доступен.
https://github.com/jeffkaufman/icdiff || icdiffAUR , icdiff-gitAUR
Альтернативы grep
- mgrep — grep с многострочным поиском.
https://sourceforge.net/projects/multiline-grep/ || mgrepAUR
- pdfgrep — Инструмент для поиска текста в PDF-файлах.
https://pdfgrep.org/ || pdfgrep
- ripgrep-all — Поиск в текстовых файлах, а также в PDF, E-Book, документах Office, архивах zip и tar.gz.
https://github.com/phiresky/ripgrep-all || ripgrep-allAUR
Поиск кода
Следующие три инструмента предназначены для замены grep при поиске кода. По умолчанию используют рекурсивный поиск, пропускают двоичные файлы и учитывают .gitignore .
Источник
Поиск в Linux с помощью команды find
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
— набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция | Описание |
---|---|
-name | Поиск по имени. |
-iname | Регистронезависимый поиск по имени. |
-type | |
-size | Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»). |
-mtime | Время изменения файла. Указывается в днях. |
-mmin | Время изменения в минутах. |
-atime | Время последнего обращения к объекту в днях. |
-amin | Время последнего обращения в минутах. |
-ctime | Последнее изменение владельца или прав на объект в днях. |
-cmin | Последнее изменение владельца или прав в минутах. |
-user | Поиск по владельцу. |
-group | По группе. |
-perm | С определенными правами доступа. |
-depth | Поиск должен начаться не с корня, а с самого глубоко вложенного каталога. |
-maxdepth | Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный. |
-prune | Исключение перечисленных каталогов. |
-mount | Не переходить в другие файловые системы. |
-regex | По имени с регулярным выражением. |
-regextype | Тип регулярного выражения. |
-L или -follow | Показывает содержимое символьных ссылок (симлинк). |
-empty | Искать пустые каталоги. |
-delete | Удалить найденное. |
-ls | Вывод как ls -dgils |
Показать найденное. | |
-print0 | Путь к найденным объектам. |
-exec <> \; | Выполнить команду над найденным. |
-ok | Выдать запрос перед выполнением -exec. |
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
find / -name «file.txt»
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name «sess_*» -a -name «*cd»
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name «sess_*» -o -name «*cd»
в) Более компактный вид имеют регулярные выражения, например:
find . -regex ‘.*/\(sess_.*cd\)’
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
find . ! -name «*.log»
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
find . -type f -mtime +60
* данная команда найдет файлы, которые менялись более 60 дней назад.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).
а) дате изменения:
find . -type f -newermt «2019-11-02 00:00»
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
б) дате обращения:
find . -type f -newerat 2019-10-08
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
в) дате создания:
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
find / -perm 0666
2. Находим файлы, доступ к которым имеет только владелец:
find / -perm 0600
Поиск файла по содержимому
find / -type f -exec grep -i -H «content» <> \;
* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
find . -name «sess_*» -type f -print -exec rm <> \;
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
find . -name «sess_*» -type f -exec mv <> new_name \;
find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name
3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find . -name «*.tmp» | wc -l
4. Изменить права:
find /home/user/* -type d -exec chmod 2700 <> \;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
5. Передать найденные файлы конвееру (pipe):
find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
6. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Источник