? Чештина ∙ Deutsch ∙ ελληνικά ∙ английский
Примечание: я планирую пересмотреть это и ищу нового соавтора, чтобы помочь расширить это в более полное руководство. Хотя это очень популярно, это может быть шире и немного глубже. Если вы любите писать и вы близки к тому, чтобы быть экспертом в этом материале и готовы рассмотреть возможность помощи, пожалуйста, напишите мне на Джош (0x40) Holloway.com. –Jlevy, Холлоуэй. Спасибо!

Свободное владение командной строкой является навыком, который часто пренебрегают или считаются тайным, но он повышает вашу гибкость и производительность как инженера как очевидными, так и тонкими способами. Это выбор заметок и советов по использованию командной строки, которые мы нашли полезным при работе над Linux. Некоторые советы элементарны, а некоторые из них довольно специфические, сложные или неясные. Эта страница не длинная, но если вы можете использовать и вспомнить все элементы здесь, вы знаете много.
Эта работа является результатом многих авторов и переводчиков. Некоторые из них первоначально появились на Quora, но с тех пор она переехала в Гиттуб, где люди более талантливы, чем первоначальный автор, внесли многочисленные улучшения. Пожалуйста, отправьте вопрос, если у вас есть вопрос, связанный с командной строкой. Пожалуйста, внесите свой вклад, если вы видите ошибку или что -то, что может быть лучше!
Объем:
Примечания:
apt , yum , dnf , pacman , pip или brew (в зависимости от необходимости) для установки новых программ. Узнайте базовый удар. На самом деле, тип man bash и, по крайней мере, просмотрите все это; Это довольно легко следовать и не так долго. Альтернативные раковины могут быть хорошими, но Bash является мощным и всегда доступным (изучение только ZSH, рыбы и т. Д., В то же время заманчиво на вашем собственном ноутбуке, ограничивает вас во многих ситуациях, таких как использование существующих серверов).
Хорошо изучите хотя бы один текстовый редактор. Редактор nano является одним из самых простых для базового редактирования (открытие, редактирование, сохранение, поиск). Тем не менее, для пользователя Power в текстовом терминале нет никакой замены Vim ( vi ), труднодоступного, но почтенного, быстрого и полнофункционального редактора. Многие люди также используют классические EMACS, особенно для более крупных задач редактирования. (Конечно, любой современный разработчик программного обеспечения, работающий над обширным проектом, вряд ли будет использовать только чистый текстовый редактор, а также должен быть знаком с современными графическими идентификаторами и инструментами.)
Поиск документации:
man (для любознательного, man man перечисляет номера раздела, например, «обычные» команды, 5 - это файлы/соглашения, а 8 - для администрирования). Найдите страницы управления с apropos .help и help -d . Вы можете узнать, является ли команда исполняемой, оболочкой встроенной или псевдонима с помощью type command .curl cheat.sh/command даст краткую «шпаргалку» с общими примерами того, как использовать команду оболочки. Узнайте о перенаправлении выхода и ввода, используя > и < и трубы, используя | Полем Знать > перезаписать выходной файл и >> добавления. Узнайте о 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 -hs * ). Для управления файловой системой, df , mount , fdisk , mkfs , lsblk . Узнайте, что такое INODE ( ls -i или df -i ).
Основное управление сетью: ip или ifconfig , dig , traceroute , route .
Узнайте и используйте систему управления управлением версиями, такую как git .
Хорошо знают регулярные выражения и различные флаги для grep / egrep . Варианты -i , -o , -v , -A , -B и -C стоит знать.
Научитесь использовать apt-get , yum , dnf или pacman (в зависимости от дистрибуции), чтобы найти и установить пакеты. И убедитесь, что у вас есть pip для установки инструментов командной строки на основе Python (несколько ниже проще всего установить через pip ).
В Bash используйте вкладку , чтобы завершить аргументы или перечислить все доступные команды и 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-. Процессы через предыдущие аргументы, и Alt- * расширяет глобус.
В качестве альтернативы, если вы любите связок с ключами в стиле VI, используйте set -o vi (и set -o emacs чтобы вернуть его обратно).
Для редактирования длинных команд, после установки вашего редактора (например export EDITOR=vim ), Ctrl-X Ctrl-E откроет текущую команду в редакторе для многострочного редактирования. Или в стиле VI, Escape-V .
Чтобы увидеть последние команды, используйте history . Следуйте !n (где n - номер команды), чтобы снова выполнить. Есть также много сокращений, которые вы можете использовать, наиболее полезным, вероятно, состоит в том, чтобы !$ Для последнего аргумента и !! Для последней команды (см. «Расширение истории» на странице человека). Тем не менее, их часто легко заменяют на CTRL-R и Alt-. Полем
Зайдите в свой домашний каталог с cd . Доступ к файлам относительно вашего домашнего каталога с префиксом ~ (например, ~/.bashrc ). В сценариях sh называются домашним справочником как $HOME .
Чтобы вернуться в предыдущий рабочий каталог: cd - .
Если вы на полпути, набирая команду, но измените свое мнение, нажмите alt-, чтобы добавить # в начале и введите ее в качестве комментария (или используйте Ctrl-A , # , Enter ). Затем вы можете вернуться к нему позже через историю команд.
Используйте xargs (или parallel ). Это очень мощно. Примечание вы можете контролировать, сколько элементов выполняет на линию ( -L ), а также параллелизм ( -P ). Если вы не уверены, что это подойдет правильно, сначала используйте 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 -iTCP -sTCP:LISTEN -P -n (что также работает на macOS).
См. Также lsof и fuser для открытых розеток и файлов.
Смотрите uptime или w , чтобы узнать, как долго работает система.
Используйте alias , чтобы создать ярлыки для широко используемых команд. Например, alias ll='ls -latr' создает новый псевдоним ll .
Сохраните псевдонимы, настройки оболочки и функции, которые вы обычно используете в ~/.bashrc , и организуйте оболочки для входа для поиска. Это сделает вашу настройку доступной во всех ваших сессиях оболочки.
Поместите настройки переменных среды, а также команды, которые следует выполнять при входе в систему ~/.bash_profile . Отдельная конфигурация потребуется для оболочек, которые вы запускаете из входа в графическую среду и задания cron .
Синхронизируйте ваши файлы конфигурации (например .bashrc и .bash_profile ) среди различных компьютеров с git.
Поймите, что помощь необходима, когда переменные и имена файлов включают пробелы. Окружите свои переменные Bash с помощью цитат, например "$FOO" . Предпочитаю параметры -0 или -print0 , чтобы позволить нулевым символам делимить файлы, например, locate -0 pattern | xargs -0 ls -al или find / -print0 -type d | xargs -0 ls -al . Для итерации на именах файлов, содержащих пробелы в цикле, установите, чтобы быть новой линией только с использованием IFS=$'n' .
В сценариях Bash используйте set -x (или set -v , который регистрирует необработанные входные данные, включая невысокие переменные и комментарии) для отладки вывода. Используйте строгие режимы, если у вас нет веской причины не для: используйте set -e , чтобы прервать ошибки (ненулевой код выхода). Используйте set -u , чтобы обнаружить использование нереточных переменных. Рассмотрим set -o pipefail , чтобы прервать ошибки в трубах (хотя читайте на нем больше, если вы это сделаете, так как эта тема немного тонкая). Для более вовлеченных сценариев также используйте trap на выходе или ошибке. Полезной привычкой является запуск такого сценария, который заставит его обнаружить и прервать общие ошибки и распечатать сообщение:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir В Bash обратите внимание, что есть много видов переменных расширения. Проверка переменной существует: ${name:?error message} . Например, если сценарий Bash требует единого аргумента, просто напишите input_file=${1:?usage: $0 input_file} . Использование значения по умолчанию, если переменная пуста: ${name:-default} . Если вы хотите добавить дополнительный (необязательный) параметр в предыдущем примере, вы можете использовать что-то вроде output_file=${2:-logfile} . Если $2 опущены и, следовательно, пустые, output_file будет установлен на logfile . Арифметическое расширение: i=$(( (i + 1) % 5 )) . Последовательности: {1..10} . Обрезка строк: ${var%suffix} и ${var#prefix} . Например, если var=foo.pdf , то echo ${var%.pdf}.txt prints 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} (все возможное и. Расширение скобы выполняется до любого другого расширения.
Порядок расширения: расширение скобки; Расширение тилде, параметр и расширение переменных, арифметическое расширение и замена команды (сделано в правом направлении); Расщепление слов; и расширение имени файла. (Например, диапазон, такой как {1..20} не может быть выражен с переменными с использованием {$a..$b} . Используйте seq или A for цикла вместо этого, например, seq $a $b или for((i=a; i<=b; i++)); do ... ; done .)
Вывод команды можно рассматривать как файл через <(some command) (известная как замена процесса). Например, сравните локальные /etc/hosts с удаленным:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
В Bash перенаправьте как стандартный выход, так и стандартная ошибка через: some-command >logfile 2>&1 или some-command &>logfile . Часто, чтобы гарантировать, что команда не оставляет ручку открытого файла для стандартного ввода, связывая ее с терминалом, в котором вы находитесь, также хорошая практика добавить </dev/null .
Используйте man ascii для хорошего таблицы ASCII, с гексами и десятичными значениями. Для общей информации об кодировке, man unicode , man utf-8 и man latin1 полезны.
Используйте screen или tmux , чтобы мультиплексировать экран, особенно полезный для удаленных сеансов SSH, а также для отсоединения и повторного привлечения к сеансу. byobu может улучшить экран или TMUX, предоставляя больше информации и более простого управления. Более минимальной альтернативой для устойчивости сеанса является dtach .
В SSH, знание того, как портировать туннель с -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
Рассмотрим 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 . По умолчанию бег как корень; Используйте -u , чтобы указать другого пользователя. Используйте -i для входа в систему в качестве этого пользователя (вам будут просить пароль ).
Чтобы переключить оболочку на другого пользователя, используйте su username или su - username . Последний с «-» получает среду, как будто другой пользователь только что вошел в систему. Опущено по умолчанию имени пользователя по умолчанию. Вам будет предложено пароль пользователя, на который вы переключаетесь .
Знайте о пределе 128K на командных строках. Эта ошибка «Список аргументов слишком долго» распространена, когда подстановочные знаки, соответствующие большому количеству файлов. (Когда это случается, альтернативы, такие как find и xargs могут помочь.)
Для базового калькулятора (и, конечно, доступа к Python в целом) используйте интерпретатор python . Например,
>>> 2+3
5
Чтобы найти файл по имени в текущем каталоге, find . -iname '*something*' (или похожее). Чтобы найти файл в любом месте по имени, используйте locate something (но имейте в виду, updatedb возможно, не индексировал недавно созданные файлы).
Для общего поиска через исходные или данные данных существует несколько вариантов более продвинутых или быстрее, чем grep -r , в том числе (в тяжелом порядке от более старых до более новых) ack , ag («Silver Searcher») и rg (Ripgrep).
Чтобы преобразовать HTML в текст: lynx -dump -stdin
Для Markdown, HTML и всех видов преобразования документов попробуйте pandoc . Например, чтобы преобразовать документ Markdown в формат Word: pandoc README.md --from markdown --to docx -o temp.docx
Если вы должны обрабатывать XML, xmlstarlet старый, но хорош.
Для JSON используйте jq . Для интерактивного использования также см. jid и jiq .
Для YAML используйте shyaml .
Для файлов Excel или CSV CSVKIT предоставляет in2csv , csvcut , csvjoin , csvgrep и т. Д.
Для Amazon S3 s3cmd удобен, а s4cmd быстрее. aws Amazon и улучшенные saws необходимы для других задач, связанных с AWS.
Знайте о sort и uniq , включая варианты UNIQ -u и -d . Один строки ниже. Смотрите также comm .
Знайте о cut , paste и join к манипулированию текстовыми файлами. Многие люди используют cut , но забывают о join .
Знайте о wc , чтобы посчитать новеньши ( -l ), символы ( -m ), слова ( -w ) и байты ( -c ).
Знайте о tee , чтобы копировать из Stdin в файл, а также в Stdout, как в ls -al | tee file.txt .
Для получения более сложных расчетов, включая группировку, реверсионные поля и статистические расчеты, рассмотрим datamash .
Знайте, что локаль влияет на множество инструментов командной строки тонкими способами, включая порядок сортировки (сопоставление) и производительность. Большинство инсталляций Linux будут устанавливать LANG или другие локальные переменные в локальную обстановку, такие как американский английский. Но имейте в виду, что сортировка изменится, если вы измените локаль. И знают, что подпрограммы i18n могут создавать сортировку или другие команды работают много раз медленнее. В некоторых ситуациях (таких как установленные операции или уникальные операции ниже) вы можете безопасно игнорировать медленные подпрограммы i18n полностью и использовать традиционный порядок сортировки на основе байтов, используя export LC_ALL=C .
Вы можете установить среду конкретной команды, префиксив ее вызов с настройками переменной среды, как в TZ=Pacific/Fiji date .
Знайте базовый awk и sed для простых данных. Смотрите однострочные для примеров.
Чтобы заменить все входы строки на месте, в одном или нескольких файлах:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren . (В некоторых случаях команда rename также допускает несколько переименования, но будьте осторожны, так как ее функциональность не одинакова для всех распределений Linux.) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync действительно является быстрым и необычайно универсальным инструментом копирования файлов. Он известен синхронизацией между машинами, но одинаково полезен на местном уровне. Когда разрешают ограничения безопасности, использование rsync вместо scp позволяет восстановить передачу без перезапуска с нуля. Это также является одним из самых быстрых способов удаления большого количества файлов: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir Для мониторинга прогресса при обработке файлов используйте pv , pycp , pmonitor , progress , rsync --progress , или, для копирования на уровне блока, dd status=progress .
Используйте shuf , чтобы перетасовать или выберите случайные строки из файла.
Знать варианты sort . Для чисел используйте -n , или -h для обработки читаемых человеком (например, от du -h ). Знайте, как работают ключи ( -t и -k ). В частности, следите за тем, чтобы вам нужно написать -k1,1 , чтобы сортировать только на первом поле; -k1 означает сортировку в соответствии со всей линией. Стабильная сортировка ( sort -s ) может быть полезно. Например, для сортировки сначала по поле 2, а затем во втором поле 1, вы можете использовать sort -k1,1 | sort -s -k2,2 .
Если вам когда -нибудь нужно написать буквальную вкладку в командной строке в Bash (например, для сортировки -t аргумент), нажмите Ctrl -V [Tab] или напишите $'t' (последний лучше, как вы можете скопировать/вставить его).
Стандартными инструментами для исправления исходного кода являются diff и patch . См. Также diffstat для сводной статистики DIFF и sdiff для бок о бок. Примечание diff -r работает для целых каталогов. Используйте diff -r tree1 tree2 | diffstat для краткого изложения изменений. Используйте vimdiff для сравнения и редактирования файлов.
Для двоичных файлов используйте hd , hexdump или xxd для простых шестигранных дамп и bvi , hexedit или biew для бинарного редактирования.
Также для двоичных файлов, strings (плюс grep и т. Д.) позволяет вам найти кусочки текста.
Для бинарных различий (дельта -сжатие) используйте xdelta3 .
Чтобы преобразовать текстовые кодировки, попробуйте iconv . Или uconv для более продвинутого использования; Он поддерживает некоторые передовые вещи Unicode. Например:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt Чтобы разделить файлы на части, см. split (чтобы разделить по размеру) и csplit (чтобы разделить шаблоном).
Дата и время: чтобы получить текущую дату и время в полезном формате ISO 8601, используйте date -u +"%Y-%m-%dT%H:%M:%SZ" (другие варианты проблематичны). Чтобы манипулировать выражениями даты и времени, используйте dateadd , datediff , strptime и т. Д. От dateutils .
Используйте zless , zmore , zcat и zgrep для работы в сжатых файлах.
Атрибуты файлов устанавливаются через chattr и предлагают альтернативу более низким уровням разрешений файла. Например, чтобы защитить от случайного удаления файлов Необвишаемый флаг: sudo chattr +i /critical/directory/or/file
Используйте getfacl и setfacl , чтобы сохранить и восстановить разрешения на файлы. Например:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (создает файл Sparse), fallocate (EXT4, XFS, BTRFS и OCFS2 файловые системы), xfs_mkfile (почти любые файловые системы поставляются в пакете XFSProgs), mkfile (для Unix-подобных систем, таких как Solaris, Mac OF). Для веб -отладки, curl и curl -I удобны, или их эквиваленты wget , или более современный httpie .
Чтобы узнать текущий статус процессора/диска, классические инструменты являются top (или лучшим htop ), iostat и iotop . Используйте iostat -mxz 15 для базового процессора и подробных статистических показателей дисков для каждого участка и понимания производительности.
Для деталей сетевого соединения используйте netstat и ss .
Для быстрого обзора того, что происходит в системе, dstat особенно полезен. Для наиболее широкого обзора с деталями используйте glances .
Чтобы узнать состояние памяти, запустите и понимаете вывод free и vmstat . В частности, имейте в виду, что значение «кэшированного» - это память, хранящаяся ядром Linux в качестве кэша файла, так эффективно считается «свободным» значением.
Отладка системы Java -это другой чайник рыбы, но простой трюк на Oracle и некоторых других JVMS заключается в том, что вы можете запустить kill -3 <pid> , а полная трассировка и резюме с кучей (включая детали сбора мусора поколений, что может быть высоко информативным), будет сброшена в Stderr/Logs. jps , jstat , jstack , jmap полезны. Инструменты SJK более продвинуты.
Используйте mtr в качестве лучшего Traceroute, чтобы выявить сетевые проблемы.
Чтобы посмотреть, почему диск заполнен, ncdu экономит время по обычным командам, таким как du -sh * .
Чтобы найти, какой розетка или процесс используют полосу пропускания, попробуйте iftop или nethogs .
Инструмент ab (поставляется с Apache) полезен для быстрой и насыщенной проверки производительности веб-сервера. Для более сложного нагрузочного тестирования попробуйте siege .
Для более серьезной отладки сети, wireshark , tshark или ngrep .
Знаю о strace и ltrace . Это может быть полезным, если программа выходит из строя, висит или рухнет, и вы не знаете, почему, или если вы хотите получить общее представление о производительности. Обратите внимание на опцию профилирования ( -c ) и возможность прикрепить к процессу выполнения ( -p ). Используйте опцию Trace Child ( -f ), чтобы избежать отсутствия важных вызовов.
Знайте о 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 (General Unix/Info) или lsb_release -a (Linux Distro Info).
Используйте dmesg всякий раз, когда что -то ведет себя действительно смешно (это могут быть проблемы с оборудованием или драйвером).
Если вы удалите файл, и он не освобождает ожидаемое пространство дисков, как сообщается du , проверьте, используется ли файл в процессу: lsof | grep deleted | grep "filename-of-my-big-file"
Несколько примеров объединения команд:
sort / uniq . Предположим, что a и b являются текстовыми файлами, которые уже уникальны. Это быстро и работает на файлах произвольного размера, до многих гигабайт. (Сортировка не ограничена памятью, хотя вам может потребоваться использовать опцию -T , если /tmp находится на небольшом корневом разделе.) См. Также примечание о LC_ALL выше и sort 'S -u (оставлено для ясности ниже). sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
Используйте grep . * Для быстрого изучения содержимого всех файлов в каталоге (поэтому каждая строка сочетается с именем файла) или head -100 * (так что каждый файл имеет заголовок). Это может быть полезно для каталогов, заполненных настройками конфигурации, такими как в /sys , /proc , /etc .
Суммирование всех чисел в третьем столбце текстового файла (вероятно, в 3 раза быстрее и в 3 раза меньше кода, чем эквивалентный Python):
awk ' { x += $3 } END { print x } ' myfilels -l но его легче читать, чем ls -lR : find . -type f -lsacct_id , который присутствует в URL. Если вы хотите подсчитать, сколько запросов для каждого acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn Чтобы непрерывно отслеживать изменения, используйте watch , например, проверьте изменения в файлах в каталоге с watch -d -n 2 'ls -rtlh | tail' или настройки сети при устранении неполадок настройки WiFi с помощью watch -d -n 2 ifconfig .
Запустите эту функцию, чтобы получить случайный наконечник из этого документа (SACSESESS MARCHDOWN и извлекает элемент):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
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 | iconv -t US
} expr : выполнять арифметические или логические операции или оценить регулярные выражения
m4 : простой макропроцессор
yes : печатайте строку много
cal : хороший календарь
env : запустите команду (полезно в сценариях)
printenv : распечатайте переменные среды (полезно для отладки и сценариев)
look : найти английские слова (или строки в файле), начиная со строки
cut , paste и join : манипулирование данными
fmt : формат текстовые параграфы
pr : формат текст в страницы/столбцы
fold : обернуть линии текста
column : Формат текстовые поля в выровненные столбцы с фиксированной шириной или таблицы
expand и unexpand : преобразовать между вкладками и пробелами
nl : добавить номера строк
seq : Числа печати
bc : калькулятор
factor : фактор целых числа
gpg : зашифровать и подписать файлы
toe : таблица записей Terminfo
nc : отладка сети и передача данных
socat : Relay Relay и Forwarder порта TCP (аналогично netcat )
slurm : визуализация сетевого трафика
dd : Перемещение данных между файлами или устройствами
file : идентифицировать тип файла
tree : показ каталогов и подкаталогов в качестве гнездового дерева; как ls но рекурсивный
stat : Информация о файле
time : выполнить и время команды
timeout : выполнить команду в течение определенного количества времени и остановить процесс, когда завершается указанное количество времени.
lockfile : создайте файл семафора, который можно удалить только с помощью rm -f
logrotate : вращение, сжатие и почтовые журналы.
watch : Запустите команду неоднократно, показывая результаты и/или выделение изменений
when-changed : запускает любую команду, которую вы указываете всякий раз, когда он видит измененный файл. См. inotifywait и entr .
tac : печатные файлы в обратном
comm : Сравните линию отсортированных файлов по линии
strings : извлечь текст из двоичных файлов
tr : Перевод персонажа или манипуляция
iconv или uconv : преобразование для текстовых кодировки
split и csplit : разделение файлов
sponge : прочитайте все ввод перед написанием, полезно для чтения с того же написания в один и тот же файл, например, grep -v something some-file | sponge some-file
units : единицы преобразования и расчеты; Конвертирует Furlongs в течение двух недель в Twips Per Blink (см. Также /usr/share/units/definitions.units /Share/units/definitions.Units)
apg : генерирует случайные пароли
xz : сжатие файлов с высоким рационом
ldd : Информация о динамической библиотеке
nm : символы из файлов объектов
ab или wrk : бенчмаркирование веб -серверов
strace : системный вызов отладки
mtr : Лучший трассера для отладки сети
cssh : визуальная одновременная оболочка
rsync : синхронизированные файлы и папки через SSH или в локальной файловой системе
wireshark и tshark : захват пакетов и отладка сети
ngrep : grep для сетевого уровня
host и dig : поиск DNS
lsof : Descriptor File File и информация о сокете
dstat : полезная статистика системы
glances : высокий уровень, многопрофильный обзор
iostat : Статистика использования диска
mpstat : статистика использования процессора
vmstat : статистика использования памяти
htop : улучшенная версия TOP
last : история входа в систему
w : кто зарегистрирован
id : информация об идентификации пользователя/группы
sar : историческая статистика системы
iftop или nethogs : использование сети с помощью гнезда или процесса
ss : Статистика сокета
dmesg : Сообщения ошибок загрузки и системы
sysctl : просмотреть и настраивать параметры ядра Linux во время выполнения
hdparm : SATA/ATA -манипуляции/производительность диска
lsblk : Список устройств блоков: представление дерева ваших дисков и дисков
lshw , lscpu , lspci , lsusb , dmidecode : Аппаратная информация, включая процессор, BIOS, RAID, графики, устройства и т. Д.
lsmod и modinfo : Перечислите и покажите подробности модулей ядра.
fortune , ddate и sl : Хм, ну, это зависит от того, считаете ли вы паровые локомотивы и цитаты на молнии "полезны"
Это элементы, относящиеся только к macOS.
Управление пакетами с brew (Homebrew) и/или port (Macports). Они могут быть использованы для установки на macOS многие из вышеперечисленных команд.
Скопируйте вывод любой команды в приложение для настольного компьютера с pbcopy и вставьте ввод с одного с pbpaste .
Чтобы включить клавишу опции в терминале MacOS в качестве клавиши ALT (например, используется в вышеупомянутых командах, таких как Alt -B , Alt -F и т. Д.), Откройте предпочтения -> Профили -> клавиатура и выберите «Использовать опцию в качестве мета -клавиши».
Чтобы открыть файл с приложением для настольного компьютера, используйте open или open -a /Applications/Whatever.app .
Spotlight: файлы поиска с mdfind и списка метаданных (например, Info Exif) с mdls .
Имейте в виду MacOS основан на BSD UNIX, и многие команды (например, ps , ls , tail , awk , sed ) имеют много тонких вариантов от Linux, на которые в значительной степени влияют инструменты System V-стиль Unix и GNU. Вы часто можете сказать разницу, отметив, что на странице человека есть заголовок «Руководство по общим командам BSD». В некоторых случаях версии GNU также могут быть установлены (например, gawk и gsed для GNU Awk и SED). При написании кроссплатформенных сценариев Bash избегайте таких команд (например, рассмотрите Python или perl ) или тщательно тестируйте.
Чтобы получить информацию о выпуске MacOS, используйте sw_vers .
Эти элементы актуальны только в Windows.
Получите доступ к мощности оболочки Unix под Microsoft Windows, установив Cygwin. Большинство вещей, описанных в этом документе, будет работать из коробки.
В Windows 10 вы можете использовать подсистему Windows для Linux (WSL), которая предоставляет знакомую среду Bash с утилитами командной строки Unix.
Если вы в основном хотите использовать инструменты разработчика GNU (например, GCC) в Windows, рассмотрите Mingw и его пакет MSYS, который предоставляет такие утилиты, как Bash, Gawk, Make и Grep. MSYS не имеет всех функций по сравнению с Cygwin. Mingw особенно полезен для создания нативных портов Windows инструментов Unix.
Еще один вариант, чтобы получить Unix Oling and Feel под Windows, - это наличные. Обратите внимание, что в этой среде доступны только очень мало команд UNIX и параметров командной строки.
Вы можете выполнять и скрепить большинство задач администрирования системного администрирования Windows из командной строки, изучая и используя wmic .
Сетевые сетевые инструменты Windows-строки. Вы можете найти полезные, включающие ping , ipconfig , tracert и netstat .
Вы можете выполнить много полезных задач Windows, вызывая команду Rundll32 .
Установите дополнительные программы Unix с менеджером пакетов Cygwin.
Используйте mintty в качестве окна командной строки.
Получите доступ к буферу обмена Windows через /dev/clipboard .
Run cygstart to open an arbitrary file through its registered application.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.