Статьи

Не бойся командной строки

Как вы знаете, я люблю SSH , но я также люблю инструменты командной строки в целом.

Однако часто я вижу, как простые люди (не программисты, но даже программисты) испытывают трудности с вводом текстовых команд. Реальность такова, что Cli не должно быть боль в использовании: это верно только тогда, когда он был построен неправильно. Например, попробуйте повторить многострочные команды в mysqladmin или в оболочке Matlab; это среда, в которой боязнь повторного ввода команд оправдана.

Однако есть и прекрасные среды, где командная строка дает вам производительность, о которой вы можете только мечтать об интерфейсах point’n’click. Повторить команду на самом деле проще, чем щелкать несколько раз.

Отказ от ответственности : я использую bash в Linux. Возможно, я включаю некоторую информацию, специфичную для Ubuntu, но я думаю, что большая часть этой статьи относится к каждой Linux или даже к любой Unix-подобной системе.

Основы (вы знаете, что такое терминал, верно?)

Ваш файл .bashrc будет выполняться на каждом терминале, который вы открываете: это удобно для включения некоторого кода установки. Обычно вы не видите этот файл в графическом интерфейсе, потому что он скрыт: каждый файл, начинающийся с точки (.), Это.

Вы можете использовать команду исходного имени файла, чтобы включить другие файлы, если вы не хотите помещать все в .bashrc . С помощью ~ вы можете обратиться к своему домашнему каталогу.

Не используйте обратную косую черту : вы можете легко указать «строки с пробелами» таким образом. Это единственный разумный способ включить сообщения коммита непосредственно из командной строки вместо открытия редактора.

Команда может быть вложенной : например, вы можете просто заключить команду в кавычки и использовать ее в качестве аргумента другой команды: echo `echo Hello` .

* является подстановочным знаком : это означает, что если вы включите его в пути, каждый символ или строка будут сопоставлены на своем месте.

| это канал : он позволяет вам выбрать вывод команды и использовать ее в качестве ввода другой: echo Hello | grep привет

Вам не нужно писать команды больше, чем ноль или один раз

Давайте теперь решим проблему необходимости переписывать команды. Если вы зашли в ваш / etc / inputrc или создали файл ~ / .inputrc , вы можете поместить (или раскомментировать, если они уже есть) следующие строки:

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Теперь откройте новый терминал, и когда вы нажмете PgUp или PgDown, вы перейдете в историю с той частью команды, которую вы уже написали. Например, ec <PgUp> ищет все введенные вами команды эха.

И почему бы не использовать очень большую историю, чтобы вы могли найти ту команду, которую вы набрали в 2004 году? Включите это в ваш .bashrc:

HISTSIZE=50000

И, возможно, вы также можете указать различным терминалам, которые вы открываете, добавлять вместо того, чтобы переписывать историю друг друга.

shopt -s histappend

Теперь, когда мы можем избежать написания уже набранных команд, почему бы нам не избежать написания даже новых ?

Настройте автозаполнение, выбрав нужный файл системного уровня:

source /etc/bash_completion

если ты еще этого не делаешь. Теперь, когда вы наберете ec <Tab>, команда будет завершена, или если с ec начинается более одной команды , вам будет показан список. Работает и с путями:

cat f<Tab> 

распечатает файл, начинающийся с f . И пути обычно настраиваются для текущей программы, так что если вы наберете:

ssh D<Tab>

он также ищет хосты, имя которых начинается с буквы D, а не только файлы.

Или же:

git checkout a<Tab>

скажет вам, какие ветви начинаются с a, а не какие файлы.

Возможно, у нас очень длинные команды, поэтому давайте добавим псевдоним к чему-то простому:

alias agi='sudo apt-get install'

Теперь agi vim позволит вам установить пакет vim.

Возиться с PATH

Вы можете добавить свой собственный каталог скриптов, который будет доступен в виде команд так же, как и grep, и найдите :

PATH=$PATH:~/bin

Grep

Однако уже доступно много мощных команд. Например, grep является обязательной утилитой, которая используется для поиска текста в файлах:

cat file.txt | grep pattern

выведет все строки файла file.txt, где содержится шаблон. Простейшим шаблоном является строка, но могут быть включены регулярные выражения (строка выполняет свою работу в 90% случаев).

grep -r pattern *.txt

будет искать шаблон во всех * .txt файлах.
Другими параметрами являются -i для сопоставления без учета регистра и -l для отображения только один раз каждого файла. С помощью -n отображается номер строки, а с помощью -A и -B вы можете указать много строк, которые будут отображаться после и до совпадения (по умолчанию 0).

export GREP_OPTIONS='--color=auto'

устанавливает переменную окружения, которая содержит опции для автоматической передачи в grep. Цвета полезны для определения, в какой точке линии произошло совпадение.

находить

find используется вместо поиска файлов вместо текста.

find -name pattern path

найдет все файлы в пути, имена которых соответствуют шаблону . Пример шаблона может быть * .txt . Команда рекурсивная.

find также может выполнить команду для каждого найденного элемента:

find . -type d -exec rmdir {} \;

удалит каждый найденный каталог ( -типа d ), передав его в rmdir . {} является заполнителем для элементов.

Комбинация find и grep или других команд часто очень удобна для передачи IDE и анализа вашего кода из командной строки:

grep -r 'function(' `find -name *.c directory`

найдет каждую строку в * .c файлах, где вы вызываете функцию ().

history | grep 'git commit'

расскажет вам все коммиты, сделанные из этой оболочки.

history | grep 'git commit' | tail -n 3

вместо этого покажет вам последние 3 команды коммита. Git, конечно, даст вам лучший журнал событий, но этот подход применим к любой команде, от cat до ssh.

Вывод

Я хотел также включить немного awk, но эта статья становится длиннее.

Просто помните о силе простого текста (как говорят программисты Pragmatic ) и о том, что Unix может быть вашей IDE (это от Мэтью Вейера О’Финни ). И что просмотр справочной страницы для правильной команды может сэкономить вам много работы.