Найти тему
Одиночная палата

/GNUser/Linux для программиста/01

Оглавление

Дисклеймер

Цикл GNUser посвящается всем, кому так или иначе приходится сталкиваться с экосистемой Linux в качестве пользователя. GNU это к тому, что и сам Linux, собственно, GNU. И в связи с тем, что большинство инструментария встречающегося в среде так или иначе относится к Фонду свободного ПО (FSF), а соответственно лицензируется под GNU General Public License, ее производными и аналогами (LGPL, Apache License, BSD, MIT). User, соответственно, к тому, что все сказанное далее не является экспертным или официальным материалом, а обычным пользовательским опытом.

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

Тем не менее, проходя тернистый путь, то от программиста к системному администратору, то обратно от админа к программисту, мне пришлось лично столкнуться со всяческими ситуациями и приобрести немало соответствующего опыта. Путь этот начинался достаточно давно, в эпоху когда нет-нет да и приходилось покупать бумажные книжки, постить в форумах, читать иностранные исходники. Команда man служила одновременно гуглом, ютюбом и стеком оверфлоу. А дерзкое RTFM было не оскорблением, а скорее строгим, но доброжелательным наставлением. И все это всего лишь на уровне пользователя.

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

Зачем программисту Linux?

Мне он понадобился за тем, что в те далекие времена (начало 00-х) под веб-сервером по большому счету понимался ансамбль Linux + Apache httpd + CGI + Perl/PHP. Был конечно и тогда всякий экстрим типа IIS + ASP, но любой уважающий себя веб-разработчик (тогда еще водилось такое словечко веб-мастер) должен был с закрытыми глазами поставить какой-нибудь Debian, собрать к нему Apache с соответствующими модулями, настроить СУБД, и скомпилить из исходников либо Perl, либо PHP (тот еще холивар был). Никаких тебе Java EE, .NET, Node.js, XML, JSON. Не было никаких крутых фреймворков, библиотек, красивых редакторов. Да что уж там, нормального HTML то не было. Но все это давно и неправда.

Что такое веб-сервер, ну или веб-сайт, сегодня? Вместо Apache, более шустрый Nginx, вместо Perl, заново открытый Python, навороченный до неузнаваемости PHP. Появились и достойные альтернативы в виде стэка Java EE. Не дремлет .NET Core. Разбегаются глаза от наличия всяческих фреймворков разной степени крутизны и красоты. Однако роль Linux в этом зоопарке практически никак не поменялась. Как была Linux основной ОС для веб-сервера, так, в общем, ей и осталась.

За пределами клиент-серверных технологий роль Linux может быть не такая однозначная, но она есть и растет день ото дня. Если "зеленого робота" отнести к семейству "пингвинов", то эта пара давно обскакала Windows по абсолютному количеству устройств.

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

Во-первых, весь исходный код, который доступен в сети это так или иначе ПО под открытыми лицензиями. Собственно, открыть и поглазеть на кишки библиотеки или драйвера вы можете в основном в GNU Linux.

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

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

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

С чисто утилитарной точки зрения, инструменты и способы работы в POSIX системах, а в частности в Linux, универсальны. Они хорошо спроектированы, продуманы, лаконичны, удобны и рациональны. И как бы не старались парни из Редмонда, переубедить всех в этом, так или иначе подходы и приемы тихой сапой перекочевывают в Windows. А значит, наверное, есть смысл узнать их поближе в оригинале.

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

В нескольких следующих заметках я хочу рассказать про командный интерпретатор Bash, о стандартных утилитах, коротко о более навороченных вещах как diff, grep, awk, sed. Далее глянем на пару консольных редакторов nano и vim, файловый менеджер mc. Познакомимся с locale, iconv, aspell. Покажу какие-то сетевые приблуды telnet, wget, nc, curl. Клиентские программы, эмуляторы. Компиляторы - куда же без них. А так же сборщики, установщики, менеджеры пакетов и всякое прочее. Постараюсь систематизировать и выбрать то, на что стоит обратить внимание в графическом режиме.

Сразу, что бы не спугнуть читателя, хочу оговориться, что это не будет детальный перевод мануалов с нагромождением примеров использования (в конце-концов для этого есть man), а такой общелитературный рассказ. О том, зачем, опять же, мне, понадобилась та или иная программа, что можно с ней такого сделать сугубо утилитарного. И все это с точки зрения именно пользователя программиста, а ни в коем случае не с колокольни сетевого администратора или разработчика дистрибутивов. Обещаю, будет совсем не сложно.

:wq