#45. Linux. Базові команди
Linux. Базові команди. sudo. apt. Змінні оточення.
Що таке операційна система?
Операційна система, скор. ОС (англ. operating system, OS) - комплекс програмного забезпечення, який керує всім апаратним та іншим програмним забезпеченням і надає інтерфейс для взаємодії користувача з комп’ютером.
ОС призначена для управління пристроями, управління обчислювальними процесами, ефективного розподілу обчислювальних ресурсів між обчислювальними процесами та організації надійних обчислень.
У логічній структурі типової обчислювальної системи операційна система посідає місце між пристроями з їхньою мікроархітектурою, машинною мовою і, можливо, власними (вбудованими) мікропрограмами (драйверами) - з одного боку, і прикладними програмами - з іншого.
Розробникам програмного забезпечення операційна система дає змогу абстрагуватися від деталей реалізації та функціонування пристроїв, надаючи мінімально необхідний набір функцій (див.: інтерфейс програмування застосунків).
У більшості обчислювальних систем операційна система є основною, найважливішою (а іноді і єдиною) частиною системного програмного забезпечення.
З 1990-х років найпоширенішими операційними системами є системи сімейства Windows і системи класу UNIX (особливо Linux і Mac OS). З 2000-х велике поширення набули мобільні комп’ютери (смартфони та планшети) і з ними ОС Android та iOS.
Детальніше
Функції
Основні функції:
- Виконання запитів програм (введення і виведення даних, запуск і зупинка інших програм, виділення і звільнення додаткової пам’яті та ін.).
- Завантаження програм в оперативну пам’ять і їх виконання.
- Стандартизований доступ до периферійних пристроїв (пристрої введення-виведення).
- Управління оперативною пам’яттю (розподіл між процесами, організація віртуальної пам’яті).
- Управління доступом до даних на енергонезалежних носіях (таких як жорсткий диск, оптичні диски тощо), організованих у тій чи іншій файловій системі.
- Забезпечення користувацького інтерфейсу.
- Збереження інформації про помилки системи.
Додаткові функції:
- Паралельне або псевдопаралельне виконання завдань (багатозадачність).
- Ефективний розподіл ресурсів обчислювальної системи між процесами.
- Розмежування доступу різних процесів до ресурсів.
- Організація надійних обчислень (неможливості одного обчислювального процесу навмисно або помилково вплинути на обчислення в іншому процесі), заснована на розмежуванні доступу до ресурсів.
- Взаємодія між процесами: обмін даними, взаємна синхронізація.
- Захист самої системи, а також призначених для користувача даних і програм від дій користувачів (зловмисних або через незнання) або додатків.
- Багатокористувацький режим роботи і розмежування прав доступу (див.: аутентифікація, авторизація).
Операційні системи призначені не тільки для ПК
Коли ми говоримо, що “комп’ютери” запускають операційні системи, ми не просто маємо на увазі традиційні настільні ПК і ноутбуки. Ваш смартфон - це комп’ютер, як і планшети, смарт-телевізори, ігрові консолі, смарт-годинники та маршрутизатори Wi-Fi. Amazon Echo або Google Home - це комп’ютерний пристрій, що працює під управлінням операційної системи.
Знайомі настільні операційні системи включають Microsoft Windows, Apple MacOS, Google Chrome OS і Linux. Основними основними операційними системами для смартфонів є iOS від Apple і Android від Google.
Інші пристрої, такі як маршрутизатор Wi-Fi, можуть запускати “вбудовані операційні системи”. Це спеціалізовані операційні системи з меншою кількістю функцій, ніж має звичайна операційна система, розроблена спеціально для одного завдання - наприклад, для роботи з маршрутизатором Wi-Fi, навігації або управління банкоматом.
Де закінчуються операційні системи і починаються програми?
Операційні системи також включають інше програмне забезпечення, включно з призначеним для користувача інтерфейсом, який дає змогу людям взаємодіяти з пристроєм. Це може бути робочий стіл на ПК, сенсорний інтерфейс на телефоні або голосовий інтерфейс на цифровому помічнику.
Операційна система - це велике програмне забезпечення, що складається з безлічі різних додатків і процесів.
Лінія між тим, що є операційною системою і що таке програма, може іноді бути дещо розмитою. Точного офіційного визначення операційної системи немає.
Наприклад, у Windows додаток File Explorer (або Windows Explorer) є невід’ємною частиною операційної системи.
Windows - воно навіть обробляє відтворення Вашого робочого інтерфейсу - і додатком, що працює в цій операційній системі.
Центром операційної системи є ядро
На низькому рівні “ядро” є основною комп’ютерною програмою, що лежить в основі Вашої операційної системи. Ця окрема програма є однією з перших речей, що завантажуються під час запуску Вашої операційної системи. Вона обробляє виділення пам’яті, перетворення програмних функцій в інструкції для процесора Вашого комп’ютера та обробку вхідних і вихідних даних з апаратних пристроїв. Ядро, як правило, запускається в ізольованій області, щоб запобігти його несанкціоноване використання іншим програмним забезпеченням на комп’ютері. Ядро операційної системи дуже важливе,
але це всього лише одна частина операційної системи.
Але й тут не все конкретно. Наприклад, Linux - це просто ядро. Однак Linux, як і раніше, часто називають операційною системою. Android також називається операційною системою, і вона побудована на ядрі Linux. Такі Linux-дистрибутиви, як Ubuntu, використовують ядро Linux і додають до нього додаткове програмне забезпечення. Вони також називаються операційними системами.
Unix
“Unix простий. Але треба бути генієм, щоб зрозуміти його простоту”
Денніс Рітчі
Unix (“UNIX” є зареєстрованою торговельною маркою організації The Open Group) - сімейство переносних, багатозадачних і багатокористувацьких операційних систем, що ґрунтуються на ідеях оригінального проекту AT&T Unix, розробленого в 1970-х роках у дослідницькому центрі Bell Labs Кеном Томпсоном, Деннісом Рітчі та іншими.
Операційні системи сімейства Unix характеризуються модульним дизайном, у якому кожне завдання виконується окремою утилітою, взаємодія здійснюється через єдину файлову систему, а для роботи з утилітами використовується командна оболонка.
Ідеї, закладені в основу Unix, справили величезний вплив на розвиток комп’ютерних операційних систем. Нині Unix-системи визнано одними з найбільш історично важливих ОС.
Генеалогічне дерево Unix-подібних операційних систем
Unix-подібна операційна система (інколи скор. як nix або UNX) - операційна система, що утворилася під впливом Unix. Термін включає вільні/відкриті операційні системи, утворені від Unix компанії Bell Labs або такі, що емулюють його можливості, комерційні та запатентовані розробки, а також версії, що базуються на вихідному коді Unix. Немає стандарту, що визначає термін, і допустимі різні точки зору щодо того, вважати певний продукт Unix-подібним чи ні.
Філософія Unix
“Філософія Unix говорить:
Пишіть програми, які роблять щось одне і роблять це добре.
Пишіть програми, які б працювали разом.
Пишіть програми, які б підтримували текстові потоки, оскільки це універсальний інтерфейс”.
Дуг Макілрой, і один із засновників традиції Unix
GNU/Linux

GNU/Linux - сімейство Unix-подібних операційних систем на базі ядра Linux, що включають той чи інший набір утиліт і програм проекту GNU, і, можливо, інші компоненти. Як і ядро Linux, системи на його основі, як правило, створюють і поширюють відповідно до моделі розроблення вільного і відкритого програмного забезпечення. Linux-системи поширюються в основному безкоштовно у вигляді різних дистрибутивів - у формі, готової для встановлення та зручної для супроводу й оновлень, - які мають свій набір системних і прикладних компонентів, як вільних, так і пропрієтарних (власницьких).
Детальніше
Ядро Linux - це безкоштовне монолітне, модульне, багатозадачне, Unix-подібне ядро операційної системи з відкритим вихідним кодом.
Лінус Бенедікт Торвальдс (швед. Linus Benedict Torvalds; народився 28 грудня 1969 у Гельсінкі, Фінляндія) — фінсько-американський програміст, започаткував розробку ядра Linux, є її головним архітектором, а також автор найвідомішої розподіленої системи керування версіями файлів Git. 2012 року за створення Linux нагороджений премією Millennium Technology Prize.
Порівняння з Windows
Досить докладна стаття на цю тему тему тут
Частка ринку
ОС Windows зазвичай називають найкращою ОС для користувачів-початківців. За даними NetMarketShare за 2020 рік світова частка ОС Windows на настільних комп’ютерах становить 87%, тоді як macOS займає 9% ринку, а Linux - лише 2%.
Сумісність
Незважаючи на нещодавні поліпшення в програмному забезпеченні, що переноситься з інших платформ або розробляється на Linux, Windows, як і раніше, є “королем сумісності”.
Користувачі Windows можуть бути впевнені, що практично будь-яке ПЗ (навіть найменш відоме і застаріле) буде працювати, навіть якщо його перестали розвивати самі розробники. Windows має чудову підтримку застарілого ПЗ.
Ціна
Ядро Linux (і супутні з ним утиліти та бібліотеки GNU) у більшості дистрибутивів (Debian, Fedora, Ubuntu, Manjaro тощо) повністю вільні (часто - безкоштовні) і мають відкритий вихідний код завдяки відповідній ліцензії GNU GPL і її варіацій. Компанії (наприклад, Red Hat, SUSE) пропонують платну підтримку своїх дистрибутивів (Red Hat Enterprise Linux, SUSE Linux Enterprise Server), але базове програмне забезпечення, як і раніше, можна завантажити і встановити безкоштовно.
Ігри
Якщо ви геймер і вам потрібна 100% сумісність із певним програмним забезпеченням, то тут без компромісів перемагає Windows. Сервіс Steam, крім інших клієнтів і лончерів, надає величезну кількість ігор як від ААА-видавців,
так і від невеликих інді-розробників.
Steam для Linux тепер дає змогу встановлювати ігри для Windows, але він усе ще перебуває в процесі розвитку, і не всі ігри для Windows будуть на ньому коректно працювати (якщо взагалі запустяться). Крім того, ви також можете пограти в деякі специфічні для Windows ігри на Linux через Wine або Proton.
Програмування
Linux підтримує майже всі основні мови програмування (Python, C/C++, Java, Ruby, Perl тощо). Крім того, він надає широкий спектр додатків, корисних для програмування та розробки різних додатків. Ви знайдете
безліч бібліотек, спочатку розроблених для Linux. Багато програмістів відзначають, що вони можуть легко виконувати рутинні завдання за допомогою менеджера пакетів у Linux. Можливість писати сценарії в різних оболонках також є однією з найпереконливіших причин, чому програмісти вважають за краще використовувати Linux. Він також надає вбудовану підтримку протоколу SSH, за допомогою якого ви з легкістю зможете швидко керувати своїми серверами.
У Windows же є своя платформа .NET Framework, яка дає змогу писати програмні продукти. Головною особливістю даної платформи є те, що це продукт Microsoft (який створювався в якості альтернативи платформі Java від
компанії Sun) і офіційно працює він тільки з сімейством операційних систем Windows. З часів випуску .NET Framework у 2002 році з’явилося безліч програмних продуктів, бібліотек і фреймворків, створених за допомогою цієї платформи для роботи виключно під Windows. Основною мовою програмування в .NET Framework є мова C# - основна мова програмування в .NET Framework. об’єктно-орієнтована мова програмування, створена фахівцями компанії Microsoft як мова розробки додатків для платформи Microsoft .NET Framework. Якщо Linux у розробників асоціюється з підтримкою та роботою з безліччю різних мов програмування, то “візитною карткою” Windows є .NET Framework і мова C#.
Сервери
Якщо ви думаєте про безпеку сервера, стабільність, свободу вибору, сумісність обладнання та економічну ефективності, то сервер на Linux перевершує аналогічний сервер на Windows в усіх відношеннях. Windows - це популярний
варіант для настільного використання, а Linux - найкращий варіант для серверних систем.
Серверний дистрибутив Linux пропонує безліч різних варіантів налаштування системи з широким спектром ефективних інструментів моніторингу та аналізу її працездатності. Linux, на відміну від Windows, менш уразливий до різних
кібератак і проникнення на сервер шкідливих програм. У ядрі Linux практично неможливо створити будь-який бекдор, тоді як система Windows дуже чутлива до такого сценарію розвитку подій.
Дистрибутиви
По-перше, нам потрібно розглянути один із найбільш заплутаних аспектів платформи Linux. У той час як Windows зберегла цілком стандартну структуру версій, з мінорними і мажорними оновленнями, в Linux же все набагато складніше.
На сьогодні ядро Linux лежить в основі всіх операційних систем на базі Linux. Однак, оскільки його вихідні коди залишаються відкритими, будь-яка людина може налаштувати або змінити ОС для своїх власних цілей. У результаті ми
маємо сотні індивідуальних Linux-подібних операційних систем, які називаються дистрибутивами. Це робить неймовірно важким вибір між ними набагато складніший, ніж просто вибір між Windows 7, Windows 8 або Windows 10.
Але у такого розкладу є і свої переваги. З огляду на природу програмного забезпечення з відкритим вихідним кодом, ці дистрибутиви можуть сильно відрізнятися за функціональністю і складністю, адже кожен дистрибутив Linux має свій цикл розробки, і багато з них постійно розвиваються.
У випадку з Windows існує тільки одна компанія - Microsoft, яка займається розробкою та обслуговуванням усієї операційної системи: ядро, середовище робочого столу і більша частина встановленого програмного забезпечення. Ви повинні приймати все, що вони вам пропонують, незалежно від того, буде це вам корисно чи ні.
Усі приклади нижче базуватимуться на Ubuntu/Mint дистрибутивах.
Командний рядок
Загальна концепція того, що все це файл
Давайте спочатку розберемося як взагалі це може працювати. У Linux є таке поняття як коренева файлова система. В неї монтується розділ жорсткого диска, на якому встановлено Linux. У різні підпапки підключаються інші
реальні розділи жорсткого диска, наприклад, домашній розділ підключається до папки /home, а завантажувальний до папки /boot.
Але існують не тільки реальні файлові системи, а й віртуальні файлові системи, створені ядром, наприклад, у папку /proc монтується файлова система procfs, яка дає змогу отримати доступ до параметрів ядра, а в папку /dev
монтується devfs, що містить пристрої, підключені до комп’ютера, і теж у вигляді файлів.
Так от, взагалі все це файл.

