Обучение Linux. От новичка до профи. Часть 2

Привет, друг! Продолжаем изучать Linux.

Если ты пропусти первую часть, она ЗДЕСЬ.

Я тут имел неосторожность провести голосование на предмет выбора дистрибутива, на котором я буду всё показывать. Как в Телеграмме, так и на Ютубе большинство проголосовало за Ubuntu. Я понимаю что вкусы у всех разные, но споры были жаркие. При этом были люди, которые высказали мнение которого придерживаюсь и я. Суть его в том, что нет абсолютно никакой разницы на каком дистрибутиве разбирать основы. Это объясняется очень просто. Когда ты поймёшь общие принципы как тут всё устроено и как работает, а именно это моя цель, ты сможешь легко разобраться с любым дистрибутивом и выбрать тот дистрибутив, который нравится именно тебе. При этом ты будешь чётко понимать почему тебе понравился именно этот дистрибутив, и не будешь слушать авторитетные мнения матёрых линуксоидов.

Обучение Linux. От новичка до профи. Часть 2

В этой части мы сначала разберемся с некоторыми техническими моментами, потом пройдёмся по настройке и кастомизации, а потом продолжим изучать и разбирать как работает Linux.

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

Репозитории Linux

Репозитории — это набор файлов, которые содержат информацию о программном обеспечении (например версия и контрольная сумма) и само программное обеспечение. Есть официальные репозитории дистрибутива, а есть репозитории разработчиков ПО.

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

репозитории linux
  • Main — стабильные версии ПО, официально поддерживаемого Canonical
  • Universe — программы, которые поддерживает сообщество Ubuntu
  • Restricted — проприетарные драйверы устройств
  • Multiverse — проприетарное программное обеспечение

Если ты адепт культа Неуловимого Джо, то последние два придётся отключить, во всех остальных случаях лучше оставить включенными.

Во второй вкладке «Другое ПО» (изначально она пустая) будут показаны сторонние репозитории которые мы добавим в систему. Для них также может возникнуть необходимость установить GPG-ключ, он необходим для проверки подписи, что бы ты был уверен что ставишь действительно настоящий пакет. Ключи будут отображаться во вкладке «Аутентификация», там же их можно добавлять или удалять. В этом же окне, ещё загляни во вкладку «Обновления» и настрой автоматические обновления так как удобно тебе.

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

У тебя мог возникнуть логичный вопрос: «А где же брать эти самые сторонние репозитории?» Самый простой вариант — это на сайте разработчика ПО. Но об этом чуть позже, а сейчас нам нужно разобраться что такое PPA.

PPA репозитории

PPA означает «архив личных пакетов». Зачем это нужно? Смысл в том что Ubuntu (и не только) контролирует какие программы и какие их версии попадают в официальные репозитории. Плюс в том, что это гарантирует стабильность системы и совместимость. Минус в том, что на это требуется время, иногда до нескольких месяцев, а значит не факт что в репозиториях самая актуальная версия. Та же история и с добавление каких-то новых программ. Процесс согласования может быть довольно длительным, а программа нам нужна сейчас.

Именно по этому у Ubuntu есть платформа https://launchpad.net/. На этой платформе разработчики могут создавать свои собственные репозитории, а мы можем их там находить и добавлять себе. Это, кстати, ещё один способ где брать репозитории.

По сути принципиальной разницы между обычным репозиторием и PPA нет. Вся разница в том, что, чтобы добавить обычный репозиторий нам нужно самим указать apt строку (это адрес репозитория) и, если нужно, добавить ключ, а в случае с PPA система сделает это всё за нас.

Добавление репозиториев

Теперь давай посмотрим как это работает и добавим какой-нибудь репозиторий. Для примера пусть это будет читалка для книг Faliate. Для этого идём на https://launchpad.net/ и в поиске ищем Foliate (https://launchpad.net/~apandada1/+archive/ubuntu/foliate). После чего обращаем внимание на раздел: «Adding this PPA to your system» и там видим команды которые нужно выполнить.

sudo add-apt-repository ppa:apandada1/foliate
sudo apt update

После выполнения, мы видим что данные из добавленного нами репозитория тоже синхронизировались.

linux

Также, если мы откроем «Программы и обновления» мы увидим новый репозиторий во вкладке «Другое ПО»:

репозитории linux

