кодесурса

Искусство командной строки

script1adsense2code
script1adsense3code

Искусство командной строки .

расшифровка

Искусство командной строки

 <! doctype html>
<html lang = "en">
<Голова>
<title> Искусство командной строки </ title>
</ HEAD>
<Тело>
</ Body>
</ Html>

Список Содержит

  • Мета
  • основы
  • Ежедневное использование
  • Обработка файлов и данных
  • Отладка системы
  • Однострочники
  • Неясный, но полезный
  • Только OS X
  • Только для Windows

Мета

Объем:

  • Это руководство как для начинающих, так и для опытных. Цели - широта (все важно), конкретность (приведите конкретные примеры наиболее распространенного случая) и краткость (избегайте несущественных вещей или отступлений, которые вы легко можете найти в другом месте). Каждый совет важен в некоторой ситуации или значительно экономит время по сравнению с альтернативами.
  • Это написано для Linux, за исключением разделов «Только OS X» и «Только Windows». Многие из других элементов применимы или могут быть установлены на других Unices или OS X (или даже Cygwin).
  • Основное внимание уделяется интерактивному Bash, хотя многие советы применимы и к другим оболочкам, и к общим сценариям Bash.
  • Он включает в себя как «стандартные» команды Unix, так и те, которые требуют специальной установки пакетов - при условии, что они достаточно важны для включения.

Заметки:

  • Чтобы сохранить это на одной странице, контент неявно включен по ссылке. Вы достаточно умен, чтобы искать больше деталей в другом месте, когда вы знаете идею или команду Google. Используйте apt-get, yum, dnf, pacman, pip или brew (в зависимости от ситуации) для установки новых программ.
  • Используйте Explainshell, чтобы получить полезную информацию о том, что делают команды, опции, каналы и т. Д.

основы

  • Изучите основы Bash. На самом деле, наберите man bash и, по крайней мере, просмотрите все; это довольно легко следовать и не так долго. Альтернативные оболочки могут быть хорошими, но Bash является мощным и всегда доступным (изучение только zsh, fish и т. Д., Хотя и заманчиво на вашем ноутбуке, ограничивает вас во многих ситуациях, например, при использовании существующих серверов).
  • Хорошо выучите хотя бы один текстовый редактор. В идеале Vim (vi), так как на самом деле нет конкуренции за произвольное редактирование в терминале (даже если вы большую часть времени используете Emacs, большую IDE или современный хипстерский редактор).
  • Умение читать документацию с помощью man (для любознательных man man перечисляет номера разделов, например, 1 - это «обычные» команды, 5 - это файлы / соглашения и 8 - для администрирования). Найти страницы справочника по поводу. Знайте, что некоторые команды не являются исполняемыми файлами, а встроены в Bash, и что вы можете получить помощь по ним с помощью help и help -d.
  • Узнайте о перенаправлении вывода и ввода с помощью> и <и каналов с помощью |. Know> перезаписывает выходной файл и >> добавляет. Узнайте о stdout и stderr.
  • Узнайте о расширении глобуса файла с помощью * (и, возможно,? И [...]), а также о кавычках и разнице между двойными и одинарными кавычками.
  • Быть знакомым с управлением заданиями Bash: &, ctrl-z, ctrl-c, jobs, fg, bg, kill и т. Д.
  • Знать ssh и основы аутентификации без пароля через ssh-agent, ssh-add и т. Д.
  • Базовое управление файлами: ls и ls -l (в частности, узнайте, что означает каждый столбец в ls -l), less, head, tail и tail -f (или даже лучше, less + F), ln и ln -s (learn различия и преимущества жестких и мягких ссылок), chown, chmod, du (для краткого описания использования диска: du -hs *). Для управления файловой системой, df, mount, fdisk, mkfs, lsblk. Узнайте, что такое индекс (ls -i или df -i).
  • Основное управление сетью: ip или ifconfig, dig.
  • Изучите и используйте систему управления версиями, такую как git.
  • Хорошо знаю регулярные выражения и различные флаги для grep / egrep. Параметры -i, -o, -v, -A, -B и -C заслуживают внимания.
  • Научитесь использовать apt-get, yum, dnf или pacman (в зависимости от дистрибутива) для поиска и установки пакетов. И убедитесь, что у вас есть pip для установки инструментов командной строки на основе Python (несколько ниже проще всего установить через pip).

Ежедневное использование

  • В Bash используйте Tab для завершения аргументов или перечисления всех доступных команд и ctrl-r для поиска в истории команд (после нажатия введите для поиска, несколько раз нажмите ctrl-r для циклического просмотра нескольких совпадений, нажмите Enter для выполнения найденной команды или нажмите стрелку вправо, чтобы поместить результат в текущую строку, чтобы разрешить редактирование).
  • В Bash используйте ctrl-w, чтобы удалить последнее слово, и ctrl-u, чтобы удалить весь путь до начала строки. Используйте alt-b и alt-f для перемещения по слову, ctrl-a для перемещения курсора в начало строки, ctrl-e для перемещения курсора в конец строки, ctrl-k для уничтожения до конца строки, ctrl-l очистить экран. Смотрите man readline для всех стандартных сочетаний клавиш в Bash. Много. Например, альт. циклически перебирает предыдущие аргументы, и alt- * расширяет глобус.
  • В качестве альтернативы, если вы любите привязки клавиш в стиле vi, используйте set -o vi (и установите -o emacs, чтобы вернуть его обратно).
  • Для редактирования длинных команд после настройки вашего редактора (например, export EDITOR = vim), ctrl-x ctrl-e откроет текущую команду в редакторе для многострочного редактирования. Или в стиле vi, escape-v.
  • Чтобы увидеть последние команды, историю. Есть также много сокращений, таких как! $ (Последний аргумент) и !! последняя команда, хотя их часто легко заменить на ctrl-r и alt- ..
  • Перейдите в свой домашний каталог с помощью CD. Доступ к файлам относительно вашего домашнего каталога с префиксом ~ (например, ~ / .bashrc). В сценариях sh ссылка на домашний каталог называется $ HOME.
  • Чтобы вернуться к предыдущему рабочему каталогу: cd -.
  • Если вы уже наполовину набираете команду, но передумали, нажмите alt- #, чтобы добавить # в начале, и введите его в качестве комментария (или используйте ctrl-a, #, enter). Затем вы можете вернуться к нему позже через историю команд.
  • Используйте xargs (или параллельно). Это очень мощно. Обратите внимание, что вы можете контролировать количество элементов, выполняемых в строке (-L), а также параллелизм (-P). Если вы не уверены, что это будет правильно, сначала используйте xargs echo. Кроме того, -I {} удобно.
  • Примеры:

     находить . -имя '* .py' | xargs grep some_function
          кошачьи хозяева | xargs -I {} ssh [электронная почта защищена] {} имя хоста
    
  • pstree -p - это полезное отображение дерева процессов.
  • Используйте pgrep и pkill, чтобы найти или сообщить о процессах по имени (-f полезно).
  • Знайте различные сигналы, которые вы можете отправлять процессы. Например, чтобы приостановить процесс, используйте kill -STOP [pid]. Полный список см. В man 7 signal
  • Используйте nohup или disown, если хотите, чтобы фоновый процесс продолжался вечно.
  • Проверьте, какие процессы прослушивают через netstat -lntp или ss -plat (для TCP; добавьте -u для UDP).
  • Смотрите также lsof для открытых сокетов и файлов.
  • См. Uptime или w, чтобы узнать, как долго работает система.
  • Используйте псевдоним для создания ярлыков для часто используемых команд. Например, псевдоним 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. Чтобы выполнить итерацию по именам файлов, содержащим пробелы в цикле for, установите для IFS значение новой строки только с использованием IFS = $ '/ n'.
  • В сценариях Bash для отладки вывода используйте set -x (или вариант set -v, который регистрирует необработанные данные, включая нерасширенные переменные и комментарии). Используйте строгие режимы, если у вас нет веских причин не делать этого: используйте set -e для отмены ошибок (ненулевой код выхода). Используйте set -u для обнаружения неустановленных значений переменных. Также рассмотрите возможность установки -o pipefail на ошибки в каналах (хотя читайте об этом больше, если вы это сделаете, так как эта тема немного тонкая). Для более сложных сценариев также используйте trap на EXIT или ERR. Полезная привычка - запускать скрипт, подобный этому, который заставит его обнаруживать и прерывать общие ошибки и печатать сообщение:
  •  set -euo pipefail
          trap "echo" error: Сценарий не выполнен: см. ошибку команды выше '"ERR
    
  • В сценариях Bash подоболочки (написанные в скобках) являются удобными способами группировки команд. Типичным примером является временное перемещение в другой рабочий каталог, например
  •  # сделать что-то в текущем каталоге
          (cd / some / other / dir && other-command)
          # продолжить в оригинальном каталоге
    
  • Обратите внимание, что в Bash существует множество видов расширения переменных. Проверка наличия переменной: $ {name:? Error error}. Например, если скрипту Bash требуется один аргумент, просто напишите input_file = $ {1:? Using: $ 0 input_file}. Арифметическое расширение: i = $ (((i + 1)% 5)). Последовательности: {1..10}. Обрезка строк: суффикс $ {var%} и префикс $ {var #}. Например, если 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} (который расширяет все возможные комбинации и создает дерево каталогов).
  • Вывод команды может быть обработан как файл через <(некоторая команда). Например, сравните локальный / etc / hosts с удаленным:
  •  diff / etc / hosts <(ssh somehost cat / etc / hosts)
    
  • Знать про "здесь документы" в Bash, как в cat << 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 = да
          ServerAliveInterval = 15
          ServerAliveCountMax = 6
          Сжатие = да
          ControlMaster auto
          ControlPath / tmp /% [электронная почта защищена] % h:% p
          ControlPersist да
    
  • Некоторые другие параметры, относящиеся к 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 (для пользователя root) или sudo -u (для другого пользователя). Используйте su или sudo bash, чтобы фактически запустить оболочку от имени этого пользователя. Используйте su - для имитации нового входа в систему от имени пользователя root или другого пользователя.
  • Знайте о пределе 128K в командной строке. Эта ошибка «Список аргументов слишком длинный» встречается часто, когда подстановочные знаки совпадают с большим количеством файлов. (Когда это происходит, альтернативы, такие как find и xargs, могут помочь.)
  • Для базового калькулятора (и, конечно, для доступа к Python в целом), используйте интерпретатор Python. Например,
  •  >>> 2 + 3
    5
    

Обработка файлов и данных

  • Чтобы найти файл по имени в текущем каталоге, найдите. -имя '* что-то *' (или подобное). Чтобы найти файл в любом месте по имени, используйте команду locate (но имейте в виду, что updatedb может не проиндексировать недавно созданные файлы).
  • Для общего поиска по исходным файлам или файлам данных (более продвинутым, чем grep -r), используйте ag.
  • Чтобы преобразовать HTML в текст: lynx -dump -stdin
  • Для Markdown, HTML и всех видов конвертации документов попробуйте pandoc.
  • Если вы должны обрабатывать XML, xmlstarlet старый, но хороший.
  • Для JSON используйте jq.
  • Для YAML используйте shyaml.
  • Для файлов Excel или CSV csvkit предоставляет in2csv, csvcut, csvjoin, csvgrep и т. Д.
  • Для Amazon S3 удобнее использовать s3cmd, а s4cmd быстрее. AWS от Amazon и улучшенные пилы необходимы для решения других задач, связанных с AWS.
  • Знать о sort и uniq, в том числе о параметрах uniq -u и -d. Смотрите также комм.
  • Знать о вырезать, вставлять и объединять, чтобы манипулировать текстовыми файлами. Многие люди используют cut, но забывают о join.
  • Знайте о wc для подсчета новых строк (-l), символов (-m), слов (-w) и байтов (-c).
  • Знать о том, что нужно скопировать из stdin в файл, а также в stdout, как в ls -al | тройник file.txt.
  • Знайте, что локаль незаметно влияет на многие инструменты командной строки, включая порядок сортировки (сортировку) и производительность. Большинство установок Linux устанавливают локальные переменные LANG или другие переменные локали, такие как американский английский. Но имейте в виду, что сортировка изменится, если вы измените локаль. И знайте, что процедуры i18n могут заставить сортировку или другие команды выполняться во много раз медленнее. В некоторых ситуациях (таких как операции set или операции уникальности ниже) вы можете полностью игнорировать медленные процедуры i18n и использовать традиционный порядок сортировки на основе байтов, используя export LC_ALL = C.
  • Вы можете установить среду конкретной команды, добавив префикс к ее вызову с настройками переменных среды, как в TZ = Pacific / Fiji date.
  • Знать основы awk и sed для простого манипулирования данными. Например, суммирование всех чисел в третьем столбце текстового файла: awk '{x + = $ 3} END {print x}'. Это, вероятно, в 3 раза быстрее и в 3 раза короче, чем эквивалентный Python.
  • Чтобы заменить все вхождения строки в одном или нескольких файлах:
  •  perl -pi.bak -e 's / old-string / new-string / g' my-files - *. txt
    
  • Чтобы переименовать несколько файлов и / или выполнить поиск и замену в файлах, попробуйте repren. (В некоторых случаях команда переименования также допускает несколько переименований, но будьте осторожны, поскольку ее функциональность не одинакова во всех дистрибутивах Linux.)
  •  # Полное переименование имен файлов, каталогов и содержимого foo -> bar:
          repren --full --preserve-case --foo - в бар.
          # Восстановите файлы резервных копий.
          repren --renames --from '(. *) /. bak' --to '/ 1' * .bak
          # То же, что и выше, используя переименование, если доступно:
          переименовать 's //. bak $ //' * .bak
    
  • Как говорится на странице руководства, rsync действительно быстрый и необычайно универсальный инструмент для копирования файлов. Это известно для синхронизации между машинами, но одинаково полезно локально. Когда ограничения безопасности позволяют, использование rsync вместо scp позволяет восстановить передачу без перезапуска с нуля. Это также один из самых быстрых способов удаления большого количества файлов:
  •  mkdir empty && rsync -r - удалить пустой / some-dir && rmdir some-dir
    
  • Используйте shuf, чтобы перетасовать или выбрать случайные строки из файла.
  • Знайте варианты сортировки. Для чисел используйте -n или -h для обработки удобочитаемых чисел (например, из du -h). Знать, как работают ключи (-t и -k). В частности, обратите внимание, что вам нужно написать -k1,1 для сортировки только по первому полю; -k1 означает сортировку по всей строке. Стабильная сортировка (sort -s) может быть полезна. Например, чтобы отсортировать сначала по полю 2, а затем по полю 1, вы можете использовать сортировку -k1,1 | сортировка -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 или biew для двоичного редактирования.
  • Также для двоичных файлов строки (плюс grep и т. Д.) Позволяют вам найти биты текста.
  • Для двоичных различий (дельта-сжатие) используйте xdelta3.
  • Чтобы преобразовать кодировки текста, попробуйте iconv. Или uconv для более продвинутого использования; это поддерживает некоторые продвинутые вещи Unicode. Например, эта команда строчные буквы и удаляет все акценты (раскрывая и удаляя их):
  •  uconv -f utf-8 -t utf-8 -x ':: Any-Lower; :: Any-NFD; [: Марка без пробелов:]>; :: Any-NFC; '<input.txt> output.txt
    
  • Чтобы разделить файлы на части, см. Split (разделить по размеру) и csplit (разделить по шаблону).
  • Чтобы манипулировать выражениями даты и времени, используйте dateadd, datediff, strptime и т. Д. Из dateutils.
  • Используйте zless, zmore, zcat и zgrep для работы со сжатыми файлами.
  • Атрибуты файла могут быть установлены с помощью chattr и предлагают низкоуровневую альтернативу разрешениям файла. Например, для защиты от случайного удаления файла неизменный флаг: sudo chattr + i / критический / каталог / или / файл
  • Используйте getfacl и setfacl для сохранения и восстановления прав доступа к файлам.
  • Например:

     getfacl -R / some / path> permissions.txt
       setfacl --restore = permissions.txt
     

Отладка системы

  • Для отладки в сети, curl и curl -I удобны, или их эквиваленты wget, или более современный httpie.
  • Чтобы узнать текущее состояние процессора / диска, классическими инструментами являются top (или лучший htop), iostat и iotop. Используйте iostat -mxz 15 для базового ЦП, а также подробную статистику дисков по разделам и анализ производительности.
  • Для получения подробной информации о подключении к сети используйте netstat и ss.
  • Для быстрого обзора того, что происходит в системе, dstat особенно полезен. Для более полного обзора с деталями используйте взгляды.
  • Чтобы узнать состояние памяти, запустите и поймите вывод free и vmstat. В частности, имейте в виду, что «кэшированное» значение - это память, которую ядро Linux хранит в качестве файлового кэша, поэтому оно эффективно учитывается в качестве «свободного» значения.
  • Отладка системы Java - это совсем другое дело, но простой подход Oracle и некоторых других JVM заключается в том, что вы можете запустить kill -3 <pid>, а также полную трассировку стека и сводку кучи (включая подробные сведения о сборке мусора поколений, которые могут быть очень сложными). информативно) будет сбрасываться в stderr / logs. Jps, jstat, jstack, jmap JDK полезны. Инструменты SJK более продвинуты.
  • Используйте mtr как лучшую трассировку для выявления проблем в сети.
  • Чтобы узнать, почему диск заполнен, ncdu экономит время по сравнению с обычными командами, такими как du -sh *.
  • Чтобы узнать, какой сокет или процесс использует пропускную способность, попробуйте iftop или nethogs.
  • Инструмент ab (поставляется с Apache) полезен для быстрой и простой проверки производительности веб-сервера. Для более сложных нагрузочных испытаний попробуйте осаду.
  • Для более серьезной отладки сети, wireshark, tshark или ngrep.
  • Знайте о strace и ltrace. Они могут быть полезны в случае сбоя, зависания или сбоя программы, и вы не знаете, почему, или если вы хотите получить общее представление о производительности. Обратите внимание на параметр профилирования (-c) и возможность присоединения к запущенному процессу (-p).
  • Знать о ldd для проверки общих библиотек и т. Д.
  • Знать, как подключиться к работающему процессу с помощью gdb и получить его трассировку стека.
  • Используйте / proc. Иногда это удивительно полезно при отладке живых проблем. Примеры: / proc / cpuinfo, / proc / meminfo, / proc / cmdline, / proc / xxx / cwd, / proc / xxx / exe, / proc / xxx / fd /, / proc / xxx / smaps (где xxx - это идентификатор процесса или pid).
  • При отладке, почему что-то пошло не так в прошлом, sar может быть очень полезным. Показывает историческую статистику по процессору, памяти, сети и т. Д.
  • Для более глубокого анализа систем и производительности посмотрите на stap (SystemTap), perf и sysdig.
  • Проверьте, в какой ОС вы используете uname или uname -a (общая информация о Unix / ядре) или lsb_release -a (информация о дистрибутиве Linux).
  • Используйте dmesg, когда что-то действительно забавно (это могут быть проблемы с оборудованием или драйверами).
  • Если вы удалили файл и он не освобождает ожидаемое место на диске, как сообщает du, проверьте, используется ли файл процессом: lsof | grep удалено | grep "filename-of-my-big-file"

Однострочники

Несколько примеров объединения команд:

  • Иногда очень полезно, чтобы вы могли установить пересечение, объединение и различие текстовых файлов с помощью sort / uniq. Предположим, что a и b являются текстовыми файлами, которые уже являются уникальными. Это быстро и работает с файлами произвольного размера, вплоть до многих гигабайт. (Сортировка не ограничена памятью, хотя вам может понадобиться использовать параметр -T, если / tmp находится на небольшом корневом разделе.) См. Также примечание о LC_ALL выше и параметр -u сортировки (опущено для ясности ниже).
  •  кот ab | сортировать | uniq> c # c является объединением b
          кот ab | сортировать | uniq -d> c # c является пересечением b
          кот abb | сортировать | uniq -u> c # c задает разницу a - b
    
  • Используйте grep. * чтобы быстро просмотреть содержимое всех файлов в каталоге (чтобы каждая строка была в паре с именем файла) или заголовок -100 * (чтобы у каждого файла был заголовок). Это может быть полезно для каталогов, заполненных настройками конфигурации, например, в / sys, / proc, / etc.
  • Суммирование всех чисел в третьем столбце текстового файла (это, вероятно, в 3 раза быстрее и в 3 раза меньше кода, чем эквивалентный Python):
  •  awk '{x + = $ 3} END {print x}' myfile
    
  • Чтобы увидеть размеры / даты в дереве файлов, это похоже на рекурсивный ls -l, но его легче читать, чем ls -lR:
  •  находить . тип f -ls
    
  • Допустим, у вас есть текстовый файл, например журнал веб-сервера, и определенное значение, отображаемое в некоторых строках, например параметр acct_id, присутствующий в URL-адресе. Если вы хотите подсчитать, сколько запросов для каждого acct_id:
  •  cat access.log | egrep -o 'acct_id = [0-9] +' | cut -d = -f2 | сортировать | uniq -c | сортировать
    
  • Для постоянного отслеживания изменений используйте watch, например, проверять изменения файлов в каталоге с помощью watch -d -n 2 'ls -rtlh | tail 'или к настройкам сети при поиске и устранении неисправностей настроек Wi-Fi с помощью watch -d -n 2 ifconfig.
  • Запустите эту функцию, чтобы получить случайный совет из этого документа (анализирует Markdown и извлекает элемент):
  •  function taocl () {
            curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
              pandoc -f markdown -t html |
              xmlstarlet fo --html --dropdtd |
              xmlstarlet sel -t -v "(html / body / ul / li [count (p)> 0]) [$ RANDOM mod last () + 1]" |
              xmlstarlet unesc | фмт-80
          }
    

