From f58b0df8c6ad23e6c4c428a550bafe655dda4566 Mon Sep 17 00:00:00 2001 From: spmbt Date: Thu, 9 Jul 2015 13:08:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=2050%=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20-?= =?UTF-8?q?=20=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=D1=82=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=20=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=D0=B8=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-ru.md | 72 ++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/README-ru.md b/README-ru.md index f6b35ed..231049a 100644 --- a/README-ru.md +++ b/README-ru.md @@ -32,7 +32,7 @@ - Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объемность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте). - Этот документ написан для пользователей Linux, с единственным исключением – секцией "[MacOS only](#macos-only)". Всё остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin). -- Фокусируемся на интерактивном Баше, но многие вещи также могут быть использованы с другими шеллами; и в общем приминимы к Баш-скирптингу +- Фокусируемся на интерактивном Баше, но многие вещи также могут быть использованы с другими шеллами; и в общем применимы к Баш-скирптингу - Эта инструкция включает в себя стандартные Unix-команды и те, для которых нужно устанавливать сторонние пакеты – они настолько полезны, что стоят того, чтобы их установили Заметки: @@ -198,29 +198,29 @@ repren --full --preserve-case --from foo --to bar . ``` -- Используйте `shuf` для того, чтобы перемешать строки или выбрать случайную строчку из файла. +- Используйте `shuf`, чтобы перемешать строки или выбрать случайную строчку из файла. -- Знайте флаги `sort`а. Для чисел используйте `-n`, для работы с человекочитаемыми числами используйте `-h` (например `du -h`). Знайте как работают ключи (`-t` и `-k`). В частности, не забывайте что вам нужно писать `-k1,1` для того, чтобы отсортировать только первое поле; `-k1` значит сортировка учитывая всю строчку. Также, стабильная сортировка может быть полезной (`sort -s`). Например для того, чтобы отсортировать самое важное по второму полю, а второстепенное по первому можно использовать sort -k1,1 | sort -s -k2,2`. +- Знайте флаги `sort`а. Для чисел используйте `-n`, для работы с человекочитаемыми числами используйте `-h` (например `du -h`). Знайте, как работают ключи (`-t` и `-k`). В частности, не забывайте, что вам нужно писать `-k1,1`, чтобы отсортировать только первое поле; `-k1` означает сортировку, учитывающую всю строку. Может быть полезной *стабильная сортировка* (`sort -s`). Например, для сортировки самого важного по второму полю, а второстепенного – по первому: sort -k1,1 | sort -s -k2,2`. -- Если вам когда-нибудь придется написать код таба в терминале, например для сортировки по табу с флагом -t, используйте шорткат **ctrl-v** **[Tab]** или напишите `$'\t'`. Последнее лучше, потому что его можно скопировать. +- Если вам когда-нибудь придется написать код таба в терминале, например для сортировки по табу с флагом -t, используйте сокращение **ctrl-v** **[Tab]** или напишите `$'\t'`. Последнее лучше, потому что его можно скопировать. -- Стандартные инструменты для патчинга исходников это `diff` и `patch`. Также посмотрите на `diffstat` для просмотра статистики диффа. `diff -r` работает для по всей директории. Используйте `diff -r tree1 tree2 | diffstat` для полной сводки изменений. +- Стандартные инструменты для патчинга исходников – это `diff` и `patch`. Также, посмотрите на `diffstat` для просмотра статистики диффа. `diff -r` работает по всей директории. Используйте `diff -r tree1 tree2 | diffstat` для полной сводки изменений. - Для бинарников используйте `hd` для простых hex-дампом и `bvi` для двоичного изменения бинарников. -- `strings` (в связке `grep` или чем-то похожем) помогает найти строки в бинарниках. +- `strings` (в связке с `grep` или чем-то похожим) помогает найти строки в бинарниках. -- Для того, чтобы посмотреть разницу в бинарниках (дельта кодирование) используйте `xdelta3`. +- Чтобы посмотреть разницу в бинарниках (дельта-кодирование): `xdelta3`. -- Для конвертирования кодировок используйте `iconv`. Для более сложных задач – `uconv`, он поддерживает некоторые сложные фичи Юникода. Например эта команда переводит строки из файла в нижний регистр и убирает ударения (кои бывают, например, в Испанском) +- Для конвертирования кодировок используйте `iconv`. Для более сложных задач – `uconv`, он поддерживает некоторые сложные фичи Юникода. Например, перевод строки из файла в нижний регистр и убирает ударения (встречающиеся, например, в испанском): ```sh uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt ``` -- Для того, чтобы разбить файл на куски используйте `split` (разбивает на куски по размеру), или `csplit` (по шаблону или регулярному выражению) +- Чтобы разбить файл на куски, используйте `split` (разбивает на куски по размеру), или `csplit` (по шаблону или регулярному выражению) -- Используйте `zless`, `zmore`, `zcat`, и `zgrep` для работы с сжатыми файлами. +- Используйте `zless`, `zmore`, `zcat`, и `zgrep` для работы со сжатыми файлами. ## Системный дебаггинг @@ -228,53 +228,53 @@ - Чтобы получить информацию о диске/CPU/сети используйте `iostat`, `netstat`, `top` (или лучшую альтернатву `htop`) и особенно `dstat`. Хороший старт для того, чтобы понимать что происходит в системе. -- Для более детальной информации используйте [`glances`](https://github.com/nicolargo/glances). Эта программа показывает сразу несколько разных статистик в одном окне терминале. Полезно, когда следите за сразу несколькими системами. +- Для более детальной информации используйте [`glances`](https://github.com/nicolargo/glances). Эта программа показывает сразу несколько разных статистик в одном окне терминала. Полезно, когда следите за сразу несколькими системами. -- Для того, чтобы следить за памятью научитесь понимать `free` и `vmstat`. В частности не забывайте, что кешированые значения ("cached" value) – это память, которую держит ядро и эти значения являются частью `free`. +- Для того, чтобы следить за памятью, научитесь понимать `free` и `vmstat`. В частности, не забывайте, что кешированые значения ("cached" value) – это память, которую держит ядро, и эти значения являются частью `free`. -- Дебаггинг Джавы – совсем другая рыбка, но некоторые манипуляции над виртуальной машиной Оракла или любой другой позволит вам использовать делать `kill -3 ` и трассировать сводки стека и хипа (включая детали работы сборщика мусора, которые бывают очень полезными), и их можно дампнуть в stderr или логи. +- Дебаггинг Джавы – совсем другая рыбка, но некоторые манипуляции над виртуальной машиной Оракла или любой другой позволит вам делать `kill -3 ` и трассировать сводки стека и кучи (включая детали работы сборщика мусора, которые бывают очень полезными), и их можно дампнуть в stderr или логи. - Используйте `mtr` для лучшей трассировки, чтобы находить проблемы сети. -- Для того, чтобы узнать почему диск полностью забит используйте `ncdu`, это сохраняет время по сравнению с тем же `du -sh *`. +- Для того, чтобы узнать почему диск полностью забит, используйте `ncdu`, это экономит время по сравнению с тем же `du -sh *`. -- Для того, чтобы узнать какой сокет или процесс использует интернет используйте `iftop` или `nethogs`. +- Для того, чтобы узнать какой сокет или процесс использует интернет, используйте `iftop` или `nethogs`. -- `ab`, которая поставляется вместе в Апачем полезна для быстрой нетщательной проверки производительности веб-сервера. Для более серьезного лоад-тестинга используйте `siege`. +- `ab`, которая поставляется вместе с Апачем, полезна для быстрой и нетщательной проверки производительности веб-сервера. Для более серьезного лоад-тестинга используйте `siege`. - Для более серьезного дебаггинга сетей используйте `wireshark`, `tshark`, и `ngrep`. -- Знайте про `strace` и `ltrace`. Эти команды могут быть полезны, если программа падает или висит и вы не знаете почему, или если вы хотите протестировать производительность программы. Не забывайте про возможность дебаггинга (`-c`) и возможностью прицепиться к процессу (`-p`). +- Знайте про `strace` и `ltrace`. Эти команды могут быть полезны, если программа падает или висит и вы не знаете, почему, или если хотите протестировать производительность программы. Не забывайте про возможность отладки (`-c`) возможностью подключиться к процессу (`-p`). - Не забывайте про `ldd` для проверки системных библиотек. -- Знайте как прицепиться к бегущему процессу через `gdb` и получить трассировку стека. +- Знайте, как прицепиться к работающему процессу (через `gdb`) и получить трассировку стека. -- Используйте `/proc`. Иногда он невероятно полезен для дебага запущенных программ. Примеры: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps`. +- Используйте `/proc`. Иногда он невероятно полезен для отладки запущенных программ. Примеры: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps`. -- Когда дебажете что-то, что сломалось в прошлом используйте `sar` – бывает очень полезно. Показывает историю CPU, памяти, сети и т.д. +- Когда дебажите что-то, что сломалось в прошлом, используйте `sar` – бывает очень полезно. Показывает историю CPU, памяти, сети и т.д. -- Для анализа более глубоких систем и производительности посмотрите на `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), и [`sysdig`](https://github.com/draios/sysdig). +- Для анализа более глубоких систем и производительности посмотрите на `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)) и [`sysdig`](https://github.com/draios/sysdig). -- Узнайте какая у вас операционка через `uname` or `uname -a` (основная Unix-информация/информация о ядре) или `lsb_release -a` (информация о дистрибутиве). +- Узнайте, какая у вас операционка, через `uname` или `uname -a` (основная Unix-информация/информация о ядре) или `lsb_release -a` (информация о дистрибутиве). -- Используйте `dmesg` когда что-то ведет себя совсем странно (например железо или драйвера). +- Используйте `dmesg`, когда что-то ведёт себя совсем странно (например, железо или драйвера). ## В одну строчку Давайте соберем всё вместе и напишем несколько команд: -- Это довольно круто, что можно найти множественные пересечения файлов, соединить отсортированные файлы и посмотреть разницу в нескольких файлов через `sort`/`uniq`. Это быстрый подход и работает на файлах любого размера (включая многогигабайтные файлы). (Сортировка не ограничена памятью, но возможно вам придется добавить `-T` если `/tmp` находится на небольшом логическом диске). Еще посмотрите то что было сказано выше о `LC_ALL`. Флаг сорта `-u` option не используется ниже чтобы было понятнее: +- Это довольно круто, что можно найти множественные пересечения файлов, соединить отсортированные файлы и посмотреть разницу в нескольких файлов через `sort`/`uniq`. Это быстрый подход и работает на файлах любого размера (включая многогигабайтные файлы). (Сортировка не ограничена памятью, но возможно вам придется добавить `-T` если `/tmp` находится на небольшом логическом диске). Ещё посмотрите то, что было сказано выше о `LC_ALL`. Флаг сорта `-u` option не используется ниже, чтобы было понятнее: ```sh cat a b | sort | uniq > c # c is a union b cat a b | sort | uniq -d > c # c is a intersect b cat a b b | sort | uniq -u > c # c is set difference a - b ``` -- Используйте `grep . *` для того, чтобы посмотреть содержимое всех файлов в директории, особенно послезно когда у вас много конфигов типа `/sys`, `/proc`, `/etc`. +- Используйте `grep . *` для того, чтобы посмотреть содержимое всех файлов в директории, особенно полезно, когда у вас много конфигов типа `/sys`, `/proc`, `/etc`. -- Получить сумму всех чисел, которые находятся в третьей колонки текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще чем делать это в Питоне): +- Получить сумму всех чисел, которые находятся в третьей колонке текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще чем делать это в Питоне): ```sh awk '{ x += $3 } END { print x }' myfile ``` @@ -296,7 +296,7 @@ cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn ``` -- Запустите этот скрипт чтобы получить случайный совет из этой инструкции: +- Запустите этот скрипт, чтобы получить случайный совет из этой инструкции: ```sh function taocl() { curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md | @@ -358,7 +358,7 @@ - `file`: узнать тип файла -- `tree`: показать директории и сабдиректории в виде дерева; как `ls`, но рекурсивно +- `tree`: показать директории и сабдиректории в виде дерева, как `ls`, но рекурсивно - `stat`: информация о файле @@ -380,9 +380,9 @@ - `split` и `csplit`: разбить файлы -- `sponge`: прочитать весь инпут перед тем, как его записать, полезно когда читаешь из того же файла, куда записываешь, например вот так: `grep -v something some-file | sponge some-file` +- `sponge`: прочитать весь входной поток перед тем, как его записать; полезно, когда читаешь из того же файла, куда записываешь, например, так: `grep -v something some-file | sponge some-file` -- `units`: конвертер, метры в келометры, версты в пяди (смотрите `/usr/share/units/definitions.units`) +- `units`: конвертер, метры в километры, вёрсты в пяди (смотрите `/usr/share/units/definitions.units`) - `7z`: архиватор с высокой степенью сжатия @@ -392,9 +392,9 @@ - `ab`: бенчмаркинг веб-серверов -- `strace`: дебаг системных вызовов +- `strace`: отладка системных вызовов -- `mtr`: лучшей трассировка для дебаггинга сети +- `mtr`: лучшая трассировка для дебаггинга сети - `cssh`: несколько терминалов в одном UI @@ -428,15 +428,15 @@ - `ss`: статистика сокетов -- `dmesg`: ошибки бута и ошибки системы +- `dmesg`: ошибки загрузки системы и ошибки системы - `hdparm`: манипуляция с SATA/ATA - `lsb_release`: информация о дистрибутиве Linux -- `lsblk`: cписок блочных устройств компьютера: древо ваших дисков и логических дисков +- `lsblk`: cписок блочных устройств компьютера: дерево ваших дисков и логических дисков -- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: информация о железе включая, CPU, BIOS, RAID, графику, девайсы, и т.д. +- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: информация о железе, включая, CPU, BIOS, RAID, графику, девайсы, и т.д. - `fortune`, `ddate`, и `sl`: хм, не знаю, будут ли вам "полезны" весёлые цитатки и поезда, пересекающие ваш терминал :) @@ -450,7 +450,7 @@ - Для того, чтобы открыть файл или десктопную программу типа Finder, используйте `open` вот так: `open -a /Applications/Whatever.app`. -- Spotlight: Ищите файлы в консоле через `mdfind` и смотрите метадату (например EXIF информацию фотографий) через `mdls`. +- Spotlight: Ищите файлы в консоли через `mdfind` и смотрите метаданные (например, EXIF – информацию из фотографий) через `mdls`. - Не забывайте, что MacOS основан на BSD Unix, и многие команды (например, `ps`, `ls`, `tail`, `awk`, `sed`) имеют небольшие отличия от линуксовых. Это обусловлено влянием `UNIX System V` и `GNU Tools`. Разницу можно заметить, увидев заголовок "BSD General Commands Manual." к манам программ. В некоторых случаях, на Мак можно поставить GNU-версии программ, например `gawk` и `gsed`. Когда пишете кроссплатформенные Bash-скрипты, старайтесь избегать команды, которые могут отличаться (например, лучше используйте Python или `perl`), или тщательно всё тестируйте.