Мистецтво командного рядка



Ось уже як тиждень англійська версія the art of command line висить у секції trending на Github. Для себе я знайшов цей матеріал неймовірно корисним і вирішив допомогти спільноті його перекладом на російську мову. У перекладі напевно є кілька недоробок, тому ласкаво прошу слати пулл-реквесты мені сюди або автору оригінальної роботи Joshua Levy сюди. (Якщо PR відправите мені, то я після того, як перегляну зміни відправлю їх у майстер-бранч Джоша). Окреме спасибі jtraub за допомогу і виправлення помилок.



(тсс, в маркдауне читабельний)
Опис
Основне:
  • Дана публікація призначена як для новачків, так і для досвідчених людей. Цілі: об'ємність (зібрати всі важливі аспекти використання командного рядка), практичність (давати конкретні приклади для найчастіших юзкейсов) і стислість (не варто заглиблюватися в неочевидні речі, про які можна почитати в іншому місці).
  • Цей документ написаний для користувачів Linux, з єдиним виключенням – секцією “MacOS only“. Все інше підходить і може бути встановлено під UNIX/Macintosh системи (і навіть 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 – для адміністративних команд). Шукайте мануали через з приводу, і пам'ятайте, що деякі команди – не бінарники, а убудовані команди Баша, і допомогу по них можна отримати через help help-d.
  • Дізнайтеся про те, як перенаправляти введення і виведення через > < і пайпи |. Пам'ятайте, що > – переписує вихідний файл, а >> " додає до нього. Дізнайтеся більше про stdout and stderr.
  • Дізнайтеся більше про file glob expansion with * (and perhaps ? and {...}), лапки а так само різницю між подвійними " і одинарними ' лапками. (Більше про розширення змінних читайте нижче)
  • Будьте знайомі з роботою з процесами в 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-* розширює глоб.??
  • Якщо Вам подобаються шорткаты Віма зробіть set-o vi.
  • Для того, щоб подивитися історію введіть history. Так само існує безліч аббривиатур, наприклад, !$ – останній аргумент !! – остання команда, хоча ці абревіатури часто замінюються шорткатами ctrl-r і alt-..
  • Для того, щоб стрибнути до останньої робочої директорії cd -
  • Якщо Ви написали команду наполовину і раптом передумали, натисніть alt-# для того, щоб додати # до початку і відправте команду як коментар. Потім ви зможете повернутися до неї через історію.
  • Не забувайте використовувати xargs (або parallel). Це дуже потужна штука. Зверніть увагу, що Ви можете контролювати кількість команд на кожну рядок, а так само паралельність. Якщо Ви не впевнені, що робите щось не правильно, почніть з xargs echo. Ще -I{} – корисна штука. Приклади:
find . -name <span class="hljs-string">'*.py'</span> | 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 or fzf.
  • Для роботи з файлами, список яких дала інша команда (наприклад Git) використовуйте fpp (PathPicker).
  • Для того щоб швидко підняти веб-сервер в поточній директорії (і поддерикториях), який доступний для всіх у вашій мережі використовуйте:
    python-m SimpleHTTPServer 7777 (for port 7777 and Python 2) and python-m http.server 7777 (for port 7777 and Python 3).
  • Для того, щоб виконати певну команду з привілеями, використовуйте sudo (рута) і sudo-u (для іншого користувача). Використовуйте su або sudo bash для того щоб запустити шелл від імені цього користувача. Використовуйте su - для того, щоб симулювати свіжий логін від рута або іншого користувача.
