Пройдитесь по /usr/bin
большинства систем Linux или macOS, и вы найдете сотни, если не тысячи, предлагаемых команд. Количество доступных опций кому угодно вскружит голову. И хотя не все из них подходят для повседневного использования, большинство же весьма полезны, а некоторые так просто бесценны.
Если подсчитать количество команд, доступных при установке Debian 10 (Buster) с нуля, то результат превысит 2 000 (можете сами ознакомиться с их перечнем, выполнив compgen -c
). Потребуются годы, чтобы прошерстить такую гору опций и освоить их все. К счастью, делать этого не придется.
В статье мы рассмотрим набор из 6 наиболее интересных и эффективных команд. Добавив их в свой арсенал, вы без преувеличения станете мастером продуктивности.
Вперед к новым знаниям!
1. cmp для сравнения файлов и выявления их отличий
cmp <file1> <file2>
Допустим, у вас есть 2 текстовых файла, каждый из которых содержит несколько простых строк:
file1.txt file2.txt
-------- --------
line1 line1
line2 line2
line4 line3
Если вы не намерены открывать файлы и обследовать их на предмет отличающихся строк, то можно воспользоваться cmp
для быстрого выявления любых имеющихся в них расхождений.
При передаче команды cmp file1.txt file2.txt
видим следующий результат:
file1.txt file2.txt differ: char 17, line 3
И таким образом быстро получаем точную информацию о месте расхождения файлов по строке и номеру символа. Эта довольно эффективная команда позволяет проводить сравнение по ходу работы. Вы можете проверить базовую валидность задания копирования, удостоверившись в идентичности файлов или отследить ошибки в коде, сравнив несколько исходных файлов и выявив места их отличий.
2. comm для поиска общих строк в файлах
comm <file1> <file2>
В противоположность cmp
, определяющей отличающиеся строки, команда comm
ищет похожие. С ее помощью вы можете выявить общие строки для двух файлов.
Воспользуемся теми же файлами из предыдущего примера и посмотрим команду comm
в действии:
file1.txt file2.txt
-------- --------
line1 line1
line2 line2
line4 line3
При выполнении comm file1.txt file2.txt
получаем результат:
line1
line2
line3
line4
На первый взгляд вывод может показаться слегка непонятным, но он лишь демонстрирует три отдельных столбца результатов:
- Первый столбец содержит строки из первого входного файла.
- Второй столбец включает строки соответственно из второго.
- В последнем отображены общие строки для обоих файлов.
С помощью данной команды можно быстро определить файлы с одинаковыми строками. Она пригодится для поиска переменных, определенных в нескольких файлах, или выявления дублирующихся записей в ряде текстовых выводов.
Передача флага -i
команде comm
позволит не учитывать регистр.
3. ssh-keyscan для предварительной загрузки достоверных ключей SSH
ssh-keyscan <hostname> >> ~/.ssh/known_hosts
Сколько раз при подключении к новому компьютеру вы получали стандартное предупреждение — “Подлинность хоста <foo> не может быть установлена. Вы уверены, что хотите продолжить соединение?”:
"The authenticity of host <foo> can't be established.Are you sure you want to continue connecting? (yes/no)?"
При подключении к хостам, подлинность которых уже известна (из внутренней сети или общедоступного сервиса, например GitHub), такое сообщение особо ни от чего не защищает.
В большинстве случаев не успеваешь произнести “уязвимость защиты”, как пользователи вводят “да”. Возможно ли сократить число появлений этого сообщения при подключении к нескольким хостам? Да!
Команда ssh-keyscan
позволяет просканировать определенный хост или список хостов на наличие открытых ключей SSH и добавить их в файл known_hosts
. Теперь подключение к выбранному хосту не приведет к появлению сообщения, поскольку ключ уже будет находиться в файле known_hosts
. Для примера отсканируем GitLab на наличие ключей и автоматически их добавим:
ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
Теперь вы можете подключаться по SSH к общедоступным хостам GitLab без напоминания о добавлении ключей перед продолжением работы.
4. script для записи лога терминальной сессии
script <filename>
Доводилось ли вам работать над чем-то сложным или обескураживающим в терминальной сессии? А не возникало ли у вас в связи с этим желания автоматически сохранить все выводы для последующего использования? Команда script
предназначена как раз для данных целей.
Эта простая программа изначально была создана для студентов. Она позволяла сохранять логи всей проделанной работы, по которым можно было отследить способы достижения решений. Однако ее применение не ограничилось только академическими целями.
Я использовал script
для сохранения логов во время особо важных операций, в которых требовалось дополнительно удостовериться в выполнении конкретной команды. Она также послужила простейшим способом логирования определенных пользовательских сеансов для последующих проверок безопасности.
5. jot для генерации тестовых данных
jot <number>
В случае потребности в неограниченных количествах произвольных или последовательных данных используйте jot
. Эта эффективная и очень простая команда позволяет генерировать масштабный список чисел и создавать довольно большой вывод данных.
С помощью jot
можно создавать последовательные наборы чисел, строк, байтов или просто выводить случайные данные. В данном примере команда генерирует список последовательных чисел от 1 до 100:
jot 1001
2
...
100
Как видим, все действительно просто. Как насчет случайных чисел?
jot -r 10019
27
...
49
А больших длинных строк?
jot -s abc 1001abc2abc3abc4abc5abc6abc7abc8abc9abc10abc11abc12abc13abc14abc15abc16abc17abc18abc19abc20abc21abc22abc23abc24abc25abc26abc27abc28abc29abc30abc31abc32abc33abc34abc35abc36abc37abc38abc39abc40abc41abc42abc43abc44abc45abc46abc47abc48abc49abc50abc51abc52abc53abc54abc55abc56abc57abc58abc59abc60abc61abc62abc63abc64abc65abc66abc67abc68abc69abc70abc71abc72abc73abc74abc75abc76abc77abc78abc79abc80abc81abc82abc83abc84abc85abc86abc87abc88abc89abc90abc91abc92abc93abc94abc95abc96abc97abc98abc99abc100
Помимо того, что эта команда быстрая, так она намного проще всех остальных, которые я применял для быстрой генерации простых тестовых данных.
6. iptab для быстрого получения сетевых данных
iptab
Я не мог поверить, что упустил iptab
из виду. Она чрезвычайно проста, но невероятно эффективна в тех случаях, когда вы поспешно вносите сетевые изменения. Выполнение команды iptab
без аргументов отобразит справочную таблицу масок подсетей и другую информацию о пространстве IP-адресов:
+----------------------------------------------+
| addrs bits pref class mask |
+----------------------------------------------+
| 1 0 /32 255.255.255.255 |
| 2 1 /31 255.255.255.254 |
| 4 2 /30 255.255.255.252 |
| 8 3 /29 255.255.255.248 |
| 16 4 /28 255.255.255.240 |
| 32 5 /27 255.255.255.224 |
| 64 6 /26 255.255.255.192 |
| 128 7 /25 255.255.255.128 |
| 256 8 /24 1C 255.255.255.0 |
| 512 9 /23 2C 255.255.254.0 |
| 1K 10 /22 4C 255.255.252.0 |
| 2K 11 /21 8C 255.255.248.0 |
| 4K 12 /20 16C 255.255.240.0 |
| 8K 13 /19 32C 255.255.224.0 |
| 16K 14 /18 64C 255.255.192.0 |
| 32K 15 /17 128C 255.255.128.0 |
| 64K 16 /16 1B 255.255.0.0 |
| 128K 17 /15 2B 255.254.0.0 |
| 256K 18 /14 4B 255.252.0.0 |
| 512K 19 /13 8B 255.248.0.0 |
| 1M 20 /12 16B 255.240.0.0 |
| 2M 21 /11 32B 255.224.0.0 |
| 4M 22 /10 64B 255.192.0.0 |
| 8M 23 /9 128B 255.128.0.0 |
| 16M 24 /8 1A 255.0.0.0 |
| 32M 25 /7 2A 254.0.0.0 |
| 64M 26 /6 4A 252.0.0.0 |
| 128M 27 /5 8A 248.0.0.0 |
| 256M 28 /4 16A 240.0.0.0 |
| 512M 29 /3 32A 224.0.0.0 |
| 1024M 30 /2 64A 192.0.0.0 |
| 2048M 31 /1 128A 128.0.0.0 |
| 4096M 32 /0 256A 0.0.0.0 |
+----------------------------------------------+
Для данной команды не предусмотрены аргументы — просто таблица, к которой можно обратиться и затем вернуться к внесению важных сетевых изменений.
Обзор 6 обещанных команд завершен. Благодарю за внимание!
Читайте также:
- Минималистичная конфигурация терминала с возможностью тонкой настройки
- Пять шагов к красивому терминалу, которым вам понравится пользоваться
- 6 команд терминала для раздражающих задач
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Tate Galbraith: 6 More Terminal Commands You Should Know