arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
489 lines (312 loc) • 37.9 kB
Markdown
Ссылки по теме
* [Bash (Русский)](/index.php/Bash_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Bash (Русский)")
* [Zsh](/index.php/Zsh "Zsh")
* [Основные рекомендации](/index.php/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8 "Основные рекомендации")
* [GNU Project](/index.php/GNU_Project "GNU Project")
* [sudo (Русский)](/index.php/Sudo_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Sudo (Русский)")
* [cron](/index.php/Cron "Cron")
* [File system search](/index.php/File_system_search "File system search")
* [Страница справочного руководства](/index.php/%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B0 "Страница справочного руководства")
* [Securely wipe disk#shred](/index.php/Securely_wipe_disk#shred "Securely wipe disk")
* [File permissions and attributes](/index.php/File_permissions_and_attributes "File permissions and attributes")
**Состояние перевода:** На этой странице представлен перевод статьи [Core utilities](/index.php/Core_utilities "Core utilities"). Дата последней синхронизации: 2015-03-07\. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Core_utilities&diff=0&oldid=364226).
Эта статья описывает так называемые *базовые* утилиты для системы GNU/Linux, такие как *less*, *ls* и *grep*. В этой статье будут описаны утилиты GNU, находящиеся в пакете [coreutils](https://www.archlinux.org/packages/?name=coreutils), а также некоторые другие. Ниже будут описаны различные полезные советы и другая полезная информация, связанная с этими утилитами.
## Contents
* [1 Основные команды](#.D0.9E.D1.81.D0.BD.D0.BE.D0.B2.D0.BD.D1.8B.D0.B5_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4.D1.8B)
* [2 cat](#cat)
* [3 dd](#dd)
* [3.1 Проверка прогресса dd во время исполнения](#.D0.9F.D1.80.D0.BE.D0.B2.D0.B5.D1.80.D0.BA.D0.B0_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B5.D1.81.D1.81.D0.B0_dd_.D0.B2.D0.BE_.D0.B2.D1.80.D0.B5.D0.BC.D1.8F_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F)
* [3.1.1 Используя pipe viewer](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D1.8F_pipe_viewer)
* [3.2 Аналоги для dd](#.D0.90.D0.BD.D0.B0.D0.BB.D0.BE.D0.B3.D0.B8_.D0.B4.D0.BB.D1.8F_dd)
* [4 grep](#grep)
* [4.1 Разноцветный вывод](#.D0.A0.D0.B0.D0.B7.D0.BD.D0.BE.D1.86.D0.B2.D0.B5.D1.82.D0.BD.D1.8B.D0.B9_.D0.B2.D1.8B.D0.B2.D0.BE.D0.B4)
* [4.2 Стандартная ошибка](#.D0.A1.D1.82.D0.B0.D0.BD.D0.B4.D0.B0.D1.80.D1.82.D0.BD.D0.B0.D1.8F_.D0.BE.D1.88.D0.B8.D0.B1.D0.BA.D0.B0)
* [5 iconv](#iconv)
* [5.1 Конвертирование файла на месте](#.D0.9A.D0.BE.D0.BD.D0.B2.D0.B5.D1.80.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0_.D0.BD.D0.B0_.D0.BC.D0.B5.D1.81.D1.82.D0.B5)
* [6 ip](#ip)
* [7 less](#less)
* [7.1 Цветной вывод с помощью переменных окружения](#.D0.A6.D0.B2.D0.B5.D1.82.D0.BD.D0.BE.D0.B9_.D0.B2.D1.8B.D0.B2.D0.BE.D0.B4_.D1.81_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D0.BF.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F)
* [7.2 Цветной вывод с помощью программ-обёрток](#.D0.A6.D0.B2.D0.B5.D1.82.D0.BD.D0.BE.D0.B9_.D0.B2.D1.8B.D0.B2.D0.BE.D0.B4_.D1.81_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC-.D0.BE.D0.B1.D1.91.D1.80.D1.82.D0.BE.D0.BA)
* [7.3 Vim в качестве альтернативного просмотрщика](#Vim_.D0.B2_.D0.BA.D0.B0.D1.87.D0.B5.D1.81.D1.82.D0.B2.D0.B5_.D0.B0.D0.BB.D1.8C.D1.82.D0.B5.D1.80.D0.BD.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80.D1.89.D0.B8.D0.BA.D0.B0)
* [7.4 Цветной вывод при чтении с stdin](#.D0.A6.D0.B2.D0.B5.D1.82.D0.BD.D0.BE.D0.B9_.D0.B2.D1.8B.D0.B2.D0.BE.D0.B4_.D0.BF.D1.80.D0.B8_.D1.87.D1.82.D0.B5.D0.BD.D0.B8.D0.B8_.D1.81_stdin)
* [8 ls](#ls)
* [9 mkdir](#mkdir)
* [10 mv](#mv)
* [11 rm](#rm)
* [12 sed](#sed)
* [13 seq](#seq)
* [14 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)
## Основные команды
В таблице ниже привидены основные 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](https://en.wikipedia.org/wiki/ru:Cat "wikipedia:ru:Cat") (*объединить*) - это стандартная Unix утилита для конкатенации и отображения файлов.
* Поскольку *cat* не встроена в shell, во многих случаях более подходящим может оказаться использование [перенаправлений](https://en.wikipedia.org/wiki/ru:%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0 "wikipedia:ru:Перенаправление ввода-вывода"), например в скриптах или когда вам важна производительность. На самом деле `< *файл*` делает то же самое, что и `cat *файл*`.
* *cat* может работать с несколькими строками, хотя иногда это расценивается как плохая практика:
```
$ cat << EOF >> *путь/файл*
*первая строка*
...
*последняя строка*
EOF
```
Более хорошей альтернативой является команда *echo*:
```
$ echo "\
*первая строка*
...
*последняя строка*" \
>> *путь/файл*
```
* Если вам нужно отобразить строки файла в обратном порядке, воспользуйтесь утилитой [tac](https://en.wikipedia.org/wiki/tac_(Unix) (*cat* в обратную сторону).
## dd
[dd](https://en.wikipedia.org/wiki/ru:dd "wikipedia:ru: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](https://www.archlinux.org/packages/?name=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](https://www.archlinux.org/packages/?name=dcfldd) - это расширенная версия программы dd с дополнительными полезными возможностями для восстановления(?) и безопасности. Она принимает большинство из параметров для dd и включает вывод статуса. Последняя стабильная версия dcfldd вышла 19 декабря 2006.
ddrescue
GNU [ddrescue](https://www.archlinux.org/packages/?name=ddrescue) - это инструмент для восстановления данных. Он умеет игнорировать ошибки чтения, однако почти во всех случаях не подходит для зачистки диска. Смотрите [официальную документацию](http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html) для подробностей.
## grep
[grep](https://en.wikipedia.org/wiki/ru:grep "wikipedia:ru:grep") (произошло от [ed](https://en.wikipedia.org/wiki/ed "wikipedia:ed") *g/re/p*, *глобально/регулярное выражение/печатать*) - это утилита для текстового поиска из командной строки, изначально созданная для Unix. Команда *grep* глобально ищет в файле или в потоке стандартного ввода строки, удовлетворяющие заданному регулярному выражению и печатает их на свой стандартный вывод.
* Запомните, что *grep* обрабатывает файлы, так что такие конструкции как `cat *файл* | grep *паттерн*` можно заменить на `grep *паттерн* *файл*`
* Существуют альтернативы *grep*, оптимизированные для VCS исходного кода, такие как [the_silver_searcher](https://www.archlinux.org/packages/?name=the_silver_searcher) и [ack](https://www.archlinux.org/packages/?name=ack).
### Разноцветный вывод
Цветовой вывод команды `grep` может быть полезен для изучения [регулярных выражений](https://en.wikipedia.org/wiki/ru:%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F "wikipedia:ru:Регулярные выражения") и другой функциональности `grep`.
Чтобы включить цветной текст в *grep* напишите следующую запись в конфигурационном файле shell'а (например, если вы используете [bash](/index.php/Bash_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Bash (Русский)")):
`~/.bashrc` `alias grep='grep --color=auto'`
Чтобы в выводе отображались номера строк файла, добавьте опцию `-n`.
Для задания цвета подсветки по умолчанию может быть использована переменная окружения `GREP_COLOR` (по умолчанию используется красный). Чтобы изменить цвет, найдите [ANSI escape последовательность](http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html) для понравившегося вам цвета и добавьте её:
```
export GREP_COLOR="1;32"
```
`GREP_COLORS` можно использовать для задания цвета специфичного поиска.
### Стандартная ошибка
Некоторые команды отправляют свой вывод в стандартный поток ошибок, а grep не имеет такого эффекта. В этом случае перенаправьте стандартный поток ошибок прямо в стандартный поток вывода:
```
$ *command* 2>&1 | grep *args*
```
или упрощённый вариант для Bash 4:
```
$ *command* |& grep *args*
```
Смотрите также [Перенаправление ввода/вывода](http://www.tldp.org/LDP/abs/html/io-redirection.html).
## iconv
`iconv` перекодирует символы из одной кодировки в другую.
Следующая команда сконвертирует файл `foo` из кодировки ISO-8859-15 в UTF-8, сохранив конечный файл как `foo.utf`:
```
$ iconv -f ISO-8859-15 -t UTF-8 foo >foo.utf
```
Смотрите [iconv(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/iconv.1) для дополнительной информации.
### Конвертирование файла на месте
**Совет:** Если вы не хотите изменять время модификации файла, вы можете использовать [recode](https://www.archlinux.org/packages/?name=recode) вместо iconv.
В отличие от [sed](#sed), *iconv* не предоставляет опции для конвертирования файла на месте. Однако для его обработки можно использовать `sponge`, который распространяется в пакете [moreutils](https://www.archlinux.org/packages/?name=moreutils).
```
$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt
```
Смотрите [sponge(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/sponge.1) для дополнительной информации.
## ip
[ip](https://en.wikipedia.org/wiki/ru:Iproute2 "wikipedia:ru:Iproute2") позволяет вам узнать информацию о сетевых устройствах, IP адресах, таблицах маршрутизации и о других объектах программного обеспечения [IP](https://en.wikipedia.org/wiki/ru:IP "wikipedia:ru:IP") стека в Linux. При помощи добавления различных команд вы также можете манипулировать и настраивать большинство из этих объектов.
**Примечание:** Утилита *ip* распространяется в пакете [iproute2](https://www.archlinux.org/packages/?name=iproute2), который включён в группу [base](https://www.archlinux.org/groups/x86_64/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](http://www.policyrouting.org/iproute2.doc.html).
Статья [Настройка сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8 "Настройка сети") объясняет как использовать команду *ip* на практике в различных типовых случаях.
**Примечание:** Возможно вы знаете команду [ifconfig](https://en.wikipedia.org/wiki/ru:ifconfig "wikipedia:ru:ifconfig"), которая использовалась в старых версиях Linux для настройки интерфейсов. Теперь она устарела в Arch Linux; вы должны вместо неё использовать *ip*.
## less
[less](https://en.wikipedia.org/wiki/ru:less "wikipedia:ru:less") - это прогрмма для постраничного просмотра в терминале содержимого текстовых файлов. Несмотря на то, что он похож на другие пейджеры, такие как [more](https://en.wikipedia.org/wiki/ru:more "wikipedia:ru:more") и [pg](https://en.wikipedia.org/wiki/pg_(Unix) "wikipedia:pg (Unix)"), *less* предоставляет более продвинутый интерфейс и полноценный [функционал](http://www.greenwoodsoftware.com/less/faq.html).
Смотрите альтернативы в [Список приложений#Консольные утилиты постраничного просмотра](/index.php/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9#.D0.9A.D0.BE.D0.BD.D1.81.D0.BE.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.83.D1.82.D0.B8.D0.BB.D0.B8.D1.82.D1.8B_.D0.BF.D0.BE.D1.81.D1.82.D1.80.D0.B0.D0.BD.D0.B8.D1.87.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80.D0.B0 "Список приложений").
### Цветной вывод с помощью переменных окружения
Добавьте следующие строки в ваш конфигурационный файл для 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](https://en.wikipedia.org/wiki/ru:%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_ANSI "wikipedia:ru:Управляющие последовательности ANSI").
### Цветной вывод с помощью программ-обёрток
Вы можете включить подсветку синтаксиса кода в *less*. Сначала установите [source-highlight](https://www.archlinux.org/packages/?name=source-highlight), затем добавьте следующие строки в ваш конфигурационный файл для shell:
`~/.bashrc`
```
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
export LESS='-R '
```
Пользователи, часто работающие в командной строке могут установить [lesspipe](https://www.archlinux.org/packages/?name=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](https://www.archlinux.org/packages/?name=python-html2text)).
Перезайдите в систему после установки *lesspipe*, чтобы активировать его, или же укажите файл `/etc/profile.d/lesspipe.sh`.
### Vim в качестве альтернативного просмотрщика
[Vim](/index.php/Vim_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Vim (Русский)") (*улучшенный визуальный редактор*) имеет скрипт для просмотра содержимого текстовых файлов, сжатых файлов, бинарников и директорий. Добавьте следующую строку в файл конфигурации вашего shell, чтобы использовать его в качестве пейджера:
`~/.bashrc` `alias less='/usr/share/vim/vim74/macros/less.sh'`
Также существует альтернатива макросу *less.sh*, которая может работать как переменная окружения `PAGER`. Установите [vimpager](https://www.archlinux.org/packages/?name=vimpager) и добавьте следующее в файл настроек вашего shell:
`~/.bashrc`
```
export PAGER='vimpager'
alias less=$PAGER
```
Теперь программы, использующие переменную окружения `PAGER`, такие как [git](/index.php/Git "Git"), будут использовать *vim* в качестве просмотрщика.
### Цветной вывод при чтении с stdin
**Примечание:** Рекомендуется добавить [#Цветной вывод с помощью переменных окружения](#.D0.A6.D0.B2.D0.B5.D1.82.D0.BD.D0.BE.D0.B9_.D0.B2.D1.8B.D0.B2.D0.BE.D0.B4_.D1.81_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D0.BF.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D1.85_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F) в ваш `~/.bashrc` или `~/.zshrc`, поскольку нижеследующее основывается на `export LESS=R`
При использовании команды и перенаправлении её [стандартного вывода](https://en.wikipedia.org/wiki/ru:%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B8 "wikipedia:ru:Стандартные потоки") (*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](https://github.com/lilydjwg/stdoutisatty). || [stdoutisatty](https://aur.archlinux.org/packages/stdoutisatty/)
Пример: `stdoutisatty *программа* | less`
* **socat** — Реле для двунаправленой передачи данных между двумя независимыми каналами данных. Она основана на GNU [readline](https://www.archlinux.org/packages/?name=readline).
[http://www.dest-unreach.org/socat/](http://www.dest-unreach.org/socat/) || [socat](https://www.archlinux.org/packages/?name=socat)
Пример: `socat EXEC:"*программа*",pty STDIO | less`
* **[script](https://en.wikipedia.org/wiki/Script_(Unix) "wikipedia:Script (Unix)")** — Утилита, которая делает машинопись терминальной сессии.
|| [util-linux](https://www.archlinux.org/packages/?name=util-linux)
Пример: `script -fqc "*программа*" | less` или [[2]](http://stackoverflow.com/questions/1401002/trick-an-application-into-thinking-its-stdin-is-interactive-not-a-pipe/20401674#20401674)
* **unbuffer** — Скрипт, основанный на *sh* и [Tcl](http://tcl.tk/).
[http://expect.sourceforge.net/example/unbuffer.man.html](http://expect.sourceforge.net/example/unbuffer.man.html) || [expect](https://www.archlinux.org/packages/?name=expect)
Пример: `unbuffer *программа* | less`
В качестве альтернативы можно использовать модуль [zpty](http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fzpty-Module) для [zsh](/index.php/Zsh "Zsh"): [[3]](http://lilydjwg.is-programmer.com/2011/6/29/using-zpty-module-of-zsh.27677.html)
`~/.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](https://en.wikipedia.org/wiki/ru:ls "wikipedia:ru:ls") (*список*) - это команда для отображения списка файлов в Unix иUnix-подобных операционных системах.
* *ls* может отображать [права доступа к файлам](/index.php/File_permissions_and_attributes#Viewing_permissions "File permissions and attributes").
* Цветовой вывод можно включить с помощью простого алиаса. В файл `~/.bashrc` уже должна быть скопирована запись из `/etc/skel/.bashrc`:
`alias ls='ls --color=auto'`
Следующий шаг заключается в дальнейшем улучшении цветного вывода *ls*; например, не работающие (сироты) симлинки будут отображаться красными оттенками. Добавьте следующее в ваш конфигурационный файл для shell:
`eval $(dircolors -b)`
## mkdir
[mkdir](https://en.wikipedia.org/wiki/ru:mkdir "wikipedia:ru:mkdir") (*создать директорию*) - это команда для создания директорий.
* Чтобы сразу создать директорию со вложенными директориями используйте опцию `-p`, иначе будет выведено сообщение об ошибке. Если вы понимаете, что вы делаете, вы можете использовать опцию `-p` по умолчанию.
`alias mkdir='mkdir -p -v'`
Опция `-v` сделает команду говорливой.
* Нет необходимости изменять режим доступа с помощью *chmod* для только что созданных директорий, поскольку опция `-m` позволяет вам задать права доступа.
**Совет:** Если директория нажна вам временно, лучше будет использовать [mktemp](https://en.wikipedia.org/wiki/ru:%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB "wikipedia:ru:Временный файл") (*создать временный файл*): `mktemp -p`.
## mv
[mv](https://en.wikipedia.org/wiki/ru:mv "wikipedia:ru:mv") (*переместить*) - это команда для перемещения и переименования файлов и директорий. * Команда является очень опасной, поэтому нужно ограничить её возможности:
: `alias mv=' timeout 8 mv -iv'`
Этот алиас приостановит *mv*, если он выполняется более восьми секунд, будет спрашивать подтверждение на удалёние трёх и более файлов, отображать список выполняемых операций и не хранить себя в файле истории shell, если shell настроен так, чтобы игнорировать команды, начинающиеся с пробела.
## rm
[rm](https://en.wikipedia.org/wiki/ru:rm "wikipedia:ru:rm") (*удалить*) - это команда для удаления файлов и директорий.
* Команда является очень опасной, поэтому нужно ограничить её возможности:
`alias rm=' timeout 3 rm -Iv --one-file-system'`
Этот алиас будет приостанавливать *rm*, если она выполняется более трёх секунд, спрашивать подтверждение на удаление трёх и более файлов, отображать текущие операции, не давать возможность работать на более чем одной файловой системе и не хранить себя в файле истории shell, если он настроен так, чтобы игнорировать команды, начинающиеся с пробела. Замените `-I` на `-i`, если вы хотите, чтобы спрашивалось подтверждение даже для одного файла.
Пользователи zsh могут захотеть вписать `noglob` перед `timeout`, чтобы избежать неявных расширений.
* Чтобы удалять директории, которые по вашему предположению пусты, пользуйтесь *rmdir*, так как она выдаст ошибку, в случае если внутри удаляемой директории находятся файлы.
## sed
[sed](https://en.wikipedia.org/wiki/ru:sed "wikipedia:ru:sed") (*редактор потока*) - это Unix утилита для анализа и трансформации текста.
Вот удобный [список](http://sed.sourceforge.net/sed1line.txt) однострочных примеров использования *sed*.
**Совет:** Более мощной альтернативой является [AWK](https://en.wikipedia.org/wiki/ru:AWK "wikipedia:ru:AWK") и даже язык [Perl](https://en.wikipedia.org/wiki/ru:Perl "wikipedia:ru:Perl").
## seq
**seq** (*последовательность*) - это утилита для генерации последовательности чисел. Существуют встроенные в shell альтернативы, поэтому рекомендуется использовать именно их, как описано в [Википедии](https://en.wikipedia.org/wiki/Seq_(Unix) "wikipedia:Seq (Unix)").
## Смотрите также
* [A sampling of coreutils](http://www.reddit.com/r/commandline/comments/19garq/a_sampling_of_coreutils_120/) [, part 2](http://www.reddit.com/r/commandline/comments/19ge6v/a_sampling_of_coreutils_2040/) [, part 3](http://www.reddit.com/r/commandline/comments/19j1w3/a_sampling_of_coreutils_4060/) - Overview of commands in coreutils
* [GNU Coreutils Manpage](http://www.gnu.org/software/coreutils/manual/coreutils.html)
* [Learn the DD command](http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/)