Тема полезных приёмов работы в терминале Linux неисчерпаема. Казалось бы — всё устроено очень просто: приглашение оболочки, да введённые с клавиатуры команды. Однако, в этой простоте кроется бездна неочевидных, но полезных возможностей. Именно поэтому мы регулярно публикуем материалы, посвящённые особенностям работы в командной строке Linux. В частности, сегодня это будет перевод статьи, автор которой увлечён экономией времени через повышение продуктивности труда.



Если вас интересует работа в командной строке Linux — вот некоторые из наших материалов на эту тему:


Приёмы работы в командной строке Linux и экономия времени


Вам когда-нибудь доводилось видеть, как коллега использует некие простые команды Linux для решения задач, решение которых занимает у вас несколько строк? Должно быть, когда подобное случалось, вы только и могли сказать себе: «Ну ничего ж себе! Я и не знал, что это можно сделать так просто».

В этом материале я покажу вам некоторые профессиональные приёмы работы в командной строке Linux, которые сэкономят вам уйму времени и в некоторых случаях избавят от плохого настроения. Мало того, что ваши друзья или коллеги скажут: «Ну надо же!», глядя на вас. Эти приёмы, кроме того, помогут вам увеличить личную продуктивность, так как вам понадобится вводить меньше команд и даже делать меньше щелчков мышью.

Нельзя сказать, что эти советы по Linux предназначены только для начинающих. Вполне возможно, что даже опытные пользователи найдут здесь что-нибудь полезное, то, о чём они не знали несмотря на то, что пользовались Linux многие годы. Linux изучают на основе опыта. Тут сгодится и собственный опыт, и опыт других людей.

Прежде чем мы начнём, хочется отметить, что некоторые из приведённых здесь методов зависят от настройки командной оболочки.

0. Автозавершение команд с использованием клавиши Tab


Я начну с кое-чего вполне очевидного, но весьма важного: с автозавершения команд с помощью клавиши Tab.

Когда вы начинаете набирать что-то в терминале Linux, вы можете нажать клавишу Tab, после чего будет выведена подсказка, содержащая набор вариантов продолжения ввода, начинающихся с только что введённых символов.

Например, собираясь скопировать файл с именем my_best_file_1.txt, вы можете просто ввести cp m и нажать Tab для того, чтобы увидеть возможные варианты продолжения команды.


Использование клавиши Tab для автозавершения ввода

Клавишу Tab можно использовать и для автозавершения команд.

1. Переход в последнюю рабочую директорию


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

cd -

Она позволит вам оказаться в последней рабочей директории. Теперь в подобных ситуациях вам не нужно больше будет вводить длинные пути, или пользоваться копированием и вставкой.


Простое переключение между директориями

2. Возврат в домашнюю директорию


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

cd ~

Однако, в домашнюю директорию можно вернуться ещё быстрее — с помощью команды cd.

В большинстве современных дистрибутивов Linux оболочка предварительно настроена на именно такое восприятие команды cd. Это сэкономит вам пару нажатий клавиш на клавиатуре.


Самый быстрый способ перехода в домашнюю директорию

3. Вывод на экран содержимого директории


Возможно, вы зададитесь вопросом о том, в чём состоит тонкость использования команды для вывода содержимого директории. Все знают, что для этой цели служит команда ls -l.

Но в том-то всё и дело. Практически все используют команду ls -l для вывода содержимого директорий, в то время как то же самое можно сделать с помощью следующей команды:

ll

Работоспособность этой команды зависит от дистрибутива Linux и от настройки оболочки, но весьма вероятно, что вы сможете воспользоваться ей в большинстве дистрибутивов.


Использование команды ll вместо команды ls -l

4. Вызов нескольких команд в одной строке


Представьте, что вам нужно последовательно выполнить несколько команд. Наверное, вы вводите одну команду, потом ждёте, когда она завершится, дальше — вводите следующую?

В подобной ситуации полезным окажется разделитель команд ; (точка с запятой). При таком подходе вы можете ввести несколько команд в одной строке. При этом, в отличие от обычного ввода команд, для выполнения следующей команды не надо ждать завершения предыдущей.

command_1; command_2; command_3

5. Выполнение нескольких команд в одной строке и условие на успешное завершение предыдущей команды


Только что мы рассмотрели способ вызова нескольких команд в одной строке. Это экономит время. Но что если вам нужно, скажем, при вызове двух команд, чтобы следующая команда была выполнена только в том случае, если предыдущая завершится без ошибок?

