настройка линукс для программиста

Программирование под Linux

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

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

1. На чем пишут программы?

Исторически сложилось так, что ядро Unix было написано на языке Си. Даже более того, этот язык был создан для написания ядра Unix. Поскольку ядро Linux было основано на ядре Minix (версии Unix), то оно тоже было написано на Си. Поэтому можно сказать, что основной язык программирования для Linux это Си и С++. Такая тенденция сохранялась на протяжении долгого времени.

А вообще, писать программы для Linux можно почти на любом языке начиная от Java и Python и заканчивая С# и даже Pascal. Для всех языков есть компиляторы и интерпретаторы. Писать программы на С++ сложно, а Си многими уже считается устаревшим, поэтому множество программистов используют другие языки для написания программ. Например, множество системных инструментов написаны на Python или Perl. Большинство программ от команды Linux Mint, установщик Ubuntu и некоторые скрипты apt написаны на Python. Множество скриптов, в том числе простые скрипты оптимизации написаны на Perl. Иногда для скриптов используется Ruby. Это скрипты OpenShift или, например, фреймворк Metasploit. Некоторые разработчики кроссплатформенных программ используют Java. Но основные компоненты системы написаны все же на Си.

2. Библиотеки

Библиотеки делятся на два типа:

Таким образом, для любой программы на Си нужно подключать библиотеки, и все программы используют какие-либо библиотеки. Также важно заметить, на каком языке бы вы не надумали писать, в конечном итоге все будет сведено к системным библиотекам Си. Например, вы пишите программу на Python, используете стандартные возможности этого языка, а сам интерпретатор уже является программой на Си/С++, которая использует системные библиотеки для доступа к основным возможностям. Поэтому важно понимать как работают программы на Си. Конечно, есть языки, вроде Go, которые сразу переводятся на ассемблер, но там используются принципы те же, что и здесь. К тому же системное программирование linux, в основном, это Си или С++.

3. Процесс сборки программы

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

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

Далее к работе приступает компоновщик. Его задача связать объектный модуль со статическими библиотеками и другими объектными модулями. Для каждого исходного файла создается отдельный объектный модуль. Только теперь программа может быть запущена.

А теперь, давайте рассмотрим весь єтот процесс на практике с использованием компилятора GCC.

4. Как собрать программу

Для сборки программ в Linux используется два типа компиляторов, это Gcc и Clang. Пока что GCC более распространен, поэтому рассматривать мы будем именно его. Обычно, программа уже установлена в вашей системе, если же нет, вы можете выполнить для установки в Ubuntu:

sudo apt install gcc

Перед тем как мы перейдем к написанию и сборке программы, давайте рассмотрим синтаксис и опции компилятора:

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

Собственно, это все самое основное, что нам понадобится. Теперь создадим нашу первую программу. Она будет выводить строку текста на экран и чтобы было интереснее, считать квадратный корень из числа 9. Вот исходный код:

int main() <
printf(«losst.ru\n»);
printf(«Корень: %f\n», sqrt(9));
return 0;
>

настройка линукс для программиста

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

настройка линукс для программиста

Это этап компиляции, если в программе нет ошибок, то он пройдет успешно. Если исходных файлов несколько, то такая команда выполняется для каждого из них. Далее выполняем линковку:

настройка линукс для программиста

настройка линукс для программиста

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

настройка линукс для программиста

Это две библиотеки загрузчика, стандартная libc и libm, которую мы подключили.

5. Автоматизация сборки

Когда мы рассматриваем программирование под Linux невозможно не отметить систему автоматизации сборки программ. Дело в том, что когда исходных файлов программы много, вы не будете вручную вводить команды для их компиляции. Можно записать их один раз, а затем использовать везде. Для этого существует утилита make и файлы Makefile. Этот файл состоит из целей и имеет такой синтаксис:

цель: зависимости
команда

настройка линукс для программиста

Затем вам достаточно выполнить команду make для запуска компиляции, только не забудьте удалить предыдущие временные файлы и собранную программу:

настройка линукс для программиста

Программа снова готова и вы можете ее запустить.

Выводы

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

Курс программирования на Си под Linux:

Источник

8 лучших дистрибутивов Linux для разработчиков в 2021 году

настройка линукс для программиста

8 лучших дистрибутивов Linux для разработчиков в 2021 году

Следовательно. Когда дело доходит до разработки, программисты предпочитают ОС Linux, а не Windows, поскольку они могут быстро выполнить свою работу. Но возникает важный вопрос: « Какой дистрибутив Linux лучше всего подходит для программирования и разработки? ”

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

1) Manjaro

Когда дело доходит до выбора лучшего дистрибутива Linux для разработчиков, Manjaro возглавляет список. Это бесплатный дистрибутив Linux на основе архитектуры с открытым исходным кодом, который в основном ориентирован на удобство использования, простоту использования и доступность. В отличие от проприетарной ОС, Manjaro предоставляет пользователям полный контроль над оборудованием без каких-либо ограничений. Следовательно, Manjaro — один из лучших дистрибутивов Linux для разработчиков.

настройка линукс для программиста

Manjaro также поддерживает запуск различных приложений Windows, таких как Wine, PlayonLinux или Proton и т. Д. Он поставляется с отличным менеджером пакетов со всеми инструментами и утилитами, которые помогут вам сразу же приступить к разработке.

Особенности:

Скачать: вы можете скачать Manjaro Linux здесь.

2) Debian GNU/Linux

Debian GNU / Linux — еще один популярный дистрибутив Linux, который в значительной степени полезен для разработчиков, в основном из-за своей стабильной ветки. Еще одна основная причина, по которой разработчики отдают предпочтение Debian, заключается в том, что он предлагает отличный набор инструментов и пакетов, необходимых для разработки.

настройка линукс для программиста

Debian — один из старейших дистрибутивов, но все же он считается одним из самых стабильных дистрибутивов на рынке. Согласно политике Debian, любая программа, которая должна быть включена в семейство Debian, должна соответствовать всем стандартам, установленным « Руководством по свободному программному обеспечению Debian ».

Особенности:

3) Ubuntu

Следующим в нашем списке 8 лучших дистрибутивов Linux для разработчиков является Ubuntu, еще один широко используемый и самый популярный дистрибутив Linux. Он идеально подходит для всех категорий пользователей, включая новичков и профессионалов.

настройка линукс для программиста

Ubuntu LTS предоставляет разработчикам стабильную и надежную среду разработки, так как им не нужно беспокоиться об обновлении дистрибутива каждые 6-12 месяцев.
Ubuntu поставляется с множеством учебных пособий, руководств, практических руководств и других ресурсов, направленных на помощь сообществу программистов.

Особенности:

4) Fedora Workstation

Fedora — еще один популярный дистрибутив, управляемый сообществом, который выпускается в различных редакциях для разных пользователей. Если вы ищете дистрибутив, поддерживающий разработчиков, Fedora Workstation — отличный выбор.

настройка линукс для программиста

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

Особенности:

5) openSUSE

Следующим в нашем списке из 8 лучших дистрибутивов Linux для разработчиков является openSUSE, выпуск LTS, который гарантирует стабильность. Еще одним преимуществом openSUSE является то, что это управление пакетами YAST, которое упрощает разработчикам автоматизацию задач.

настройка линукс для программиста

Особенности:

6) CentOS Stream

CentOS Stream — это непрерывный выпуск дистрибутива, который позволяет разработчикам оставаться на шаг впереди, поскольку у них будет четкое представление о следующей версии RHEL. CentOS Stream в основном нацелен на то, чтобы помочь разработчикам экосистемы легко писать код для драйверов оборудования.

настройка линукс для программиста

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

Особенности:

Скачать : вы можете скачать CentOS Stream здесь

7) Elementary OS

настройка линукс для программиста

Elementary OS — это дистрибутив, основанный на Ubuntu и одном из самых красивых доступных дистрибутивов. Это также один из лучших дистрибутивов, который очень помогает разработчикам, поскольку он легкий и быстрый.

Рабочее пространство позволяет легко переключаться между приложениями, что упрощает работу разработчиков. Elementary OS обеспечивает полный доступ к своему исходному коду, позволяя разработчикам играть с ним в соответствии со своими требованиями.

Elementary OS недоступна для бесплатной загрузки, но вы можете заплатить сколько хотите и легко загрузить дистрибутив.

Особенности:

8) Raspberry Pi OS

ОС Raspberry Pi, ранее известная как Raspbian, — это еще один удобный для разработчиков дистрибутив Linux, обладающий богатым набором функций. Raspberry Pi поставляется с большим набором инструментов программирования, таких как Python, Geany, BlueJ, Scratch и Mathematica и т. Д.

настройка линукс для программиста

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

Особенности:

Заключение

Хотя доступно множество дистрибутивов Linux, мы выбрали только лучшие из них в нашем списке 8 лучших дистрибутивов Linux для разработчиков. Дистрибутивы Linux очень полезны для разработчиков, потому что вам не нужна лицензия на программное обеспечение, так как вы можете сразу загрузить и начать использовать его.

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

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

Источник

Подборка полезностей для программиста под Linux

Думаю, у каждого программиста есть набор любимых утилит, трюков и знаний. Некоторые он даже использует в работе. Скорее всего, у разных программистов они различаются. Значит, пришло время поделиться. Сегодня я расскажу о своей подборке того, что, вероятно, известно не настолько широко, как оно того заслуживает. Речь пойдёт преимущественно про платформу GNU/Linux.

PMD & CPD

Для начала немного кросс-платформенности. Есть такая утилита — PMD, вероятно, хорошо известная Java-программистам. Это статический анализатор, поддерживающий несколько (не очень много) языков, что и неудивительно — написание содержательных правил анализа вряд ли работа из простых. Но у этой утилиты есть и вторая часть — Copy-Paste Detector (CPD). Для его работы требуется существенно меньшее «понимание» исходного текста, так что логично, что обрабатывает он существенно больше языков.

Так вот, бытует мнение, что опенсорсный проект — это когда нужно писать код не просто, чтобы работал, а ещё и чтобы другие программисты не засмеяли. В случае крупных проектов так оно, наверное, и есть, но вот копипаст не настолько заметен. Ментейнерам, увы, тоже. И вот однажды, получив от разработчиков одной программы комментарий, что «Если здесь и здесь эти три строчки вынести во вспомогательный метод, то и в остальных двадцати местах, наверное, тоже», я решил оценить масштабы происходящего. С одной стороны, повторение паттерна из трёх строчек может выглядеть нестрашно. С другой — он явно имеет какой-то смысл, и контрибьюторам-новичкам будет проще, если смысл будет чётко отражён в имени метода.

обсуждаем чей-то код на работе:
xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.

Недолго думая, я запустил CPD на этом C++-проекте, ожидая увидеть список повторений этого паттерна из трёх строк. Как раз с ним я не столкнулся (он не превысил порог по умолчанию для количества токенов на одно повторение), зато увидел много случаев вроде повторения идентичного метода из 50 строк в двух разных наследниках одного класса.

Вряд ли основной разработчик сознательно скопировал такой кусок — видимо, произошло несколько другое: кто-то когда-то добавил этот метод в одном из классов, а в другом pull request через много времени кто-то, недолго думая, его скопировал. Логично, что этот код был не хуже того, что уже есть в репозитории (ха-ха), поэтому был принят.

Mozilla rr

Бывало ли у вас, что, отлаживая программу, вы долго воспроизводите баг, а потом одно неверное движение — Step over вместо Step into — и всё, пичалька, ещё десять минут всё заново воспроизводить!

Насколько я понимаю, работает это как-то так: все потоки всего записываемого дерева процессов запихиваются в один поток, сводя «описание многопоточности» к количеству инструкций между переключениями контекстов. Из этого следует один недостаток. Когда-то FSF ругался на монополию «архитектуры Wintel», так вот: rr запустится только на «Lintel», то есть только на Linux, и только на свежих (Nehalem и выше) интеловских процессорах, у которых достаточно стабильны performance counter-ы. Были попытки запустить на Ryzen, что-то даже удалось, но есть огрехи. На счёт других ядер ОС — не знаю.

А можно такое же, но с перламутровыми пуговицами?

Во первых, что делать, если хочется отлаживать операционную систему на виртуальной машине? Сам я с таким пока не сталкивался, но, говорят, у QEMU есть gdbserver и вообще. А если хочется того же, что и в rr, но для QEMU? В документации упоминается встроенный record/replay:

Record/replay functions are used for the reverse execution and deterministic replay of qemu execution. Determinitsic replay is used to record volatile system execution once and replay it for multiple times for the sake of analysis, debugging, logging, etc. This implementation of deterministic replay can be used for deterministic and reverse debugging of guest code through a gdb remote interface.

Кстати, первая версия патчей разработана, если верить той же странице, Институтом Системного Программирования РАН.

Видит око, да зуб неймёт

Трассируй и то, и это

Как вы видите, она даже декодирует входные и выходные данные (а вообще, это настраивается).

strace и невидимый суслик, который есть

Бонус

Источник

Изучите необходимый минимум Linux, чтобы быть продуктивным

настройка линукс для программиста

Разные операционные системы длительное время обслуживают различные аудитории: Windows — бизнес-профессионалов, Mac — творческих, а Linux — разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.

В реальности знания и опыт — динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что «можно иметь способности только к чему-то одному» — это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас есть способности ко многим видам деятельности.

Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.

Почему современные бизнес-аналитики должны знать Linux

Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.

В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров — популярная система контроля версий (VCS), которая называется git. Разработчики могли написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux — экосистема, в которой уже были все необходимые инструменты.

Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:

Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов — экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.

Теперь давайте рассмотрим базовые идеи Linux.

Фундаментальная единица Linux: «оболочка»

Shell (оболочка, также известная как терминал, консоль или командная строка) — это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется bash. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию «навести-кликнуть» по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.

настройка линукс для программиста

Изучаем несколько важных концептов

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

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

Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.

Командный синтаксис

Команды соответствуют синтаксису:

Псевдонимы директорий

Полезная информация У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.

STDIN / STDOUT

Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется стандартным вводом (STDIN).

Всё, что программа выводит в ответе в терминал (например текст из файла), называется стандартным выводом (STDOUT)

Конвейер (piping)

Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.

Символ «больше» принимает STDOUT от команды слева и записывает/перезаписывает в новый файл справа

пример: ls > tmp.txt

Два символа «больше» принимают STDOUT от команды слева и добавляют к новому или существующему файлу справа.

пример: date >> tmp.txt

Шаблоны поиска (wildcards)

Завершение с помощью tab

Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.

Однако, стоит попробовать что-то вроде zsh или fish для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.

Выход

Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень часто повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего q. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.

Что я помню из команд bash

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

ssh @ соединиться с удалённой машиной

htop (или top ) диспетчер задач

wgetзагрузить веб-страницу или веб-ресурс

find вывести список всего содержимого директории и её дочерних директорий рекурсивно

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

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

Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *