Core utilities (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Core utilities. Дата последней синхронизации: 2015-03-07. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Эта статья описывает так называемые базовые утилиты для системы 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 подобных операционных систем, основным назначением которой является конвертация и копирование файлов.

Примечание: cp может делать то же самое, что и dd без каких либо операндов, однако она не предназначена для более гибких процедур зачисток диска.

Проверка прогресса dd во время исполнения

По умолчанию dd ничего не выводит на экран до того момента, как задание будет выполнено. При помощи команды kill и сигнала USR1 вы можете заставить её вывести статус, а программа на самом деле не будет убита. Откройте ещё один терминал с правами root и выполните следующую команду:

# killall -USR1 dd
Примечание: Это также затронет все остальные выполняющиеся процессы 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) для дополнительной информации.

Конвертирование файла на месте

Совет: Если вы не хотите изменять время модификации файла, вы можете использовать recode вместо iconv.

В отличие от sed, iconv не предоставляет опции для конвертирования файла на месте. Однако для его обработки можно использовать sponge, который распространяется в пакете moreutils.

$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt

Смотрите sponge(1) для дополнительной информации.

ip

ip позволяет вам узнать информацию о сетевых устройствах, IP адресах, таблицах маршрутизации и о других объектах программного обеспечения IP стека в Linux. При помощи добавления различных команд вы также можете манипулировать и настраивать большинство из этих объектов.

Примечание: Утилита ip распространяется в пакете iproute2, который включён в группу base.
Объект Назначение Название страницы руководства
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 на практике в различных типовых случаях.

Примечание: Возможно вы знаете команду ifconfig, которая использовалась в старых версиях Linux для настройки интерфейсов. Теперь она устарела в Arch Linux; вы должны вместо неё использовать 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-подобных операционных системах.

  • Цветовой вывод можно включить с помощью простого алиаса. В файл ~/.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 (создать временный файл): 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.

Совет: Более мощной альтернативой является AWK и даже язык Perl.

seq

seq (последовательность) - это утилита для генерации последовательности чисел. Существуют встроенные в shell альтернативы, поэтому рекомендуется использовать именно их, как описано в Википедии.

Смотрите также