- Пристрої, що підключаються (принтери, флешки тощо), для Linux - це файл, і в них, за бажанням, можна писати або читати дані.
- Інформація про ядро - це теж файл.
- Конфігурація ядра - це, не повірите, теж файл.
- Сокети - дивні, але файли.
Що таке Linux сокети?
Сокети - це спеціальні файли для взаємодії між процесами по мережі. Створюється спеціальний файл, у який, припустимо, один процес пише дані, а ще два зчитують. Такий механізм потрібен, щоб явно було зрозуміло, через який об’єкт дані спілкуються, і ми будемо користуватися такими файлами надалі.
Навіщо нам потрібен термінал (консоль)?
З історичної точки зору, коли створювалося ядро Linux, поняття UI (User Interface - те, що ви звикли бачити на всіх ваших пристроях, відкриті папки, запущені додатки, відкритий браузер тощо) просто не існувало. Все можливості ядра використовувалися тільки через консоль.
А це означає, що всі виконувані команди або параметри передавалися виключно як білий текст на чорному тлі.
Ніяких красивих кнопок або зрозумілих картиночок)
У дуже великої кількості програм для Linux все ще немає ніякого UI, тільки білі літери на чорному тлі. Існують дистрибутиви (активно використовуються, і ми будемо використовувати такий через заняття)^ де все ще існує тільки консоль.
Запустили пристрій, а все, що у вас є, - це чорне тло і білі літери. :)
Як це працює?
- Ядро читає команду, набрану на клавіатурі з терміналу.
- Команда валідується.
- Команда запускається.
- Результат виводиться на екран (ну, або, припустімо, пишеться у файл тощо).
- Йдемо до пункту 1.
Аргументи та параметри
Команда - це послідовність символів, яка закінчується натисканням клавіші Enter і згодом обробляється оболонкою.
Щоб інтерпретувати командний рядок, оболонка спочатку намагається розділити рядок на слова. Як і в реальному житті слова розділяються пробілами. Перше слово в рядку зазвичай є фактичною командою. Усі інші слова в рядку є параметрами, які детальніше пояснюють, що потрібно.
Параметри, що починаються з дефіса (-), називаються опціями. Якщо ви хочете передати команді кілька опцій, їхні можна (часто) згрупувати за одним дефісом, тобто послідовність опцій -a -l -F - це те ж саме, що і
-alF. Багато програм мають більше опцій, ніж можна зручно зіставити з одним символом, ну або просто потрібно більш читабельне написання. Для цього використовуються “довгі параметри”, вони починаються з двох дефісів і не збираються в одне довге слово: foo --bar --baz.
Параметри без дефіса на початку називаються аргументами. Часто це імена файлів (наприклад, python manage.py), які має обробити команда.
Таким чином, загальна структура команд може відображатися таким чином:
: команда:
<що робити?>
:параметри:
<як це зробити?>
:аргументи:
<з чим це робити?
Basic Linux Commands
Навігація