Неясный, но полезный

  • expr: выполнять арифметические или логические операции или вычислять регулярные выражения
  • m4 : простой макропроцессор
  • да : печатать строку много
  • кал : хороший календарь
  • env : запустить команду (полезно в скриптах)
  • printenv : распечатывать переменные окружения (полезно при отладке и скриптах)
  • посмотрите : найдите английские слова (или строки в файле), начинающиеся со строки
  • вырезать , вставлять и объединять : манипулирование данными
  • fmt : форматировать текстовые абзацы
  • pr : форматировать текст в страницы / столбцы
  • сложить : обернуть строки текста
  • column : форматировать текстовые поля в выровненные столбцы или таблицы фиксированной ширины
  • развернуть и развернуть : конвертировать между табуляцией и пробелами
  • nl : добавить номера строк
  • seq : печать номеров
  • БК : калькулятор
  • фактор : фактор целые числа
  • gpg : шифровать и подписывать файлы
  • toe : таблица записей terminfo
  • nc : сетевая отладка и передача данных
  • socat : ретранслятор сокета и переадресация tcp-порта (аналогично netcat)
  • slurm : визуализация сетевого трафика
  • дд : перемещение данных между файлами или устройствами
  • файл : определить тип файла
  • дерево : отображать каталоги и подкаталоги в виде дерева вложенности; как ls, но рекурсивный
  • stat : информация о файле
  • время : выполнить и время команды
  • timeout : выполнить команду в течение заданного промежутка времени и остановить процесс, когда истечет заданный промежуток времени.
  • lockfile : создать файл семафора, который может быть удален только командой rm -f
  • logrotate : вращать, сжимать и отправлять логи.
  • смотреть : запустить команду несколько раз, показывая результаты и / или выделяя изменения
  • TAC : печать файлов в обратном порядке
  • shuf : случайный выбор строк из файла
  • comm : сравнить отсортированные файлы построчно
  • PV : контролировать ход данных через канал
  • hd, hexdump, xxd, biew и bvi : создавать или редактировать двоичные файлы
  • строки : извлечь текст из двоичных файлов
  • tr : перевод символов или манипулирование
  • iconv или uconv : преобразование для текстовых кодировок
  • split и csplit : разделение файлов
  • Губка : прочитать все входные данные перед записью, полезно для чтения и записи в тот же файл, например, grep -v что-то some-file | губка какая-то
  • единицы : пересчеты единиц и расчеты; преобразует фарлонги за две недели в два раза за миг (см. также /usr/share/units/definitions.units)
  • apg : генерирует случайные пароли
  • 7z : сжатие файлов с высоким коэффициентом сжатия
  • ldd : информация о динамической библиотеке
  • nm : символы из объектных файлов
  • ab : тестирование веб-серверов
  • strace : отладка системных вызовов
  • mtr : лучшая трассировка для отладки сети
  • cssh : визуальная параллельная оболочка
  • rsync : синхронизировать файлы и папки по SSH или в локальной файловой системе
  • или SSH или в локальной файловой системе
  • wireshark и tshark : захват пакетов и отладка сети
  • ngrep : grep для сетевого уровня
  • хост и копать : поиск DNS
  • lsof : дескриптор файла процесса и информация о сокете
  • dstat : полезная системная статистика
  • взгляды : высокий уровень, обзор нескольких подсистем
  • iostat : статистика использования диска
  • mpstat : статистика использования процессора
  • vmstat : статистика использования памяти
  • htop : улучшенная версия top
  • последний : история входа
  • w : кто вошел в систему
  • id : информация о пользователе / группе
  • Сар : историческая система статистики
  • iftop или nethogs : использование сети сокетом или процессом
  • ss : статистика сокетов
  • dmesg : сообщения об ошибках загрузки и системы
  • sysctl : просмотр и настройка параметров ядра Linux во время выполнения
  • hdparm : работа с дисками SATA / ATA / производительность
  • lsblk : список блочных устройств: древовидная структура ваших дисков и дисковых разделов
  • lshw, lscpu, lspci, lsusb, dmidecode : информация об оборудовании, включая ЦП, BIOS, RAID, графику, устройства и т. д.
  • lsmod и modinfo : список и подробные сведения о модулях ядра.
  • fortune , ddate и sl : гм, ну, это зависит от того, считаете ли вы паровозы и цитаты Zippy «полезными»

Только OS X

Это пункты, относящиеся только к OS X

  • Управление пакетами с помощью brew (Homebrew) и / или порта (MacPorts). Их можно использовать для установки на OS X многих из вышеперечисленных команд.
  • Скопируйте вывод любой команды в настольное приложение с помощью pbcopy и вставьте ввод из одной команды с помощью pbpaste.
  • Чтобы включить клавишу Option в OS X Terminal в качестве клавиши alt (например, используемой в приведенных выше командах, таких как alt-b, alt-f и т. Д.), Откройте «Настройки» -> «Профили» -> «Клавиатура» и выберите «Использовать опцию как мета-ключ ».
  • Чтобы открыть файл с помощью приложения для настольного компьютера, используйте open или откройте -a /Applications/Whwhat.app.
  • В центре внимания: поиск файлов с помощью mdfind и список метаданных (таких как информация EXIF для фотографий) с помощью mdls.
  • Помните, что OS X основана на BSD Unix, и многие команды (например, ps, ls, tail, awk, sed) имеют множество тонких изменений по сравнению с Linux, на которые в значительной степени влияют инструменты Unix и GNU в стиле System V. Вы часто можете заметить разницу, отметив, что страница руководства имеет заголовок «Руководство по общим командам BSD». В некоторых случаях также могут быть установлены версии GNU (например, gawk и gsed для GNU awk и sed). Если вы пишете кроссплатформенные скрипты Bash, избегайте таких команд (например, рассмотрите Python или perl) или тщательно тестируйте.
  • Чтобы получить информацию о выпуске OS X, используйте sw_vers.

Только для Windows

  • Получите доступ к возможностям оболочки Unix под Microsoft Windows, установив Cygwin. Большинство вещей, описанных в этом документе, будут работать из коробки.
  • Установите дополнительные программы Unix с помощью менеджера пакетов Cygwin.
  • Используйте mintty в качестве окна командной строки.
  • Доступ к буферу обмена Windows через / dev / clipboard.
  • Запустите cygstart, чтобы открыть произвольный файл через зарегистрированное приложение.
  • Доступ к реестру Windows с помощью regtool.
  • Обратите внимание, что путь к диску C: / Windows становится / cygdrive / c в Cygwin, и что Cygwin / появляется в C: / cygwin в Windows. Преобразование между путями к файлам Cygwin и Windows-стиля с помощью cygpath. Это наиболее полезно в сценариях, которые вызывают программы Windows.
  • Вы можете выполнять и создавать сценарии большинства задач системного администрирования Windows из командной строки, изучая и используя wmic.

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code