Процесинг файлів та інформації
  • Для того, щоб знайти файл в поточній директорії зробіть find. -iname '*something*'. Для того, щоб шукати файл по всій системі використовуйте locate something (але не забувайте, що updatedb міг ще не проіндексувати нещодавно створені файли).
  • Для основого пошуку по вмісту файлів (більш складного, ніж grep-r) використовуйте ag.
  • Для конвертації HTML в текст: lynx-dump-stdin
  • Для конвертації різних типів розмітки (HTML, маркдаун і т. д.) спробуйте 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 автоматично виставляють МОВА або будь-яку іншу змінну в підходящу для Вашого регіону. З-за цього результати функцій сортування можуть працювати непередбачувано. Рутини 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.
  • Дебаггинг Джави – зовсім інша рибка, але деякі маніпуляції над віртуальною машиною Оракла або будь-який інший дозволить вам використовувати робити kill -3 <pid> і трасувати зведення стека і хіпа (включаючи деталі роботи складальника сміття, які бувають дуже корисними), і їх можна дампнуть у stderr або логи.
  • Використовуйте mtr для кращої трасування, щоб знаходити проблеми мережі.
  • Для того, щоб дізнатися чому диск повністю забитий використовуйте ncdu, це зберігає час у порівнянні з тим же du-sh *.
  • Для того, щоб дізнатися який сокет або процес використовує інтернет використовуйте iftop або nethogs.
  • ab, яка поставляється разом в Апачем корисна для швидкої нетщательной перевірки продуктивності веб-сервера. Для більш серйозного лоад-тестінгу використовуйте siege.
  • Для більш серйозного дебаггінга мереж використовуйте wireshark, tshark, ngrep.
  • Знайте про strace ltrace. Ці команди можуть бути корисні, якщо програма падає або висить і ви не знаєте, чому, або якщо ви хочете протестувати продуктивність програми. Не забувайте про можливість дебаггінга (-c) і можливістю причепитися до процесу (p).
  • Не забувайте про ldd для перевірки системних бібліотек.
  • Знайте, як причепитися до людини, яка біжить процесу через gdb одержати трасування стека.
  • Використовуйте /proc. Іноді він неймовірно корисний для дебага запущених програм. Приклади: /proc/cpuinfo, /proc/xxx/cwd, /proc/xxx/exe, /proc/xxx/fd/, /proc/xxx/smaps.
  • Коли дебажете щось, що зламалося в минулому використовуйте sar – буває дуже корисно. Показує історію CPU, пам'яті, мережі і т. д.
  • Для аналізу більш глибоких систем і продуктивності подивіться на stap (SystemTap, perf, sysdig.
  • Дізнайтеся, яка операційка через uname or uname-a (основна Unix-інформація/інформація про ядро) або lsb_release-a (інформація про дистрибутиві).
  • Використовуйте dmesg коли що-то веде себе зовсім дивно (наприклад залізо або драйвера).
В одну сходинку
Давайте зберемо всі разом і напишемо декілька команд:
  • Це досить круто, що можна знайти множинні перетину файлів, з'єднати відсортовані файли і подивитися різницю в декількох файлів через sort/uniq. Це швидкий підхід і працює на файлах будь-якого розміру (включаючи многогигабайтные файли). (Сортування не обмежена пам'яттю, але можливо вам доведеться додати -T якщо /tmp знаходиться на невеликому логічному диску). Ще подивіться те що було сказано вище про LC_ALL. Прапор сорти -u option не використовується нижче, щоб було зрозуміліше:
cat a b | sort | uniq > c # c is a union b
cat a b | sort | uniq-d > c # c is a b intersect
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-ru.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: print out environment variables (useful in debugging and scripts)
  • 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: bvi: дамп і редагування бінарників
  • 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: статистика CPU і використання жорсткого диска
  • htop: поліпшена версія top
  • last: історія логінов в систему
  • w: під яким користувачем ви сидите
  • id: інформація про користувача/групи
  • sar: історія системної статистики
  • iftop або nethogs: використання мережі конкретним сокетом або процесом
  • ss: статистика сокетів
  • dmesg: помилки бута і помилки системи
  • hdparm: маніпуляція з SATA/ATA
  • lsb_release: інформація про дистрибутиві Linux
  • lsblk: список блокових пристроїв комп'ютера: древо ваших дисків і логічних дисків
  • lshw:, lscpu, lspci, lsusb, dmidecode: інформація про залозі включаючи CPU, BIOS, RAID, графіку, девайси, і т. д.
  • fortune:, ddate, sl: хм, не знаю чи будуть вам корисні веселі цитатки і потяги, які перетинають ваш термінал :)
MacOS only
Деякі речі релевантні тільки для Маку.
  • Системи керування пакетами brew (Homebrew) і port (MacPorts). Вони можуть бути використані для того, щоб встановити більшість програм, згаданих у цьому документі.
  • Копіюйте аутпут консольних програм в десктопні через pbcopy, і вставляйте инпут через pbpaste.
  • Для того, щоб відкрити файл або десктопну програму типу Finder використовуйте open, open-a /Applications/Whatever.app.
  • Spotlight: Шукайте файли в консолі через mdfind і дивіться метадату (наприклад EXIF інформацію фотографій) через mdls.
  • Не забувайте, що MacOS заснований на BSD Uni і багато команд (наприклад, 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 License
Оригінальна робота і переклад на російську мову поширюється під ліцензією Creative Commons Attribution-ShareAlike 4.0 International License.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.