Core utilities (Русский) - ArchWiki

# Core utilities (Русский)

From ArchWiki
Jump to navigation Jump to search

Ссылки по теме

- Командная оболочка
- Пользователи и группы
- systemd (Русский)
- pacman (Русский)
- Основные рекомендации

Состояние перевода: На этой странице представлен перевод статьи 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
  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) для дополнительной информации.

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

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

- 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 (создать временный файл): `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 альтернативы, поэтому рекомендуется использовать именно их, как описано в Википедии.

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

- A sampling of coreutils , part 2 , part 3 - Overview of commands in coreutils

- GNU Coreutils Manpage

- Learn the DD command

Categories:

- Command-line (Русский)
- Lists of software (Русский)