Представьте себе, что хотите собрать код, а затем, если сборка оказалась успешной, вызвать make?

В подобной ситуации можно использовать разделитель &&. Этот разделитель позволяет гарантировать то, что следующая команда будет выполнена лишь в том случае, если предыдущая отработает успешно.

command_1 && command_2

Вот хороший пример использования &&:

sudo apt update && sudo apt upgrade

6. Простой поиск и использование ранее введённых команд


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

В подобной ситуации вас спасёт обратный поиск. Данная методика позволяет проводить поиск в истории команд по ключевому слову. Тут достаточно использовать комбинацию клавиш Ctrl + R для запуска обратного поиска и ввести что-то, имеющее отношение к команде. Система просмотрит историю команд и покажет команды, соответствующие введённому запросу.

Ctrl + R search_term

По умолчанию показан будет лишь один результат. Для того, чтобы увидеть больше результатов, соответствующих запросу, вам понадобится использовать комбинацию клавиш Ctrl + R снова и снова. Для того, чтобы выйти из режима обратного поиска, нажмите Ctrl + C.


Обратный поиск по истории команд

Обратите внимание на то, что в некоторых оболочках Bash для перебора результатов поиска можно пользоваться клавишами Page Up и Page Down.

7. Разблокировка терминала после случайного нажатия Ctrl + S


Возможно, вы привыкли пользоваться комбинацией клавиш Ctrl + S для сохранения файлов. Но если нажать эти клавиши в терминале Linux, вы его заблокируете.

Если раньше вы, для того, чтобы исправить положение, вынуждены были закрывать и снова запускать терминал — теперь может вздохнуть спокойно, больше вам этого делать не придётся. Для того, чтобы привести терминал в рабочее состояние, просто воспользуйтесь комбинацией клавиш Ctrl + Q.

8. Перемещение к началу или концу строки


Представьте себе, что вы вводите длинную команду и где-нибудь посередине понимаете, что должны что-нибудь изменить в её начале. Вероятно, вы используете клавиши-стрелки для того, чтобы сначала переместиться в начало строки, а потом вернуться в конец.

Конечно, в подобной ситуации можно использовать клавиши Home и End, но, как вариант, с помощью комбинации клавиш Ctrl + A можно перейти в начало строки, а с помощью комбинации Ctrl + E — в конец.


Перемещение к началу или концу строки

Мне такой способ кажется удобнее, чем использование клавиш Home и End, особенно когда я работаю на ноутбуке.

9. Чтение лог-файлов в режиме реального времени


Когда вам нужно проанализировать файлы журналов, в которые, во время анализа, пишет данные какое-нибудь работающее приложение, вы можете использовать команду tail с опцией -f.

tail -f path_to_Log

Кроме того, вы можете использовать команду grep в её обычном виде для отображения только тех строк, которые вас интересуют:

tail -f path_to_log | grep search_term

Также тут можно задействовать опцию F. Это приведёт к тому, что утилита tail продолжит работать даже в том случае, если просматриваемый лог-файл будет удалён. При таком подходе, если этот файл снова будет создан, tail продолжит выводить данные из него на экран.

10. Чтение сжатых лог-файлов без их распаковки


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

Тут нам на помощью приходит группа команд, имя которых начинается с буквы «z». Эти команды являются альтернативой обычным командам, которые используются для работы с файлами журналов. Среди них — less, cat, grep, и другие.

Итак, используя команды zless, zcat, zgrep и подобные им, вам не придётся явным образом распаковывать сжатые файлы. Подробности об этих командах можно посмотреть здесь.

Кстати, когда я рассказал об этих «секретных» командах коллеге, мне досталась чашка кофе.

11. Использование команды less для чтения файлов


Если вам нужно просмотреть файл, особенно — большой, можно попробовать команду cat, но гораздо лучше поискать что-нибудь другое. Дело в том, что cat выведет на экран весь файл, что не так уж и удобно.

Для просмотра файлов можно воспользоваться редакторами вроде Vi или Vim, работающими в терминале, но если вам просто нужно прочесть файл, очень кстати окажется команда less.

less path_to_file

Во время сеанса работы с less можно искать нужные фрагменты текста по ключевым словам, перемещаться по страницам, выводить данные с номерами строк, и так далее.