Всё это означает, что мы можем смело устанавливать, а в последствии обновлять, нужную нам программу

sudo apt install foliate

После установки программа появится в меню, либо можно найти через поиск.

Процесс удаления PPA репозитория очень похож на процесс его добавления, только используется параметр —remove. В нашем случае это будет выглядеть так:

sudo add-apt-repository --remove ppa:apandada1/foliate

Также нужно знать, что настройки репозиториев хранятся в файле /etc/apt/sources.list

репозитории linux

То что не закомментировано, это apt строка репозитория, она состоит из адреса, потом указывается версия дистрибутива и ветка или ветки к которым относится этот репозиторий. Кстати если мы вернёмся на launchpad.net, и откроем вкладку «Technical details about this PPA», то увидим apt строку репозитория который мы добавляли.

Это, кстати, ещё один способ добавления репозиториев. Можно вписать адрес, версию дистрибутива и ветку в файл source.list. А если необходимость в использовании отпадёт, то закомментировать нужную строку.

Версия дистрибутива Linux

Ещё один момент. Если ты вдруг забыл какую версию дистрибутива устанавливал, это легко можно узнать, причем несколькими способами.

Самый простой вариант ввести команду:

lsb_release -a
версия дистрибутива

Ещё можно посмотреть в файле /etc/os-release. Но наиболее прикольный способ это утилита neofetch. Только её придется сначала установить:

sudo apt install neofetch
neofetch
neofetch

Заодно увидим, красиво оформленную, дополнительную информацию о своей системе.

Настройка Linux после установки

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

Для начала установим Ubuntu Restricted Extras. Это такой пакет кодеков и шрифтов, которые не входят в стандартную комплектацию из-за нюансов с авторскими правами:

sudo apt install ubuntu-restricted-extras

Теперь установим менеджер расширений Gnome:

sudo apt install gnome-shell-extension-manager

Менеджер расширений появится в главном меню, и, как нетрудно догадаться, из него можно устанавливать и настраивать дополнительный фишки. Типа менеджера буфера обмена, виджета погоды, всяких дополнительных менюшек и т.д. Всё это дело вкуса, потому останавливаться на этом не вижу смысла, кому надо установит и посмотрит.

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

Ну и сделаем ещё одну полезную штуку, чтобы можно было сворачивать открытую программу щелчком по её иконке на панели (по умолчанию это не работает), для этого вводим в терминале команду:

gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

Файловая система Linux

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

Что касается выбора файловой системы, то, например, перед пользователем Windows такой вопрос вообще не стоит, её можно установить только на файловую систему NTFS. А вот пользователи Linux могут выбирать, и хотя, в большинстве случаев, оптимальным выбором будет ext4, но стоит знать о том какие они бывают:

  • Ext2, Ext3, Ext4 (Extended Filesystem) — стандартная файловая система для Linux. Наиболее стабильная и наиболее многофункциональная. Начиная с версии ext3 получила поддержку журналирования. Как я уже говорил, наиболее оптимальный и универсальный выбор в большинстве случаев.
  • JFS (Journaled File System) — разработана компанией IBM как альтернатива ext. При разработке особое внимание уделялось стабильности и минимальному потреблению ресурсов. И хоть она тоже журналируемая, но хранит только метаданные файлов.
  • ReiserFS — ещё одна попытка создать альтернативу ext. Считается более производительной, но поговаривают что есть проблемы со стабильностью.
  • Btrfs (B-Tree File System) — достаточно новая файловая система. Из плюсов выделяют лёгкость администрирования и восстановления данных. Считается более производительной чем ext4. Также позволяет изменять разделы на лету и создавать мгновенные снимки. По поводу стабильности мнения расходятся. Используется как файловая система по умолчанию в дистрибутиве OpenSUSE.

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

Типы файлов

Теперь нужно определится что такое «типы файлов». Пользователи Windows привыкли что у файла есть расширение, и оно определяет тип файла. В Linux расширения может и не быть и это не будет проблемой, потому что в Linux «тип файла» определяет саму суть файла т.е. то чем он на самом деле является. Например файл с данными, каталог или устройство. Всё это файлы.

