Core utilities (Русский)
Эта статья описывает так называемые базовые утилиты для системы GNU/Linux, такие как less, ls и grep. В этой статье будут описаны утилиты GNU, находящиеся в пакете coreutils, а также некоторые другие. Ниже будут описаны различные полезные советы и другая полезная информация, связанная с этими утилитами.
Основные команды
В таблице ниже привидены основные 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
- dcflddAUR - это расширенная версия программы 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
~/.bashrc
или ~/.zshrc
, поскольку нижеследующее основывается на export LESS=R
При использовании команды и перенаправлении её стандартного вывода (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
позволяет вам задать права доступа.
mktemp -p
.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