November 21, 2021

Linux за 30 минут. Руководство по выбору и использованию Linux для новичков

t.me/anon_chan_by

Содержание статьи

  • Какой бывает Linux
  • Ядро
  • Пакетный менеджер
  • Графическая система
  • Командный интерпретатор
  • Домашний каталог и скрытые файлы
  • Ввод-вывод и пайпы
  • Файловые системы
  • Система каталогов
  • Пользователи, права на файлы
  • Ссылки
  • Установка софта
  • Init и systemd
  • Прочие приложения
  • Итоги

Со­вер­шенно не важ­но, какую опе­раци­онку ты пред­почита­ешь иметь на рабочем компь­юте­ре, — Linux сегод­ня бук­валь­но пов­сюду: на сер­верах, на желез­ках вро­де Raspberry Pi, на умных устрой­ствах, на компь­юте­рах в госуч­режде­ниях... Да что там, даже в Windows теперь мож­но запус­кать Linux, что­бы лег­че было, к при­меру, тес­тировать сер­верный софт. Хакеру же ори­енти­ровать­ся в Linux прос­то необ­ходимо.

Ог­ромное количес­тво хакер­ско­го соф­та работа­ет толь­ко на Linux и соб­рано в спе­циали­зиро­ван­ных дис­три­бути­вах вро­де Kali. К тому же при пен­тесте ты час­то будешь стал­кивать­ся с сис­темами на Linux и дол­жен уметь с ними обра­щать­ся. Да и прос­то полез­но иметь опыт работы с этой мощ­ной, абсо­лют­но бес­плат­ной сис­темой. В жиз­ни при­годит­ся, поверь!

В этой статье мы попыта­емся рас­ска­зать все, что сами хотели бы знать, ког­да начина­ли инте­ресо­вать­ся «Линук­сом» мно­го лет назад. Это и теоре­тичес­кие све­дения, которые помогут ори­енти­ровать­ся, и впол­не прак­тичные советы.

Важное предупреждение

По уров­ню слож­ности это не впол­не харак­терная для «Хакера» статья — она рас­счи­тана на сов­сем‑сов­сем новых поль­зовате­лей. Мысль о ней появи­лась, ког­да мы ста­ли ком­поновать под­борку матери­алов об исполь­зовании Linux и обна­ружи­ли, что у нас нет ничего, что подош­ло бы в качес­тве самого начала. А если и есть, то пок­рыто тол­сты­ми мха­ми.

Ес­ли ты про­тив таких ста­тей в «Хакере», можешь, конеч­но, отме­тить­ся в ком­мента­риях, но, пра­во сло­во, луч­ше иди почитай про экс­плу­ата­цию ядра или про то, как писать минима­лис­тичный бэк‑шелл на ассем­бле­ре. Бла­го таких ста­тей у нас боль­шинс­тво и менять в этом пла­не мы ничего не собира­емся.

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

КАКОЙ БЫВАЕТ LINUX

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

Три основных семей­ства дис­три­бути­вов, о которых нуж­но знать в пер­вую оче­редь, — это Debian, Red Hat и Arch. Еще мож­но вспом­нить SUSE, Mandriva и Gentoo, но день­ки их сла­вы уже позади, да прос­тят нас их поль­зовате­ли!

INFO

Chrome OS — это тоже внут­ри впол­не нас­тоящий Linux, и в новых вер­сиях под­держи­вает­ся запуск прог­рамм для Linux. Но в один ряд с дру­гими дис­три­бути­вами эту ОС все же не пос­тавишь.

Из семей­ства ­Debian в пер­вую оче­редь сто­ит обра­тить вни­мание на Ubuntu. Это и есть самый оче­вид­ный выбор, если ты раз­думыва­ешь, с чего начать. Ком­пания Canonical, сто­ящая за Ubuntu, прик­ладыва­ет огромные силы для того, что­бы этот дис­три­бутив хорошо работал и был дру­желю­бен к поль­зовате­лю. Для это­го дис­три­бути­ва име­ется широчай­ший выбор ста­биль­но работа­ющих прог­рамм — ты точ­но не будешь испы­тывать в них недос­татка.

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

Есть и дру­гие популяр­ные дис­три­бути­вы, осно­ван­ные на Debian, — к при­меру, Raspberry Pi OS, MX Linux или Kali Linux. А на Ubuntu базиру­ются Linux Mint, elementary OS и мно­гие дру­гие. Кста­ти, Mint и elementary тоже неп­лохие вари­анты для нович­ков.

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

Что до самого Debian, то его глав­ная фиш­ка — это лицен­зион­ная чис­тота. Раз­работ­чики вни­матель­но сле­дят за тем, что­бы в него не попало ни строч­ки кода, который рас­простра­няет­ся не по сво­бод­ной лицен­зии. Что может быть и пох­валь­но с точ­ки зре­ния иде­оло­гии, но, ког­да ты хочешь осво­ить­ся с Linux, ско­рее все­го, обер­нется раз­ного рода слож­ностя­ми.

К семей­ству дис­три­бути­вов Red Hat отно­сят­ся в пер­вую оче­редь Fedora, Red Hat Enterprise Linux (RHEL) и Rocky Linux. На обыч­ный ПК есть смысл ста­вить «Федору», тог­да как RHEL — это ком­мерчес­кое решение для сер­веров, а Rocky Linux — его неком­мерчес­кий клон, соз­данный сооб­щес­твом.

И наконец, Arch — это край­не инте­рес­ный «гиков­ский» дис­три­бутив, который ты можешь сам соб­рать по кир­пичикам и нас­тро­ить как тебе захочет­ся. Одна­ко нырять в это без пред­варитель­ных поз­наний в Linux не совету­ем. Решая проб­лемы, ты, конеч­но, при­обре­тешь мно­го цен­ных зна­ний, но это далеко не самый прос­той путь, и луч­ше отло­жить хож­дение по нему на потом.

У Arch есть и менее суровые вари­ации — Manjaro и EndeavourOS. В обе­их хотя бы при­сутс­тву­ют заранее нас­тро­енные и под­готов­ленные к работе окру­жения, но тоже аске­тич­ные. С дру­гой сто­роны, отсутс­твие необуз­данно­го раз­нооб­разия может быть плю­сом при пер­вом зна­комс­тве, так что начинать с Manjaro — не такая пло­хая идея. Осо­бен­но если ты пла­ниру­ешь ста­вить Linux на сла­бый компь­ютер.

Not Unix

В чем отли­чие Linux от Unix? Если очень‑очень упростить, то мож­но ска­зать, что Unix — это пре­док Linux. Более слож­ный и раз­верну­тый ответ тре­бует нем­ного углу­бить­ся в исто­рию.

В семиде­сятые годы Ричард Стол­лман при­думал кло­ниро­вать ком­мерчес­кий и по тем вре­менам дорогос­тоящий Unix и соз­дать свою опе­раци­онку, которую он наз­вал GNU is not Unix или прос­то GNU. Стол­лман и ком­пания перепи­сали все ком­понен­ты Unix и опуб­ликова­ли их под при­думан­ной ими «вирус­ной» лицен­зией GPL.

Из­началь­но сло­вом Linux называ­ли толь­ко соз­данное Линусом Тор­валь­дсом ядро. Но наз­вание Linux и мас­кот‑пин­гвин быс­тро при­жились, и ими теперь обоз­нача­ют всю ОС — нес­мотря на воз­ражения Стол­лма­на и прось­бы писать толь­ко GNU/Linux.

Linux в эпо­ху интерне­та стал быс­тро набирать популяр­ность, и ком­мерчес­ким вари­антам Unix со вре­менем прос­то не оста­лось мес­та. Тем не менее до сих пор живы его потом­ки — опе­раци­онные сис­темы FreeBSD и OpenBSD, которые теперь бес­плат­ны и мно­гое заимс­тву­ют из сов­ремен­ного «Линук­са». Кста­ти, на FreeBSD осно­ваны macOS и iOS.

По­луча­ется, что выбор дис­три­бути­ва — это в пер­вую оче­редь выбор под­хода и даже иде­оло­гии. Одна­ко более при­зем­ленным ори­енти­ром обыч­но слу­жит набор основных ком­понен­тов, из которых стро­ятся дис­тры. Давай обсу­дим глав­ные из них.

ЯДРО

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

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

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

ПАКЕТНЫЙ МЕНЕДЖЕР

Лю­бой Linux сос­тоит из тысяч мел­ких ком­понен­тов — прог­рамм, биб­лиотек и ресур­сов (нап­ример, фай­лов кон­фигура­ции, наборов ико­нок и так далее). Рас­простра­няют­ся они в виде пакетов (package).

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

Очень час­то один пакет тре­бует для работы наличия дру­гих, и сле­дить за эти­ми зависи­мос­тями вруч­ную на сов­ремен­ной сис­теме невоз­можно. Поэто­му осно­ва каж­дого дис­три­бути­ва — это пакет­ный менед­жер, который рулит уста­нов­кой и обновле­нием соф­та. В дис­три­бути­вах, осно­ван­ных на Debian, он называ­ется APT, в Red Hat — DNF, а в Arch — pacman.

Па­кеты менед­жер берет из репози­тория — боль­шого скла­да, куда соз­датели дис­три­бути­ва заг­ружа­ют их. Репози­тори­ев зачас­тую мож­но под­клю­чить сра­зу нес­коль­ко. Нап­ример, в Ubuntu есть четыре основных: Main (под­держи­ваемый раз­работ­чиками), Universe (под­держи­ваемый сооб­щес­твом), Restricted (с проп­риетар­ным ПО) и Multiverse (с ПО, на которые дей­ству­ют нес­вобод­ные лицен­зии).

Пос­коль­ку вско­ре пос­ле уста­нов­ки Linux ты обна­ружишь необ­ходимость в драй­верах для железа, допол­нитель­ных шриф­тах, кодеках и тому подоб­ных вещах, ско­рее все­го, понадо­бит­ся раз­решить сис­теме дос­туп к запят­нанным ком­мерци­ей репози­тори­ям. В Ubuntu это дела­ется в меню «Прог­раммы и обновле­ния».

ГРАФИЧЕСКАЯ СИСТЕМА

Да­леко не каж­дый Linux снаб­жен гра­фичес­кой сис­темой или вооб­ще нуж­дает­ся в ней — очень мно­гие дей­ствия здесь мож­но делать и из коман­дной стро­ки. Одна­ко сов­ремен­ный рабочий стол — это все же икон­ки и окош­ки.

Что­бы работать с гра­фикой, в Linux дол­жны при­сутс­тво­вать сер­вер дис­плея X.Org (тра­дици­онный вари­ант) либо новомод­ный ком­позитор Wayland, на который сей­час перехо­дят наибо­лее передо­вые дис­три­бути­вы. Плюс тре­бует­ся окон­ный менед­жер — прог­рамма, которая отве­чает за то, как выг­лядят и работа­ют эле­мен­ты интерфей­са.

Впро­чем, это всё доволь­но низ­коуров­невые под­робнос­ти, нырять в которые с ходу не обя­затель­но. Куда ско­рее тебе при­дет­ся задумать­ся о выборе рабочей сре­ды (Desktop Environment, DE). Это совокуп­ность окон­ного менед­жера и раз­ного рода прог­рамм, мел­ких (нап­ример, рису­ющих раз­ные панели, рабочий стол, вид­жеты) и круп­ных — вро­де фай­лового менед­жера. Сюда же обыч­но вхо­дит и набор базово­го соф­та: кален­дарь, поч­товик и про­чее в таком духе.

Са­мые извес­тные окон­ные сре­ды — это GNOME и KDE. Но в реаль­нос­ти их спи­сок гораз­до длин­нее. Любите­ли минима­лиз­ма могут прис­мотреть­ся к Xfce или LXDE, а Ratpoison, dwm, i3 и xmonad пре­дос­тавля­ют сре­ду с неперек­рыва­ющи­мися окна­ми, что некото­рые находят удоб­ным.

А еще от GNOME отва­лились про­екты MATE и Cinnamon — их раз­работ­чикам не пон­равил­ся интерфейс GNOME 3, и они про­дол­жили раз­вивать вто­рую вет­ку. А в elementary OS исполь­зует­ся своя сре­да под наз­вани­ем Pantheon, которую не встре­тишь боль­ше ниг­де. В общем, раз­нооб­разие огромно!

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

КОМАНДНЫЙ ИНТЕРПРЕТАТОР

Поль­зовате­ли Windows при­вык­ли к тому, что в этой опе­раци­онной сис­теме име­ется стан­дар­тный интер­пре­татор команд cmd.exe, который при­нято называть коман­дной стро­кой. В пос­ледних вер­сиях вин­ды его орга­нич­но допол­нил PowerShell, одна­ко эти­ми дву­мя сре­дами ассорти­мент коман­дных интер­пре­тато­ров в Windows исчерпы­вает­ся.

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

Собс­твен­но, сама исто­рия Linux началась имен­но с коман­дной стро­ки, точ­нее тер­минала или даже телетай­па. Гра­фичес­кий интерфейс к нему при­дела­ли уже зна­читель­но поз­же. Имен­но поэто­му коман­дную стро­ку в Linux час­то называ­ют «эму­лятор тер­минала», а про­цес­сы с ними носят пре­фикс tty (teletype).

Как ты зна­ешь, с исполь­зовани­ем команд в Windows мож­но писать скрип­ты, авто­мати­зиру­ющие какие‑либо дей­ствия: пакет­ные фай­лы (batch files) были в ходу еще со вре­мен MS-DOS, а PowerShell замет­но рас­ширил и углу­бил эту тех­нологию. В Linux мож­но делать то же самое: соб­ранный в файл набор команд интер­пре­тато­ра может работать как слож­ная прог­рамма, а сами коман­ды явля­ются по боль­шому сче­ту язы­ком прог­рамми­рова­ния.

На­боры команд, сох­ранен­ные одним фай­лом, при­нято называть сце­нари­ями или скрип­тами. Все скрип­ты в Linux начина­ются с сим­волов #! (это сочета­ние называ­ется «шебанг») и пути к интер­пре­тато­ру — коман­де, которая будет исполнять скрипт.

Стан­дар­тным коман­дным интер­пре­тато­ром в Linux явля­ется bash — обновлен­ная и модер­низиро­ван­ная вер­сия коман­дной обо­лоч­ки Bourne shell, которая была изоб­ретена Сти­веном Бор­ном в 1978 году и исполь­зовалась еще в клас­сичес­ком Unix.

Прож­женные линук­соиды пред­почита­ют ста­вить вмес­то bash более прод­винутый интер­пре­татор — Z shell (ZSH), обратно сов­мести­мый с bash, но име­ющий по срав­нению с ним мно­жес­тво улуч­шений. Для этой обо­лоч­ки сооб­щес­твом был раз­работан спе­циаль­ный откры­тый и бес­плат­ный фрей­мворк Oh My ZSH, который содер­жит мно­жес­тво пла­гинов для авто­мати­зации работы с коман­дами и скрип­тами. Как минимум Oh My ZSH поз­воля­ет исполь­зовать кра­сивые темы офор­мле­ния окна коман­дной стро­ки, бла­года­ря которым окру­жающие точ­но соч­тут тебя гени­аль­ным хакером.

INFO

Под­робнее о ZSH и Oh My ZSH читай в статье «Про­качай тер­минал! Полез­ные трю­ки, которые сде­лают тебя гуру кон­соли».

Пре­дуп­редим о проб­леме, с которой момен­таль­но стал­кива­ется каж­дый новый поль­зователь Linux. Если ты зай­дешь в какой‑то каталог и попыта­ешь­ся написать наз­вание исполня­емо­го фай­ла, что­бы запус­тить его, то ничего не получит­ся. Почему?

При­чина в том, что интер­пре­татор ищет фай­лы толь­ко в катало­гах, которые ука­заны в перемен­ной окру­жения $PATH. То есть тебе нуж­но либо задать пол­ный путь к исполня­емо­му фай­лу, либо явно ука­зать на текущий каталог. Как ты зна­ешь, родитель­ский каталог отме­чает­ся дву­мя точ­ками (../), а что­бы ука­зать на текущий, нуж­но писать ./. То есть вмес­то program пиши ./program, и все получит­ся!

И еще один очень важ­ный момент. В Windows тип фай­ла опре­деля­ется его рас­ширени­ем — в зависи­мос­ти от него коман­дный интер­пре­татор и обо­лоч­ка опре­деля­ют, как они будут обра­баты­вать файл. В Linux все устро­ено нем­ного по‑дру­гому: у bash пол­ностью отсутс­тву­ет какое‑либо ува­жение к рас­ширени­ям фай­лов. Исполня­емый файл отли­чает­ся от обыч­ного не рас­ширени­ем, а наличи­ем пра­ва на его исполне­ние: если оно есть, сис­тема счи­тает такой файл прог­раммой (или скрип­том) и пыта­ется выпол­нить. О пра­вах на фай­лы мы под­робнее погово­рим чуть даль­ше в соот­ветс­тву­ющем раз­деле.

ДОМАШНИЙ КАТАЛОГ И СКРЫТЫЕ ФАЙЛЫ

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

Что­бы ука­зывать на домаш­ний каталог, очень удоб­но исполь­зовать сим­вол ~. Так, вмес­то /home/vasya/ мож­но писать прос­то ~/, если ты залоги­нен как vasya.

В Linux час­то встре­чает­ся то, что в Windows поп­росту невоз­можно: фай­лы, имя которых начина­ется с точ­ки (поль­зовате­ли вин­ды с неп­ривыч­ки дума­ют, буд­то это фай­лы без име­ни, име­ющие одно толь­ко рас­ширение). На самом деле в Linux так обоз­нача­ют скры­тые фай­лы. Нап­ример, имя .htacess говорит нам о том, что этот файл скры­тый, — бла­года­ря наличию точ­ки перед име­нем его лег­ко отли­чить от дру­гих фай­ловых объ­ектов.

В домаш­нем катало­ге поль­зовате­ля хра­нит­ся нес­коль­ко скры­тых фай­лов, которые могут быть очень полез­ны при работе в Linux. Что­бы прос­мотреть скры­тые фай­лы в текущем катало­ге, исполь­зуй кон­соль­ную коман­ду ls -a или поковы­ряй­ся в меню фай­лового менед­жера: нап­ример, в Nautilus пункт «Показать скры­тые фай­лы» пря­чет­ся в меню «Вид». Обра­ти вни­мание на сле­дующие скры­тые фай­лы:

  • .bash_profile — содер­жит информа­цию о поль­зователь­ском окру­жении и запус­каемых при авто­риза­ции поль­зовате­ля прог­раммах. В некото­рых дис­три­бути­вах, осно­ван­ных на Debian, дан­ного фай­ла по умол­чанию не сущес­тву­ет, но ты можешь соз­дать его самос­тоятель­но;
  • .bash_login — этот файл исполня­ется, если отсутс­тву­ет .bash_profile, и выпол­няет схо­жую фун­кцию. Это­го фай­ла не сущес­тву­ет по умол­чанию ни в дис­три­бути­ве Debian, ни в дис­три­бути­ве Red Hat;
  • .profile — выпол­няет­ся при отсутс­твии .bash_profile и .bash_login;
  • .bash_logout — сце­нарий, который выпол­няет­ся авто­мати­чес­ки при завер­шении работы коман­дной обо­лоч­ки;
  • .bash_history — хра­нит информа­цию обо всех коман­дах, наб­ранных в bash;
  • .ssh — каталог, в котором хра­нят­ся клю­чи шиф­рования для под­клю­чения по SSH;
  • .bashrc — сце­нарий, который обыч­но нас­тра­ивает­ся дру­гими сце­нари­ями для сво­их собс­твен­ных нужд — нап­ример, запус­ка демонов или обра­бот­ки каких‑либо команд.

Необходимый минимум команд

Итак, запоми­най самые важ­ные коман­ды, если еще не зна­ешь их:

  • man — чуть ли не самая важ­ная коман­да — она отоб­ража­ет справ­ку о коман­де, наз­вание которой ты напишешь сле­дом;
  • ls (от сло­ва list, спи­сок) — перечис­лить все фай­лы в текущей дирек­тории, ана­лог вин­довой коман­ды dir. Самые важ­ные клю­чи: -a (all) — показы­вать скры­тые фай­лы, -l (long) — показы­вать под­робнос­ти, -h (human) — показы­вать раз­меры в «челове­чес­ких» еди­ницах, а не в бай­тах. Мож­но писать все клю­чи сра­зу: ls -lha;
  • cd (change directory) — сме­нить дирек­торию. Даль­ше мож­но ука­зать пап­ку, в которую ты хочешь перей­ти;
  • pwd (print working directory) — узнать текущий путь;
  • cp (copy) — ско­пиро­вать файл. Даль­ше нуж­но ука­зать, что и куда копиро­вать;
  • mv (move) — перемес­тить файл. Тоже ука­зыва­ем какой, затем — куда;
  • rm (remove) — сте­реть файл. Если сти­раешь каталог, ука­зывай опцию -r (recursive), что­бы сте­реть все под­катало­ги внут­ри, под­катало­ги внут­ри них и так далее;
  • chmod и chown — поменять пра­ва на файл или вла­дель­ца фай­ла;
  • cat (concatenate) — при­дума­на, что­бы объ­еди­нять фай­лы, но час­то исполь­зует­ся, что­бы все­го лишь вывес­ти содер­жимое тек­сто­вого фай­ла. Прос­то напиши его наз­вание пос­ле cat;
  • less — если файл длин­ный, то его удоб­но прок­ручивать. Для это­го и при­дума­на коман­да less;
  • head и tail — с опци­ей -n число показы­вают сколь­ко‑то строк от начала (head) или кон­ца (tail) ука­зан­ного фай­ла;
  • grep — поиск в стро­ке по подс­тро­ке или регуляр­ному выраже­нию;
  • find — поиск фай­лов;
  • mkdir (make directory) — соз­дание дирек­тории;
  • touch — соз­дание пус­того фай­ла. Прос­то ука­жи его наз­вание;
  • sudo — выпол­нить сле­дующую далее коман­ду от име­ни супер­поль­зовате­ля;
  • df (disk free) — пос­мотреть, сколь­ко на дис­ках сво­бод­ного мес­та. Рекомен­дую писать df -h по ана­логии с ls -h;
  • du (disk usage) — узнать, сколь­ко занима­ет каталог. Тоже есть опция -h;
  • ps (processes) — пос­мотреть спи­сок запущен­ных тобой про­цес­сов и их иден­тифика­торы;
  • kill и иден­тифика­тор — завер­шить какой‑то про­цесс.

Нес­коль­ко важ­ных сетевых команд:

  • ping — попин­говать узел;
  • nslookup — узнать информа­цию об узле;
  • traceroute — прос­ледить путь пакетов до узла;
  • netstat — информа­ция об откры­тых пор­тах и соеди­нени­ях;
  • whois — информа­ция о регис­тра­ции домена.

По­мимо это­го, в Linux обыч­но есть нес­коль­ко ути­лит, которые силь­но облегчат тебе жизнь. Если их нет, то сто­ит их уста­новить:

  • git — популяр­ней­шая сис­тема кон­тро­ля вер­сий, как и ядро Linux, соз­данная Линусом Тор­валь­дсом;
  • nano — прос­тей­ший тек­сто­вый редак­тор, работа­ющий в тер­минале;
  • unzip и unrar — думаю, ты догады­ваешь­ся, зачем они нуж­ны;
  • curl нужен для веб‑зап­росов;
  • wget — для ска­чива­ния боль­ших фай­лов;
  • htop показы­вает уро­вень заг­рузки сис­темы и спи­сок про­цес­сов.

Важ­но: вый­ти из прог­рамм, которые не зак­рыва­ются сами, обыч­но мож­но, нажав Q. Прер­вать работу — Ctrl-C. А что­бы вый­ти из vim, если ты его открыл слу­чай­но, набери пос­ледова­тель­ность :q! и наж­ми Enter.

ВВОД-ВЫВОД И ПАЙПЫ

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

Стан­дар­тный поток вво­да, к которо­му по умол­чанию «при­вяза­на» кла­виату­ра, называ­ется standard input (stdin). Стан­дар­тный поток вывода носит наз­вание standard output (stdout). Сущес­тву­ет и отдель­ный поток вывода, пред­назна­чен­ный исклю­читель­но для сооб­щений об ошиб­ках. Он называ­ется standard error, или stderr. По умол­чанию с эти­ми дву­мя потока­ми вывода свя­зан монитор.

По­токи при­ложе­ний и команд мож­но перенап­равлять в фай­лы или в дру­гие коман­ды. Пос­коль­ку стан­дар­тные потоки вво­да/вывода пред­назна­чены в основном для обме­на тек­сто­вой информа­цией, такое перенап­равле­ние поз­воля­ет наладить «обще­ние» прог­рамм меж­ду собой.

Са­мый прос­той при­мер подоб­ного обще­ния — это ког­да мы переда­ем стан­дар­тный вывод (stdout) одной прог­раммы на стан­дар­тный ввод (stdin) дру­гой. Такой вари­ант перенап­равле­ния обоз­нача­ется в Linux сим­волом | и называ­ется тер­мином «кон­вей­ер» или «пайп» (pipe). Нап­ример, если мы исполь­зуем запись вида команда 1 |команда 2, это будет озна­чать, что весь стан­дар­тный вывод коман­ды 1, который по умол­чанию был бы нап­равлен на дис­плей (stdout), будет передан на стан­дар­тный ввод (stdin) коман­ды 2. Это и есть реали­зация прос­тей­шего пай­па или кон­вей­ера.

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

$ команда | grep [опции] шаблон

где команда — это коман­да, стан­дар­тный вывод которой перенап­равля­ется коман­де grep;

опции — это раз­личные парамет­ры поис­ка;

шаблон — стро­ка или зна­чение, которые мы ищем.

Нап­ример, коман­да ls | grep string озна­чает, что мы, получив спи­сок содер­жимого текущей дирек­тории c помощью кон­соль­ной коман­ды ls, ищем в нем файл или пап­ку, в име­ни которых содер­жится стро­ка string.

Еще вывод коман­ды быва­ет удоб­но перенап­равить в файл. Напиши ls -lha > list.txt, и получишь файл list.txt с под­робным перечис­лени­ем все­го, что содер­жится в текущем катало­ге.

Полезные шпаргалки

Вся мощь команд Linux — в допол­нитель­ных парамет­рах, которые ты можешь ука­зать. Что­бы узнать о них, нуж­но читать справ­ку (man), но есть спо­собы схит­рить и облегчить себе жизнь.

  • tldr pages — сок­ращен­ная вер­сия man, в которой дотош­ные опи­сания пок­ромса­ли до абсо­лют­ного миниму­ма (под­робнее);
  • cheat.sh — онлай­новая база дан­ных с при­мера­ми популяр­ных вари­антов команд (под­робнее);
  • Marker — похожая шту­ка, но офлай­новая и с под­сказ­ками «на лету» (под­робнее);
  • explainshell.com — сер­вис, который авто­мати­чес­ки раз­бира­ет слож­ную коман­ду и объ­ясня­ет зна­чение ее сос­тавных час­тей.

За­пом­нить все парамет­ры всех команд невоз­можно, поэто­му даже заяд­лые линук­соиды при­бега­ют к таким хит­ростям (и неус­танно изоб­рета­ют всё новые)!

ФАЙЛОВЫЕ СИСТЕМЫ

В Linux есть под­дер­жка раз­ных фай­ловых сис­тем. Любой сов­ремен­ный Linux по умол­чанию уста­нав­лива­ется на ext4 и тре­бует соз­дания отдель­ного раз­дела типа Swap (ана­лог фай­ла под­качки в Windows). Помимо это­го, обыч­но под­держи­вают­ся дис­ки ext2 и ext3, XFS и FAT раз­ных вер­сий. В Ubuntu и некото­рых дру­гих дис­три­бути­вах из короб­ки дос­тупна работа с раз­делами NTFS на чте­ние и запись. Что до маков­ских HFS+ и APFS, то для них обыч­но тре­бует­ся отдель­ный драй­вер.

Что­бы работать с какой‑то ФС (рас­положен­ной на жес­тком дис­ке или на внеш­нем носите­ле), ее нуж­но при­мон­тировать, а перед завер­шени­ем работы — демон­тировать. За это отве­чают коман­ды mount и umount. В фай­ле /etc/fstab ука­зыва­ются сис­темы, которые Linux будет мон­тировать авто­мати­чес­ки при заг­рузке.

От­дель­ного упо­мина­ния зас­лужива­ет сис­тема FUSE — Filesystem in Userspace (в про­тиво­вес под­дер­жке на уров­не ядра). Через эту шту­ку мож­но под­клю­чать непод­держи­ваемые по умол­чанию фай­ловые сис­темы или даже сде­лать подобие фай­ловой сис­темы из API облачно­го сер­виса. Под­робнее об этом читай в статье «Все есть файл! Мон­тиру­ем Git-репози­тории, FTP- и SSH-ресур­сы, ZIP-архи­вы, тор­ренты, маг­нитные ссыл­ки и мно­гое дру­гое».

СИСТЕМА КАТАЛОГОВ

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

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

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

Итак, давай пос­мотрим на струк­туру катало­гов, которую ты уви­дишь поч­ти в любом Linux:

  • / — кор­невая пап­ка, или, как ее еще называ­ют, root directory — пап­ка, в которой хра­нит­ся все осталь­ное содер­жимое фай­ловой сис­темы;
  • /bin (от сло­ва binary) — здесь лежат дво­ичные исполня­емые фай­лы со все­ми основны­ми коман­дами;
  • /boot — здесь рас­положен заг­рузчик и ядро ОС (фай­лы vmlinuz — это как раз оно и есть);
  • /dev — фай­лы в этой пап­ке — это пор­ты и устрой­ства. Работая с эти­ми фай­лами, при­ложе­ния и драй­веры могут обме­нивать­ся информа­цией нап­рямую с обо­рудо­вани­ем. Впро­чем, некото­рые фай­лы — это не нас­тоящие устрой­ства, а вир­туаль­ные. Нап­ример, зна­мени­тый /dev/null при­нима­ет любую информа­цию и ничего с ней не дела­ет, а /dev/random генери­рует слу­чай­ные чис­ла;
  • /etc — в этой пап­ке содер­жатся обще­сис­темные фай­лы кон­фигура­ции (тог­да как поль­зователь­ские фай­лы кон­фигура­ции находят­ся в домаш­нем катало­ге каж­дого поль­зовате­ля). Если ты адми­нис­тра­тор сис­темы, то сюда при­дет­ся час­то заг­лядывать при нас­трой­ке раз­ных прог­рамм;
  • /home — в этой пап­ке содер­жатся домаш­ние катало­ги поль­зовате­лей Linux. Нап­ример, если твое имя поль­зовате­ля — xakep, твоя домаш­няя пап­ка будет называть­ся /home/xakep/;
  • /lib — пап­ка для хра­нения биб­лиотек, необ­ходимых исполня­емым фай­лам в пап­ках bin и sbin;
  • /lost+found — в эту пап­ку сох­раня­ются вос­ста­нов­ленные в слу­чае сис­темно­го сбоя фай­лы;
  • /media — в некото­рых сис­темах допол­нитель­ный каталог, где отоб­ража­ются все смон­тирован­ные в сис­теме съем­ные носите­ли информа­ции. В ста­рых ОС может называть­ся /cdrom;
  • /mnt — пап­ка, содер­жащая вре­мен­ные точ­ки мон­тирова­ния: сюда мон­тиру­ются фай­ловые сис­темы для вре­мен­ного исполь­зования;
  • /opt — каталог содер­жит под­катало­ги для допол­нитель­ных пакетов прог­рам­мно­го обес­печения. Обыч­но исполь­зует­ся проп­риетар­ным ПО, которое не под­чиня­ется стан­дар­тной иерар­хии фай­ловой сис­темы Linux;
  • /proc — каталог со спе­циаль­ными фай­лами, которые пре­дос­тавля­ют информа­цию о сис­теме и про­цес­сах;
  • /root — домаш­ний каталог супер­поль­зовате­ля root;
  • /run — этот каталог пре­дос­тавля­ет при­ложе­ниям стан­дар­тное мес­то для фай­лов, сущес­тву­ющих толь­ко во вре­мя работы сис­темы (отсю­да наз­вание), таких как сокеты и иден­тифика­торы про­цес­сов;
  • /sbin — эта пап­ка по сво­ему наз­начению ана­логич­на пап­ке bin. Здесь лежат дво­ичные исполня­емые фай­лы, которые обыч­но пред­назна­чены для запус­ка поль­зовате­лем root в целях сис­темно­го адми­нис­три­рова­ния;
  • /tmp — пап­ка для хра­нения вре­мен­ных фай­лов по умол­чанию;
  • /srv — содер­жит дан­ные о сер­висах, пре­дос­тавля­емых сис­темой;
  • /usr — в этой пап­ке содер­жатся при­ложе­ния и фай­лы поль­зовате­лей сис­темы. В ста­рых Unix это был ана­лог /home, но затем эти вещи раз­делили. Условно: в /usr/ — прог­раммы, в /home — вся­кое барах­ло. Находя­щиеся здесь катало­ги /usr/bin, /usr/sbin и /usr/lib рань­ше име­ли то же наз­начение, что и ана­логи, лежащие в кор­не, но для фай­лов поль­зовате­лей (в то вре­мя как пап­ки в кор­не — для фай­лов, исполь­зуемых самой сис­темой). А еще есть каталог /usr/local, где есть свои bin, sbin и lib! Ког­да‑то под­разуме­валось, что здесь будут прог­раммы, спе­цифич­ные для кон­крет­ного компь­юте­ра, то есть в теории завися­щие от его железа. На прак­тике софт сюда попада­ет по самым раз­ным при­чинам;
  • /var — от сло­ва variable, то есть что‑то, что может менять­ся. Здесь лежат бэкапы, кеши, биб­лиоте­ки, логи и тому подоб­ные вещи. Одна из важ­ных дирек­торий — это /var/www, где хра­нят­ся дан­ные веб‑сай­тов, если на машине уста­нов­лен веб‑сер­вер.

Ес­ли эта сис­тема катало­гов кажет­ся тебе нем­ного запутан­ной, не вол­нуй­ся, это совер­шенно нор­маль­но! Она соз­давалась годами, и что вырос­ло, то вырос­ло. Упро­щать ее в бли­жай­шем будущем ник­то не собира­ется, пос­коль­ку она стан­дар­тна и любые изме­нения пов­лияют на сов­мести­мость.

ПОЛЬЗОВАТЕЛИ, ПРАВА НА ФАЙЛЫ

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

Важ­но пом­нить, что в Linux сущес­тву­ет супер­поль­зователь с име­нем root, обла­дающий пол­ными адми­нис­тра­тор­ски­ми при­виле­гиями в опе­раци­онной сис­теме, — так ска­зать, самый глав­ный босс всех бос­сов. Он может соз­давать и уда­лять учет­ки дру­гих юзе­ров и вооб­ще менять гло­баль­ные нас­трой­ки ОС. Любой юзер может вре­мен­но побывать в роли root с помощью коман­ды sudo (Substitute User and do, дос­ловно «под­менить поль­зовате­ля и выпол­нить»). Но сра­бота­ет этот sudo, толь­ко если ты зна­ешь пароль от учет­ной записи супер­поль­зовате­ля.

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

  • r (read) — раз­решение на чте­ние фай­ла;
  • w (write) — раз­решение на запись в файл;
  • x (execute) — раз­решение на запуск фай­ла;
  • - (про­черк) — раз­решение не уста­нов­лено.

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

  • вла­делец — поль­зователь, который соз­дал этот файл или наз­начен его вла­дель­цем. Вла­дель­цем фай­ла может быть не толь­ко учет­ная запись, но и сама опе­раци­онная сис­тема или при­ложе­ние, которое соз­дало файл;
  • груп­па — груп­па поль­зовате­лей, «при­вязан­ная» к дан­ному фай­лу. Ты можешь узнать, к какой груп­пе поль­зовате­лей отно­сит­ся твоя учет­ная запись, с помощью кон­соль­ной коман­ды groups <username>. Спи­сок всех зарегис­три­рован­ных в сис­теме групп обыч­но хра­нит­ся в пап­ке /etc/group;
  • дру­гие — все, кто не отно­сит­ся к вла­дель­цу фай­лового объ­екта или груп­пам поль­зовате­лей.

Та­ким обра­зом, раз­решения дос­тупа к любому фай­лу или пап­ке мож­но записать в виде стро­ки, сос­тоящей из девяти сим­волов и име­ющей сле­дующий вид:

rwxrwxrwx

Пер­вые три сим­вола здесь опре­деля­ют раз­решения для вла­дель­ца фай­лового объ­екта, вто­рые — для груп­пы, к которой отно­сит­ся вла­делец фай­ла или пап­ки, пос­ледние три — для всех осталь­ных. Раз­решения всег­да сле­дуют имен­но в таком поряд­ке: «чте­ние, запись, запуск», то есть rwx. Нап­ример, обоз­начение вида rwxrw-r-- озна­чает, что вла­делец это­го фай­ла может делать с ним что угод­но, чле­ны его груп­пы — толь­ко читать и писать в файл, но не запус­кать его (раз­решение x не уста­нов­лено), а всем осталь­ным поль­зовате­лям сис­темы файл дос­тупен толь­ко на чте­ние.

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

Прос­мотреть пра­ва и раз­решения фай­лов и папок мож­но с помощью кон­соль­ной коман­ды ls, снаб­женной клю­чом -l.

Что­бы изме­нить пра­ва дос­тупа, сущес­тву­ет коман­да chmod (Change Mode). При помощи этой коман­ды мож­но даже не про­писы­вать все тре­буемые раз­решения вруч­ную: для лен­тяев в Linux пре­дус­мотре­ны циф­ровые обоз­начения стан­дар­тных наборов раз­решений. Нап­ример, коман­да chmod 755 filename прис­воит фай­лу filename раз­решения rwxr-xr-x (каж­дый поль­зователь име­ет пра­во читать и запус­кать на выпол­нение; вла­делец может редак­тировать), chmod 777 filename даст на выходе rwxrwxrwx (все могут делать все, что захотят), а «дьяволь­ская» коман­да chmod 666 filename — вер­нет rw-rw-rw- (все поль­зовате­ли могут читать и редак­тировать файл).

В сов­ремен­ном Linux сущес­тву­ют еще так называ­емые спе­циаль­ные раз­решения, но их мы рас­смат­ривать не будем: для начала информа­ции впол­не дос­таточ­но, что­бы чувс­тво­вать себя в сис­теме более‑менее уве­рен­но.

ССЫЛКИ

В Windows сущес­тву­ют ярлы­ки — что это такое, объ­яснять, дума­ем, никому не нуж­но. В Linux вмес­то них ссыл­ки, при­чем двух видов — жес­ткие и сим­воличес­кие.

Жес­ткая ссыл­ка — это, счи­тай, наз­вание фай­ла. Прос­то в Linux их у фай­ла может быть нес­коль­ко, при­чем находить­ся они могут в раз­ных катало­гах. Сле­дова­тель­но, если ты соз­дашь жес­ткую ссыл­ку, а потом уда­лишь исходный файл, то он по‑преж­нему будет дос­тупен по ссыл­ке — ведь она ничем не хуже исходно­го наз­вания, которое ты стер!

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

Сим­воличес­кие ссыл­ки боль­ше похожи на стан­дар­тные ярлы­ки Windows. Они содер­жат адрес целево­го фай­ла или катало­га (жес­тких ссы­лок на каталог не быва­ет), и если он исчезнет, то ссыл­ка будет вес­ти «в никуда».

Жес­ткие ссыл­ки соз­дают­ся коман­дой ln файл ссылка, а если нуж­но сде­лать сим­воличес­кую ссыл­ку, добавь ключ -s.

УСТАНОВКА СОФТА

Те­бе, конеч­но, ник­то не меша­ет заг­рузить прог­рамму в виде одно­го бинар­ного фай­ла и запус­тить. Глав­ное — не забыть дать ему пра­ва на исполне­ние! Но такие отдель­но сто­ящие фай­лы — ред­кость. Обыч­но, что­бы прог­рамма работа­ла, в сис­тему нуж­но уста­новить сра­зу мно­го все­го. Имен­но поэто­му прог­раммы рас­простра­няют­ся в виде пакетов через репози­торий.

Нап­ример, в Ubuntu для уста­нов­ки пакета дос­таточ­но написать sudo apt install пакет. Одна­ко рекомен­дует­ся сна­чала сде­лать sudo apt update, что­бы ОС обно­вила свой спи­сок пакетов и узна­ла о выходе новых вер­сий.

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

При исполь­зовании такой сис­темы уста­нов­ки прак­тичес­ки бес­полез­но пытать­ся выяс­нить, куда же уста­нови­лась прог­рамма. Если тебе вдруг понадо­бит­ся уда­лить ее, пиши apt remove пакет, и его содер­жимое покинет твой диск, а вмес­те с ним уйдут и все ком­понен­ты, которые ник­то, кро­ме него, не исполь­зовал.

