Изначально этот пост должен был стать брюзжанием по поводу известных идей вида: «а давайте впихнём в Bash объекты вместо УсТаРеВшЕгО текста и добавим поддержку картинок с GIF-ками в вывод команд».
Но пока я его писал, получился ностальгический текст об освоении Linux с началом в провинции, в начале 2000-х, без Интернета и прочих привычных нам сейчас вещей. И с продолжением уже в более цивилизованных местах, с обязательным красноглазием, скаканием между дистрибутивами и, в конечном итоге, обретением дзена.
Как я пришёл к Linux’у
Началось всё весьма прозаично — мне купили первый компьютер и от знакомого «компьютерщика», который объяснял мне как им пользоваться — я услышал о том, что есть ещё какая-то операционная система под названием «Linux» для программистов и хакеров. Это отложилось где-то в глубинах моей памяти — в те времена у меня не было доступа к Интернету, кроме модемных 56 kB/s в школе, к которым я имел доступ лишь раз в 1-2 недели. Поэтому скачать дистрибутив для записи на CD-болванку я не мог, да и не знал тогда, что его можно было скачать в Интернете. Дистрибутив Windows я получил от того самого компьютерщика, а другие диски изредка брал в прокате. Естественно, никаких линуксов там не водилось — только репаки GTA, Half-Life и прочая золотая классика.
В те времена я сидел на Windows XP и занимался в основном тем, что играл с ботами в Counter-Strike, да проходил разные знаменитые синглплей-игры. Программировать на Паскале я уже умел и у меня был дистрибутив Turbo Pascal, скопированный на дискету в школе. Естественно, он запускался в полноэкранном режиме, потому что это выглядело круто! Как в фильмах про хакеров, где люди делали какую-то магию, печатая непонятный текст.
Вся эти идиллия так и длилась бы, но через пару лет я увидел на полке книжного магазина книгу «Slackware/MOPSLinux для пользователя (с диском)». Естественно, быстро и решительно я уговорил своего деда купить её. Поскольку компьютер был в моём единоличном пользовании, а переустанавливать Windows и делать бекапы (модов для CS 1.6 и своих сохранений для GTA Vice City) я уже умел — пришло время ээээкспериментов! У меня было два CD-диска с дистрибутивами Linux и Windows, семьсот пятьдесят man-страниц, 150 листов книги-самоучителя по консольным командам и гора консольных утилит в /bin
и /usr/bin
, один жёсткий диск на 40 Gb, Xorg -configure
, создающий нерабочий /etc/X11/xorg.conf
, и текстовая 80x25 консоль. Не то чтобы всё это было нужно, чтобы стать крутым хакером, но раз уж начал копаться во внутренностях системы, то иди в своём увлечении до конца. Единственное, что меня беспокоило — это fdisk
. В мире нет ничего более беспомощного, безответственного и безнравственного, чем школьник, использующий fdisk
для разметки диска. И я знал, что довольно скоро мы в это окунёмся.
Поначалу я просто читал книгу и разбирался с консольными командами. После Windows это было офигенно — ты печатаешь какой-то текст, а система тебе отвечает, прямо как фильмах. А не просто рисует песочные часы и непонятно что делает. Спустя какое-то время я научился выходить из vim, настроил вручную X-сервер по man-страницам и смог установить компилятор Паскаля, на котором я продолжал учиться программировать по ИТМОшному учебнику. Потом разобрался с тем как компилировать программы из исходников, которые я получал на дисках от журнала ][akep.
Естественно, Windows XP оставалась у меня в дуалбуте. Подавляющее большинство используемого мною софта было под Windows, с поддержкой DOC и XLS файлов в Linux в те времена было плохо, да и без игр серии GTA было скучно. А учитывая отсутствие доступа к интернету, я не мог придумать, что же ещё делать с Линуксом — KDE 2 3 установил, все программы с диска MOPSLinux перепробовал, главы про DNS и HTTP-сервер из книги я зачитал до дыр, но не видел смысла применять их на localhost’е.
Оглядываясь назад, могу сказать что полученные знания и умения стали базой, которую я использую до сих пор. Оказывается, очень полезно оказаться один на один с Linux’ом, когда тебе доступны только книжка, man-страницы и исходники программ, которые ты хочешь установить — нет ни интернета, ни знакомых, у которых можно спросить. Это позволяет многое узнать о системе и наработать навыки решения разнообразнейших проблем.
Сейчас, если какой-то старый как говно мамонта, но очень нужный legacy софт отказывается запускаться — то это его проблемы. Расчехляем ldd, делаем симлинки на нужные версии библиотек, читаем логи. Если программа тихо падает — натравливаем на неё strace. Если бы этих умений с той поры у меня не было — не представляю сколько бы времени я потратил на работе и в пет-проджектах на запуск какого-нибудь не самого «modern» и «right from future» бизнес-софта.
Период красноглазия
Где-то в 2007 году я поступил в ИТМО и переехал в Петербург. Так у меня появился доступ к огроменным (по сравнению с тем, что я видел раньше) книжным магазинам — Дом Книги на Невском и ДВК (Дом Военной Книги). Поскольку к тому моменту я уже был индоктринирован журналом ][akep — с полок были сметены:
- «Linux в подлиннике» от издательства БХВ
- «Разработка приложений в среде Linux» от издательства Williams Publishing (фотография диска с MOPSLinux выше как раз на фоне страниц из этой книги)
- «Язык программирования Си» Ритчи и Кернигана.
Поскольку интернет на тот момент у меня был по dial-up, по карточкам, то использовал я его редко. В основном, чтобы заходить на de.ifmo.ru, да скачивать книги с Библиотеки Мошкова (Lib.Ru). При попытке сделать что-то большее время на карточке кончалось, мой Acorp Sprinter@56K клал трубку и приходилось снова бежать на почту за новой карточкой.
Поэтому я опять таки как и раньше сидел за книгами, изучал системные вызовы, да писал всякие учебные программки.
Привычный нам в современном понимании безлимитный интернет появился у меня где-то в районе 2009-2010 года. И вот тогда всё понеслось — я мучал жёсткий диск своего компьютера, устанавливая туда разнообразные дистрибутивы. В основном, выбирал я их по следующему принципу: «О, какая тут красивая графическая оболочка — срочно ставим!»
С того времени у меня сохранилось лишь три скриншота (тут fluxbox и vim с плагинами):
Тогда же я освоил LaTeX, устав от проблем с печатью лабораторных отчётов, когда файл сделанный в Open Office, криво печатался в книжном, рядом с университетом. А так я наконец-то мог написать текст отчёта в vim и получить на выходе красивый PDF, который выглядит и печатается одинаково везде.
Ну и продолжал осваивать системное программирование. Одна из первых написанных мною программ до сих пор лежит в SVN-репозитории на SourceForge. Это jabsh (https://sourceforge.net/p/jabsh/code/HEAD/tree/) — что-то вроде jabber remote shell. Возможности получить статический IP-адрес у меня тогда не было, а сделать что-то на своём компьютере удалённо хотелось. В то время у меня был Siemens C75 с установленным Jabber-клиентом Bombus, в котором я чатился во всяких линуксовых конференциях на jabber.ru, когда под рукой не было компьютера. И тут мне пришла в голову идея написать демона, который будет подключаться к Jabber-серверу, ждать от меня консольные команды, выполнять их и посылать результат выполнения в обратном сообщении.
Эта штука даже работала и я ей пользовался, пока не получил статический IP-адрес. У меня даже был пользователь из Индии, у которого jabsh почему-то не собирался и мы с ним какое-то время переписывались по этому поводу.
Ещё одна из программ из тех времён — проект на лето от моего будущего научного руководителя — termprogs, для управления набором «терминалов» через «АРМы», с центральным сервером, куда всё это дело подключается.
Как раз к этому моменту я заканчивал читать книгу Уильяма Стивенса «UNIX: Разработка сетевых приложений» и мог на практике поприменять все свои знания по системному программированию.
Regexp 101 в ИТМО
Где-то на 2-3 курсе в университете начались пары по системному программированию. Сначала нас обучали пользоваться терминалом и vim на тонких клиентах от Sun Microsystems, с пузатыми ЭЛТ-мониторами. На этих парах я целый семестр пинал балду и не приходил в сознание — ведь всё это я уже изучил ещё в школьные времена. А вот потом началось самое интересное.
Половина семестра у нас были отведены на изучение регулярных выражений и grep’а, sed’а и awk. А регулярные выражения прошли мимо меня и grep’ом я пользовался на уровне: «ну, если ему параметром передать строку, то он будет искать по ней совпадения в файле».
А тут зубодробительные задания, километровые regexp’ы и всё такое прочее. К концу семестра регулярные выражения у меня отскакивали от зубов. Оглядываясь назад, сейчас могу сказать, что этот курс по regexp’ам — это ещё одна базовая база, которую я постоянно использую до сих пор. Не могу представить сколько времени и сил мне сохранило моё знание регулярных выражений.
До сих пор не понимаю, откуда пошла эта идея, что «если вы решаете проблему и решили использовать регулярные выражения — то теперь у вас две проблемы». Мой опыт на работе и дома показывает, что если нужно как-то хитро разобрать строку регулярным выражением, то ты берёшь sed
или Java’овские Pattern
и Matcher
— и разбираешь строку. Потом тестируешь получившийся код, отправляешь его тестировщикам — а дальше он просто работает годами.
В то же время я начал делиться своим опытом — писать статьи на welinux.ru, общаться на linuxforum.ru, да захаживать на собрания SPbLUG. Одно время у меня был блог на WordPress’е, который я поднял на каком-то бесплатном VPS, которым можно было пользоваться пока ты не выходил за нижние или верхние лимиты по CPU и памяти. Тогда я и пристрастился к написанию всяких текстов с офигительными историями.
Linux и embedded-программирование
В районе 2011 года я принял роковое решение — пойти в embedded-разработку. В то время эта область Computer Engineering мне казалась более интересной и романтичной, чем «обычное» программирование. Ведь тут нет никаких «упрощающих» уровней абстракции — берёшь и пишешь код, которые работает прямо на железе! А потом отлаживаешь всё это дело при помощи моргания светодиодом, отладочной печати через UART, осциллографа и такой то матери. Зато все знания про биты, байты, внутреннее устройство всяких EEPROM, SRAM и прочих вещей — используются 24/7!
Все соответствующие курсы в университете предусматривали работу под Windows — в то время нужные среды разработки и компиляторы были в основном под эту операционную систему. Но, естественно, меня это не остановило. Для половины софта я использовал VirtualBox с Windows внутри. Для второй половины — можно было спокойно найти нужные нативные инструменты.
Для обучения мы поначалу использовали специальные устройства на базе микроконтроллера семейства MCS-51. Если код для них можно было писать в чём угодно — я использовал Vim/Emacs — то с компиляцией и прошивкой готового бинарника в устройство всё было сложнее. Для компиляции использовался компилятор sdcc
, для прошивки же нужна была специальная утилита m3p
, написанная одним из университетских преподавателей в незапамятные времена на C. К счастью, эта утилита писалась с оглядкой на кроссплатформенность поэтому, после пары незначительных правок в исходном коде, она спокойно выполняла свою работу и под Linux.
В те времена, начав уставать от всяких «modern» дистрибутивов, которые своими NetworkManager’ами, PsshPsshAudio PulseAudio, Avahi Daemon и прочими «инновациями» — ломали мой пользовательский опыт, наработанный ещё во времена Slackware — я пришёл к Arch Linux. В нём можно было достаточно быстро поставить базовую систему без вышеописанных программ, дополнить её только нужным мне ПО и спокойно работать и смотреть мемы.
Тогда у меня уже начал формироваться определённый набор софта, которым я постоянно пользовался. По понятному стечению обстоятельств (русифицированный Slackware как первый дистрибутив и любовь сидеть в консоли, как «хакер») это был в основном консольный софт:
vim/emacs
— для редактирования текста и кода.latex
— для написания всяких сложных документов, особенно если их нужно распечатывать или куда-то отправлять. Ну и для рисования презентаций, чтобы «два раза не вставать».- Какой-нибудь tiling WM — всё равно после месяца пользования каким-нибудь красивым KDE или GNOME я приходил к тому, что у меня все окна по умолчанию раскрыты на весь экран и раскиданы по рабочим столам, в зависимости от имени окна. А раз не видно разницы, то зачем тратить дисковое пространство на тяжеловесный DE, если всё что мне надо я могу получить в каком-нибудь xmonad или i3wm? А всякие красивости в виде теней, анимаций и прозрачности — хоть и радуют глаз первые пару недель, но потом «вау-эффект» ожидаемо теряется.
- Ну и всякие прочие консольные утилиты, с которыми я мог работать не приходя в сознание:
grep
,sed
,git
,make
,cron
и так далее.
С тех пор у меня и появился отдельный репозиторий с dotfiles, в котором я таскал с системы на систему свои конфигурационные файлы к вышеописанным программам.
Немного скриншотов рабочего стола с тех времён:
Впоследствии, я много раз пытался перейти на обычный софт с GUI или всякие Web-приложения, но уже не получалось. Либо возможности по его настройке «под себя» были скудны, а некоторые опции и вовсе «прибиты гвоздями». Либо скорость его работы оставляла желать лучшего. Либо просто было неудобно — то фокус при старте приложения не там, где я привык его видеть, то главное окно отображает не ту информацию, что мне привычна, и так далее.
Последней каплей наверное оказался «редизайн» GMail, после которого он стал ещё медленнее чем раньше и ещё более жаден до оперативной памяти. На этом момент у меня сгорело всё, что только может сгореть и я переключился на mutt. К счастью, эта штука не подвержена СаМыМ СоВрЕмЕнНыМ ДиЗаЙнЕрСкИм решениям и её внешний вид не меняется из года в год. Работает она достаточно быстро, запускается увы не так быстро, даже с кэшированием, но это потому, что у меня в maildir’ах вся моя почта с 2009 года (около 47 тысяч писем). Но главное — она не поменяется в один «прекрасный» день по желанию левой пятки главы отдела дизайна из Google.
В целом, Linux постепенно переставал быть для меня какой-то религиозной штукой, вокруг которой ведутся религиозные войны за звание самого rulez’ного дистрибутива. Он начал становиться для меня просто удобной и привычной операционной системой, от которой мне требовалось немногое:
- Не делать ничего критичного, типа обновления ПО, без моего ведома
- Обеспечивать работу привычных мне программ
- Придерживаться FHS (Filesystem Hierarchy Standard) и прочих стандартных вещей, которые я узнал ещё со времён Slackware — чтобы если вдруг возникнет какая-то проблема — я мог быстро и спокойно в ней разобраться, понимая, что творится в системе.
- Не навязывать мне способ хранения моих файлов — всё должно быть отсортировано по каталогам так, как мне удобно, без всяких тегов и звёздочек с рейтингом файла.
Работа и Linux
На своей первой работе, связанной с embedded-программированием, основной системой естественно была Windows 7. Когда нужен был линукс, мы использовали Linux Mint — он просто и без заморочек работал. Ну и ещё на серверах, которых я тоже касался, выполняя всякие задачи по администрированию, был какой-то RHEL (благодаря этим задачам я поднаторел в настройке всяких Web-серверов, серверов баз данных, и ещё в iptables, rsync да bash-скриптах).
Дома у меня на тот момент тоже был установлен Linux Mint — в целом, мне уже было без разницы какой дистрибутив использовать — всё равно я ставлю систему в минимальной «консольной» конфигурации и уже сам поверх доустанавливаю что мне надо, по списку из моего репозитория с dotfiles. Казалось бы, идиллия?
Но тут в среде линуксоидов началось какое-то непонятное шевеление. Сначала в git’е переименовали ветку master
на main
не из-за технических соображений, а по политическим причинам, относящимся к одной-единственной далекой, заокеанской стране. К счастью, благодаря гибкости консольного ПО, этого ненужного изменения мне удалось избежать:
[init]
defaultbranch = master
Потом стала популярной замена привычных утилит типа grep
или ls
на их аналоги, которые либо печатают красивый цветной вывод, либо работают быстрее (правда на тех объёмах данных, который я обычно использую — это ускорение погоды не делало). Одно время я баловался с ними, но впоследствии вернулся обратно к привычным инструментам из coreutils, ради которых не надо вкручивать в свой репозиторий с dotfiles ещё и submodules — чтобы иметь возможность притащить в свою систему очередной supercat, который умеет подсвечивать исходной код в выводе, но при этом его нет в репозиториях дистрибутива. Если мне нужны будут подсвеченные исходники — come on (!), я просто открою файл в текстовом редакторе, а cat
пусть просто печатает содержимое файла в stdout, как он делал это десятки лет!
Потом ещё зачем-то начали заменять ifconfig
на iproute2
— вроде как, как я слышал, из-за необходимости работать с IPv6 (во FreeBSD, насколько я знаю, просто добавили нужную функциональность в ifconfig
и продолжают им пользоваться 🤷♂️).
Последней каплей стало использование systemd вместо System-V init или BSD-style init. Безальтернативное запихивание systemd в Debian, а через него и в используемый мною Linux Mint мне не понравилось. Вот уже десяток лет у меня на прямо на подкорке головного мозга записано, что при старте система запускает обыкновенные shell-скрипты из /etc/init.d/
или /etc/rc.d/
, их можно подёргать руками прямо из консоли или даже отредактировать как угодно, чтобы понять почему какой-нибудь tao-cosnaming работает не так, как мне хочется и так далее. А тут инопланетная штука, к которой разве что бинарный реестр ещё не прикрутили — бинарные логи старта процесса, которые не посмотреть через less
уже есть — и с unit-файлами, которые не обеспечивают и половины той гибкости, что была у shell-скриптов. И ещё и старательно заменяющая собой все привычные мне отдельные программы, которые всегда просто делали своё дело и не беспокоили по пустякам: grub
, cron
, agetty
и так далее.
В этот момент (после, но не вследствие) я уволился со своей работы, связанной с embedded-программированием и пошёл за длинным рублем в кровавый Java-энтерпрайз, с байткодом, shell-скриптами и морем регулярок — всё как я люблю.
Ну а стремясь избежать наступления systemd на мои привычки, я ушёл с Linux Mint на Gentoo.
Выбрал я его потому, что на тот момент это был один из немногих дистрибутивов, который не использовал оный systemd. Вместо него была своя система инициализации (OpenRC), которая весьма и весьма похожа на систему инициализации System V.
Прописал в /etc/portage/make.conf
строку:
USE="-systemd unicode -pulseaudio X alsa"
И горя с тех пор не знаю. Эта система стабильно живёт у меня уже 5 лет, спокойно пережила обновление ядра с 4.19.23 на 6.1.57 и просто работает — лишь запускаю обновление раз в месяц, если не забуду, и всё. Подозреваю, что секрет её стабильной работы в том, что я использую максимально простой (как палка-копалка) софт, созданный в незапамятные времена, без всякой инновационности и поддержки одновременного вывода звука на систему 7.1, блютус-наушники в соседней комнате и по сети на планшет. Естественно, что если всё просто и понятно устроено, то оно и не будет ломаться. Ломалось что-то после обновления у меня всего лишь пару раз.
Однажды, разработчики Midnight Commander переименовали конфигурационный файл mc.ext
в mc.ext.ini
, для единообразия с именами остальных конфигурационных файлов — пришлось его переименовывать и у себя.
Вторая проблема, с которой я сталкивался — как-то раз мейнтейнер бинарного пакета для Firefox забыл слинковать его с библиотеками для ALSA — в итоге в браузере не было звука. Я откатился на прежнюю версию Firefox’а, полез в багтрекер Gentoo заводить новый баг — а он там уже есть и в нём люди активно комментят. Ещё через несколько дней пакет пересобрали правильно и на этом всё.
What I expected and what I got
Это не Winamp, это Audacious :-)
Понятно, что на данный момент, крутым Linux-хакером, коммитящим патчи в ядро на завтра, обед и ужин — я так и не стал (пока что). Зато, годы копания во всяких консольных утилитах не прошли даром — в итоге я получил более менее стабильную и простую систему, которой я могу пользоваться не приходя в сознание. В которой никто не будет менять интерфейс согласно новым модным веяниям — кроме меня самого, но тут всё весьма консервативно. Последнее, что я глобально менял — перешёл с белой темы оформления на Solarized Light, потому что она оказалась более приятна глазу.
В которой все мои настройки хранятся в git’е и ничего не поменяется без моего ведома. В которой можно делать что хочешь парой строчек в нужном файле и пайпом из нескольких базовых команд, например:
Утилита для plain-text accounting’а не позволяла мне использовать систему «денежных конвертов», как я привык. Взял dialog, awk и sqlite3 и со всем этим сделал поверх hledger’а систему для ведения бюджета, которая делает то, что мне надо.
Купил я себе трекбол Logitech Trackman Marble — а на нём есть ненужные мне кнопки «Вперёд» и «Назад», но нет средней кнопки мыши и прокрутки? Не беда.
Создаём файлик /etc/X11/xorg.conf.d/50trackball.conf
со следующим содержимым:
Section "InputClass"
Identifier "Marble Mouse"
MatchProduct "Logitech USB Trackball"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "9"
Option "MiddleEmulation" "true"
Option "ButtonMapping" "3 8 1 4 5 6 7 2 9"
Option "XAxisMapping" "6 7"
EndSection
Теперь кнопка «Назад» работает как средняя кнопка мыши, кнопка «Вперёд», если её зажать, позволяет шариком прокручивать текст во всех направлениях. Ну и сам трекбол стал леворуким, как я и хотел.
На новой клавиатуре есть Fn-кнопки для вызова «Моего компьютера», поиска и браузера, но нет кнопок для регулирования громкости? Не беда! Расчехляем xmodmap
и переназначаем коды кнопок в сгенерированном им файле:
keycode 152 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 163 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 180 = XF86AudioMute NoSymbol XF86AudioMute
В итоге, Linux сейчас для меня стал просто системой, которая обеспечивает среду выполнения для привычных мне программ — что и составляют привычное для меня пользовательское окружение, как стена состоит из кирпичей. Бастионы — в лице Gentoo и Devuan 3 — пока прикрывают меня от бушующего моря лишних для меня изменений (раз X-сервер у меня прекрасно работает — зачем его менять на Wayland?) и связанных с ними проблем. Пока во всём остальном Linux-мире меняют системы инициализации, выкидывают на мороз X-сервер и переписывают coreutils на Rust — у меня всё тихо и спокойно, можно спокойно читать почту и RSS-ленты в mutt год за годом.
Когда (если) эти бастионы падут — наверное уйду в монастырь на FreeBSD. Благо какой-то опыт работы в ней, с точки зрения простого пользователя, у меня уже есть. Всё моё окружение, в лице i3wm, emacs, Firefox, RawTherapee и прочего ПО, работает и там. Единственные большие изменения в моей конфигурации, которые придётся внести — это в паре мест вызывать gmake
вместо make
, да в скриптах использовать не привычный she-bang #!/bin/bash
, а более правильный #!/usr/bin/env bash
. Да, придётся потерять docker, которого сейчас нет во FreeBSD, и возможность работать с LUKS криптоконтейнерами. Но уж лучше потерять их, чем всё своё привычное и любовно настроенное окружение и свои многолетние привычки.
Всю мою историю освоения Linux можно описать как «hard to learn, hard to master». Зато в итоге, год за годом были сформированы всякие разные привычки, которые позволяют писать тексты, пользоваться Интернетом и так далее — буквально «на кончиках пальцев». Именно поэтому я тут не агитирую за то, чтобы вы немедленно переходили на i3wm или Emacs ради пРоДуКтИвНоСтИ — без вышеупомянутых привычек как у меня — это бесполезно. Надо в первую очередь хотеть изучить, например Emacs, быть готовым к тому, что придётся его какое-то время настраивать, не воспринимать это время как «ну вот, надо заниматься настройкой текстового редактора вместо того, чтобы просто открыть его и писать текст» — и тогда что-то получится. А все эти статьи «переходите на Vim, чтобы быть более продуктивным в программировании» — от лукавого. Во-первых, вы потратите время на vimtutor, вместо программирования. Во-вторых, скорость набора текста и программирование слабо связаны. Я печатаю со скоростью всего 60-70 символов в минуту, но на мою продуктивность как программиста — это никак не влияет. Ведь я набираю код на клавиатуре от силы 20-25% рабочего времени. 10-15% времени уходит на общение с коллегами и Zoom-созвоны, чтобы понять, что же имелось в виду в этом таске/баге. И оставшиеся 60-70% — на размышления перед блокнотом с ручкой в руках на тему: «как же тут правильно и быстро сделать изменение, чтобы не тратить много времени ни сейчас, ни в будущем?» Так что vim тут никак не поможет с продуктивностью — думать перед листом бумаги за меня он не будет.
В-третьих, будем честны, на данный момент, для ряда языков, большая и тяжёлая IDE по прежнему является лучшим выбором, чем Vim или Emacs. Даже невзирая на наличие LSP-сервера для вашего редактора. Например, Emacs’овый LSP для Java до сих пор работает не очень хорошо — падает на простых вещах, не обновляет контекст изменений в файлах так быстро, как это делает IDEA, надо творить всякие хитрые заклинания, чтобы он работал с Lombok и так далее.
В целом, ряд действий можно с комфортом для себя сделать в GUI и только в GUI. Проявлять фотографии стоит в RawTherapee, редактировать изображения — в GIMP, смотреть сайт в Firefox’е и так далее. Но для массы других действий — есть куча возможностей делать их «на кончиках пальцев» в консоли. Это лишь вопрос удобства — кому-то удобнее мышкой в Nautilus’е выбирать файлы для копирования, а кому-то удобнее cp ~/photos/{photo,video}_*.{jpeg,jpg,JPG,avi} /media/BACKUP
делать. Прекрасно, что Linux (на данный момент) предоставляет выбор как для людей привычных к графическому интерфейсу, так и для тех, кому привычно общаться с машиной текстом.
Супер. Приятно видеть тут рефлексию инженера о профессиональном пути, а то бесконечные обсуждения типа "как вкатиться в ИТ используя только спинной мозг", честно говоря, расстраивают. Чуть влезу с некомпетентными мыслями.
По новомодным утилитам в целом согласен, за несколькми исключениями. Первое сама консоль. Перешёл года 4 как на fish и думаю что он наэкономил мне кучу времени даже с учётом дообучения.
Второе новомодные утилиты, есть несколько прям хороших.
jq
fd
иfzf
из того что сейчас прям ежедневно пользую.systemd
это естественный путь бигтеха от гибкости к унификации. И если смотреть не с позиции пользователя который выхаживает одну настольную систему а с позиции админа у которого два десятка серверов, то это хорошо. Про демонизацию процесса уже в середине 0х дай бог треть разрабов что-то слышала.Рад был прочитать! У меня тоже всё держится на "бастионах", которые, как я расчитываю, не будут меняться десятилетиями, Emacs в их числе, кстати.
Но я несколько лет назад спрыгнул с подхода "стабильно работающая уже N лет система, пережившая много обновления" на противоположный: система всегда свежеустановлена (не более двух лет от роду) и всегда готова быть переустановленной в любой момент:
у меня не просто конфигурации и дот-файлы в гите, у меня в гите заскриптована вся установка системы, от начала до конца. Я ставлю себе серверный линукс без X-ов, запускаю свои скрипты и ухожу пить чай, через полчаса у меня система ровно такая, как я привык. Примерно как инстанс в облаке перезапускается минимум раз в сутки, чтобы не накапливать проблем, я переезжаю на свежую версию дистрибутива каждые пару лет. Помогает держать все скрипты в тонусе.
Сейчас даже подумываю даже пользовательские программы устанавливать и запускать через докер для того, чтобы скрипты по установке и настройке поддерживал кто-то другой на докерхабе.
Какой приятный пост. Как много строк согрело мне сердце, читать было невероятно тепло, спасибо большое!
Примерно такую же базу приобрёл сам, только начинал с GUI и ушёл в консоль. Моё знакомство пришлось на бум популярности убунту, мол "вам не нужно знание линукса, теперь можно кликать мышкой!". Ах, еслибы это было правдой в начале 2010-х.
Как раз из-за того что гуй постоянно менялся, а вместе с изменениями что-то периодически ломалось, я всё больше уходил в старое-доброе-проверенное.
Единственное чем хочется поделиться с автором: попробуй снова пульсаудио. Я помню времена пш-пш, падений и зависаний, но сейчас прям нарадоваться не могу периодически. Полноценный микшерый пульт в системе, всё работает, не падает, не шипит.
Спасибо за пост! Написано от души и очень увлекательно.
Сам я полез в Линукс буквально только что, в 33 годика, по велению сердца (уж больно оно любит денежки), и мне крайне интересно почитать, что и как у других людей происходит.
Забавно, что если вкратце, то можно всё свести к вкусам фломастеров. "Мне так удобно" и "я так привык" - по итогу, решающие аргументы в любом холиваре.
Чтобы не начинать, я сам считаю что гвозди лучше забивать молотком, а микробов - микроскопом.
ИТМО, случайно, не кафедра ВТ? :)
Сильно триггернулся на Sun'овские терминалы, 51-й микроконтроллер и развеселые лабы по sed/grep/awk :)
Нужна определённая мудрость, чтобы отличить такую ситуацию от «распарсить CSV/JSON и посмотреть внутрь». Поэтому к регуляркам и настороженное отношение — ими можно попытаться начать парсить HTML, SQL, арифметические выражения…
Спасибо за интересный пост который всколыхнул воспоминания 🙂
Напишу кратко о своем пути.
В 2003 году появился компьютер и диалап. Спустя некоторое время я нашел пиратский сайт с архивами журнала Xakep. Это были HTML-файлы без картинок упакованнные в архивы. Благодаря этому каждый выпуск журнала весил всего 200-250кб. Там я прочитал про Linux и начал искать вожделенный диск с дистрибутивом.
По счастливой случайности у одноклассника брат оказался программистом. Так в мои руки попались диски с Red Hat Linux 8.0 😎
Помню как меня поразила красота инсталлятора Anaconda и как я в первый раз загрузил Linux. Правда чуть позже я снес ОС так как хотелось играть в игори) Но линукс меня уже заманил)
Дальше были различные дистрибутивы, сборка драйверов под win-модем, поддержка веб-сервера и ftp в локальной сети и прочие красноглазые развлечения.
Obligatory link — https://nushell.sh/. Там по трубам не объекты ездят, а таблички (с опциональной типизацией колонок, еяпп), и это, похоже, оптимальный вариант для shell scripting. Собственно, в https://www.jntrnr.com/case-for-nushell/ подробно написано, почему именно.
Да, кстать, привет! Мы скорее всего с тобой общались на ЛОРе) Были же времена.
Чтобы избегать systemd как раз перепрыгнул на FreeBSD. Через 3 года вернулся: полетел SSD, срочно надо было работать и не было времени на настройки. Снапшот zfs с фряхи не запустился на zfs на линуксе :-(
Docker там запускается через jail: https://wiki.freebsd.org/Docker. Почти всегда этого хватает, хотя что-то у меня не поднималось.
Рекомендую всерьез глянуть в BSD-системы! Там еще есть OpenBSD и NetBSD, которые славятся своей стабильностью. И man-ы там всегда заполнены, не надо лезть в интернет. В OpenBSD-сообществе правило: если в документации чего-то не хватает, это баг.
А еще я посматриваю на alpine. Если ты работал с докером, то понимаешь, что там лишнего вообще нет.
z3bra.org вот вообще устал от приколов современных и написал свой дистрибутив. Но когда работать?
Слушайте, ну вот кто мне объяснит, как правильно пересесть на VIM как на IDE?
Я уже как трерьий год снёс винду, и везде сижу на лине. Админил его много лет. В консоли раобтать умею. Вимом пользоваться тоже умею. Знаю не только, как выходить, но и многое другое. Осталось только привыкнуть к тому, чтобы редактировать в нём проекты, вместо задравшей VSCode, но блин!
Охо-хо, привет коллега! Очень похожая история и путь и у меня, началась в 2013-м, когда увидел у геофизиков странную систему IRIX, потыкал консоль, запустил doom и завертелось. Через 2 месяца у меня уже был ноут в дуалбуте c SUSE и второй ноут Eeepc со Slaсkware.
Так-то в systemd тоже можно шелл скрипты через один лишний уровень абстракции запихнуть и какая-никакая обратная совместимость с sysV есть :-)
Здоровский пост, приятно почитать такое в клубе.
Ура, Пост про Linux! Очень понимаю путь, но начал я его в силу возраста немного позже. Первым диском на руках стал OpenSolaris 2009, который мне дала учительница английского (sic!), получив на какой-то выставке непонятно за что (выставке по языкам, поэтому что там делал этот диск я хз вдвойне).
Это, конечно, не тот экспириенс, что можно получить со Slackware, но меня идея совершенного другой ОС очень заинтересовала, ведь до этого я игрался исключительно с Win XP/Vista.
По итогу я заказал с сайта Ubuntu бесплатные (да, на тот момент и такое было) диски с Ubuntu/Kubuntu 10.04 и Ubuntu Server (хз зачем, но почему нет?) и пошел играться. В итоге засел с Ubuntu прям надолго. Там подтянул знание терминала, а уж с этим багажом пригодился и Ubuntu Server -- решил сделать себе медиасервер, который по-моему по итогу проработал лет 10.
Начиная с 10.04 я уже совсем улетел в этот мирок и в течение следующих лет пяти кажется попробовал всё, кроме Gentoo (идея пересборки всего даже в 17 лет мне казалась безумием).
Сейчас уже последние лет 5 сижу исключительно на Arch и Fedora (в зависимости от кейса).
Но я никогда не отвергал новое и всегда старался сразу садиться на bleeding edge поезд, поэтому с systemd на "ты" я уже лет 10, юзаю почти все компоненты (systemd-resolved, systemd-networkd, systemd-cryptenroll, systemd-nspawn итд). Унификация -- супер, код у systemd отличный, что-то даже если пропатчить надо проект легко пересобрать при желании. Баш-скрипты для инициализации на мой взгляд наоборот куда сложней.
В Москве юзал на трёх мониторах сетап со Sway и был обмазан 3 слоями дотфайлов, но сейчас в эмиграции и на ноуте юзаю практически голый GNOME с подтюненым терминалом. Грустно, что нормальную интегрированную DE с тайлингом мы вряд ли увидим. Есть, конечно, плагин к GNOME от System76, но на мой взгляд он весьма корявый.
А я свой первый дистрибутив Linux выбрал по толщине носителя 🤭
Это был Red Hat Linux в паке аж из шести CD и с красивой обложкой!
Как он попал в 2001 году в далёкий Хабаровск - одному Бобу Янгу известно, но ждал он явно меня!
Тоже начинал с Бейсика и Паскаля. Никлаус Вирт покинул этот бренный мир 1 января. Помянем!
Тёплая, ламповая история!
Я начал вкатываться в Линукс где-то на третьем курсе универа (примерно в 2015), когда мне понадобилось работать с Point Cloud Library и Robot Operation System. Если первый еще можно было как-то собрать под винду (но неудобно), то второй - Linux only.
К тому времени у меня был опыт и некого админства винды, и опыт программирования на сях и всяких C# и вообще сильный упор на экосистему MS с этими вашими Visual Studio и прочими .NET.
Сначала просто использовал линукс для определенных задач, но потом постепенно пересел практически полностью и где-то последние 6 лет линукс является основной системой, хотя винда в дуалбуте была почти всегда. Начинал с Убунты, пробовал разные ubuntu-based дистрибутивы, конечно же ставил разные цветастые DE, потом уполз на Arch с тайлингом.
Арч выбрал, в первую очередь, потому что тут офигенный AUR. Практически любая мыслимая или не мыслимая хрень есть в AUR. Например, у меня используется специфическая утилитка - xcwd, которая позволяет получить рабочую директорию текущего х-окна. Чтобы можно было жмякнуть хоткей и новый терминал открылся именно в этой директории. Конечно, собрать и установить дело пары минут, но в AUR это и еще стопицот пакетов уже есть, обновляются, поддерживаются и все прекрасно. Ну и не содержит всякого не нужного мне софта, который есть, к примеру, в Ubuntu Server.
vim пробовал, настраивал (использовал nvim), но потом вернулся на б-гмерзкую электронную VSCode. Там всё есть, и есть миллион плагинов на то, чего нет. Лично мне графический интерфейс редактора со всякими поисками и историей гита оказался удобнее, а код пишешь, как заметил автор, не так часто, чтобы все эти dws$^sxYs вима давали мне особое преимущество. Вим использую как легковесный редактор.
Так ведь давно есть. Первое называется PowerShell, ему уже 15+ лет и это намного лучше «баша», второе — sixel (когда появился, не знаю, но очень давно) и собственное расширение iterm для показа картинок.
Приветствую, коллега. У всех нас эта история похожая, знакомство с Линуксом. Доминирование Линукса над Виндой. Первая работа и в ней знакомый линукс и тд.
Спасибо что поделились историей
У меня вопрос появился .... почему Gentoo ? Логично было бы остаться на Арче и выбрать другую init систему ... runit и тд. , учитывая что Арч был вам знаком
О, прям знакомое начало) я потом в админы ушёл, потом в продажи, но красноглазпя юность навсегда в сердце)))
Не представляю, как жить без свистоперделок. Поэтому пользуюсь bat, duf и прочими заменами coreutils с красивым текстом.
А есть какой удобный фреймворк для LaTeX-презентаций?