Как вы знаете, я люблю 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 (это от Мэтью Вейера О’Финни ). И что просмотр справочной страницы для правильной команды может сэкономить вам много работы.