Linux на работе: оптимизация и работа в терминале

Когда пишут про Linux, все обычно упоминают бесплатность, стабильность, быстроту, но меня привлекало не только это. Почему люди ставят WSL или CygWin или Git for Windows. В них во всех есть coreutils, а также сама командная строка. А в чём прикол работать в командной строке:

  • Использовать Vim и Emacs для работы с текстом
  • Уменьшить visual distraction, когда все шрифты и цвета унифицированы
  • Использовать другие удобные инструменты командной строки
  • Выполнять большинство действий с клавиатуры, без помощи мыши, что существенно быстрее
  • Бонусом уменьшается потребление ресурсов

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

Менеджер сессий в терминале

Задачу запуска нескольких программ в терминале можно решить несколькими способами:

  • Запускать программы в фоновом режиме, добавив в конце &
  • Отправлять программу в спящий режим, нажав Ctrl+Z, и возвращать обратно командной fg
  • Использовать вкладки терминала, что мне не очень понравилось, поскольку занимает место на экране
  • Использовать менеджеры сессий типа tmux, которые скорее заточены на разделение экрана на части; что мне не очень актуально, потому что я не использую большой внешний монитор, а работаю за обычным экраном ноута
  • Использовать старый добрый screen

Screen – это абсолютно адская штука в плане функциональности, он заточен на работу на удалённых серверах. Например, вы запускаете несколько процессов на сервере, у вас обрывается соединение: процессы продолжaт работать, а к сессии можно подключиться заново. Но также он умеет запускать несколько сессий на удалённом или локальном компьютере, переключаться между ними.

Просто приведу здесь свой .screenrc, который делает несколько вещей:

  • Выводит статусную строку, чтобы привыкнуть к тому, в каком окне находишься
  • Меняет стандартное сочетание клавиш, с которого начинаются любые команды, с Ctrl+A на Ctrl+]
  • Запускает в первой сессии emacs, а во второй обычный shell
escape ^]] # Ctrl+] для команд screen
startup_message off
hardstatus alwayslastline "%{= bR}[%{= bY}%H%{= bR}]%{= bY} %n%{= bR}:%{= bY}%t  %{= bw}%W %=%{= br}[%{= bY}%h%{= bR}]"
term screen-256color
screen -t emacs 1 emacs-nox
screen -t shell 2 bash
select 1
bind c screen 1 # window numbering starts at 1 not 0
bind 0 select 10

Чтобы начать использовать, достаточно ввести в терминале screen. Чтобы получить помощь – Ctrl+] и потом ?. Но это не всё, мы же можем запускать screen сразу при открытии gnome-termnial (или другого терминала). Для этого заходим в параметры терминала, в gnome-terminal это профиль и закладка Command, ставим флаг, чтобы запускать команду при старте и вводим screen. Кроме этого, у меня gnome-terminal добавлен в Startup applications (это можно сделать в том же Gnome Tweaks), поэтому при загрузке происходит следующее:

  1. Открывается терминал
  2. В терминале запускается screen
  3. В screen открывается две сессии, одна из них emacs (в котором, кстати, можно сохранять сессии)

Это уже экономит некоторое количество времени. Да, кстати, в случае gnome-terminal можно копировать в общесистемный буфер обмена по Ctrl+Shift+C и вставлять в терминал из общего буфера обмена по Ctrl+Shift+V. Эти сочетания настраиваются, но это минимум для выживания в командной строке.

Vim и Emacs

Есть люди, которые спорят про то, что лучше; я пока использую оба редактора для разных сценариев:

  • Emacs скорее как среду запуска приложений внутри него
  • Vim для набора больших текстов, таких как записи в этот блог

Чтобы сделать Vim удобнее, достаточно установить плагин типа lightline, что добавит статусную строку, она же индикатор режима. Есть разные способы установки, по ссылке всё описано. И о том, как в 2 шага перейти на Vim из IDE, видео здесь. Ну и можно взять какой-нибудь cheat sheet, такой или для печати и периодически посматривать в него.

Emacs привлёк меня org-mode, в нём можно вести записи и список задач. Пользуюсь достаточно долго, мне нравится, хотя недавно узнал, что есть аналогичная штука для vim – vimwiki. Org-mode – это как dropbox paper, только локально. Что хочется видеть:

  • заголовки
  • скрытые ссылки
  • переход по ссылкам
  • создавать задачи
  • отмечать задачи как выполненные

Это всё есть, как и многое другое.

При этом Emacs можно использовать, если грубо, тремя разными путями:

Лично я для себя выбрал второй вариант, поскольку он быстрый, простой и прозрачный. Но для работы с русским логично поставить авто-переключалку на русский при вводе команд, это делается добавлением в packages.el:

(package! reverse-im)

А в config.el:

(use-package reverse-im
  :config
  (reverse-im-activate "russian-computer"))

Дальше уже выбираем в init.el нужные пакеты, обновляем doom-emacs. Кстати, для этого просто сделал alias в .bashrc:

alias doom-update="~/.emacs.d/bin/doom sync"

Другие инструменты

Например, можно уменьшить размер PDF

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • Можно работать в python prompt с pandas, и для этого не обязательно ставить Jupyter Notebook
  • Можно подключаться к базам данных типа mysql
  • Работать с git
  • Создать архив в bz2: tar jcf <название архива>.tbz <каталог>
  • Подключаться к другим компьютерам по ssh
  • Делать поиск внутри текстовых файлов с помощью fgrep
  • Смотреть нагрузку на систему и процессы с помощью top / htop
  • Переносить данные между облачными хранилищами с помощью rclone
  • Ну и конечно работать с установкой программ с помощью apt / dnf, rpm / dpkg, snap / flatpak

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

@Константин Овчинников
Теги: #linux

Комментарии