45 KiB
[ Languages: English, Español, Italiano, 日本語, 한국어, Português, Русский, Slovenščina, Українська, 中文 ]
Искусство командной строки
- Описание
- Основы
- Ежедневное использование
- Процессинг файлов и информации
- Системный дебаггинг
- В одну строчку
- Сложно, но полезно
- OS X only
- Больше информации по теме
- Дисклеймер
Продвинутому использованию командной строки зачастую не уделяют достаточного внимания. О терминале говорят, как о чем-то мистическом. На самом же деле, это умение очевидно (и не очевидно) увеличивает Вашу продуктивность в работе. Данный документ является подборкой заметок и советов, которые я нашел для себя полезными, работая с командной строкой в Linux. Некоторые из их них – простые и очевидные, но некоторые - довольно сложные. И предназначены для решения конкретных задач. Это небольшая публикация, но если Вы уже знаете обо всем, что тут написано, и можете вспомнить, как это все использовать – вы много знаете!
Многое из того, что тут написано, изначально появилось на Quora, начав идею там, похоже, что стоит развить ее на Github, где обитают люди, которые талантливее меня и могут предлагать улучшения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста оставьте тикет или киньте пулл-реквест (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты).
Описание
Основное:
- Данная публикация предназначена как для новичков, так и для опытных людей. Цели: объемность (собрать все важные аспекты использования командной строки), практичность (давать конкретные примеры для самых частых юзкейсов) и краткость (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте).
- Этот документ написан для пользователей Linux, с единственным исключеним – секцией "MacOS only". Все остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin).
- Фокусируемся на интерактивном Баше, но многие вещи также могут быть использованы с другими шеллами; и в общем применимы к Баш-скриптингу.
- Эта инструкция включает в себя стандартные Unix команды и те, для которых нужно устанавливать сторонние пакеты. Они настолько полезны, что стоят того, чтобы их установили.
Заметки:
-
Для того, чтобы руководство оставалось одностраничным, вся информация вставлена прямо сюда. Вы достаточно умные для того, чтобы самостоятельно изучить вопрос более детально в другом месте. Используйте
apt-get/yum/dnf/pacman/pip/brew(в зависимости от вашей системы управления пакетами) для установки новых программ. -
На Explainshell можно найти простое и подробное объяснение того, что такое команды, флаги, пайпы и т.д.
Основы
-
Выучите основы Баша. Просто возьмите и напечатайте
man bashв терминале и хотя бы просмотрите его; он довольно просто читается и он не очень большой. Другие шеллы тоже могут быть хороши, но Баш – мощная программа, и Баш всегда под рукой (использование исключительно zsh, fish и т.д., которые наверняка круто выглядят на Вашем ноуте во многом Вас ограничивает, например Вы не сможете использовать возможности этих шеллов на уже существующем сервере). -
Выучите как использовать хотя бы один консольный редактор текста. Идеально Vim (
vi), ведь у него нет конкурентов, когда вам нужно быстренько что-то подправить (даже если Вы постоянно сидите на Emacs/какой-нибудь тяжелой IDE или на каком-нибудь модном хипстерском редакторе) -
Знайте как читать документацию через
man(для любознательных –man man;manпо углам документа в скобках добавляет номер, например 1 – для обычных команд, 5 – для файлов, конвенций, 8 – для административных команд). Ищите мануалы черезapropos, и помните, что некоторые команды – не бинарники, а встроенные команды Баша, и помощь по ним можно получить черезhelpиhelp -d. -
Узнайте о том, как перенаправлять ввод и вывод через
>и<и пайпы|. Помните, что>– переписывает выходной файл, а>>добавляет к нему. Узнайте побольше про stdout и stderr. -
Узнайте побольше про раскрытие file glob элементов
*(а также?и{...}), кавычки, а также разницу между двойными"и одинарными'кавычками. (Больше о расширении переменных читайте ниже.) -
Будьте знакомы с работой с процессами в 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(узнайте разницу между символьными ссылками и жёсткими ссылками, и почему жёсткие ссылки лучше),chown,chmod,du(для быстрой сводки по использованию диска:du -hk *). Для менеджмента файловой системы,df,mount,fdisk,mkfs,lsblk. -
Основы работы с сетью:
ipилиifconfig,dig. -
Хорошо знайте регулярные выражения и разные флаги к
grep/egrep. Такие флаги как-i,-o,-A, и-Bстоит знать. -
Обучитесь использованию системами управления пакетами
apt-get,yum,dnfилиpacman(в зависимости от дистрибутива). Знайте как искать и устанавливать пакеты и обязательно имейте установленымpipдля установки командных утилит, написаных на Python (некоторые из тех, что вы найдёте ниже, легче всего установить черезpip).
Ежедневное использование
-
Используйте таб в Баше для автокомплита аргументов к командам и ctrl-r для поиска по истории командной строки.
-
Используйте ctrl-w в Баше для того, чтобы удалить последнее слово в команде; ctrl-u для того, чтобы удалить команду полностью. Используйте alt-b и alt-f для того, чтобы бегать между словами команды, ctrl-k для того, чтобы прыгнуть к концу строки, ctrl-l для того, чтобы очистить экран. Гляньте на
man readlineчтобы узнать о всех шорткатах Баша. Их много! Например, alt-. бежит по предыдущим аргументам команды, а alt-* расширяет глоб.?? -
Если Вам нравятся шорткаты vim, сделайте
set -o vi. -
Для того, чтобы посмотреть историю, введите
history. Также существует множество аббревиатур, например!$– последний аргумент,!!– последняя команда, хотя эти аббревиатуры часто заменяются шорткатами ctrl-r и alt-.. -
Для того, чтобы прыгнуть к последней рабочей директории, используйте
cd - -
Если Вы написали команду наполовину и вдруг передумали, нажмите alt-# для того, чтобы добавить
#к началу, и отправьте команду, как комментарий. Потом вы сможете вернуться к ней через историю. -
Не забывайте использовать
xargs(илиparallel). Это очень мощная штука. Обратите внимание, что Вы можете контролировать количество команд на каждую строку, а также параллельность. Если Вы не уверены, что делаете что-то правильно, начните сxargs echo. Еще-I{}– полезная штука. Примеры:
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
-
pstree -p– полезный тип вывода дерева процессов. -
Используйте
pgrepилиpkillдля того, чтобы находить/слать сигналы к процессам по имени (-fпомогает). -
Знайте разные сигналы, которые можно слать процессам. Например, чтобы приостановить процесс, используйте
kill -STOP [pid]. Для полного списка посмотритеman 7 signal. -
Используйте
nohupилиdisown, чтобы процесс в фоне выполнялся бесконечно. -
Узнайте, какие процессы слушают порты через
netstat -lntpилиss -plat(для TCP; добавьте-uдля UDP). -
Используйте
lsofдля того, чтобы посмотреть открытые сокеты и файлы. -
Используйте
alias, чтобы поименовать частоиспользуемые команды. Например,alias ll='ls -latr'создаст новое сокращениеll. -
В Баш скриптах используйте
set -xдля того, чтобы дебажить аутпут. Используйте строгие режимы везде, где возможно. Используйтеset -eдля того, чтобы прекращать выполнение при ошибках. Используйтеset -o pipefailдля того, чтобы строго относится к ошибкам (это немного глубокая тема). Для более сложных скриптов также используйтеtrap. -
В Баш-скриптах подоболочки (subshells) – удобный способ группировать команды. Один из самых распространенных примеров – временно передвинуться в другую рабочую директорию, вот так:
# do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir
-
В Баше много типов пространства переменных. Проверить, существует ли переменная –
${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 с удалённым:
diff /etc/hosts <(ssh somehost cat /etc/hosts)
-
Знайте про heredoc-синтаксис в Баше, работает он так:
cat <<EOF .... -
В Баше перенаправляйте стандартный вывод, а также стандартные ошибки, вот так:
some-command >logfile 2>&1. Зачастую, для того, чтобы убедится, что команда не оставит открытым файл, привязав его к открытому терминалу, считается хорошей практикой добавлять</dev/null. -
Используйте
man asciiдля хорошей ASCII таблицы, с hex- и десятичными значениями. Для информации по основным кодировкам полезны:man unicode,man utf-8иman latin1. -
Используйте
screenилиtmuxдля того, чтобы иметь несколько экранов в одном терминале. Это особенно полезно, когда вы работаете с удаленным сервером, тогда Вы можете подключаться/отключаться от сессий. Более минималистичный подход для этого – использованиеdtach. -
В SSH полезно знать как сделать port tunnel с флагами
-Lи-D(и иногда-R). Например для того, чтобы зайти на сайт с удаленного сервера. -
Еще может быть полезно оптимизировать вашу SSH конфигурацию, например этот файл
~/.ssh/configсодержит настройки, которые помогают избегать потерянных подключений в некоторых сетевых окружениях. Используйте сжатие (которое полезно с scp через медленные подключения) и увеличьте количество каналов к одному серверу через этот конфиг, вот так:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
-
Некоторые другие настройки SSH могут сильно повлиять на безопасность и должны меняться осторожно, например, для конкретной подсети или конкретной машины или в домашних сетях:
StrictHostKeyChecking=no,ForwardAgent=yes -
Чтобы получить разрешения файла в восьмеричном виде, что полезно для конфигурации систем, но нельзя получить из
ls, можно использовать что-то типа:
stat -c '%A %a %n' /etc/timezone
-
Для интерактивного выделения результатов других команд используйте
percolилиfzf. -
Для работы с файлами, список которых дала другая команда (например, Git), используйте
fpp(PathPicker). -
Чтобы быстро поднять веб-сервер в текущей директории (и поддерикториях), который доступен для всех в вашей сети, используйте:
python -m SimpleHTTPServer 7777(если у вас Python 2 и вы хотите открыть сервер на порту 7777) илиpython -m http.server 7777(для Python 3 и порта 7777). -
Чтобы выполнить определённую команду с привилегиями, используйте
sudo(для рута) иsudo -u(для другого пользователя). Используйтеsuилиsudo bash, чтобы запустить шелл от имени этого пользователя. Используйтеsu -, чтобы симулировать свежий логин от рута или другого пользователя.
Процессинг файлов и информации
-
Для того, чтобы найти файл в текущей директории, сделайте
find . -iname '*something*'. Для того, чтобы искать файл по всей системе, используйтеlocate something(но не забывайте, чтоupdatedbмог еще не проиндексировать недавно созданные файлы). -
Для основного поиска по содержимому файлов (более сложному, чем
grep -r) используйтеag. -
Для конвертации HTML в текст:
lynx -dump -stdin -
Для конвертации разных типов разметки (HTML, Markdown и др.) попробуйте
pandoc. -
Если нужно работать с XML, есть старая, но хорошая утилита –
xmlstarlet. -
Для работы с JSON используйте
jq. -
Для работы с Excel и CSV-файлами используйте csvkit (программа предоставляет команды
in2csv,csvcut,csvjoin,csvgrepи т.д.) -
Для работы с Amazon S3 удобно работать с
s3cmdиs4cmd(последний работает быстрее). Для остальных сервисов Амазона используйте стандартныйaws. -
Знайте про
sortиuniq, включая флаги-uи-d, смотрите примеры ниже. Ещё попробуйтеcomm. -
Знайте про
cut,paste, иjoinдля работы с текстовыми файлами. Многие люди используютcut, забыв проjoin. -
Знайте о
wc: для подсчёта переводов строк (-l), для символов – (-m), для слов – words (-w), для байтового подсчёта – (-c). -
Знайте про
teeдля копирования в файл из stdin и stdout, что-то типаls -al | tee file.txt. -
Не забывайте, что Ваша локаль влияет на многие команды, включая порядки сортировки, сравнение и производительность. Многие дистрибутивы Linux автоматически выставляют
LANGили любую другую переменную в подходящую для Вашего региона. Из-за этого результаты функций сортировки могут работать непредсказуемо. Рутиныi18nмогут значительно снизить производительность сортировок. В некоторых случаях можно полностью этого избегать (за исключением редких случаев), сортируя традиционно побайтово, для этогоexport LC_ALL=C. -
Знайте основы
awkиsedдля простых манипуляций с данными. Например, чтобы получить сумму всех чисел, которые находятся в третьей колонке текстового файла, можно использоватьawk '{ x += $3 } END { print x }'. Скорее всего, это получится раза в 3 быстрее и раза в 3 проще, чем делать это в Питоне. -
Чтобы заменить все нахождения подстроки в одном или нескольких файлах:
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
Для того, чтобы переименовать сразу много файлов по шаблону, используйте rename. Для сложных переименований может помочь repren:
# Восстановить бекапы из foo.bak в foo:
rename 's/\.bak$//' *.bak
# Полное переименование имён файлов, папок и содержимого файлов из foo в bar.
repren --full --preserve-case --from foo --to bar .
-
Используйте
shuf, чтобы перемешать строки или выбрать случайную строчку из файла. -
Знайте флаги
sortа. Для чисел используйте-n, для работы с человекочитаемыми числами используйте-h(напримерdu -h). Знайте как работают ключи (-tи-k). В частности, не забывайте, что вам нужно писать-k1,1для того, чтобы отсортировать только первое поле;-k1- это сортировка, учитывая всю строчку. Также стабильная сортировка может быть полезной (sort -s). Например для того, чтобы отсортировать самое важное по второму полю, а второстепенное по первому, можно использовать sort -k1,1 | sort -s -k2,2`. -
Если вам когда-нибудь придётся написать код символа табуляции в терминале, например, для сортировки по табуляциям с флагом -t, используйте сокращение ctrl-v [Tab] или напишите
$'\t'. Последнее лучше, потому что его можно скопировать. -
Стандартные инструменты для патчинга исходников это
diffиpatch. Также посмотрите наdiffstatдля просмотра статистики диффа.diff -rработает рекурсивно по всей директории. Используйтеdiff -r tree1 tree2 | diffstatдля полной сводки изменений. -
Для бинарников используйте
hdдля простых hex-дампом, иbviдля двоичного изменения бинарников. -
strings(в связке сgrepили чем-то похожим) помогает найти строки в бинарниках. -
Чтобы посмотреть разницу в бинарниках (дельта-кодирование):
xdelta3. -
Для конвертирования кодировок используйте
iconv. Для более сложных задач –uconv, он поддерживает некоторые сложные фичи Юникода. Например, эта команда переводит строки из файла в нижний регистр и убирает ударения (кои бывают, например, в испанском языке)
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
-
Для того, чтобы разбить файл на куски, используйте
split(разбивает на куски по размеру), илиcsplit(по шаблону или регулярному выражению). -
Используйте
zless,zmore,zcat, иzgrepдля работы со сжатыми файлами.
Системный дебаггинг
-
Дле веб-дебаггинга используйте
curlиcurl -I, или их альтернативу -wget. Также есть более современные альтернативы, напримерhttpie. -
Чтобы получить информацию о диске/CPU/сети используйте
iostat,netstat,top(или лучшую альтернативуhtop) и особенноdstat. Хороший старт для того, чтобы понимать, что происходит в системе. -
Для более детальной информации используйте
glances. Эта программа показывает сразу несколько разных статистик в одном окне терминала. Полезно, когда следите за сразу несколькими системами. -
Для того, чтобы следить за памятью, научитесь понимать
freeиvmstat. В частности, не забывайте, что кешированые значения ("cached" value) – это память, которую держит ядро и эти значения являются частьюfree. -
Дебаггинг Java – совсем другая рыбка, но некоторые манипуляции над виртуальной машиной Оракла, или любой другой, позволят вам использовать делать
kill -3 <pid>и трассировать сводки стека и хипа (включая детали работы сборщика мусора, которые бывают очень полезными), и их можно дампнуть в stderr или логи. -
Используйте
mtrдля лучшей трассировки, чтобы находить проблемы сети. -
Для того, чтобы узнать, почему диск полностью забит, используйте
ncdu, это сохраняет время по сравнению с тем жеdu -sh *. -
Для того, чтобы узнать, какой сокет или процесс использует интернет, используйте
iftopилиnethogs. -
ab, которая поставляется вместе с apache, полезна для быстрой и поверхностной проверки производительности веб-сервера. Для более серьезного лоад-тестинга используйтеsiege. -
Для более серьёзного дебаггинга сетей используйте
wireshark,tshark, иngrep. -
Знайте про
straceиltrace. Эти команды могут быть полезны, если программа падает или висит, и вы не знаете почему Или если вы хотите протестировать производительность программы. Не забывайте про возможность дебаггинга (-c) и возможность прицепиться к процессу по pid (-p). -
Не забывайте про
lddдля проверки системных библиотек. -
Знайте как прицепиться к работающему процессу через
gdbи получить трассировку стека. -
Используйте
/proc. Иногда он невероятно полезен для отладки запущенных программ. Примеры:/proc/cpuinfo,/proc/xxx/cwd,/proc/xxx/exe,/proc/xxx/fd/,/proc/xxx/smaps. -
Когда дебажите что-то, что сломалось в прошлом, используйте
sar– бывает очень полезно. Показывает историю CPU, памяти, сети и т.д. -
Для анализа более сложных систем и производительности посмотрите на
stap(SystemTap),perf, иsysdig. -
Узнайте, какая у вас операционка, через
unameoruname -a(основная Unix-информация/информация о ядре) илиlsb_release -a(информация о дистрибутиве). -
Используйте
dmesg, когда что-то ведет себя совсем странно (например, железо или драйвера).
В одну строчку
Давайте соберем все вместе и напишем несколько команд:
- Это довольно круто, что можно найти множественные пересечения файлов, соединить отсортированные файлы и посмотреть разницу в нескольких файлов через
sort/uniq. Это быстрый подход и работает на файлах любого размера (включая многогигабайтные файлы). (Сортировка не ограничена памятью, но возможно вам придется добавить-T, если/tmpнаходится на небольшом логическом диске). Еще посмотрите то, что было сказано выше оLC_ALL. Флаг сортировки-uне используется ниже, чтобы было понятнее:
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. -
Получить сумму всех чисел, которые находятся в третьей колонке текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще, чем делать это в Питоне):
awk '{ x += $3 } END { print x }' myfile
- Если вам нужно посмотреть размеры и даты создания древа файлов используйте:
find . -type f -ls
Это почти как рекурсивная ls -l, но выглядит более читабельно чем ls -lR:
- Используйте
xargs(илиparallel). Это очень мощная штука. Обратите внимание, что Вы можете контролировать количество команд на каждую строку, а так же параллельность. Если Вы не уверены, что делаете что-то правильно, начните сxargs echo. Еще-I{}– полезная штука. Примеры:
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
- Давайте представим, что у нас есть какой-то текстовый файл, например лог какого-то сервера и на каких-то строках появляется значение, строки с которым нам интересны. Например,
acct_id. Давайте подсчитаем, сколько таких запросов в нашем логе:
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
- Запустите этот скрипт, чтобы получить случайный совет из этой инструкции:
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 | fmt -80
}
Сложно, но полезно
-
expr: для выполнения арифметических и булевых операций, а также регулярных выражений -
m4: простенький макро-процессор -
yes: вывод строки в бесконечном цикле -
cal: классный календарь -
env: для того, чтобы выполнить команду (полезно в Bash-скриптах) -
printenv: показать переменные окружения (полезно в скриптах или дебаггинге) -
look: найти английские слова (или строки) в файле -
cut,pasteиjoin: манипуляции с данными -
fmt: форматирование параграфов в тексте -
pr: отформатировать текст в страницы/колонки -
fold: (обернуть) ограничить длину строк в файле -
column: форматировать текст в колонки или таблицы -
expandиunexpand: конвертация между табами и пробелами -
nl: добавить номера строк -
seq: вывести последовательность чисел -
bc: калькулятор -
factor: возвести числа в степень -
gpg: зашифровать и подписать файлы -
toe: таблица терминалов terminfo с описанием -
nc: дебаггинг сети и передачи данных -
socat: переключатель сокетов и перенаправление tcp-портов (похоже наnetcat) -
slurm: визуализация трафика сети -
dd: перенос информации между блочными устройствами -
file: узнать тип файла -
tree: показать директории и поддиректории в виде дерева, какls, но рекурсивно -
stat: информация о файле -
tac: вывести файл посимвольно наоборот ("ласипан") -
shuf: случайная выборка строк из файла -
comm: построчно сравнить отсортированные файлы -
pv: мониторинг прогресса прохождения информации через пайп -
hd,hexdump,xxd,biew: hex-дамп и редактирование бинарников -
strings: найти текст в бинарниках -
tr: манипуляция с char (символьным типом) -
iconvиuconv: конвертация кодировок -
splitиcsplit: разбить файлы -
sponge: прочитать весь инпут перед тем, как его записать. Полезно, когда читаешь из того же файла, куда записываешь. Например, вот так:grep -v something some-file | sponge some-file -
units: конвертер. Метры в километры, версты в пяди (смотрите/usr/share/units/definitions.units) -
7z: архиватор с высокой степенью сжатия -
ldd: показывает зависимости программы от системных библиотек -
nm: получаем названия всех функций, которые определены в .o или .a -
ab: бенчмаркинг веб-серверов -
strace: отладка системных вызовов -
mtr: лучшая трассировка для дебаггинга сети -
cssh: несколько терминалов в одном UI -
rsync: синхронизация файлов и папок через SSH -
wiresharkиtshark: перехват пакетов и дебаг сети -
ngrep: grep для слоя сети (network layer) -
hostиdig: узнать DNS -
lsof: процессинг дескрипторов и информация о сокетах -
dstat: полезная статистика ОС -
glances: высокоуровневая статистика по многим подсистемам -
iostat: статистика процессора и использования жёсткого диска -
htop: улучшенная версияtop -
last: история логинов в систему -
w: под каким пользователем вы сидите -
id: информация о пользователе/группе -
sar: история системной статистики -
iftopилиnethogs: использование сети конкретным сокетом или процессом -
ss: статистика сокетов -
dmesg: ошибки загрузки и ошибки системы -
hdparm: манипуляции с SATA/ATA -
lsb_release: информация о дистрибутиве Linux -
lsblk: cписок блочных устройств компьютера: дерево ваших дисков и логических дисков -
lshw,lscpu,lspci,lsusb,dmidecode: информация о железе, включая CPU, BIOS, RAID, графику, девайсы, и т.д. -
fortune,ddate, иsl: хм, не знаю, будут ли вам "полезны" веселые цитатки и поезда, пересекающие ваш терминал :)
OS X only
Некоторые вещи, подходящие только для Мака.
-
Системы управлением пакетами –
brew(Homebrew) иport(MacPorts). Они могут быть использованы для того, чтобы установить большинство программ, упомянутых в этом документе. -
Копируйте выдачу консольных программ в десктопные через
pbcopyи вставляйте входные данные черезpbpaste. -
Для того, чтобы открыть файл или десктопную программу типа Finder, используйте
open. Вот так:open -a /Applications/Whatever.app. -
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), или тщательно все тестируйте.
Больше информации по теме
- awesome-shell: Дополняемый список инструментов и ресурсов для командной строки.
- Strict mode Для того, чтобы писать шелл-скрипты лучше.
Дисклеймер
За небольшим исключением, весь код написан так, чтобы другие его смогли прочитать.
Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано на Баше, вовсе не означает, что оно должно быть на нём написано. ;)
Лицензия
Оригинальная работа и перевод на русский язык распространяется под лицензией Creative Commons Attribution-ShareAlike 4.0 International License.