12. Повторное использование последнего элемента из предыдущей команды с помощью !$


Во многих ситуациях очень кстати оказывается возможность использования аргумента предыдущей команды.

Предположим, вам нужно создать директорию, а потом в неё перейти. Тут можно воспользоваться опцией !$, вводя команду перехода после команды создания директории.


Применение !$ для использования аргумента последней команды

Ещё лучше то же самое делается с помощью сочетания клавиш Alt +. (точка). Точку можно использовать несколько раз для перебора опций последней команды.

13. Использование предыдущей команды в текущей команде с помощью !!


С помощью !! можно вызвать всю предыдущую команду. Этот приём оказывается особенно полезным, когда вам нужно выполнить команду и оказывается, что для её выполнения нужны привилегии суперпользователя. Например, на рисунке ниже показана ситуация, в которой команда sudo !! позволяет сэкономить немало времени.


Воспользуйтесь!!! для подстановки последней команды в качестве аргумента

14. Использование псевдонимов для исправления ошибок ввода


Возможно, вы уже знакомы с командой alias. Её можно использовать для исправления ошибок во введённых командах.

Например, может случиться так, что вы часто вводите gerp вместо grep. Если с вредной привычкой справиться никак не удаётся, запишите псевдоним в свой файл bashrc следующим образом:

alias gerp=grep

Теперь вам не придётся перенабирать эту команду если вы введёте её имя неправильно.

15. Копирование и вставка в терминале Linux


Этот совет несколько неоднозначен, так как он зависит от дистрибутива Linux и от терминала.

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

  • Выделите текст, который надо скопировать, и щёлкните правой кнопкой мыши для его вставки (работает в Putty и других SSH-клиентах для Windows).
  • Выделите текст, который надо скопировать, после чего щёлкните центральной кнопкой мыши (колесом прокрутки) для того, чтобы его вставить.
  • Используйте комбинации клавиш Ctrl + Shift + C для копирования, и Ctrl + Shift + V для вставки.

16. Завершение работы команды или процесса


Возможно, то, что я тут хочу посоветовать, совершенно очевидно, однако, всё равно об этом расскажу. Если команда выполняется на переднем плане и вы хотите из неё выйти, можете нажать клавиши Ctrl + C для того, чтобы её остановить.

17. Использование команды yes для автоматизации интерактивных команд или скриптов


Если вам приходится работать с некоторыми командами или скриптами, которые предусматривают взаимодействие с пользователем, и вы знаете, что будете вводить Y в ответ на каждый вопрос программы, можете автоматизировать этот процесс с помощью команды yes. Делается это так:

yes | command_or_script

18. Очистка содержимого файла без удаления самого файла


Если вы хотите очистить содержимое текстового файла, не удаляя сам файл, можете использовать следующую команду:

 > filename

19. Выяснение наличия в директории файлов, содержащих определённый текст


Командная строка Linux поддерживает множество способов поиска информации. Однако, если вам просто нужно узнать, имеются ли в некоей директории файлы, которые содержат определённый текст, вы можете воспользоваться такой командой:

grep -Pri Search_Term path_to_directory

Однако я советую всем, кому нужен поиск в Linux, разобраться как следует с командой find.

20. Вызов справки для любой команды


Хочу завершить этот материал одним весьма очевидным, но, тем не менее, очень важным «трюком», который заключается в вызове справки для команды или инструмента командной строки.

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

command_tool --help

Итоги: делитесь полезными советами!


Я намеренно не включил в этот материал команды вроде fuck, так как они не из тех стандартных средств, которые можно найти буквально повсюду. То, о чём я тут рассказал, может принести пользу при работе практически со всеми дистрибутивами Linux и оболочками командной строки без необходимости установки новых программ.

Уважаемые читатели! Возможно, вы уже знакомы с некоторыми из приведённых здесь методов использования команд Linux, а может и знаете их все. В любом случае, приглашаем вас поделиться вашими любимыми приёмами в комментариях.

Комментарии (81)


  1. maxpy
    11.10.2017 12:23

    18. Очистка содержимого файла без удаления самого файла

    для этих целей я использую «echo > filename»

    Если вы хотите очистить содержимое текстового файла, не удаляя сам файл, можете использовать следующую команду:

    filename

    я такой команды в CentOS 6 и 7 не нашел.


    1. UrsusMaritimus
      11.10.2017 12:38

      В Ubuntu 16.04 тоже нет. Нужно ставить пакет wcstools


    1. vvpoloskin
      11.10.2017 12:41

      Лайфхак
      : > filename


      1. ru_vds Автор
        11.10.2017 13:28

        Исправили, спасибо.


    1. youROCK
      11.10.2017 13:47
      +2

      Проблема с echo заключается в том, что полученный файл будет не пустым. Нужно либо писать echo -n >filename (linux) либо что-то вроде echo -e '\e' >filename, если у вас не bash, и просто :>filename в баше. На FreeBSD есть отдельная команда truncate, вроде как


      1. MadLord
        12.10.2017 05:55

        cat > filename
        Ctrl + D


    1. resetme
      11.10.2017 15:10
      +5

      18. Очистка содержимого файла без удаления самого файла

      для этих целей я использую «echo > filename»


      Продвинутые админы используют:

      truncate -s 0 filename


    1. MasMaX
      12.10.2017 14:54

      Я делаю проще «cat /dev/null > filename»


    1. j_wayne
      12.10.2017 15:29

      deleted


  1. Vidog
    11.10.2017 12:37
    +2

    12. Повторное использование последнего элемента из предыдущей команды с помощью !$

    Еще можно нажатие Alt +. (точка)

    18. Очистка содержимого файла без удаления самого файла

    Можно просто
    >filename


  1. mrobespierre
    11.10.2017 12:48
    +2

    yes |

    выводит y, но выводить можно всё что угодно, например:
    yes yes |

    yes n |


  1. 404
    11.10.2017 13:04
    +12

    ll — это не команда, а алиас к ls -l. Чуть больше рассказать про алиасы было бы многократно полезнее, чем рассказать про ll, который не предустановлен во многих дистрибутивах.


    1. Butylkus
      12.10.2017 18:15

      Плюсанул бы, да не умею… Это чуть ли не первый урок от MagPi в книге Bash Essentials — упростим себе жизнь, раскомментировав этот алиас в .bashrc. А ещё доступен аж целый la!


  1. myxo
    11.10.2017 13:05
    +27

    все-таки стоило назвать статью 20 приемов… для самых новичков.


    1. immaculate
      11.10.2017 13:14
      +2

      Тоже ожидал увидеть что-то новое, а на самом деле компиляция элементарных приемов, которым уже 20+ лет, и которые бесчисленное количество раз тиражировались начиная с Linux HOWTOs (кто еще помнит такие) и первых Linux журналов.


      1. saboteur_kiev
        12.10.2017 13:25

        Попробуйте посмотреть новое здесь


    1. saboteur_kiev
      11.10.2017 14:08
      +1

      Причем с грубыми ошибками в статье!


  1. KorP
    11.10.2017 13:37

    Интересно, сколько раз тут эти «20 мега приёмов» уже повторяют за все эти годы? Раз 20, не меньше, наверное.


  1. questor
    11.10.2017 13:37

    Когда выдают экономию в один-два символа в команде cd за прием, который сэкономит уйму времени — мне хочется плакать. Вот подстановка имени файла по табу экономит много больше усилий и это реально качественный скачок на иной уровень.


  1. youROCK
    11.10.2017 13:49
    +2

    Автор, где хардкор? Ну и часть советов вообще скорее вредные, например про!!! — очень частый паттерн это писать sudo !!, но вы при этом не видите, какую команду будете исполнять, и злоупотребление этой командой может привестм к печальным последствиям. Ну и не слова про fish, тоже обидно.


    1. Sirikid
      11.10.2017 16:26
      +1

      Смиритесь, нет оболочек кроме bash и RUVDS пророки его.


    1. stat1c_void
      11.10.2017 17:44
      +1

      Как насчет: sudo !!<tab>, прочитать, а потом только запускать


      1. brestows
        11.10.2017 21:11
        +2

        тогда уж проще просто нажать: вверх ->ctrl+a и добавить sudo. но это как по мне.


  1. saboteur_kiev
    11.10.2017 14:04
    +1

    cd ~


    Потому что это указание на домашнюю папку пользователя.
    ~ без имени пользователя = текущий пользователь.
    А вот cd ~user1 — зайти в домашнюю папку user1, например /home/user1 (или что у него прописано в /etc/passwd)


  1. saboteur_kiev
    11.10.2017 14:06

    «В подобной ситуации полезным окажется разделитель команд; (точка с запятой). При таком подходе вы можете ввести несколько команд в одной строке. При этом, в отличие от обычного ввода команд, для выполнения следующей команды не надо ждать завершения предыдущей.
    command_1; command_2; command_3»


    Неверно. команды будут выполняться последовательно, после завершения предыдущей.
    Они же не в фоне запускаются (& в конце)


    1. F0iL
      11.10.2017 14:55
      +1

      Так автор выше и написал, "… нужно последовательно выполнить несколько команд".
      «Не надо ждать завершения предыдущий» — скорее всего, имелось в виду «не надо ждать завершения предыдущей, чтобы ввести и нажать Enter для выполнения следущей»


      1. saboteur_kiev
        11.10.2017 15:58

        Ну в цитате указано, что не для ввода, а для «выполнения следующей команды», вроде как однозначно…


  1. pmcode
    11.10.2017 14:23
    +1

    достаточно использовать комбинацию клавиш Ctrl + R для запуска обратного поиска и ввести что-то, имеющее отношение к команде

    Есть ли какой-то способ допилить этот поиск, чтобы можно было перемещаться по результатам стрелочками? Каждый раз обламываюсь, и в итоге делаю history | grep + copy/paste :( Очень неинтуитивно. Максимально круто было бы иметь какую-нибудь функцию для zsh, чтобы не скроллить по одному результату, а просто выбрать из списка.


    1. Crandel
      11.10.2017 14:29

      For zsh


      [[ -n "$key[Up]"   ]] && bindkey -- "$key[Up]"   up-line-or-beginning-search
      [[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search
      bindkey "^[[1;5A" history-substring-search-up
      bindkey "^[[1;5B" history-substring-search-down


    1. n0dwis
      11.10.2017 14:51
      +2

      Нужно просто ещё раз Ctrl+R нажать и подставится предыдущее вхождение.


    1. fat_and_angry
      11.10.2017 15:36

      "\e[A":history-search-backward
      "\e[B":history-search-forward


      в .inputrc для bash


    1. ShturmanGolden
      12.10.2017 08:10

      fzf же!
      Скачать и добавить строчку в .bashrc:

      [ -f ~/.fzf.bash ] && source ~/.fzf.bash


  1. kbu
    11.10.2017 14:44

    Для пункта №9. Логи удобно будет просмтривать вот так:

    tail -f /var/log/file.log | ccze -A


  1. MetaDone
    11.10.2017 15:29

    apt-get moo

    как про это могли забыть?


    1. OPECT
      12.10.2017 08:10

      :~$ telnet towel.blinkenlights.nl


  1. kbu
    11.10.2017 15:30

    Как всегда комментарии полезней самой статьи


  1. youROCK
    11.10.2017 16:32
    +2

    А ещё, если вы делаете tail -f ... | grep onething | awk '{print $1}', то по умолчанию буферизация будет блочная у grep и вы будете видеть результаты большой задержкой. Чтобы всё же вернуть построчную буферизацию, нужно указать grep дополнительный --line-buffered:


    tail -f ... | grep --line-buffered onething | awk '{print $1}'


  1. domix32
    11.10.2017 16:55

    Не все так просто с завершением программ
    $ python
    #тычем CTRL+C
    >>> 
    KeyboardInterrupt
    >>> 
    KeyboardInterrupt
    #CTRL+D
    $
    $ bc
    #тычем CTRL+C
    (interrupt) use quit to exit.
    ^C
    (interrupt) use quit to exit.
    ^C
    (interrupt) use quit to exit.
    ^C
    (interrupt) use quit to exit.
    ^C
    quit
    $
    

    И это не единственные примеры, насколько я знаю.


    1. Sirikid
      11.10.2017 17:45

      Примеры абсолютно корректной обработки сигналов?


    1. youROCK
      11.10.2017 17:47
      +1

      Ага, из telnet так вообще надо выходить путем ввода Ctrl+] и только потом quit :). А из SSH ещё круче: ~. (тильда точка)
      Причём если вы подключились по SSH, а оттуда ещё по SSH и хотите завершить вложенный SSH, то надо вводить ~~.
      Если подключились 2 раза по SSH, то ~~~~. и так далее :).


      1. Crandel
        11.10.2017 17:51

        Все время выхожу из ssh через Ctrl + D. ЧЯДНТ?


        1. youROCK
          11.10.2017 17:55

          Речь про зависший SSH, когда хост по какой-то причине не реагирует на ввод (Ctrl+D обрабатывается удаленной стороной).


          1. Crandel
            11.10.2017 18:00

            Ааа, никогда еще не сталкивался с этим, буду знать, спасибо


            1. saboteur_kiev
              11.10.2017 19:54
              -1

              rsh / remsh спасает


      1. stat1c_void
        11.10.2017 18:03

        Про ssh: если совсем точно, то <enter>~.
        Если в момент пропадания связи набирались символы, то без enter-а не выйдет


        1. youROCK
          11.10.2017 18:04

          Да, возможно вы правы. Лично для меня на самом деле важнее тот факт, что это вообще можно сделать, и в man ssh написано, как именно. Потому что мне кажется, что многие просто вкладку закрывают и всё.


      1. Meklon
        13.10.2017 13:50

        А exit не спасает?


        1. saboteur_kiev
          13.10.2017 17:30

          Если вы уже подключились — не факт, что на той стороне exit что-то означает =)


    1. Butylkus
      12.10.2017 18:23

      У питона свой дзен. Есть только один правильный способ сделать это, и это sys.exit(shota)..
      Причин тому много и самая очевидная — многопоточность скрипт, а потоки с в неизвестном месте обрывать ну очень плохая идея.


      1. domix32
        13.10.2017 00:16

        Собственно суть. Ничто не мешает устроить свой собственный дзен


  1. SakuradaJun
    11.10.2017 16:55

    11. Использование команды less для чтения файлов

    Протестировал только что, в отличие от more после нажатия q выведенный кусок файла пропадает из консоли. More удобнее, можно просто прокрутить терминал назад и снова увидеть нужный кусок файла. Такое бывает нужно.
    Конечно, less позволяет сразу редактировать, но если в дистре есть less то есть и nano или mcedit которые для редактирования удобнее.
    15. Копирование и вставка в терминале Linux

    Более того, можно и enter скопировать, сместив во время выделения курсор в начало следующей строки.


    1. saboteur_kiev
      11.10.2017 17:31

      less позволяет ПРОСОТ бегать назад, и прокручивать нужно не терминал, а сам текст в less.
      Less также позволяет выполнять поиск назад, а не только вперед, фильтр строк и многое другое.
      А more — просто постраничный вывод вперед, с возможностью поиска только вперед. И с автоматическим выходом по окончании файла


    1. youROCK
      11.10.2017 17:49

      А ещё в less можно уже после открытия файла выключить word-wrap путем нажатия -S<Enter> (минус S, и потом Enter). Позволяет удобно просматривать
      логи с длинными строками.


  1. youROCK
    11.10.2017 18:07
    +2

    Если терминал «испортился» и показывает странные символы, то его зачастую можно починить, набрав <Enter>reset<Enter> (на самом деле просто выполнить команду reset) — у терминала на самом деле есть 2 «раскладки» и это использовалось задолго до изобретения UTF-8 для того, чтобы рисовать псевдографику. Команда reset сбрасывает терминал близко к оригинальным настройкам и зачастую может «починить» терминал, который «сошел с ума».


    1. saboteur_kiev
      12.10.2017 10:28
      +1

      не только раскладки. Есть еще просто ESC-последовательности, которые управляют цветом. То есть сделав cat какого-нить бинарника, можно оказаться в ситуации, когда печатаешь черным по черному, или вырвиглазным мигающим по ярко красному, с шириной экрана 10 символов.
      Тоже reset спасает.


  1. Shilishper
    11.10.2017 18:14
    -1

    Вставить — Shift+Insert (gnome-terminal)


  1. soomrack
    11.10.2017 19:48

    Еще очень полезная утилита — parallel


    1. youROCK
      11.10.2017 20:40

      Честно говоря, никогда не понимал, как утилита на Perl может помогать обрабатывать данные быстрее за счет параллелизации. Xargs на больших объёмах (иначе зачем вам использовать параллельную обработку) должен быть значительно быстрее, я не прав?


      1. soomrack
        11.10.2017 21:13

        Суть не в быстрее, а в «параллельно». Нужно слить 100+ страниц для теста по базе урлов, или прогнать моделирование на 100+ входных данных...,
        то вместо того, чтобы вручную что-то придумывать, просто запускаем скрипт через parallel.


  1. zirf
    11.10.2017 21:39

    Э-э-э. В п 3 помянута команда ll, которая в Debian-based дистрибутивах как раз элиас в .bashrc alias ll="ls -alF". Но сами элиасы отнесены аж в п 14.


  1. VJean
    12.10.2017 00:19

    0. Нужен установленный bash-complection. Который частенько отсутствует на ВДСках, разворачиваемых из контейнеров.


    1. saboteur_kiev
      12.10.2017 10:30

      *completion


  1. MadLord
    12.10.2017 05:59

    с помощью комбинации клавиш Ctrl + A можно перейти в начало строки, а с помощью комбинации Ctrl + E — в конец.

    да, удобная вещь, когда в Putty (в mc) Home и End не работают…


    1. youROCK
      12.10.2017 11:13

      Не поверите, на некоторых клавиатурах таких кнопок вообще нет :). И pgup/pgdown тоже.


  1. eltardowut
    12.10.2017 08:10

    А вместо tail -f filename.ext можно использовать tailf filename.ext


  1. jakshi
    12.10.2017 08:10

    Когда надо вспомнить как сделать распространенное действие с какой либо утилитой командной строки, очень помогает cheat: github.com/chrisallenlane/cheat


  1. KoMePcAHT
    12.10.2017 08:10

    Если команда выполняется на переднем плане и вы хотите из неё выйти, можете нажать клавиши Ctrl + C для того, чтобы её остановить.

    Ctrl-C отправляет SIGINT сигнал, который вызывает завершение процесса.
    Ctrl-Z отправляет SIGTSTP сигнал, который приостанавливает выполнение процесса. Продолжить выполнение можно командой fg (от foreground)


    1. Evgen52
      12.10.2017 10:19

      … и bg (background), чтобы продолжить выполнение в фоне.


      1. saboteur_kiev
        12.10.2017 10:32

        или kill -n 18


        1. ogost
          12.10.2017 12:54

          jobs — узнать список таких задач, «поставленных на паузу» или отправленных в бэкграунд.


  1. rusnasonov
    12.10.2017 12:54

    14. Использование псевдонимов для исправления ошибок ввода


    Cразу вспомнил забавную утилиту thefuck

    C ней было бы так:

    $ gerp
    zsh: command not found: gerp

    $ fuck
    grep [enter/^/v/ctrl+c]


    1. saboteur_kiev
      12.10.2017 13:22

      Это прекрасно!


  1. iig
    12.10.2017 13:54
    +1

    20 приёмов работы в командной строке Linux bash, которые сэкономят уйму времени.
    Или не сэкономят. Все зависит от того, что за работа будет делаться и в каком окружении. Иногда проще открыть еще одну вкладку в терминале — чтобы не экономить символы в команде cd. Иногда проще запустить файл-менеджер, чтобы не продираться с помощью tab. Иногда проще закрыть терминал вместе с зависшей сессией (2 раза в год бывает такое), чем вспоминать заклинание для ssh.


  1. MasMaX
    12.10.2017 15:08

    Есть еще одна фишка: Можно использовать tailf вместо tail -f


  1. WRONGWAY4YOU
    12.10.2017 16:17

    Представьте себе, что хотите собрать код, а затем, если сборка оказалась успешной, вызвать make?

    Помоему, данная последовательность действий ничего полезного из себя не представляет. Второй пункт, скорее всего, нужно заменить на что-то типа "запустить тесты".


    Или, может, под "сборкой проекта" вы подразумевали процесс генерации Makefile'а?


  1. reinvent
    12.10.2017 18:06

    в чём состоит тонкость использования команды для вывода содержимого директории. Все знают, что для этой цели служит команда ls -l.

    А как же dir?


  1. DiLis
    12.10.2017 19:05

    Еще screen иногда очень сильно выручает (в частности при обрыве соединения).


    1. bano-notit
      12.10.2017 23:05

      tmux вроде поудобнее будет)


      1. alekciy
        13.10.2017 09:52

        Чем?


        1. saboteur_kiev
          13.10.2017 10:36

          Много чем. у tmux-а только одно неудобство — он недоступен из коробки, нужно ставить отдельно.
          А так — разделение на окна, кроме виртуальных вкладок, и поддержка командной строки, что позволяет автоматизировать переход в разные режимы, плюс внятный статус бар, плюс отсутствие глюков с терминалом — этого уже более чем достаточно.


      1. DiLis
        13.10.2017 13:10

        Спасибо за наводку. Будем посмотреть :)