Но Linux — это стра­на сво­бод­ных исходных кодов, а потому сбор­ка прог­раммы из исходни­ков — обыч­ное дело. Счи­тай, что вмес­то крес­ла ты купил «конс­трук­тор» из IKEA. Важ­ное отли­чие от нее зак­люча­ется в том, что вмес­то инс­трук­ции со смеш­ными человеч­ками ты получа­ешь Makefile — сце­нарий для прог­раммы make, который соберет все сам на авто­пило­те. А по дороге он изу­чит и учтет все осо­бен­ности тво­ей сис­темы либо наруга­ется на тебя из‑за отсутс­твия каких‑то ком­понен­тов (в отли­чие от пакет­ного менед­жера, который уста­новил бы их сам).

Итак, пред­положим, ты нашел на гит­хабе ути­литу nnn (это такой минима­лис­тичный фай­ловый менед­жер, работа­ющий в тер­минале) и хочешь ее уста­новить из исходни­ков. Тебе понадо­бит­ся сде­лать сле­дующее.

  1. Удос­товерить­ся, что у тебя в сис­теме есть сам Git. Если его нет — уста­нови:
  2. sudo apt install git
  3. Ус­тановить зависи­мос­ти для nnn. Все их собирать из исходни­ков — нем­ного слиш­ком, поэто­му прос­то пиши
  4. sudo apt install pkg-config libncursesw5-dev libreadline-dev
  5. Те­перь пора дос­тать nnn с GitHub. Это дела­ется такой коман­дой:
  6. git clone https://github.com/jarun/nnn.git
  7. За­ходи в ска­чан­ный каталог: cd nnn.
  8. Пи­ши make и жми Enter. Эта коман­да най­дет Makefile и выпол­нит инс­трук­ции по ком­пиляции.
  9. Пи­ши sudo make install — эта коман­да раз­ложит соз­данные бинар­ные фай­лы по катало­гам.

Го­тово! Можешь писать nnn, находясь в любом катало­ге, и фай­ловый менед­жер запус­тится.

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

Кста­ти, помимо бинар­ных пакетов, в репози­тори­ях быва­ют и пакеты с исходни­ками. Их сбор­ка прой­дет на авто­мате и поз­волит не морочить­ся с уста­нов­кой зависи­мос­тей.

В пос­леднее вре­мя набира­ют популяр­ность новые сис­темы уста­нов­ки, в которых прог­раммы рас­простра­няют­ся вмес­те со все­ми зависи­мос­тями и биб­лиоте­ками: AppImage, Flatpak и Snap. Это менее эко­ном­ный метод, но более удоб­ный и надеж­ный. Так­же некото­рые прог­раммы удоб­но уста­нав­ливать через Docker — то есть вмес­те с мини­атюр­ным обра­зом Linux. Но раз­говор обо всем этом выходит за рам­ки сегод­няшней статьи.

INIT И SYSTEMD

В Unix и Linux боль­шую роль игра­ет про­цесс ини­циали­зации сис­темы, за который отве­чает ути­лита init. Древ­ние юник­сы до пятой вер­сии прос­то исполня­ли скрипт при вклю­чении — счи­тай, ана­лог autoexec.bat. Ког­да соф­та ста­ло слиш­ком мно­го, приш­лось добавить такое понятие, как runlevel.

Сис­тема при заг­рузке перехо­дит из одной ста­дии в дру­гую и при каж­дом перехо­де запус­кает скрип­ты из опре­делен­ной пап­ки /etc/rcX.d/, где X — один из уров­ней заг­рузки:

  • 0 — сис­тема вык­лючена;
  • 1 — одно­поль­зователь­ский режим;
  • 2 — мно­гополь­зователь­ский;
  • 3 — с под­дер­жкой сети;
  • 5 — пол­ная заг­рузка;
  • 6 — перезаг­рузка.

Так, если добавить ссыл­ку на скрипт в пап­ку rc0.d, то он будет исполнять­ся каж­дый раз перед вык­лючени­ем.

Имен­но так сис­тема дела­ет все, что ей положе­но делать, — нап­ример, запус­кает про­вер­ку дис­ка пос­ле вне­зап­ного вык­лючения, ротиру­ет логи, запус­кает и оста­нав­лива­ет работа­ющие в фоне служ­бы (в Unix и Linux они называ­ются демона­ми).

В сов­ремен­ном Linux на сме­ну этой сис­теме приш­ла еще более изощ­ренная — systemd. Она может заод­но рулить устрой­ства­ми и сетевы­ми соеди­нени­ями и делать дру­гие вещи. В systemd для каж­дого дей­ствия или служ­бы соз­дают­ся кон­фигура­цион­ные фай­лы, в которых ука­зано, ког­да и при каких усло­виях нуж­но что‑то запус­кать или оста­нав­ливать. Най­ти их спи­сок ты можешь в /lib/systemd/, а работа­ют с ними при помощи коман­ды service.

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

INFO

Под­робнее о systemd читай в статье «По­лез­ный демон. Как перес­тать боять­ся systemd и сде­лать свой сер­вис для Linux».

ПРОЧИЕ ПРИЛОЖЕНИЯ

При нас­той­ке сети в Linux ты, ско­рее все­го, стол­кнешь­ся с iptables — стан­дар­тным фай­рво­лом и частью сис­темы Netfilter. Если ты выб­рал Ubuntu, то нас­тра­ивать его мож­но при помощи удоб­ной ути­литы ufw.

Дру­гая полез­ней­шая ути­лита в Linux — это cron. Она дела­ет при­мер­но то же, что и пла­ниров­щик заданий в Windows. В новых сис­темах cron работа­ет бок о бок с уже упо­мяну­тым (и гораз­до более наворо­чен­ным) systemd, одна­ко исполь­зовать cron гораз­до про­ще. Все­го лишь напиши crontab -e, и в тек­сто­вом редак­торе откро­ется файл со спис­ком прог­рамм, которые запус­кают­ся в опре­делен­ное вре­мя. Фор­мат обыч­но опи­сан там же.

WWW

Сайт crontab.guru очень силь­но упро­щает работу с crontab.

ИТОГИ

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

t.me/anon_chan_by