Core utilities (Русский)
Эта статья описывает так называемые базовые утилиты для системы GNU/Linux, такие как less, ls и grep. В этой статье будут описаны утилиты GNU, находящиеся в пакете coreutils, а также некоторые другие. Ниже будут описаны различные полезные советы и другая полезная информация, связанная с этими утилитами.
Contents
Основные команды
В таблице ниже привидены основные shell команды, которые должен знать каждый пользователь Linux. Команды, выделенные жирным являются частью shell, остальные программы являются внешними и вызываются shell'ом. Смотрите нижеследующие разделы и Статьи по теме для дополнительной информации.
| Команда | Описание | Пример |
|---|---|---|
| man | Показать страницу справочного руководства по программе | man ed |
| cd | Сменить директорию | cd /etc/pacman.d |
| mkdir | Создать директорию | mkdir ~/newfolder |
| rmdir | Удалить пустую директорию | rmdir ~/emptyfolder |
| rm | Удалить файл | rm -r ~/file.txt |
| rm -r | Удалить директорию с её содержимым | rm -r ~/.cache |
| ls | Отобразить список файлов | ls *.avi |
| ls -a | Отобразить скрытые файлы | ls -a /home/archie |
| ls -al | Отобразить скрытые файлы и их свойства | |
| mv | Переместить файл | mv ~/compressed.zip ~/archive/compressed2.zip |
| cp | Скопировать файл | cp ~/.bashrc ~/.bashrc.bak |
| chmod +x | Сделать файл исполняемым | chmod +x ~/.local/bin/myscript.sh |
| cat | Отобразить содержимое файла | cat /etc/hostname |
| strings | Отобразить печатные символы в бинарных файлах | strings /usr/bin/free |
| find | Поиск файла | find ~ -name myfile |
| mount | Монтирование раздела | mount /dev/sdc1 /media/usb |
| df -h | Отобразить оставшееся место на всех разделах | |
| ps -A | Отобразить все выполняющиеся процессы | |
| killall | Убить все запущенные экземпляры процесса |
cat
cat (объединить) - это стандартная Unix утилита для конкатенации и отображения файлов.
- Поскольку cat не встроена в shell, во многих случаях более подходящим может оказаться использование перенаправлений, например в скриптах или когда вам важна производительность. На самом деле
< файлделает то же самое, что иcat файл.
- cat может работать с несколькими строками, хотя иногда это расценивается как плохая практика:
$ cat << EOF >> путь/файл первая строка ... последняя строка EOF
- Более хорошей альтернативой является команда echo:
$ echo "\ первая строка ... последняя строка" \ >> путь/файл
- Если вам нужно отобразить строки файла в обратном порядке, воспользуйтесь утилитой tac (cat в обратную сторону).
dd
dd - это команда Unix и Unix подобных операционных систем, основным назначением которой является конвертация и копирование файлов.
Проверка прогресса dd во время исполнения
По умолчанию dd ничего не выводит на экран до того момента, как задание будет выполнено. При помощи команды kill и сигнала USR1 вы можете заставить её вывести статус, а программа на самом деле не будет убита. Откройте ещё один терминал с правами root и выполните следующую команду:
# killall -USR1 dd
Или:
# kill -USR1 pid_команды_dd
Например:
# kill -USR1 $(pidof dd)
При этом dd немедленно выведет свой прогресс в терминале. Например:
605+0 records in 605+0 records out 634388480 bytes (634 MB) copied, 8.17097 s, 77.6 MB/s
Используя pipe viewer
В качестве альтернативного варианта вы можете использовать pv, чтобы просматривать dd поток:
# dd if=/source/filestream | pv -monitor_options -s size_of_file | dd of=/destination/filestream
Чтобы было проще использовать pipe viewer, вы можете добавить это в ваш bashrc или zshrc:
copy() {
size=$(stat -c%s $1)
dd if=$1 &> /dev/null | pv -petrb -s $size | dd of=$2
}
И использовать следующим образом:
# copy /source/file /destination/file
Аналоги для dd
Другие аналогичные dd программы могут периодически выводить статус, например в виде простой полосы прогресса.
- dcfldd
- dcfldd - это расширенная версия программы dd с дополнительными полезными возможностями для восстановления(?) и безопасности. Она принимает большинство из параметров для dd и включает вывод статуса. Последняя стабильная версия dcfldd вышла 19 декабря 2006.[1]
- ddrescue
- GNU ddrescue - это инструмент для восстановления данных. Он умеет игнорировать ошибки чтения, однако почти во всех случаях не подходит для зачистки диска. Смотрите официальную документацию для подробностей.
grep
grep (произошло от ed g/re/p, глобально/регулярное выражение/печатать) - это утилита для текстового поиска из командной строки, изначально созданная для Unix. Команда grep глобально ищет в файле или в потоке стандартного ввода строки, удовлетворяющие заданному регулярному выражению и печатает их на свой стандартный вывод.
- Запомните, что grep обрабатывает файлы, так что такие конструкции как
cat файл | grep паттернможно заменить наgrep паттерн файл
- Существуют альтернативы grep, оптимизированные для VCS исходного кода, такие как the_silver_searcher и ack.
Разноцветный вывод
Цветовой вывод команды grep может быть полезен для изучения регулярных выражений и другой функциональности grep.
Чтобы включить цветной текст в grep напишите следующую запись в конфигурационном файле shell'а (например, если вы используете bash):
~/.bashrc
alias grep='grep --color=auto'
Чтобы в выводе отображались номера строк файла, добавьте опцию -n.
Для задания цвета подсветки по умолчанию может быть использована переменная окружения GREP_COLOR (по умолчанию используется красный). Чтобы изменить цвет, найдите ANSI escape последовательность для понравившегося вам цвета и добавьте её:
export GREP_COLOR="1;32"
GREP_COLORS можно использовать для задания цвета специфичного поиска.
Стандартная ошибка
Некоторые команды отправляют свой вывод в стандартный поток ошибок, а grep не имеет такого эффекта. В этом случае перенаправьте стандартный поток ошибок прямо в стандартный поток вывода:
$ command 2>&1 | grep args
или упрощённый вариант для Bash 4:
$ command |& grep args
Смотрите также Перенаправление ввода/вывода.
iconv
iconv перекодирует символы из одной кодировки в другую.
Следующая команда сконвертирует файл foo из кодировки ISO-8859-15 в UTF-8, сохранив конечный файл как foo.utf:
$ iconv -f ISO-8859-15 -t UTF-8 foo >foo.utf
Смотрите iconv(1) для дополнительной информации.
Конвертирование файла на месте
В отличие от sed, iconv не предоставляет опции для конвертирования файла на месте. Однако для его обработки можно использовать sponge, который распространяется в пакете moreutils.
$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt
Смотрите sponge(1) для дополнительной информации.
ip
ip позволяет вам узнать информацию о сетевых устройствах, IP адресах, таблицах маршрутизации и о других объектах программного обеспечения IP стека в Linux. При помощи добавления различных команд вы также можете манипулировать и настраивать большинство из этих объектов.
| Объект | Назначение | Название страницы руководства |
|---|---|---|
| ip addr | управление адресом протокола | ip-address |
| ip addrlabel | управление названиями адресов протокола | ip-addrlabel |
| ip l2tp | туннель Ethernet по IP (L2TPv3) | ip-l2tp |
| ip link | настройка сетевых устройств | ip-link |
| ip maddr | управление широковещательными адресами | ip-maddress |
| ip monitor | просматривать сообщения netlink | ip-monitor |
| ip mroute | управление кешем широковещательной маршрутизации | ip-mroute |
| ip mrule | правила в бд политики широковещательной маршрутизации | |
| ip neigh | управление таблицами neighbour/ARP | ip-neighbour |
| ip netns | управление обработкой сетевого пространства имён | ip-netns |
| ip ntable | настройка таблицы соседей | ip-ntable |
| ip route | настройка таблицы маршрутизации | ip-route |
| ip rule | управление базой данных политики маршрутизации | ip-rule |
| ip tcp_metrics | управление показателями TCP | ip-tcp_metrics |
| ip tunnel | настройка туннелей | ip-tunnel |
| ip tuntap | управление TUN/TAP устройствами | |
| ip xfrm | управление политиками IPsec | ip-xfrm |
Для всех объектов доступна команда help. Например, выполните ip addr help, чтобы узнать синтаксис команды для объекта address. Для продвинутого использования смотрите документацию iproute2.
Статья Настройка сети объясняет как использовать команду ip на практике в различных типовых случаях.
less
less - это прогрмма для постраничного просмотра в терминале содержимого текстовых файлов. Несмотря на то, что он похож на другие пейджеры, такие как more и pg, less предоставляет более продвинутый интерфейс и полноценный функционал.
Смотрите альтернативы в Список приложений#Консольные утилиты постраничного просмотра.
Цветной вывод с помощью переменных окружения
Добавьте следующие строки в ваш конфигурационный файл для shell:
~/.bashrc
export LESS=-R export LESS_TERMCAP_me=$(printf '\e[0m') export LESS_TERMCAP_se=$(printf '\e[0m') export LESS_TERMCAP_ue=$(printf '\e[0m') export LESS_TERMCAP_mb=$(printf '\e[1;32m') export LESS_TERMCAP_md=$(printf '\e[1;34m') export LESS_TERMCAP_us=$(printf '\e[1;32m') export LESS_TERMCAP_so=$(printf '\e[1;44;1m')
Можете изменять значения на предпочитаемые вами. Ссылки: Управляющие последовательности ANSI.
Цветной вывод с помощью программ-обёрток
Вы можете включить подсветку синтаксиса кода в less. Сначала установите source-highlight, затем добавьте следующие строки в ваш конфигурационный файл для shell:
~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s" export LESS='-R '
Пользователи, часто работающие в командной строке могут установить lesspipe.
Теперь вы можете отображать список сжатых файлов внутри архива при помощи вашего пейджера:
$ less сжатый_файл.tar.gz
==> use tar_file:contained_file to view a file in the archive -rw------- username/group 695 2008-01-04 19:24 сжатый_файл/content1 -rw------- username/group 43 2007-11-07 11:17 сжатый_файл/content2 сжатый_файл.tar.gz (END)
Также lesspipe предоставляет less возможность взаимодействовать с файлами, не являющимися архивами, выступая в качестве альтернативы специальной программы, ассоциированной с этим типом файлов (таким как просмотрщик HTML через python-html2text).
Перезайдите в систему после установки lesspipe, чтобы активировать его, или же укажите файл /etc/profile.d/lesspipe.sh.
Vim в качестве альтернативного просмотрщика
Vim (улучшенный визуальный редактор) имеет скрипт для просмотра содержимого текстовых файлов, сжатых файлов, бинарников и директорий. Добавьте следующую строку в файл конфигурации вашего shell, чтобы использовать его в качестве пейджера:
~/.bashrc
alias less='/usr/share/vim/vim74/macros/less.sh'
Также существует альтернатива макросу less.sh, которая может работать как переменная окружения PAGER. Установите vimpager и добавьте следующее в файл настроек вашего shell:
~/.bashrc
export PAGER='vimpager' alias less=$PAGER
Теперь программы, использующие переменную окружения PAGER, такие как git, будут использовать vim в качестве просмотрщика.
Цветной вывод при чтении с stdin
При использовании команды и перенаправлении её стандартного вывода (stdout) по конвейеру команде less для постраничного просмотра (например, pacman -Qe | less), вы можете заметить, что вывод больше не раскрашивается цветами. Обычно это происходит из-за того, что программа пытается определить, является ли её stdout интерактивным терминалом, и только в этом случае будет раскрашивать вывод, иначе текст будет нецветным. Такое поведение подходит когда вы хотите перенаправить stdout в файл, например, pacman -Qe > pkglst-backup.txt, но не подходит, когда вы хотите посмотреть вывод с помощью less.
Некоторые программы предоставляют опцию для отключения обнаружения интерактивного tty:
# dmesg --color=always | less
В случае, если программа такой опции не предоставляет, при помощи следующих утилит есть возможность обмануть программу, чтобы она думала, что её stdout является интерактивным терминалом:
-
stdoutisatty — Небольшая программка, которая отлавливает вызов функции
isatty.
- https://github.com/lilydjwg/stdoutisatty. || stdoutisattyAUR
- Пример:
stdoutisatty программа | less
- socat — Реле для двунаправленой передачи данных между двумя независимыми каналами данных. Она основана на GNU readline.
- http://www.dest-unreach.org/socat/ || socat
- Пример:
socat EXEC:"программа",pty STDIO | less
- script — Утилита, которая делает машинопись терминальной сессии.
- || util-linux
- Пример:
script -fqc "программа" | lessили [2]
- unbuffer — Скрипт, основанный на sh и Tcl.
- http://expect.sourceforge.net/example/unbuffer.man.html || expect
- Пример:
unbuffer программа | less
В качестве альтернативы можно использовать модуль zpty для zsh: [3]
~/.zshrc
zmodload zsh/zpty
pty() {
zpty pty-${UID} ${1+$@}
if [[ ! -t 1 ]];then
setopt local_traps
trap '' INT
fi
zpty -r pty-${UID}
zpty -d pty-${UID}
}
ptyless() {
pty $@ | less
}
Использование:
$ ptyless программа
Чтобы передать по конвейеру другому пейджеру (в данном примере less):
$ pty программа | less
ls
ls (список) - это команда для отображения списка файлов в Unix иUnix-подобных операционных системах.
- ls может отображать права доступа к файлам.
- Цветовой вывод можно включить с помощью простого алиаса. В файл
~/.bashrcуже должна быть скопирована запись из/etc/skel/.bashrc:
alias ls='ls --color=auto'
Следующий шаг заключается в дальнейшем улучшении цветного вывода ls; например, не работающие (сироты) симлинки будут отображаться красными оттенками. Добавьте следующее в ваш конфигурационный файл для shell:
eval $(dircolors -b)
mkdir
mkdir (создать директорию) - это команда для создания директорий.
- Чтобы сразу создать директорию со вложенными директориями используйте опцию
-p, иначе будет выведено сообщение об ошибке. Если вы понимаете, что вы делаете, вы можете использовать опцию-pпо умолчанию.
alias mkdir='mkdir -p -v'
- Опция
-vсделает команду говорливой.
- Нет необходимости изменять режим доступа с помощью chmod для только что созданных директорий, поскольку опция
-mпозволяет вам задать права доступа.
mv
mv (переместить) - это команда для перемещения и переименования файлов и директорий. * Команда является очень опасной, поэтому нужно ограничить её возможности:
:
alias mv=' timeout 8 mv -iv'
- Этот алиас приостановит mv, если он выполняется более восьми секунд, будет спрашивать подтверждение на удалёние трёх и более файлов, отображать список выполняемых операций и не хранить себя в файле истории shell, если shell настроен так, чтобы игнорировать команды, начинающиеся с пробела.
rm
rm (удалить) - это команда для удаления файлов и директорий.
- Команда является очень опасной, поэтому нужно ограничить её возможности:
alias rm=' timeout 3 rm -Iv --one-file-system'
- Этот алиас будет приостанавливать rm, если она выполняется более трёх секунд, спрашивать подтверждение на удаление трёх и более файлов, отображать текущие операции, не давать возможность работать на более чем одной файловой системе и не хранить себя в файле истории shell, если он настроен так, чтобы игнорировать команды, начинающиеся с пробела. Замените
-Iна-i, если вы хотите, чтобы спрашивалось подтверждение даже для одного файла. - Пользователи zsh могут захотеть вписать
noglobпередtimeout, чтобы избежать неявных расширений.
- Чтобы удалять директории, которые по вашему предположению пусты, пользуйтесь rmdir, так как она выдаст ошибку, в случае если внутри удаляемой директории находятся файлы.
sed
sed (редактор потока) - это Unix утилита для анализа и трансформации текста.
Вот удобный список однострочных примеров использования sed.
seq
seq (последовательность) - это утилита для генерации последовательности чисел. Существуют встроенные в shell альтернативы, поэтому рекомендуется использовать именно их, как описано в Википедии.
Смотрите также
- A sampling of coreutils , part 2 , part 3 - Overview of commands in coreutils