Так, например, каталог мы визуально видим как папку, в которой лежат файлы и каталоги, и это удобно. Но на самом деле каталог это файл в котором находятся ссылки на файлы и другие каталоги. Также пользователям Windows очень знакомо понятие «ярлык». В Linux они тоже есть, но их принято называть «символьными ссылками». И это тоже тип файла, в котором просто находится ссылка на нужный нам объект. Также не будет ошибкой, если ты назовешь символьную ссылку — мягкой ссылкой.

Но если есть мягкие ссылки, то должны быть и жёсткие? И они есть. Каждый файл в Linux имеет такую штуку, которая называется индексный дескриптор. Его номер уникален для каждого файла, а суть его в том, что он содержит всю информацию о файле т.е. по сути это описание файла. И вот именно жесткая ссылка указывает на этот дескриптор. Т.е., если подытожить, то имя файла ссылающееся на индексный дескриптор и будет жёсткой ссылкой. И именно поэтому у одного и того же файла в Linux может быть несколько имен.

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

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

Для примера у нас в домашнем каталоге пользователя будет папка new, а в ней лежит файл file1. С ним и будем экспериментировать.

Команда ls

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

ls
ls

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

Чтобы узнать дескрипторы файлов лежащих в каталоге, используется команда ls с параметром -i

ls -i

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

ls -i

Но, в большинстве случаев, просто узнать номер дескриптора недостаточно. Гораздо более информативно увидеть его содержимое, для этого используется параметр -l. При этом мы можем использовать его совместно с параметром -i.

ls -li
ls -l

В первой строке, там где «итого 16», указано сколько блоков дискового пространства занимает каталог. В нашем случае 16.

Дольше построчно идёт описание каждого файла и каталога. Рассмотрим вывод ls с параметрами -li. В начале строки указан номер дескриптора, потом тип объекта ( d — каталог, () — обычный файл). Далее идут права доступа в формате владелец-группа-остальные (о правах доступа будет чуть позже). Следом идёт, в случае с файлами, количество жёстких ссылок. Далее идёт имя владельца, потом имя группы, потом размер, дата последнего изменения и имя.

Создание жёстких и символьных ссылок

Для того чтобы создать жёсткую ссылку на файл т.е. ещё одно имя используется команда ln. Например, давай создадим жёсткую ссылку на файл file1 в каталоге new1.

ln file1 /home/newuser/new/new1/link1

Давай разберем эту команду:
ln — создать жёсткую ссылку
file1 — указали имя исходного файла. При этом т.к. мы находимся в каталоге с этим файлом то можно указывать просто имя. Если бы нам нужен был файл из другого каталога, то нужно было бы указать полный путь к нему. Чтобы узнать каталог в котором мы сейчас находим можно использовать команду pwd.
/home/newuser/new/new1/link1 — далее мы указали полный путь и имя ссылки, которую нужно создать

По такому же принципу мы можем создать жёсткую ссылку, например на рабочем столе:

ln file1 '/home/newuser/Рабочий стол/link2'

В этом примере были использованы кавычки т.к. в названии каталога «Рабочий стол» есть пробел. Если не поставить кавычки терминал выдаст ошибку. Этот момент нужно учитывать всегда.

По итогу мы создали две жёсткие ссылки. А значит, если мы посмотрим содержимое дескриптора на каждую из них, мы увидим что все параметры совпадают, в том числе и номер дескриптора. А значит это всё один и тот же файл:

ls -li file1 & ls -li /home/newuser/new/new1/link1 & ls -li '/home/newuser/Рабочий стол/link2'
ссылки linux

При этом, мы видим что цифра стоящая после перечисления прав, изменилась на 3. Это означает что у файла есть три жёсткие ссылки т.е. он будет существовать пока есть хоть одна из них.

Чтобы создать символьную ссылку используется также команда ln только с параметром -s. Логика использования точно такая же. Сначала указываем ln -s потом путь к файлу на который нужно сделать ссылку, а потом путь где должна находится ссылка:

ln -s /home/newuser/new/file1 '/home/newuser/Рабочий стол/'

После выполнения этой команды, на рабочем столе появится ссылка на файл file1. При введении команды ls -l, мы первым символом увидим тип файла — ссылка (l), а после имени файла увидим к какому файлу эта ссылка ведёт:

ссылки linux

Права доступа в Linux

Я уже упоминал про права доступа, теперь давай разберемся что это и как работает.

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

Существует три вида прав:

