mirror of
https://github.com/xmengnet/the-art-of-command-line.git
synced 2024-12-24 09:16:29 +08:00
MacOS X, Full-"ё", little more
This commit is contained in:
parent
075810aea7
commit
0dba6d474a
2 changed files with 21 additions and 21 deletions
40
README-ru.md
40
README-ru.md
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
Основное:
|
Основное:
|
||||||
|
|
||||||
- Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объемность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте).
|
- Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объёмность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте).
|
||||||
- Этот документ написан для пользователей Linux, с единственным исключением – секцией "[MacOS only](#macos-only)". Всё остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin).
|
- Этот документ написан для пользователей Linux, с единственным исключением – секцией "[MacOS only](#macos-only)". Всё остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin).
|
||||||
- Фокусируемся на интерактивном Баше, но многие вещи также могут быть использованы с другими шеллами; и в общем применимы к Баш-скирптингу.
|
- Фокусируемся на интерактивном Баше, но многие вещи также могут быть использованы с другими шеллами; и в общем применимы к Баш-скирптингу.
|
||||||
- Эта инструкция включает в себя стандартные Unix-команды и те, для которых нужно устанавливать сторонние пакеты – они настолько полезны, что стоят того, чтобы их установили.
|
- Эта инструкция включает в себя стандартные Unix-команды и те, для которых нужно устанавливать сторонние пакеты – они настолько полезны, что стоят того, чтобы их установили.
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
|
|
||||||
- Выучите основы Баша. Просто возьмите и напечатайте `man bash` в терминале и хотя бы просмотрите его; он довольно просто читается и он не очень большой. Другие шеллы тоже могут быть хороши, но Баш – мощная программа, и Баш всегда под рукой (использование *исключительно* zsh, fish и т.д., которые наверняка круто выглядят на Вашем ноуте, во многом Вас ограничивает: например, Вы не сможете использовать возможности этих шеллов на уже существующем сервере).
|
- Выучите основы Баша. Просто возьмите и напечатайте `man bash` в терминале и хотя бы просмотрите его; он довольно просто читается и он не очень большой. Другие шеллы тоже могут быть хороши, но Баш – мощная программа, и Баш всегда под рукой (использование *исключительно* zsh, fish и т.д., которые наверняка круто выглядят на Вашем ноуте, во многом Вас ограничивает: например, Вы не сможете использовать возможности этих шеллов на уже существующем сервере).
|
||||||
|
|
||||||
- Выучите хотя бы один консольный редактор текста. Идеально – Vim (`vi`), ведь у него нет конкурентов, когда вам нужно быстренько что-то подправить (даже если Вы постоянно сидите на Emacs или какой-нибудь тяжелой IDE, или на модном хипстерском редакторе).
|
- Выучите хотя бы один консольный редактор текста. Идеально – 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`.
|
||||||
|
|
||||||
|
@ -56,13 +56,13 @@
|
||||||
|
|
||||||
- Знайте `ssh` и основы беспарольной аутентификации через `ssh-agent`, `ssh-add`, и т.д.
|
- Знайте `ssh` и основы беспарольной аутентификации через `ssh-agent`, `ssh-add`, и т.д.
|
||||||
|
|
||||||
- Основы работы с файлами: `ls` и `ls -l` (в частности, узнайте, что значит каждый столбец в `ls -l`), `less`, `head`, `tail` и `tail -f` (или даже лучше – `less +F`), `ln` и `ln -s` (узнайте разницу между символьными ссылками и жесткими ссылками, и почему жесткие ссылки лучше), `chown`, `chmod`, `du` (для быстрой сводки по использованию диска: `du -hk *`). Для менеджмента файловой системы, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`.
|
- Основы работы с файлами: `ls` и `ls -l` (в частности, узнайте, что значит каждый столбец в `ls -l`), `less`, `head`, `tail` и `tail -f` (или даже лучше – `less +F`), `ln` и `ln -s` (узнайте разницу между символьными ссылками и жёсткими ссылками, и почему жёсткие ссылки лучше), `chown`, `chmod`, `du` (для быстрой сводки по использованию диска: `du -hk *`). Для менеджмента файловой системы, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`.
|
||||||
|
|
||||||
- Основы работы с сетью: `ip` или `ifconfig`, `dig`.
|
- Основы работы с сетью: `ip` или `ifconfig`, `dig`.
|
||||||
|
|
||||||
- Хорошо знайте регулярные выражения и разные флаги к `grep`/`egrep`. Такие флаги, как `-i`, `-o`, `-A`, и `-B` – стоит знать.
|
- Хорошо знайте регулярные выражения и разные флаги к `grep`/`egrep`. Такие флаги, как `-i`, `-o`, `-A`, и `-B` – стоит знать.
|
||||||
|
|
||||||
- Обучитесь использованию системами управления пакетами `apt-get`, `yum`, `dnf` или `pacman` (в зависимости от дистрибутива). Знайте, как искать и устанавливать пакеты и обязательно имейте установленым `pip` для установки командных утилит, написаных на Python (некоторые из тех, что вы найдете ниже, легче всего установить через `pip`).
|
- Обучитесь использованию системами управления пакетами `apt-get`, `yum`, `dnf` или `pacman` (в зависимости от дистрибутива). Знайте, как искать и устанавливать пакеты и обязательно имейте установленым `pip` для установки командных утилит, написаных на Python (некоторые из тех, что вы найдёте ниже, легче всего установить через `pip`).
|
||||||
|
|
||||||
|
|
||||||
## Ежедневное использование
|
## Ежедневное использование
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
|
|
||||||
- В Баше много типов пространств имён. Проверить, существует ли переменная – `${name:?error message}`. Например, если Баш-скрипту нужен всего один аргумент, просто напишите `input_file=${1:?usage: $0 input_file}`. Арифметическая область видимости: `i=$(( (i + 1) % 5 ))`. Последовательности: `{1..10}`. Обрезка строк: `${var%suffix}` и `${var#prefix}`. Например, если `var=foo.pdf`, тогда `echo ${var%.pdf}.txt` выведет `foo.txt`.
|
- В Баше много типов пространств имён. Проверить, существует ли переменная – `${name:?error message}`. Например, если Баш-скрипту нужен всего один аргумент, просто напишите `input_file=${1:?usage: $0 input_file}`. Арифметическая область видимости: `i=$(( (i + 1) % 5 ))`. Последовательности: `{1..10}`. Обрезка строк: `${var%suffix}` и `${var#prefix}`. Например, если `var=foo.pdf`, тогда `echo ${var%.pdf}.txt` выведет `foo.txt`.
|
||||||
|
|
||||||
- Вывод любой команды можно сохранить в файлоподобный контекст по `<(some command)`. Например, сравнение локального файла `/etc/hosts с удаленным:
|
- Вывод любой команды можно сохранить в файлоподобный контекст по `<(some command)`. Например, сравнение локального файла `/etc/hosts с удалённым:
|
||||||
```sh
|
```sh
|
||||||
diff /etc/hosts <(ssh somehost cat /etc/hosts)
|
diff /etc/hosts <(ssh somehost cat /etc/hosts)
|
||||||
```
|
```
|
||||||
|
@ -121,9 +121,9 @@
|
||||||
|
|
||||||
- Используйте `man ascii` для хорошей ASCII таблицы, с hex и десятичными значениями. Для информации по основным кодировкам полезны: `man unicode`, `man utf-8`, и `man latin1`.
|
- Используйте `man ascii` для хорошей ASCII таблицы, с hex и десятичными значениями. Для информации по основным кодировкам полезны: `man unicode`, `man utf-8`, и `man latin1`.
|
||||||
|
|
||||||
- Используйте `screen` или [`tmux`](https://tmux.github.io/), чтобы иметь несколько экранов в одном терминале; это особенно полезно, когда вы работаете с удаленным сервером. Тогда Вы можете подключаться к/отключаться от сессий. Более лаконичный подход для этого – использование `dtach`.
|
- Используйте `screen` или [`tmux`](https://tmux.github.io/), чтобы иметь несколько экранов в одном терминале; это особенно полезно, когда вы работаете с удалённым сервером. Тогда Вы можете подключаться к/отключаться от сессий. Более лаконичный подход для этого – использование `dtach`.
|
||||||
|
|
||||||
- В SSH полезно знать [туннелирование](https://ru.wikibooks.org/wiki/SSH_%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) с флагами `-L` и `-D` (и иногда `-R`), чтобы зайти на сайт с удаленного сервера.
|
- В SSH полезно знать [туннелирование](https://ru.wikibooks.org/wiki/SSH_%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) с флагами `-L` и `-D` (и иногда `-R`), чтобы зайти на сайт с удалённого сервера.
|
||||||
|
|
||||||
- Ещё может быть полезно оптимизировать вашу SSH-конфигурацию, например, файл `~/.ssh/config` содержит настройки, которые помогают избегать потерянные подключения в некоторых сетевых окружениях. Используйте сжатие (которое полезно с scp через медленные подключения) и увеличьте количество каналов к одному серверу через этот конфиг:
|
- Ещё может быть полезно оптимизировать вашу SSH-конфигурацию, например, файл `~/.ssh/config` содержит настройки, которые помогают избегать потерянные подключения в некоторых сетевых окружениях. Используйте сжатие (которое полезно с scp через медленные подключения) и увеличьте количество каналов к одному серверу через этот конфиг:
|
||||||
```
|
```
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
- Чтобы быстро поднять веб-сервер в текущей директории (и поддерикториях), который доступен для всех в вашей сети, используйте:
|
- Чтобы быстро поднять веб-сервер в текущей директории (и поддерикториях), который доступен для всех в вашей сети, используйте:
|
||||||
`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 -`, чтобы симулировать свежий логин от рута или другого пользователя.
|
- Чтобы выполнить определённую команду с привилегиями, используйте `sudo` (для рута) и `sudo -u` (для другого пользователя). Используйте `su` или `sudo bash`, чтобы запустить шелл от имени этого пользователя. Используйте `su -`, чтобы симулировать свежий логин от рута или другого пользователя.
|
||||||
|
|
||||||
|
|
||||||
## Процессинг файлов и информации
|
## Процессинг файлов и информации
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
|
|
||||||
- Знайте про `cut`, `paste`, и `join` для работы с текстовыми файлами. Многие люди используют `cut`, забыв про `join`.
|
- Знайте про `cut`, `paste`, и `join` для работы с текстовыми файлами. Многие люди используют `cut`, забыв про `join`.
|
||||||
|
|
||||||
- Знайте о `wc`: для подсчета переводов строк (`-l`), для символов – (`-m`), для слов – words (`-w`), для байтового подсчета – (`-c`).
|
- Знайте о `wc`: для подсчёта переводов строк (`-l`), для символов – (`-m`), для слов – words (`-w`), для байтового подсчёта – (`-c`).
|
||||||
|
|
||||||
- Знайте про `tee` для копирования в файл из stdin и stdout, что-то типа `ls -al | tee file.txt`.
|
- Знайте про `tee` для копирования в файл из stdin и stdout, что-то типа `ls -al | tee file.txt`.
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
```sh
|
```sh
|
||||||
# Восстановить бекапы из foo.bak в foo:
|
# Восстановить бекапы из foo.bak в foo:
|
||||||
rename 's/\.bak$//' *.bak
|
rename 's/\.bak$//' *.bak
|
||||||
# Полное переименование имен файлов, папок и содержимого файлов из foo в bar.
|
# Полное переименование имён файлов, папок и содержимого файлов из foo в bar.
|
||||||
repren --full --preserve-case --from foo --to bar .
|
repren --full --preserve-case --from foo --to bar .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -239,9 +239,9 @@
|
||||||
|
|
||||||
- Xтобы узнать какой сокет или процесс использует интернет, используйте `iftop` или `nethogs`.
|
- Xтобы узнать какой сокет или процесс использует интернет, используйте `iftop` или `nethogs`.
|
||||||
|
|
||||||
- `ab`, которая поставляется вместе с Апачем, полезна для быстрой и нетщательной проверки производительности веб-сервера. Для более серьезного лоад-тестинга используйте `siege`.
|
- `ab`, которая поставляется вместе с Апачем, полезна для быстрой и нетщательной проверки производительности веб-сервера. Для более серьёзного лоад-тестинга используйте `siege`.
|
||||||
|
|
||||||
- Для более серьезного дебаггинга сетей используйте `wireshark`, `tshark`, и `ngrep`.
|
- Для более серьёзного дебаггинга сетей используйте `wireshark`, `tshark`, и `ngrep`.
|
||||||
|
|
||||||
- Знайте про `strace` и `ltrace`. Эти команды могут быть полезны, если программа падает или висит и вы не знаете, почему, или если хотите протестировать производительность программы. Не забывайте про возможность отладки (`-c`) возможностью подключиться к процессу (`-p`).
|
- Знайте про `strace` и `ltrace`. Эти команды могут быть полезны, если программа падает или висит и вы не знаете, почему, или если хотите протестировать производительность программы. Не забывайте про возможность отладки (`-c`) возможностью подключиться к процессу (`-p`).
|
||||||
|
|
||||||
|
@ -261,9 +261,9 @@
|
||||||
|
|
||||||
## В одну строчку
|
## В одну строчку
|
||||||
|
|
||||||
Давайте соберем всё вместе и напишем несколько команд:
|
Давайте соберём всё вместе и напишем несколько команд:
|
||||||
|
|
||||||
- Это довольно круто, что можно найти множественные пересечения файлов, соединить отсортированные файлы и посмотреть разницу в нескольких файлов через `sort`/`uniq`. Это быстрый подход и работает на файлах любого размера (включая многогигабайтные файлы). (Сортировка не ограничена памятью, но возможно вам придется добавить `-T` если `/tmp` находится на небольшом логическом диске). Ещё посмотрите то, что было сказано выше о `LC_ALL`. Флаг сорта `-u` option не используется ниже, чтобы было понятнее:
|
- Это довольно круто, что можно найти множественные пересечения файлов, соединить отсортированные файлы и посмотреть разницу в нескольких файлов через `sort`/`uniq`. Это быстрый подход и работает на файлах любого размера (включая многогигабайтные файлы). (Сортировка не ограничена памятью, но возможно вам придётся добавить `-T` если `/tmp` находится на небольшом логическом диске). Ещё посмотрите то, что было сказано выше о `LC_ALL`. Флаг сорта `-u` option не используется ниже, чтобы было понятнее:
|
||||||
```sh
|
```sh
|
||||||
cat a b | sort | uniq > c # c is a union b
|
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 | sort | uniq -d > c # c is a intersect b
|
||||||
|
@ -273,7 +273,7 @@
|
||||||
- Используйте `grep . *` для того, чтобы посмотреть содержимое всех файлов в директории, особенно полезно, когда у вас много конфигов типа `/sys`, `/proc`, `/etc`.
|
- Используйте `grep . *` для того, чтобы посмотреть содержимое всех файлов в директории, особенно полезно, когда у вас много конфигов типа `/sys`, `/proc`, `/etc`.
|
||||||
|
|
||||||
|
|
||||||
- Получить сумму всех чисел, которые находятся в третьей колонке текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще чем делать это в Питоне):
|
- Получить сумму всех чисел, которые находятся в третьей колонке текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще, чем делать это в Питоне):
|
||||||
```sh
|
```sh
|
||||||
awk '{ x += $3 } END { print x }' myfile
|
awk '{ x += $3 } END { print x }' myfile
|
||||||
```
|
```
|
||||||
|
@ -282,7 +282,7 @@
|
||||||
```sh
|
```sh
|
||||||
find . -type f -ls
|
find . -type f -ls
|
||||||
```
|
```
|
||||||
Это почти как рекурсивная `ls -l, но более читабельно чем `ls -lR`:
|
Это почти как рекурсивная `ls -l, но читабельнее, чем `ls -lR`:
|
||||||
|
|
||||||
- Используйте `xargs` (или `parallel`). Это очень мощная штука. Обратите внимание, что Вы можете контролировать количество команд на каждую строку, а также параллельность. Если Вы не уверены, что делаете что-то правильно, начните с `xargs echo`. Ещё `-I{}` – полезная штука. Примеры:
|
- Используйте `xargs` (или `parallel`). Это очень мощная штука. Обратите внимание, что Вы можете контролировать количество команд на каждую строку, а также параллельность. Если Вы не уверены, что делаете что-то правильно, начните с `xargs echo`. Ещё `-I{}` – полезная штука. Примеры:
|
||||||
```sh
|
```sh
|
||||||
|
@ -407,11 +407,11 @@
|
||||||
|
|
||||||
- `lsof`: процессинг дискрипторов и информация о сокетах
|
- `lsof`: процессинг дискрипторов и информация о сокетах
|
||||||
|
|
||||||
- `dstat`: полезная статистика системы
|
- `dstat`: полезная статистика ОС
|
||||||
|
|
||||||
- [`glances`](https://github.com/nicolargo/glances): высокоуровневая, многосистемная статистика
|
- [`glances`](https://github.com/nicolargo/glances): высокоуровневая статистика по многим подсистемам
|
||||||
|
|
||||||
- `iostat`: статистика CPU и использования жесткого диска
|
- `iostat`: статистика процессора и использования жёсткого диска
|
||||||
|
|
||||||
- `htop`: улучшенная версия top
|
- `htop`: улучшенная версия top
|
||||||
|
|
||||||
|
@ -439,7 +439,7 @@
|
||||||
|
|
||||||
- `fortune`, `ddate`, и `sl`: хм, не знаю, будут ли вам "полезны" весёлые цитатки и поезда, пересекающие ваш терминал :)
|
- `fortune`, `ddate`, и `sl`: хм, не знаю, будут ли вам "полезны" весёлые цитатки и поезда, пересекающие ваш терминал :)
|
||||||
|
|
||||||
## MacOS only
|
## MacOS X only
|
||||||
|
|
||||||
Некоторые вещи, подходящие *только* для Мака.
|
Некоторые вещи, подходящие *только* для Мака.
|
||||||
|
|
||||||
|
|
|
@ -443,7 +443,7 @@ A few examples of piecing together commands:
|
||||||
- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful"
|
- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful"
|
||||||
|
|
||||||
|
|
||||||
## MacOS only
|
## MacOS X only
|
||||||
|
|
||||||
These are items relevant *only* on MacOS.
|
These are items relevant *only* on MacOS.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue