6 супер команд терминала, или как стать мастером продуктивности

Пройдитесь по /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 обещанных команд завершен. Благодарю за внимание! 

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Tate Galbraith: 6 More Terminal Commands You Should Know

Предыдущая статьяСоздаем темный режим, используя React и Styled Components
Следующая статьяОдин за всех и все за одного: 8 принципов командной разработки