1
0
mirror of https://github.com/jlevy/the-art-of-command-line.git synced 2024-12-04 10:24:46 +02:00

merged with spmbt's latest revision

This commit is contained in:
Oleg Berman 2015-07-09 19:31:30 -04:00
commit e88e955896
2 changed files with 14 additions and 14 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea

View File

@ -11,7 +11,7 @@
- [Системный дебаггинг](#Системный-дебаггинг)
- [В одну строчку](#В-одну-строчку)
- [Сложно, но полезно](#Сложно-но-полезно)
- [MacOS only](#Macos-only)
- [MacOS X only](#Macos-x-only)
- [Больше информации по теме](#Больше-информации-по-теме)
- [Дисклеймер](#Дисклеймер)
@ -22,16 +22,15 @@
Многое из того, что тут написано, [изначально](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)
[появилось](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)
на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know).
Начав идею там — похоже, что стоит развить её на Gihub, где обитают люди, талантливее меня, и могут предлагать улучшения данной подборки. Если вы заметили ошибки (во всех вариантах перевода), пожалуйста, оставьте тикет или киньте пулл-реквест (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты).
на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), и увидев там заинтересованность, подумалось, что стоит подключить и Github, где обитают люди, талантливее меня, и могут предлагать улучшения данной подборки. Если вы заметили ошибки (во всех вариантах перевода), пожалуйста, оставьте тикет или киньте пулл-реквест (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты).
## Описание
Основное:
- Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объёмность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте).
- Этот документ написан для пользователей Linux, с единственным исключением – секцией "[MacOS only](#macos-only)". Всё остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin).
- Фокусируемся на интерактивном Баше, но многие вещи также могут быть использованы с другими шеллами; и в общем применимы к Баш-скриптингу
- Этот документ написан для пользователей Linux, с единственным исключением – секцией "[MacOS X only](#macos-x-only)". Всё остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin).
- Фокусируемся на интерактивном Баше, но многие вещи могут быть использованы с другими шеллами; и в общем применимы к Баш-скриптингу
- Эта инструкция включает в себя стандартные Unix-команды и те, для которых нужно устанавливать сторонние пакеты – они настолько полезны, что стоят того, чтобы их установили.
Заметки:
@ -46,11 +45,11 @@
- Выучите хотя бы один консольный редактор текста. Идеально – Vim (`vi`), ведь у него нет конкурентов, когда вам нужно быстренько что-то подправить (даже если вы постоянно сидите на Emacs или какой-нибудь тяжёлой IDE, или на модном хипстерском редакторе).
- Знайте как читать документацию через `man` (для любознательных – `man man`; `man` по углам документа в скобках добавляет номер, например 1 – для обычных команд, 5 – для файлов, конвенций, 8 – для административных команд). Ищите мануалы через `apropos`, и помните, что некоторые команды – не бинарники, а встроенные команды Баша, и помощь по ним можно получить через `help` и `help -d`.
- Знайте как читать документацию через `man` (для любознательных – `man man`; `man` по углам документа в скобках добавляет номер, например 1 – для обычных команд, 5 – для файлов, конвенций, 8 – для административных команд). Ищите мануалы через `apropos` и помните, что некоторые команды – не бинарники, а встроенные команды Баша, и помощь по ним можно получить через `help` и `help -d`.
- Узнайте о том, как перенаправлять ввод и вывод через `>` и `<` и пайпы `|`. Помните, что `>` – переписывает выходной файл, а `>>` добавляет к нему. Узнайте побольше про stdout и stderr.
- Узнайте побольше про раскрытие file glob элементов `*` (а также `?` и `{`...`}`), кавычки, а также разницу между двойными `"` и одинарными `'` кавычками. (Больше о расширении переменных читайте ниже)
- Узнайте побольше про раскрытие file glob элементов `*` (а также `?` и `{`...`}`), кавычки, а также разницу между двойными `"` и одинарными `'` кавычками. (Больше о расширении переменных читайте ниже.)
- Будьте знакомы с работой с процессами в Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, и т.д.
@ -68,11 +67,11 @@
- Используйте **tab** в Баше для автодополнения аргументов к командам и **ctrl-r** для поиска по истории командной строки
- Используйте **ctrl-w** в Баше для того, чтобы удалить последнее слово в команде; **ctrl-u** – чтобы удалить команду полностью. Используйте **alt-b** и **alt-f** для того, чтобы бегать между словами команды, **ctrl-k** – чтобы удалить символы от курсора до конца строки, **ctrl-l** – чтобы очистить экран. Взгляните на `man readline`, чтобы узнать о всех клавиатурных сокращениях Баша. [Их много](http://ss64.com/bash/syntax-keyboard.html)! Например, **alt-.** вставляет последний аргумент предыдущей команды, а **ctrl-x *** [разворачивает глоб](http://superuser.com/questions/215950/how-to-expand-on-bash-command-line).
- Используйте **ctrl-w** в Баше для того, чтобы удалить последнее слово в команде; **ctrl-u** – чтобы удалить команду полностью. Используйте **alt-b** и **alt-f** для того, чтобы бегать между словами команды, **ctrl-k** – чтобы удалить символы от курсора до конца строки, **ctrl-l** – чтобы очистить экран. Взгляните на `man readline`, чтобы узнать о всех клавиатурных сокращениях Баша. [Их много](http://ss64.com/bash/syntax-keyboard.html)! Например, **alt-.** вставляет последний аргумент предыдущей команды, а **ctrl-x** [разворачивает глоб](http://superuser.com/questions/215950/how-to-expand-on-bash-command-line).
- Если Вам нравятся шорткаты Вима, сделайте `set -o vi`.
- Для того, чтобы посмотреть историю, введите `history`. Также существует множество аббревиатур, например, `!$` – последний аргумент, `!!` – последняя команда, хотя эти аббревиатуры часто заменяются шорткатами **ctrl-r** и **alt-.**.
- Чтобы посмотреть историю, введите `history`. Также существует множество аббревиатур, например, `!$` – последний аргумент, `!!` – последняя команда, хотя эти аббревиатуры часто заменяются шорткатами **ctrl-r** и **alt-.**.
- Для того, чтобы прыгнуть к последней рабочей директории, используйте `cd -`
@ -98,7 +97,7 @@
- Используйте `alias`, чтобы поименовать частоиспользуемые команды. Например, `alias ll='ls -latr'` создаст новое сокращение `ll`.
- В Баш-скриптах используйте `set -x` для того, чтобы отлаживать вывод. Используйте строгие режимы везде, где возможно. Используйте `set -e` для того, чтобы прекращать выполнение при ошибках. Используйте `set -o pipefail` для того, чтобы строго относится к ошибкам (это более глубокая тема). Для более сложных скриптов также используйте `trap`.
- В Баш-скриптах используйте `set -x`, чтобы отлаживать вывод. Используйте строгие режимы везде, где возможно. Используйте `set -e` для того, чтобы прекращать выполнение при ошибках. Используйте `set -o pipefail`, чтобы строго относиться к ошибкам (это более глубокая тема). Для более сложных скриптов выбирайте `trap`.
- В Баш-скриптах подоболочки (subshells) – удобный способ группировать команды. Один из самых распространенных примеров – временно передвинуться в другую рабочую директорию, вот так:
```bash
@ -116,7 +115,7 @@
- Знайте про *heredoc*-синтаксис в Баше, работает он так: `cat <<EOF ...`.
- В Баше перенаправляйте стандартный вывод, а также вывод stderr вот так: `some-command >logfile 2>&1`. Зачастую для того, чтобы убедится, что команда не оставит открытым файл, привязав его к открытому терминалу, считается хорошей практикой добавлять `</dev/null`.
- В Баше перенаправляйте стандартный вывод, а также вывод stderr вот так: `some-command >logfile 2>&1`. Зачастую, для того, чтобы убедиться, что команда не оставит открытым файл, привязав его к открытому терминалу, считается хорошей практикой добавлять `</dev/null`.
- Используйте `man ascii` для хорошей ASCII таблицы, с *hex-* и десятичными значениями. Для информации по основным кодировкам полезны: `man unicode`, `man utf-8` и `man latin1`.
@ -147,7 +146,7 @@
- Для работы с файлами, список которых дала другая команда (например, Git), используйте `fpp` ([PathPicker](https://github.com/facebook/PathPicker)).
- Чтобы быстро поднять веб-сервер в текущей директории (и поддерикториях), который доступен для всех в вашей сети, используйте:
`python -m SimpleHTTPServer 7777` (если у вас Python 2, и вы хотите открыть сервер на порту 7777) или `python -m http.server 7777` (для Python 3 и порта 7777).
`python -m SimpleHTTPServer 7777` (если у вас Python 2 и вы хотите открыть сервер на порту 7777) или `python -m http.server 7777` (для Python 3 и порта 7777).
- Чтобы выполнить определённую команду с привилегиями, используйте `sudo` (для рута) и `sudo -u` (для другого пользователя). Используйте `su` или `sudo bash`, чтобы запустить шелл от имени этого пользователя. Используйте `su -`, чтобы симулировать свежий логин от рута или другого пользователя.
@ -222,7 +221,7 @@
## Системный дебаггинг
- Для веб-дебаггинга используйте `curl` и `curl -I`, или их альтернативу `wget`. Так же есть более современные альтернативы, типа [`httpie`](https://github.com/jakubroztocil/httpie).
- Для веб-дебаггинга используйте `curl` и `curl -I`, или их альтернативу `wget`. Также, есть более современные альтернативы, типа [`httpie`](https://github.com/jakubroztocil/httpie).
- Чтобы получить информацию о диске/CPU/сети, используйте `iostat`, `netstat`, `top` (или лучшую альтернатву `htop`) и особенно `dstat`. Хороший старт для того, чтобы понимать что происходит в системе.
@ -456,7 +455,7 @@
За небольшим исключением, весь код написан так, чтобы другие его смогли прочитать.
Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано в Баше, вовсе не означает, что оно должно быть на нём написано. ;)
Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано на Баше, вовсе не означает, что оно должно быть на нём написано. ;)
## Лицензия