Використанню командного рядка часто не приділяють достатньої уваги. Про термінал говорять, як про щось містичне. Насправді, ці навики явно (і не явно) збільшують вашу продуктивність у роботі. Даний документ є підбіркою на наш погляд корисних при роботі з командним рядком в Linux заміток і порад. Деякі з них - прості та очевидні, але інші - або призначені для вирішення конкретних завдань, або досить складні чи широко невідомі. Це невелика публікація, але якщо ви вже все знаєте, що тут написано, і можете згадати як це все використовувати - ви знаєте багато!
Це – результат роботи багатьох авторів і перекладачів. Дещо з цього спочатку з’явилось на Quora, але потім переїхало на Github, де багато людей талановитіших за початкового автора, внесли багато удосконалень. Задайте питання якщо у вас є питання стосовно командного рядка. Будь-ласка, зробіть свій внесок якщо ви знайшли помилку або можете щось покращити!
Охоплення:
Нотатки:
Вся інформація збережена в одному файлі для спрощення пошуку, перекладу та навігації. У вас вистачить вмінь, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте apt-get
, yum
, dnf
, pacman
, pip
та brew
(залежно від вашої системи управління пакетами) для установки нових програм.
На Explainshell можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(|)) і т.д.
Вивчіть основи Bash. Просто візьміть і наберіть у командному рядку термінала man bash
і хоча б перегляньте; він досить просто читається і він не дуже великий. Інші шелли теж можуть бути хороші, але Bash - потужна програма, і Bash завжди під рукою (вивчення виключно zsh, fish і т.д., хоч і привабливо на вашому особистому комп’ютері, насправді обмежує в багатьох випадках, наприклад при використанні існуючих серверів).
Вивчіть використання хоча б одного консольного редактора тексту. Найкраще Vim (vi
), адже у нього немає конкурентів, коли вам потрібно швидко щось правити (навіть якщо ви постійно використовуєте Emacs чи якийсь важкий IDE або модний хіпстерський редактор).
Знайте, як читати документацію командою man
(для допитливих: man man
пояснює номери розділів документації, наприклад 1 - для звичайних команд, 5 - для файлів, 8 - для адміністративних команд). Шукайте інформацію через apropos
, і пам’ятайте, що деякі команди - не виконувані (executables), а внутрішні команди Bash, і допомогу по них можна отримати через команду help
і help -d
. Ви можете з’ясувати чи є Ваша команда виконуваним файлом чи вбудована в shell чи є псевдонім, використовуючи команду type команда
.
Можна перенаправляти ввід та вивід користуючися >
, <
та каналами |
. Пам’ятайте, що >
- переписує вихідний файл, а >>
додає до нього. Дізнайтеся побільше про 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
(дізнайтеся про відмінності та переваги символьних і жорстких посилань), chown
, chmod
, du
(для отримання швидкої інформації по використанню диска: du -hk *
). Для керування файловою системою: df
, mount
, fdisk
, mkfs
, lsblk
. Дізнайтеся, що таке inode (ls -i
чи df -i
).
Основи роботи з мережею: ip
, ifconfig
, dig
, traceroute
або route
.
Вивчіть і використовуйте систему управління версіями, наприклад таку, як git
.
Навчіться писати регулярні вирази і вивчіть різні опції для grep
/egrep
. Такі опції як -i
, -o
, -A
, та -B
варто знати.
Навчіться використовувати системами управління пакетами apt-get
, yum
, dnf
та pacman
(залежно від дистрибутива). Знайте як шукати і встановлювати пакети. Обов’язково майте встановленим pip
для встановки модулів та програм, написаних на Python (деякі з тих команд, що ви знайдете нижче, найлегше встановити через pip
).
Використовуйте клавішу табуляції (Tab) в Bash для автодоповнення аргументів до команд та ctrl-r для пошуку по історії командного рядка.
Використовуйте ctrl-w в Bash для того, щоб видалити останнє слово в команді; ctrl-u для того, щоб видалити команду повністю. Використовуйте alt-b і alt-f для того, щоб переміщатись між словами у команді, ctrl-k для того, щоб перейти в кінець рядка, ctrl-l для того, щоб очистити екран. Гляньте на man readline
щоб дізнатися про всі комбінації клавіш Bash. Їх багато! Наприклад, alt-. переміщається між попередніми аргументам команди, а alt-* максимально розширює аргументи.
set -o vi
(set -o emacs
щоб повернути налаштування).export EDITOR=vim
), ctrl-x ctrl-e відкриє поточну команду в редакторі для багаторядкового редагування команди. Або у vi стилі, escape-v.history
. Також існує безліч абревіатур, наприклад ! $
- Останній аргумент, !!
- остання команда, хоча ці абревіатури часто заміняються комбінаціями ctrl-r та alt-..cd
. Щоб вказати шлях до файлів із домашньої директорії можна скористатися префіксом ~
(наприклад: ~/.bashrc
). У sh
скриптах для звернення до домашньої директорії можна використовувати змінну $HOME
.cd -
#
на початок команди, та відправте команду як коментар. Потім ви зможете повернутися до неї через історію команд.Використовуйти xargs
(або parallel
). Це дуже корисно. Зверніть увагу, що ви можете контролювати кількість команд на кожен рядок (-L
) також паралельність (-P
). Якщо ви не впевнені, що робите щось правильно, почніть з xargs echo
. Також -I{}
- корисно. Приклади:
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
pstree -p
- допоможе побачити дерево процесів.ps aux
to know the pid of a process, like ps aux | grep postgresql
pgrep
і pkill
для того, щоб знаходити або слати сигнали до процесів по імені (-f
корисна опція).kill -STOP [pid]
. Для повного списку подивіться man 7 signal
.nohup
абоdisown
, якщо ви хочете запустити фоновий процес що б він постійно виконувався у фоні.netstat -lntp
або ss -plat
(для TCP; додайте -u
для UDP).lsof
і fuser
. Вони допоможуть Вам подивитися відкриті сокети і файли.uptime
or w
показує як довго працює система.alias
, щоб створити скорочення для часто використовуємих команд. Наприклад, alias ll='ls -latr'
створить нове скорочення(alias) ll
.~/.bashrc
, більш детально тут. Це зробить їх доступними в усіх ваших сесіях shell..bashrc
та .bash_profile
) між різними комп’ютерами за допомогою Git.~/.bash_profile
. Окремі налаштування будуть потрібні для оболонок, які запускаються із під графічного інтерфейсу та з під cron
задач."$FOO"
. Використовуйте -0
або -print0
опції щоб дозволити розмежувати імена файлів за допомогою нульових(null) символів. Наприклад: locate -0 pattern | xargs -0 ls -al
або find / -print0 -type d | xargs -0 ls -al
. Щоб перебрати імена файлів які містять пробільні символи для циклу встановіть ваш IFS(API файлової системи) використовувати тільки ‘’ для цього використовуйте - IFS=$'\n'
.У Bash скриптах використовуйте set -x
(або set -v
) щоб дебажити вивід. Використовуйте строгий(strict) режим скрізь, де це можливо. Використовуйте set -e
для того, щоб припиняти виконання при помилках (не нульовий вихідний код). Використовуйте set -u
що б визначити невстановленні змінні. Використовуйте set -o pipefail
щоб при помилках невикористовувати пайпи(вертикальна риска). Для більш складних скриптів також використовуйте trap
на EXIT or ERR. Корисною буде звичка почати використовувати настипний скрипт, який допоможе виявити і перервати на загальних помилках і вивести повідомлення:
set -euo pipefail
trap "echo 'error: Script failed: see failed command above'" ERR
У Bash-скриптах підоболочки(subshells) - зручний спосіб групувати команди. Один із найпоширеніших прикладів - тимчасово пересунутися в іншу робочу директорію:
# Do something in current dir
(cd / some / other / dir && other-command)
# Continue in original dir
${name:? Error message}
. Наприклад, якщо Bash-скрипту потрібен всього один аргумент, просто напишіть 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
.{
…}
може зменшити необхідність повторно вводити той самий текст і автоматизувати. Це корисно в такому прикладі як mv foo.{txt,pdf} some-dir
(який пересуває обидва файла), cp somefile{,.bak}
(який розширюється у cp somefile somefile.bak
) або mkdir -p test-{a,b,c}/subtest-{1,2,3}
(яка розширює всі можливі комбінації і створює дерево деректорій).Вивід будь-якої команди можна обробити як файл наступним чином <(some command)
. Наприклад, порівняння локального файлу `/etc/hosts з віддаленим:
diff /etc/hosts <(ssh somehost cat /etc/hosts)
cat << EOF ...
.some-command >logfile 2>&1
. Найчастіше, для того, щоб переконатись, що команда не залишить відкритим файл, прив’язавши його до відкритого терміналу, вважається хорошою практикою додавати </dev/null
.man ascii
щоб отримати таблицю ASCII символів із шіснадцядковими і десятковими значеннями. Для інших основних кодувань користуйтесь: man unicode
,man utf-8
і man latin1
.screen
або tmux
для того, щоб мати кілька екранів в одному терміналі. Це особливо корисно в ssh сесії що б приєднатись чи відєднатись до сесії. byobu
розширює функціонал screen або tmux надає більше інформації і полегшить керування. Більш мінімалістичною альтернативою для цього є dtach
.-L
і-D
(іноді -R
) це корисно наприклад для того, щоб отримати доступ до сайту із віддаленого сервера.Ще може бути корисно зробити декілька оптимізацій у конфігурації вашого SSH, наприклад у файлі ~/.ssh/config
містить налаштування, які допомагають уникати втрачених підключень в деяких мережевих оточеннях, використати стиснення (яке корисне при використанні scp при повільному підключенні) і збільште кількість каналів до одного сервера через цей конфіг, ось так:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
StrictHostKeyChecking=no
, ForwardAgent=yes
mosh
як альтернатива ssh який використовує UDP, уникаючи розривів підключеня (вимагає установки на стороні сервера).Щоб отримати права доступу до файлу у вісімковому вигляді, що є корисно для конфігурації систем але не можна отримати з допомогою команди ls
, можна використовувати щось схоже на це:
stat -c '%A %a %n' /etc/timezone
percol
або fzf
.git
), використовуйте fpp
(PathPicker).python -m SimpleHTTPServer 7777
(на прту 7777 і для Python 2) або python -m http.server 7777
(на прту 7777 і для Python 3).Щоб виконати команду з привілеями, використовуйте sudo
(для root) і sudo -u
(для іншого користувача). Використовуйте su
або sudo bash
, щоб запустити шелл від імені цього користувача. Використовуйте su -
, щоб симулювати свіжий вхід під root або під іншим користувачем.
find. -iname '*something*'
. Для того, щоб шукати файл по всій системі, використовуйте locate something
(але не забувайте, що updatedb
міг ще не проіндексувати нещодавно створені файли).grep -r
) використовуйте ag
.lynx -dump -stdin
pandoc
.xmlstarlet
.jq
.shyaml
.in2csv
, csvcut
, csvjoin
, csvgrep
і т.д.s3cmd
є зручним і s4cmd
є швидшим. Для решти сервісів Амазону використовуйте стандартний aws
і удосконалений saws
.sort
і uniq
, включаючи опції -u
і -d
, дивіться приклади нижче. Ще спробуйте comm
.cut
, paste
, і join
для роботи з текстовими файлами. Багато людей використовують cut
, забувши про join
.wc
: для підрахунку нових рядків (-l
), символів (-m
), слів (-w
) і для байтового підрахунку (-c
).tee
для копіювання в файл з stdin і stdout, щось типу ls -al | tee file.txt
.LANG
або будь-яку іншу змінну в підходящу для вашого регіону. Через це результати функцій сортування можуть працювати непередбачувано. Знайте що i18n
можуть значно знизити продуктивність сортувань. У деяких випадках можна повністю цього уникати (за винятком рідкісних випадків), сортуючи традиційно побайтово, використовуйте export LC_ALL = C
.TZ=Pacific/Fiji date
.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
:
# Recover backup files foo.bak -> foo:
rename 's/\.bak$//' *.bak
# Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
Як говорить man сторінка, rsync
дійсно є швидким і універсальним інструментом копіювання файлів, для синхронізації між машинами, але в рівній мірі корисні на локальному рівні. Також швидке рішення що б видалити велику кількість файлів:
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
shuf
, щоб перемішати або вибрати випадкові рядки з файлу.sort
. Для чисел використовуйте -n
або -h
, для роботи з числами (наприклад du -h
). Знайте як працюють ключі (-t
і -k
). Зокрема, не забувайте, що вам потрібно писати -k1,1
для того, щоб впорядкувати тільки перше поле; -k1
- це означає сортування враховуючи цілий рядок. Може бути корисною (sort -s
). Наприклад для того, щоб відсортувати найважливіше по другому полю, а другорядне по першому, можна використовувати sort -k1,1 | sort -s -k2,2
.$'\t'
. Останнє краще, тому що його можна скопіювати/вставити.diff
і patch
. Також зверніть увагу на diffstat
для перегляду статистики diff і sdiff
для крок за кроком diff. Запамятайте diff -r
працює рекурсивно по всій директорії. Використовуйте diff -r tree1 tree2 | diffstat
для повного зведення змін. Використовуйте vimdiff
порівняти і редагувати файли.hd
, hexdump
або xxd
для простих hex-дампом, і bvi
, hexedit або biew
для зміни бінарників.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
(за шаблоном або по регулярному виразу).dateadd
, datediff
, strptime
ще можете знайти на dateutils
.Використовуйте zless
, zmore
, zcat
, і zgrep
для роботи зі стиснутими файлами.
curl
і curl -I
, або альтернативу - wget
або httpie
.iostat
, netstat
, top
(краще htop
) і dstat
. Використовуйте iostat -mxz 15
для отримання основної інформації CPU.netstat
і ss
.glances
. Ця програма показує відразу кілька різних статистик в одному вікні терміналу. Корисно, коли стежите за відразу декількома системами.free
і vmstat
. Зокрема, не забувайте, що значення кешування (“cached” value) - Це пам’ять, яку тримає ядро і ці значення є частиною free
.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
(де xxx
id or pid процесу).sar
буває дуже корисно. Показує історію та статистику CPU, пам’яті, мережі і т.д.stap
(SystemTap), perf
і sysdig
.uname
або uname -a
(інформація про ядро) або lsb_release -a
(інформація про дистрибутив Linux).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
Щоб побачити розмір/дату файлів в дереві, це як рекурсивний ls -l
але легше ls -lR
:
find . -type f -ls
Скажемо що у нас є якийсь текстовий файл, наприклад лог веб сервера і на якихось рядках з’являється значення, рядки з яким нам цікаві. Наприклад, acct_id
. Давайте підрахуємо, скільки таких запитів в нашім логу:
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
Використовуйте xargs
(або parallel
). Зверніть увагу, що ви можете контролювати кількість команд на кожен рядок, а так само паралельність. Якщо ви не впевнені, що робите правильно, почніть з xargs echo
. Ще -I {}
- корисна штука. Приклади:
find. -name '* .py' | xargs grep some_function
cat hosts | xargs -I {} ssh root @ {} hostname
Запустіть цю функцію, щоб отримати випадкову вибірку із цього документа:
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
: безкінечно виводить рядок зі словом “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
: інформація про файлtime
: виведе інформацію про час виконання команди/програмиtimeout
: зупиняє виконання команди після того як завершиться вказаний час в аргументіlockfile
: створює позначку в файлі який може бути видаленим тільки через команду rm -f
logrotate
: змінити, зжати і відправити логи.watch
: запустити команду повторно, показуючи результати і/або виділення змінtac
: вивести файли посимвольно навпакиshuf
: випадкова вибірка рядків з файлуcomm
: порядково порівняти відсортовані файлиpv
: моніторинг прогресу проходження інформації через пайпhd
, hexdump
, xxd
, biew
і bvi
: дамп і редагування бінарних файлівstrings
: витягнути текст із бінарних файлівtr
: маніпуляція з char (символьним типом)iconv
або uconv
: конвертація кодуваньsplit
і csplit
: розбити файлиsponge
: прочитати весь інпут перед тим, як його записати. Корисно, коли читаєш з того ж файлу, куди записуєш. Наприклад, ось так: grep -v something some-file | sponge some-file
units
: використовується для конвертації одиниць вимірювання (дивіться /usr/share/units/definitions.units
)apg
: генерація паролів7z
: архіватор з високим ступенем стисненняldd
: показує залежності програми від системних бібліотекnm
: symbols from object filesab
: вбудований в Apache бенчмарк веб-серверівstrace
або wrk
: відладка системних викликівmtr
: трасування для відладки мережіcssh
: паралельне виконання команд в графічному інтерфейсіrsync
: синхронізація файлів і папок через SSH або на локальній файловій системіwireshark
і tshark
: перехоплення пакетів і відладка мережіngrep
: grep мережевого рівняhost
і dig
: пошук в DNSlsof
: інформація про файлові дескриптори та сокетиdstat
: корисна статистика ОСglances
: сумарна статистика багатьох підсистемiostat
: статистика системи вводу/виводу жорстких дисківmpstat
: статистика використання CPUvmstat
: статистика використання оперативної пам’ятіhtop
: вдосконалена версія top
last
: історія входів у системуw
: хто є залогіненимid
: інформація про користувача/групуsar
: historic system statsiftop
або nethogs
: використання мережі конкретним сокетом або процесомss
: статистика сокетівdmesg
: помилки завантаження і помилки системиsysctl
: перегляду і налаштування параметрів ядра Linux коли воно запущенеhdparm
: маніпуляція/налаштування SATA/ATA дискуlsblk
: cписок блокових пристроїв комп’ютера: дерево ваших дисків і логічних дисківlshw
, lscpu
, lspci
, lsusb
, dmidecode
: інформація про апаратне забезпечення, включає CPU, BIOS, RAID, графічну карту і т.д.lsmod
і modinfo
: показує список і детальну інформацію модулів ядра.fortune
, ddate
, and sl
: um, well, it depends on whether you consider steam locomotives and Zippy quotations “useful”Деякі речі, які підходять тільки для Мака.
brew
(Homebrew) і port
(MacPorts) можуть бути використані для того, щоб встановити більшість програм, згаданих у цьому документі.pbcopy
і вставляйте вивід за допомогою pbpaste
.open
або open -a /Applications/Whatever.app
.mdfind
, і дивиться метадані (наприклад EXIF інформацію із фотографії) із mdls
.ps
, ls
, tail
, awk
, sed
) мають невеликі відмінності від лінуксових. Це обумовлено впливом UNIX System V
і GNU Tools
. Різницю можна помітити, побачивши заголовок “BSD General Commands Manual.” Інколи на MacOS можна поставити GNU-версії програм, наприклад gawk
і gsed
. Коли пишете кросплатформені Bash-скрипти, намагайтеся уникати використовувати команди, які можуть відрізнятися (наприклад, краще використовуйте Python або perl
), або ретельно все перевіряйте.mintty
в якості термінала./dev/clipboard
.cygstart
, щоб відкрити файл за допомогою програми, що встановлена за замовчуванням.regtool
.C:\
доступний в Cygwin за шляхом /cygdrive/c
, /
являється папкою C:\cygwin
. Конвертуйте шляхи до файлів за допомогою cygpath
.wmic
.За невеликим винятком, весь код написаний так, щоб інші його змогли прочитати. Той факт, що щось може бути написано на Bash, зовсім не означає, що воно має бути на ньому написано. ;)
Ця работа і переклад на Українську мову розповсюджується за ліцензією Creative Commons Attribution-ShareAlike 4.0 International License.