У лінуксі немає дисків як C:/, D:/ ітд. Є тільки коренева директорія /, з якої все і починається.
Найчастіше є папка /home, всередині якої будуть ще папки з вашими користувачами. Якщо у вас один користувач, то і папка буде одна, зазвичай це єдине місце, де можна виконувати всі дії без пароля. Як працюють розмежування користувачів далі в лекції.
Значок ~ (тільда) означає домашній каталог поточного користувача.
Шлях може бути абсолютним або відносним. Повний, або абсолютний шлях - це шлях, який вказує на одне і те саме місце у файловій системі незалежно від поточного робочого каталогу або інших обставин. Повний шлях
завжди починається з кореневого каталогу. Відносний шлях являє собою шлях по відношенню до поточного робочого каталогу користувача або активних додатків.
Команда pwd (print working directory) відображає абсолютний шлях до поточної директорії.
Якщо на початку набору будь-якої назви файлу або папки натиснути клавішу TAB, система підкаже вам перший файл, що починається з цих символів (без символів просто підставить перший файл у папці), при повторному натисканні з’явиться наступний відповідний файл, якщо він є.
cd
Команда cd (change directory) дає змогу змінити поточну папку. Ми можемо вказати їй як абсолютний
cd /home/my_user, так і відносний cd my_images (перебуваючи, припустімо, в папці /home/my_user) шляху.
Перейти на директорію рівнем вище cd .. (були в /home/my_user/my_images/, потрапили в /home/my_user/)
Перейти на директорію двома рівнями вище cd ../.. (були в /home/my_user/my_images/, потрапили в /home)
Перейти у вашу домашню директорію звідки завгодно cd ~.
Перейти в директорію, в якій ви перебували до переходу, - cd -.
ls
ls (list) показує список файлів і папок у поточній директорії.
З прапором -l покаже деталі кожного файлу.
З прапором -a покаже приховані файли та папки.
Часто використовується з комбінованим ключем ls -la.
Остання команда в Ubuntu/Mint і не тільки дистрибутивах спочатку може бути замінена на аліас ll (не працює на
Мак).
Створення, видалення, переміщення, перейменування, копіювання файлів і папок
Створити файл у командному рядку Linux можна трьома способами.
- Команда
touch
touch /шлях/до/файлу/назва_файлу
або
touch file.txt - створить порожній файл
Ми все ще можемо вказати абсолютний або відносний шлях
- Переспрямувати виведення практично будь-якої команди у файл. Це робиться за допомогою символу (
>). Якщо пам’ятаєте, як зняти
requirements.txt, то точно розумієте, про що я.
У загальному вигляді команда має такий вигляд:
яка_яка_будь_команда > /шлях/до/файлу/найменування_файлу
Як приклад:
ls --help > ls_help.txt
Створить файл ls_help.txt у поточній папці, який міститиме результат команди ls --help із деталями щодо використання команди ls.
Якщо використати символ > двічі, то дані, якщо файл уже існуватиме, допишуться в кінець, а не перепишуть весь файл.
- Використовуючи текстовий редактор.
У Linux існує кілька різних текстових редакторів, існують навіть зі складними графічними інтерфейсами, але ми найчастіше будемо використовувати або nano, або vim. Я особисто віддаю перевагу використанню nano, оскільки це найбільш простий і зручний (для мене) редактор, але багато хто віддає перевагу vim, оскільки його можна налаштувати настільки гнучко, що
він навіть особливо не відрізнятиметься від PyCharm. Але, обираючи vim, завжди пам’ятайте, що питання Як вийти з vim? є найпопулярнішим запитанням з України на StackOverflow запитання. У цього питання 2.9 мільйона переглядів :)
nano nano_file.txt
І для закриття редактора використовуйте команди самого редактора (у nano - це Ctrl+X)
Створення папки (каталогу, директорії)
Щоб створити папку, потрібно використовувати команду mkdir (make directory), також можна використовувати абсолютний і відносний шлях
mkdir dir_name
Створити відразу дві папки:
mkdir dir1 dir2
Створити дерево:
mkdir -p /dir1/dir2
Видалення папки або файлу
Для видалення папки використовується команда rmdir (remove directory):
rmdir dir_name
Для видалення файлу використовується rm (remove):
rm some_file
Цю команду можна використовувати і для видалення папки, якщо додати прапор -r, що позначає рекурсивно (разом з усім вмістом):
rm -r dir1
Або відразу кілька папок:
rm -r dir1 dir2
Також є прапор -f, який означає (force) без уточнення, чи впевнені ви, що хочете видалити, прапори все ще можна комбінувати.
rm -rf dir1
Перейменувати або перемістити файл
Перейменування і переміщення файлів відбувається однією і тією ж командою mv(move):
mv назва_файлу нова_назва
або перемістити файл:
mv назва_файлу шлях/
Копіювати файл або папку
Для цього використовується команда cp (copy):
Скопіювати файл file1 і назвати копію file2:
cp file1 file2
Скопіювати папку:
cp -a dir1/ dir2/
Скопіювати файл у папку:
cp file1 dir1/
Довідка
У всіх базових команд є довідка, і викликається вона через параметр --help, де ви можете подивитися деталі тієї чи іншої команди:
rm --help
touch --help
Пошук за файлами
Для пошуку використовуються дві основні команди find і locate.
Усі деталі про те, як вони працюють [тут] (https://linuxrussia.com/terminal-search-files.html).
Читання файлів
Команда more (більше) потрібна для читання текстових файлів:
more some.txt
Забудьте про її існування)
Використовуйте команду less:
less <шлях_до_файлу/ім'я_файлу>
less less.txt
Є купа параметрів, таких як перехід до певного рядка, пошук тексту тощо.
Команди head і tail
Як можна зрозуміти з назв, показують початок або кінець файл відповідно.
head [опції] <шлях_до_файлу/ім'я_файлу>
head error.log
tail [опції] <шлях_до_файлу/ім'я_файлу>
tail error.log
tail найчастіше використовувана команда для читання логів, оскільки зазвичай помилки в самому кінці.
Володіє параметром -f, він потрібен, щоб при оновленні файлу показувати ці оновлення в режимі реального часу
(Припустимо, якщо сервер працює, і помилки потрібно відображати просто зараз)
Команди cat і tac
Потрібні для перегляду цілком невеликих текстових файлів:
cat [опції] <шлях_до_файлу/ім'я_файлу>
cat test1
Насправді, при комбінуванні деяких властивостей можна робити не зовсім очевидні речі.
Наприклад, додати текст з одного файлу в інший:
cat test2 >> test3
або об’єднати кілька файлів в один:
cat test1 test2 > test4
tac працює так само, але виводить файл у зворотному порядку (невідомо, навіщо потрібен, на відміну від cat жодного разу не використав)
Користувачі, групи та права