Чтение (r) — можно посмотреть содержимое файла, изменить его нельзя. В случае с каталогом — можно увидеть список файлов и каталогов, которые находятся в нём.
Запись (w) — можно изменять файл или содержимое каталога, в каталоге можно создавать новые файлы и каталоги, а также удалять и переименовывать существующие файлы, в не зависимости от прав на конкретный файл.
Выполнение (x)- позволяет запустить исполняемый файл.

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

Владелец (u) — в большинстве случаев это тот кто создал файл, хотя корректнее говорить что этот тот кто числится владельцем в атрибутах файла. Т.е. когда ты создаешь файл — система автоматически считает тебя его владельцем.
Группа (g) — группа пользователей. Обычно это группа владельца, но это можно изменить. Благодаря группам можно дать доступ к файлу или каталогу нескольким пользователям. Как работают группы мы разберёмся отдельно. Пока просто запомни что конкретный пользователь может состоять в нескольких группах. При этом когда создаётся новый пользователь, для него автоматически создаётся группа, название которой совпадает с именем пользователя.
Остальные (о) — все остальные пользователи, кроме владельца и пользователей, входящих в группу файла.

Изменение прав доступа

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

Для изменения прав доступа к файлам и каталогам используется команда chmod (change mode):

chmod права имя_файл

Логика использования очень простая: после команды chmode указываем какие права добавить или забрать, затем указываем имя файла.

Но, перед тем как менять права их, для начала их нужно увидеть. Для этого используем команду ls -l

ls -l
Права доступа в Linux

Так как у нас есть три вида прав и три группы пользователей, то, соответственно, в атрибутах файла есть девять записей о правах. Из них первые три (rw-) это права владельца. Вторые три (rw-) это права группы и оставшиеся три (r—) права остальных.

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

При использовании символов, после chmod указываются три группы символов:
— первая — кому даём или забираем права: u — владелец, g — группа, o — остальные (если нужно всем сразу, то можно указать — a)
— вторая — действие т.е. что мы делаем с правами: разрешаем, запрещаем или назначаем, используются символы: +, , =
— третья — перечисляем нужные права: r — чтение, w — запись, x — выполнение

Для примера, изменим права на файл newfile.py в каталоге new.

Права доступа в Linux
chmod ug+x newfile.py

В этом примере мы владельцу и группе (ug) добавили (+) право на выполнение (x) файла newfile.py.

chmod o-r newfile.py
chmod o=x newfile.py

В этом случае мы сначала забрали () у остальных (о) право на чтение (r), а потом назначаем остальным право на выполнение (x). Мы, для наглядности, каждое действие выполняли отдельно. Но это можно делать просто перечисляя через запятую (без пробелов) нужные права и категории. Также можно через пробел, уже без запятых перечислить несколько файлов которым нужно изменить права права.

chmod o-r,o=x newfile.py file1

Если возникла необходимость посмотреть когда последний раз изменялись права на файл, то эта информация тоже хранится в дескрипторе. Чтобы её увидеть также используется команда ls -l но с параметром .

ls -lc newfile.py

Изменение прав с помощью чисел

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

При использовании этого способа нам нужно помнить какое число какие права даёт:
7 – разрешены чтение, запись, исполнение
6 – разрешены чтение и запись
5 – разрешены чтение и исполнение
4 – разрешено только чтение
0 – ничего не разрешено

Например:

chmod 750 newfile.py

chmod

В этом примере мы владельцу дали право (7) чтения, записи и исполнения, группе право (5) чтения и исполнения, а остальным (0) всё запретили.

Небольшие нюансы есть с назначением прав на каталог. Если нужно назначить права на каталог и одновременно на все объекты в нём, то достаточно использовать параметр -R. Например:

chmod -R 774 new1

В этом примере на каталог new1 и все находящиеся в нем файлы и каталоги мы установили владельцу и группе (77) право чтения, записи и выполнения. А остальным разрешили только чтение. Чтение, в случае с каталогом, означает что можно только посмотреть список объектов в каталоге. Если необходимо получить информацию из дескриптора о каталоге, то используется параметр -d:

ls -ld new1
дескриптор

Что такое t-бит

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

Чтобы установить t-бит, при цифровом назначении прав, достаточно в начале дописать цифру 1. Если для определения прав используются символы, то просто дописываем +t.

chmod 1774 new1
t-бит

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

Ну, а на этой радостной новости мы будем заканчивать эту часть.

Твой Pulse.