Искусство командной строки
Искусство командной строки .
расшифровка
Искусство командной строки
<! doctype html> <html lang = "en"> <Голова> <title> Искусство командной строки </ title> </ HEAD> <Тело> </ Body> </ Html>
Список Содержит
- Мета
- основы
- Ежедневное использование
- Обработка файлов и данных
- Отладка системы
- Однострочники
- Неясный, но полезный
- Только OS X
- Только для Windows
Мета
Объем:
- Это руководство как для начинающих, так и для опытных. Цели - широта (все важно), конкретность (приведите конкретные примеры наиболее распространенного случая) и краткость (избегайте несущественных вещей или отступлений, которые вы легко можете найти в другом месте). Каждый совет важен в некоторой ситуации или значительно экономит время по сравнению с альтернативами.
- Это написано для Linux, за исключением разделов «Только OS X» и «Только Windows». Многие из других элементов применимы или могут быть установлены на других Unices или OS X (или даже Cygwin).
- Основное внимание уделяется интерактивному Bash, хотя многие советы применимы и к другим оболочкам, и к общим сценариям Bash.
- Он включает в себя как «стандартные» команды Unix, так и те, которые требуют специальной установки пакетов - при условии, что они достаточно важны для включения.
Заметки:
- Чтобы сохранить это на одной странице, контент неявно включен по ссылке. Вы достаточно умен, чтобы искать больше деталей в другом месте, когда вы знаете идею или команду Google. Используйте apt-get, yum, dnf, pacman, pip или brew (в зависимости от ситуации) для установки новых программ.
- Используйте Explainshell, чтобы получить полезную информацию о том, что делают команды, опции, каналы и т. Д.
основы
- Изучите основы Bash. На самом деле, наберите man bash и, по крайней мере, просмотрите все; это довольно легко следовать и не так долго. Альтернативные оболочки могут быть хорошими, но Bash является мощным и всегда доступным (изучение только zsh, fish и т. Д., Хотя и заманчиво на вашем ноутбуке, ограничивает вас во многих ситуациях, например, при использовании существующих серверов).
- Хорошо выучите хотя бы один текстовый редактор. В идеале Vim (vi), так как на самом деле нет конкуренции за произвольное редактирование в терминале (даже если вы большую часть времени используете Emacs, большую IDE или современный хипстерский редактор).
- Умение читать документацию с помощью man (для любознательных man man перечисляет номера разделов, например, 1 - это «обычные» команды, 5 - это файлы / соглашения и 8 - для администрирования). Найти страницы справочника по поводу. Знайте, что некоторые команды не являются исполняемыми файлами, а встроены в Bash, и что вы можете получить помощь по ним с помощью help и help -d.
- Узнайте о перенаправлении вывода и ввода с помощью> и <и каналов с помощью |. Know> перезаписывает выходной файл и >> добавляет. Узнайте о stdout и stderr.
- Узнайте о расширении глобуса файла с помощью * (и, возможно,? И [...]), а также о кавычках и разнице между двойными и одинарными кавычками.
- Быть знакомым с управлением заданиями Bash: &, ctrl-z, ctrl-c, jobs, fg, bg, kill и т. Д.
- Знать ssh и основы аутентификации без пароля через ssh-agent, ssh-add и т. Д.
- Базовое управление файлами: ls и ls -l (в частности, узнайте, что означает каждый столбец в ls -l), less, head, tail и tail -f (или даже лучше, less + F), ln и ln -s (learn различия и преимущества жестких и мягких ссылок), chown, chmod, du (для краткого описания использования диска: du -hs *). Для управления файловой системой, df, mount, fdisk, mkfs, lsblk. Узнайте, что такое индекс (ls -i или df -i).
- Основное управление сетью: ip или ifconfig, dig.
- Изучите и используйте систему управления версиями, такую как git.
- Хорошо знаю регулярные выражения и различные флаги для grep / egrep. Параметры -i, -o, -v, -A, -B и -C заслуживают внимания.
- Научитесь использовать apt-get, yum, dnf или pacman (в зависимости от дистрибутива) для поиска и установки пакетов. И убедитесь, что у вас есть pip для установки инструментов командной строки на основе Python (несколько ниже проще всего установить через pip).
Ежедневное использование
- В Bash используйте Tab для завершения аргументов или перечисления всех доступных команд и ctrl-r для поиска в истории команд (после нажатия введите для поиска, несколько раз нажмите ctrl-r для циклического просмотра нескольких совпадений, нажмите Enter для выполнения найденной команды или нажмите стрелку вправо, чтобы поместить результат в текущую строку, чтобы разрешить редактирование).
- В Bash используйте ctrl-w, чтобы удалить последнее слово, и ctrl-u, чтобы удалить весь путь до начала строки. Используйте alt-b и alt-f для перемещения по слову, ctrl-a для перемещения курсора в начало строки, ctrl-e для перемещения курсора в конец строки, ctrl-k для уничтожения до конца строки, ctrl-l очистить экран. Смотрите man readline для всех стандартных сочетаний клавиш в Bash. Много. Например, альт. циклически перебирает предыдущие аргументы, и alt- * расширяет глобус.
- В качестве альтернативы, если вы любите привязки клавиш в стиле vi, используйте set -o vi (и установите -o emacs, чтобы вернуть его обратно).
- Для редактирования длинных команд после настройки вашего редактора (например, export EDITOR = vim), ctrl-x ctrl-e откроет текущую команду в редакторе для многострочного редактирования. Или в стиле vi, escape-v.
- Чтобы увидеть последние команды, историю. Есть также много сокращений, таких как! $ (Последний аргумент) и !! последняя команда, хотя их часто легко заменить на ctrl-r и alt- ..
- Перейдите в свой домашний каталог с помощью CD. Доступ к файлам относительно вашего домашнего каталога с префиксом ~ (например, ~ / .bashrc). В сценариях sh ссылка на домашний каталог называется $ HOME.
- Чтобы вернуться к предыдущему рабочему каталогу: cd -.
- Если вы уже наполовину набираете команду, но передумали, нажмите alt- #, чтобы добавить # в начале, и введите его в качестве комментария (или используйте ctrl-a, #, enter). Затем вы можете вернуться к нему позже через историю команд.
- Используйте xargs (или параллельно). Это очень мощно. Обратите внимание, что вы можете контролировать количество элементов, выполняемых в строке (-L), а также параллелизм (-P). Если вы не уверены, что это будет правильно, сначала используйте xargs echo. Кроме того, -I {} удобно.
Примеры:
находить . -имя '* .py' | xargs grep some_function кошачьи хозяева | xargs -I {} ssh [электронная почта защищена] {} имя хоста
set -euo pipefail trap "echo" error: Сценарий не выполнен: см. ошибку команды выше '"ERR
# сделать что-то в текущем каталоге (cd / some / other / dir && other-command) # продолжить в оригинальном каталоге
diff / etc / hosts <(ssh somehost cat / etc / hosts)
TCPKeepAlive = да ServerAliveInterval = 15 ServerAliveCountMax = 6 Сжатие = да ControlMaster auto ControlPath / tmp /% [электронная почта защищена] % h:% p ControlPersist да
stat -c '% A% a% n' / etc / timezone
>>> 2 + 3 5
Обработка файлов и данных
- Чтобы найти файл по имени в текущем каталоге, найдите. -имя '* что-то *' (или подобное). Чтобы найти файл в любом месте по имени, используйте команду locate (но имейте в виду, что updatedb может не проиндексировать недавно созданные файлы).
- Для общего поиска по исходным файлам или файлам данных (более продвинутым, чем grep -r), используйте ag.
- Чтобы преобразовать HTML в текст: lynx -dump -stdin
- Для Markdown, HTML и всех видов конвертации документов попробуйте pandoc.
- Если вы должны обрабатывать XML, xmlstarlet старый, но хороший.
- Для JSON используйте jq.
- Для YAML используйте shyaml.
- Для файлов Excel или CSV csvkit предоставляет in2csv, csvcut, csvjoin, csvgrep и т. Д.
- Для Amazon S3 удобнее использовать s3cmd, а s4cmd быстрее. AWS от Amazon и улучшенные пилы необходимы для решения других задач, связанных с AWS.
- Знать о sort и uniq, в том числе о параметрах uniq -u и -d. Смотрите также комм.
- Знать о вырезать, вставлять и объединять, чтобы манипулировать текстовыми файлами. Многие люди используют cut, но забывают о join.
- Знайте о wc для подсчета новых строк (-l), символов (-m), слов (-w) и байтов (-c).
- Знать о том, что нужно скопировать из stdin в файл, а также в stdout, как в ls -al | тройник file.txt.
- Знайте, что локаль незаметно влияет на многие инструменты командной строки, включая порядок сортировки (сортировку) и производительность. Большинство установок Linux устанавливают локальные переменные LANG или другие переменные локали, такие как американский английский. Но имейте в виду, что сортировка изменится, если вы измените локаль. И знайте, что процедуры i18n могут заставить сортировку или другие команды выполняться во много раз медленнее. В некоторых ситуациях (таких как операции set или операции уникальности ниже) вы можете полностью игнорировать медленные процедуры i18n и использовать традиционный порядок сортировки на основе байтов, используя export LC_ALL = C.
- Вы можете установить среду конкретной команды, добавив префикс к ее вызову с настройками переменных среды, как в TZ = Pacific / Fiji date.
- Знать основы awk и sed для простого манипулирования данными. Например, суммирование всех чисел в третьем столбце текстового файла: awk '{x + = $ 3} END {print x}'. Это, вероятно, в 3 раза быстрее и в 3 раза короче, чем эквивалентный Python.
- Чтобы заменить все вхождения строки в одном или нескольких файлах:
perl -pi.bak -e 's / old-string / new-string / g' my-files - *. txt
# Полное переименование имен файлов, каталогов и содержимого foo -> bar: repren --full --preserve-case --foo - в бар. # Восстановите файлы резервных копий. repren --renames --from '(. *) /. bak' --to '/ 1' * .bak # То же, что и выше, используя переименование, если доступно: переименовать 's //. bak $ //' * .bak
mkdir empty && rsync -r - удалить пустой / some-dir && rmdir some-dir
uconv -f utf-8 -t utf-8 -x ':: Any-Lower; :: Any-NFD; [: Марка без пробелов:]>; :: Any-NFC; '<input.txt> output.txt
Например:
getfacl -R / some / path> permissions.txt setfacl --restore = permissions.txt
Отладка системы
- Для отладки в сети, curl и curl -I удобны, или их эквиваленты wget, или более современный httpie.
- Чтобы узнать текущее состояние процессора / диска, классическими инструментами являются top (или лучший htop), iostat и iotop. Используйте iostat -mxz 15 для базового ЦП, а также подробную статистику дисков по разделам и анализ производительности.
- Для получения подробной информации о подключении к сети используйте netstat и ss.
- Для быстрого обзора того, что происходит в системе, dstat особенно полезен. Для более полного обзора с деталями используйте взгляды.
- Чтобы узнать состояние памяти, запустите и поймите вывод free и vmstat. В частности, имейте в виду, что «кэшированное» значение - это память, которую ядро Linux хранит в качестве файлового кэша, поэтому оно эффективно учитывается в качестве «свободного» значения.
- Отладка системы Java - это совсем другое дело, но простой подход Oracle и некоторых других JVM заключается в том, что вы можете запустить kill -3 <pid>, а также полную трассировку стека и сводку кучи (включая подробные сведения о сборке мусора поколений, которые могут быть очень сложными). информативно) будет сбрасываться в stderr / logs. Jps, jstat, jstack, jmap JDK полезны. Инструменты SJK более продвинуты.
- Используйте mtr как лучшую трассировку для выявления проблем в сети.
- Чтобы узнать, почему диск заполнен, ncdu экономит время по сравнению с обычными командами, такими как du -sh *.
- Чтобы узнать, какой сокет или процесс использует пропускную способность, попробуйте iftop или nethogs.
- Инструмент ab (поставляется с Apache) полезен для быстрой и простой проверки производительности веб-сервера. Для более сложных нагрузочных испытаний попробуйте осаду.
- Для более серьезной отладки сети, wireshark, tshark или ngrep.
- Знайте о strace и ltrace. Они могут быть полезны в случае сбоя, зависания или сбоя программы, и вы не знаете, почему, или если вы хотите получить общее представление о производительности. Обратите внимание на параметр профилирования (-c) и возможность присоединения к запущенному процессу (-p).
- Знать о ldd для проверки общих библиотек и т. Д.
- Знать, как подключиться к работающему процессу с помощью gdb и получить его трассировку стека.
- Используйте / proc. Иногда это удивительно полезно при отладке живых проблем. Примеры: / proc / cpuinfo, / proc / meminfo, / proc / cmdline, / proc / xxx / cwd, / proc / xxx / exe, / proc / xxx / fd /, / proc / xxx / smaps (где xxx - это идентификатор процесса или pid).
- При отладке, почему что-то пошло не так в прошлом, sar может быть очень полезным. Показывает историческую статистику по процессору, памяти, сети и т. Д.
- Для более глубокого анализа систем и производительности посмотрите на stap (SystemTap), perf и sysdig.
- Проверьте, в какой ОС вы используете uname или uname -a (общая информация о Unix / ядре) или lsb_release -a (информация о дистрибутиве Linux).
- Используйте dmesg, когда что-то действительно забавно (это могут быть проблемы с оборудованием или драйверами).
- Если вы удалили файл и он не освобождает ожидаемое место на диске, как сообщает du, проверьте, используется ли файл процессом: lsof | grep удалено | grep "filename-of-my-big-file"
Однострочники
Несколько примеров объединения команд:
- Иногда очень полезно, чтобы вы могли установить пересечение, объединение и различие текстовых файлов с помощью sort / uniq. Предположим, что a и b являются текстовыми файлами, которые уже являются уникальными. Это быстро и работает с файлами произвольного размера, вплоть до многих гигабайт. (Сортировка не ограничена памятью, хотя вам может понадобиться использовать параметр -T, если / tmp находится на небольшом корневом разделе.) См. Также примечание о LC_ALL выше и параметр -u сортировки (опущено для ясности ниже).
кот ab | сортировать | uniq> c # c является объединением b кот ab | сортировать | uniq -d> c # c является пересечением b кот abb | сортировать | uniq -u> c # c задает разницу a - b
awk '{x + = $ 3} END {print x}' myfile
находить . тип f -ls
cat access.log | egrep -o 'acct_id = [0-9] +' | cut -d = -f2 | сортировать | uniq -c | сортировать
function taocl () { curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md | pandoc -f markdown -t html | xmlstarlet fo --html --dropdtd | xmlstarlet sel -t -v "(html / body / ul / li [count (p)> 0]) [$ RANDOM mod last () + 1]" | xmlstarlet unesc | фмт-80 }
Неясный, но полезный
- expr: выполнять арифметические или логические операции или вычислять регулярные выражения
- m4 : простой макропроцессор
- да : печатать строку много
- кал : хороший календарь
- env : запустить команду (полезно в скриптах)
- printenv : распечатывать переменные окружения (полезно при отладке и скриптах)
- посмотрите : найдите английские слова (или строки в файле), начинающиеся со строки
- вырезать , вставлять и объединять : манипулирование данными
- fmt : форматировать текстовые абзацы
- pr : форматировать текст в страницы / столбцы
- сложить : обернуть строки текста
- column : форматировать текстовые поля в выровненные столбцы или таблицы фиксированной ширины
- развернуть и развернуть : конвертировать между табуляцией и пробелами
- nl : добавить номера строк
- seq : печать номеров
- БК : калькулятор
- фактор : фактор целые числа
- gpg : шифровать и подписывать файлы
- toe : таблица записей terminfo
- nc : сетевая отладка и передача данных
- socat : ретранслятор сокета и переадресация tcp-порта (аналогично netcat)
- slurm : визуализация сетевого трафика
- дд : перемещение данных между файлами или устройствами
- файл : определить тип файла
- дерево : отображать каталоги и подкаталоги в виде дерева вложенности; как ls, но рекурсивный
- stat : информация о файле
- время : выполнить и время команды
- timeout : выполнить команду в течение заданного промежутка времени и остановить процесс, когда истечет заданный промежуток времени.
- lockfile : создать файл семафора, который может быть удален только командой rm -f
- logrotate : вращать, сжимать и отправлять логи.
- смотреть : запустить команду несколько раз, показывая результаты и / или выделяя изменения
- TAC : печать файлов в обратном порядке
- shuf : случайный выбор строк из файла
- comm : сравнить отсортированные файлы построчно
- PV : контролировать ход данных через канал
- hd, hexdump, xxd, biew и bvi : создавать или редактировать двоичные файлы
- строки : извлечь текст из двоичных файлов
- tr : перевод символов или манипулирование
- iconv или uconv : преобразование для текстовых кодировок
- split и csplit : разделение файлов
- Губка : прочитать все входные данные перед записью, полезно для чтения и записи в тот же файл, например, grep -v что-то some-file | губка какая-то
- единицы : пересчеты единиц и расчеты; преобразует фарлонги за две недели в два раза за миг (см. также /usr/share/units/definitions.units)
- apg : генерирует случайные пароли
- 7z : сжатие файлов с высоким коэффициентом сжатия
- ldd : информация о динамической библиотеке
- nm : символы из объектных файлов
- ab : тестирование веб-серверов
- strace : отладка системных вызовов
- mtr : лучшая трассировка для отладки сети
- cssh : визуальная параллельная оболочка
- rsync : синхронизировать файлы и папки по SSH или в локальной файловой системе
- или SSH или в локальной файловой системе
- wireshark и tshark : захват пакетов и отладка сети
- ngrep : grep для сетевого уровня
- хост и копать : поиск DNS
- lsof : дескриптор файла процесса и информация о сокете
- dstat : полезная системная статистика
- взгляды : высокий уровень, обзор нескольких подсистем
- iostat : статистика использования диска
- mpstat : статистика использования процессора
- vmstat : статистика использования памяти
- htop : улучшенная версия top
- последний : история входа
- w : кто вошел в систему
- id : информация о пользователе / группе
- Сар : историческая система статистики
- iftop или nethogs : использование сети сокетом или процессом
- ss : статистика сокетов
- dmesg : сообщения об ошибках загрузки и системы
- sysctl : просмотр и настройка параметров ядра Linux во время выполнения
- hdparm : работа с дисками SATA / ATA / производительность
- lsblk : список блочных устройств: древовидная структура ваших дисков и дисковых разделов
- lshw, lscpu, lspci, lsusb, dmidecode : информация об оборудовании, включая ЦП, BIOS, RAID, графику, устройства и т. д.
- lsmod и modinfo : список и подробные сведения о модулях ядра.
- fortune , ddate и sl : гм, ну, это зависит от того, считаете ли вы паровозы и цитаты Zippy «полезными»
Только OS X
Это пункты, относящиеся только к OS X
- Управление пакетами с помощью brew (Homebrew) и / или порта (MacPorts). Их можно использовать для установки на OS X многих из вышеперечисленных команд.
- Скопируйте вывод любой команды в настольное приложение с помощью pbcopy и вставьте ввод из одной команды с помощью pbpaste.
- Чтобы включить клавишу Option в OS X Terminal в качестве клавиши alt (например, используемой в приведенных выше командах, таких как alt-b, alt-f и т. Д.), Откройте «Настройки» -> «Профили» -> «Клавиатура» и выберите «Использовать опцию как мета-ключ ».
- Чтобы открыть файл с помощью приложения для настольного компьютера, используйте open или откройте -a /Applications/Whwhat.app.
- В центре внимания: поиск файлов с помощью mdfind и список метаданных (таких как информация EXIF для фотографий) с помощью mdls.
- Помните, что OS X основана на BSD Unix, и многие команды (например, ps, ls, tail, awk, sed) имеют множество тонких изменений по сравнению с Linux, на которые в значительной степени влияют инструменты Unix и GNU в стиле System V. Вы часто можете заметить разницу, отметив, что страница руководства имеет заголовок «Руководство по общим командам BSD». В некоторых случаях также могут быть установлены версии GNU (например, gawk и gsed для GNU awk и sed). Если вы пишете кроссплатформенные скрипты Bash, избегайте таких команд (например, рассмотрите Python или perl) или тщательно тестируйте.
- Чтобы получить информацию о выпуске OS X, используйте sw_vers.
Только для Windows
- Получите доступ к возможностям оболочки Unix под Microsoft Windows, установив Cygwin. Большинство вещей, описанных в этом документе, будут работать из коробки.
- Установите дополнительные программы Unix с помощью менеджера пакетов Cygwin.
- Используйте mintty в качестве окна командной строки.
- Доступ к буферу обмена Windows через / dev / clipboard.
- Запустите cygstart, чтобы открыть произвольный файл через зарегистрированное приложение.
- Доступ к реестру Windows с помощью regtool.
- Обратите внимание, что путь к диску C: / Windows становится / cygdrive / c в Cygwin, и что Cygwin / появляется в C: / cygwin в Windows. Преобразование между путями к файлам Cygwin и Windows-стиля с помощью cygpath. Это наиболее полезно в сценариях, которые вызывают программы Windows.
- Вы можете выполнять и создавать сценарии большинства задач системного администрирования Windows из командной строки, изучая и используя wmic.
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
disqus2code