sudo
У будь-якого об’єкта в Linux існує набір прав, який позначає, кому і що можна з цим файлом робити.
Також під час встановлення системи завжди створюється так званий суперкористувач, для якого задається пароль.
Будь-яку команду можна виконати від імені суперкористувача, якщо ви знаєте пароль, і ця команда проігнорує всі можливі дозволи.
Для того щоб виконати таку команду, потрібно використовувати перед командою спеціальне слово sudo.
Права
Щоб перевірити права файлів у поточній директорії, необхідно виконати команду ls -l:
Ось ці страшні символи на початку і є права доступу.
Якщо ви хочете подивитися права для конкретного файлу або папки, ви можете використовувати:
ls -l ім'я_потрібного_файлу
ls -l ім'я_потрібної_директорії
Як розібратися з тим, що написано в правах?
Припустимо, у нас є такі права drwxrwxr-x.
Це символьна форма запису прав, складається з 10 символів.
Перший символ позначає тип даних.
Може бути:
\- звичайний файл;d- директорія;l- сімлінк, розберемо на наступному занятті.
Але бувають і більш екзотичні версії:
b- файл блочного пристрою;c- файл символьного пристрою;s- доменне гніздо (socket);p- іменований канал (pipe).
Останні 4 вкрай рідкісні, але socket ми будемо використовувати.
Наступні 9 символів позначають права доступу.
rwxrwxr-x
Насправді, складається з 3 груп по 3 символи:
rwx rwx r-x
- Перша група з трьох символів позначає права доступу власника файлу або директорії (u - user).
- Друга група з трьох символів позначає права доступу на файл або директорію для системної групи (g - group).
- Третя група з трьох символів позначає права доступу на файл або директорію для всіх інших (o - others).
У цих трьох груп однакова комбінація символів, тобто:
rwx
Що вони означають:
r- цеread, тобто право доступу на читання файлу або директорії.w- цеwrite, тобто право на зміну і видалення файлу або директорії.x- цеexecute, тобто право на запуск файлу як програми або вхід у директорію.
Завжди розташовуються саме в такому порядку, і якщо однієї (або більше) з цих букв немає, то цього права теж немає.
Якщо взяти наш приклад:
drwxrwxr-x
це повідомлення позначає, що є директорією, у власника і у групи є повні права доступу - на читання, зміна, видалення, запуск (вхід усередину каталогу), у всіх інших є тільки права на читання і запуск (вхід усередину
каталогу).
Як зрозуміти, хто власник і якій групі належить файл?
Якщо ми подивимося уважніше на скрін з команди ls -l, то побачимо всю потрібну інформацію:
Як видно на скріншоті:
- у третій колонці йде ім’я власника файлу;
- у четвертій колонці йде назва групи.
Зміна прав
Для зміни прав у текстовому режимі (буває ще числовий, розглянемо нижче, і він використовується частіше)
Потрібно виконати команду chmod
chmod personsOperatorRights ім'я_файла_або_ім'я_директорії
Замість persons потрібно використовувати сукупність символів або один із них:
u(user) - користувач, власник файлу або директорії.g(group) - група файлу або директорії.o(others) - усі інші.a(all), тобто всі разом узяті - власник, група і всі інші.
Цей символ позначає суб’єкт, якому буде призначено, видалено або змінено права.
Замість Operator може бути один із таких символів:
+“плюс”, додаємо потрібні права.-“мінус”, видаляємо потрібні права.=“равно”, встановлюємо потрібні права.
Цей символ позначає оператор, від якого залежить, чи будуть додані, видалені або встановлені потрібні права, які підуть за оператором.
Замість Rights перераховуємо символи прав доступу:
r(read) - читання.w(write) - запис.x(execute) - виконання.
Тут іде ланцюжок із трьох перелічених символів, але в певному порядку rwx. Але при цьому не потрібно вказувати тире для пропуску. Приклади: rwx, rw, wx, rx, r, r, w, x.
Якщо Ви не є власником файлу або директорії або у вас немає прав на зміну файлу, то потрібно буде використовувати
права суперкористувача:
sudo chmod personsOperatorRights ім'я_файла_або_ім'я_директорії
Приклади:
Прибираємо права для групи на зміну файлу:
chmod g-w file1
Прибираємо права на читання у групи і всіх інших:
chmod go-r file1
Додамо для групи права на читання і зміну:
chmod g+rw file1
Змінимо рекурсивно права на файли і директорії всередині потрібної директорії. Скасуємо, наприклад, усі права в інших
користувачів і груп:
chmod -R o-rwx ~/my_images/
-R у цьому випадку означає рекурсивно (усі вкладені в папку об’єкти теж зміняться)
Можна не вказувати об’єкт, якщо ви хочете замінити певне право для всіх, наприклад, усім дозволити виконувати файл.
chmod +x ім'я_файлу.sh
Зміна прав (числовий спосіб)
Я особисто частіше зустрічав зміни прав доступу в числовому вигляді, тому рекомендую в ньому розібратися теж.
Отже, припустимо, у нас усе ще є ось такі права, які ми хочемо призначити:
rwxrwxr-x
Щоб перетворити їх на число, потрібно розбити їх на 3 групи:
rwx rwx r-x
Тепер, якщо символ є, замінити його на 1, якщо прочерк, то замінити його на 0:
111 111 101
А тепер перевести це число з двійкової системи у вісімкову:
7 7 5
Ось ми й отримали числовий запис прав доступу
Наприклад:
chmod 775 ім'я_файлу
Або
chmod 700 ім'я_файлу - надати права на все, але тільки власнику файлу.
Заміна власника файлу або групи
Для цього є спеціальна команда chown (change owner).
Використовувати так:
sudo chown ім'я_нового_власника:ім'я_нової_групи ім'я_файла_або_директорії
Необов’язково вказувати і власника, і групу, можна змінити тільки щось одне, і так само приймає параметр
рекурсивно:
sudo chown :ім'я_нової_групи ім'я_файла_або_директорії
sudo chown ім'я_нового_власника ім'я_файла_або_директорії
sudo chown -R ім'я_нового_власника:ім'я_нової_групи ім'я_директорії
Поточний користувач
Щоб дізнатися поточного користувача, використовуйте команду whoami.
Щоб дізнатися групи поточних користувачів, використовуйте команду groups.
Щоб отримати список користувачів, використовуйте команду users.
Щоб отримати групи конкретного користувача, використовуйте команду groups user_name.
Якщо нам необхідно, щоб доступ до файлу мав тільки суперкористувач, можна вказати як власника
файлу root.
sudo chown root file1
Зміниться одразу і власник групи.
APT або менеджер додатків
Природно, як і в будь-якій іншій операційній системі, ми можемо встановлювати різні додатки, припустімо, той самий postgres або навіть Python.
Для управління встановленими пакетами в сімействі дистрибутивів Ubuntu/Mint ми можемо використовувати менеджер APT (Advanced Package Tool).
Для більш ранніх версій ніж, наприклад, Ubuntu 16.04, можна було б використовувати apt-get.
Оновлення списку доступних додатків
Для оновлення списку доступних додатків використовується команда update. Зверніть увагу, що така операція буде
вимагати sudo.
sudo apt update
Виведення цієї команди на екран включає дані про доступні пакети, отримані від різних серверів.

Кожен рядок виведення починається з одного з трьох ідентифікаторів: Hit, Ign і Get, що мають такі трактування значень:
Hit- доступних оновлень для цього пакета зараз немає.Ign- цей пакет ігнорується, оскільки його не можна перевірити або під час перевірки оновлень виник тривіальний збій
(не турбуйтеся, це не помилка)Get- доступна для скачування новіша версія пакета.
Зверніть увагу, ми нічого не оновлювали, а тільки перевірили наявність оновлень у системі. Для скачування всіх
доступних оновлень використовується така команда:
sudo apt upgrade
Встановлення нового пакета
Для встановлення нового пакета використовується команда:
sudo apt install package_name
Під час встановлення пакетів теж працюватиме TAB, наприклад, якщо ви почнете писати net-t і натиснете TAB, вам випаде список із доступних додатків, там щонайменше буде net-tools і net-telnet-cisco.
Можна встановити кілька пакетів одночасно:
sudo apt install package_1 package_2 package_3
Якщо ви спробуєте встановити вже встановлений пакет, система просто перевірить наявність оновлень, і якщо виявить, то встановить їх.
Можна встановити конкретну версію пакета, для цього її необхідно вказати явно:
sudo apt install package_name=version_number
Видалення пакета
Для видалення пакета використовується дві різні команди:
sudo apt remove package_name
або
sudo apt purge package_name
remove- видаляє всі двійкові файли пакета, але не чіпає його файли конфігурації;purge- видаляє і пакет, і його файли конфігурації.
Тобто, якщо ви видалите щось через remove і потім переінсталюєте, у вас будуть збережені минулі налаштування, а якщо через purge, то абсолютно заново встановлена програма.
У команди також є можливість видалити додатки, які не використовуються, через команду sudo apt autoremove.
Змінні оточення
Дуже часто для різних програм або завдань необхідно зберегти будь-яку змінну, причому зробити це прямо в операційній системі. (Ми будемо використовувати їх, наприклад, для зберігання паролів від бази або SECRET_KEY з Django)
Які варіанти нам пропонує Linux? Давайте подивимося.
Види змінних
Якщо дивитися ширше, змінна оточення може бути трьох типів.
Локальні змінні оточення
Ці змінні визначені тільки для поточної сесії. Вони будуть безповоротно стерті після завершення сесії, будь то віддалений доступ або емулятор терміналу. Вони не зберігаються в жодних файлах, а створюються і видаляються за допомогою спеціальних команд.
Користувацькі змінні оточення
Ці змінні оболонки в Linux визначаються для конкретного користувача і завантажуються кожного разу, коли він входить в систему за допомогою локального терміналу або ж підключається віддалено. Такі змінні, як правило, зберігаються у файлах конфігурації: .bashrc, .bash_profile, .bash_login, .profile або в інших файлах, розміщених у директорії
користувача.
Системні змінні оточення
Ці змінні доступні у всій системі для всіх користувачів. Вони завантажуються під час старту системи із системних файлів конфігурації: /etc/environment, /etc/profile, /etc/profile.d/, /etc/bash.bashrc.
Конфігураційні файли змінних оточення в LINUX
.bashrc
Це файл змінних конкретного користувача. Завантажується щоразу, коли користувач створює термінальний сеанс, то тобто, простіше кажучи, відкриває новий термінал. Усі змінні оточення, створені в цьому файлі, набувають чинності кожен раз, коли раз, коли почалася нова термінальна сесія.
.bash_profile
Ці змінні набувають чинності кожного разу, коли користувач підключається віддалено по SSH (розглянемо в наступній лекції). Якщо цей файл відсутній, система шукатиме .bash_login або .profile.
/etc/environment
Цей файл для створення, редагування та видалення будь-яких змінних оточення на системному рівні.
Змінні оточення, створені в цьому файлі, доступні для всієї системи, для кожного користувача і навіть при віддаленому підключенні.
/etc/bash.bashrc
Системний bashrc. Цей файл виконується для кожного користувача щоразу, коли він створює нову термінальну сесію. Це працює тільки для локальних користувачів, під час підключення через інтернет такі змінні не буде видно.
/etc/profile
Системний файл profile. Усі змінні з цього файлу, доступні будь-якому користувачеві в системі, тільки якщо він увійшов віддалено. Але вони не будуть доступні при створенні локальної термінальної сесії, тобто, якщо ви просто відкриєте термінал.
Усі змінні оточення Linux, створені за допомогою цих файлів, можна видалити простим видаленням їх звідти.
Тільки після кожної зміни потрібно або вийти і зайти в систему, або виконати цю команду:
source ім'я_файлу
Команда списку всіх змінних середовища Linux
printenv
printenv | less
printenv | more
Додавання користувацьких і системних змінних оточення в linux
Локальні змінні оточення в Linux можна створювати такою командою:
export var=значення
Ці змінні будуть доступні тільки для поточної термінальної сесії.
Для видалення змінної для поточної сесії використовується unset
unset ім'я_змінної
Для створення користувацьких змінних відкрийте файл .bashrc і змініть його.
Наприклад, через nano:
nano ~/.bashrc
І додайте там, наприклад, такий рядок:
export CD='This is home'
Щоб зміни набули чинності, потрібно явно вказати, що ми змінили цей файл, через команду source:
source ~/.bashrc
Для перевірки можемо викликати команду echo, яка просто друкує змінні:
echo $CD
Для створення системних змінних потрібно виконати такі самі дії як і з користувацькими, але на системному рівні, для цього змінимо файл /etc/bash.profile.
В іншому це буде працювати точно так само.