01OS.md 30 KB

WHO IS OPERATION SYSTEM && Filesystem(s), pathes, access rights and utilities for that.

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

Задачи, которые берет на себя операционная система.

Управление аппаратурой: драйвера всевозможных устройств, поддерживаемых операционной системой + стандартные программные интерфейсы для работы с этой аппаратурой.

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

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

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

  • дисковое пространство и файловая система
  • Оперативная память
  • Вычислительная мощность процессора
  • Сетевой канал для обмена данными

    Единообразный интерфейс пользователя

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

...И много всякого другого...

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

Файловая система - древовидная база данных, предназначенная для хранения файлов и директорий. Файловые системы обычно работают с энергонезависимыми носителями (HDD, SSD), однако в UNIX-системах файловые системы бывают еще виртуальные или, например, в ОЗУ, что, временами, очень удобно. Файловые системы бывают разные, но обычно они привязаны к одному носителю (диск, память, удаленный доступ по сети), имеют лимитированный объем, хранят в себе полезную информацию (в файлах) и, собственно, информацию о структуре файловой системы (имена файлов, права доступа, дерево директорий и т.д.)

Память и её менеджмент

Каждый компьютер имеет лимитированный объем диска и ОЗУ, и задача файловой системы и менеджера памяти - иметь возможность перераспределять этот объем по запросу прикладных программ. В разное время жизни программ может понадобится разные объемы памяти в ОЗУ и на диске. Менеджер памяти операционной системы так же занимается освободжением памяти после окончания работы программы, а так же изолируют память программ друг от друга.

Пользовательский интерфейс

Любая ОС предоставляет возможность работы с ней используя устройства ввода/вывода для человека: экран, звук, клавиатура, мышь, тач- пад и скрин.

GUI

На текущий момент на рынке интерфейсов победили GUI (Graphical User Interface) - те или иные графические интерфейсы, ориентированные на работу с тачскрином или мышью. Удобные и интуитивные для пользователя, они плохо подходят для автоматизации действий, так как предполагают наличие оператора, который будет находить и нажимать нужные кнопки на экране.

Desktop

GUI на десктопе предполагают оконный интерфейс с программами, которые имеют доступ к определенному (обычно прямоугольному) блоку экрана - окну.

Mobile

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

CLI

CLI (Command Line Interface) - интерфейс командной строки, который предполгает взаимодействие с программами путем ввода команд и получение текстового результата работы команды. Данный способ не так интуитивен, как GUI, однако у него есть огромный плюс - команды могут вводится вслепую, а значит для запуска нескольких команд подряд вовсе не обязателен человек, смотрящий в экран. По этой причине задачи, выполняемый в CLI легко автоматизируются - достаточно предусмотреть механизм, который позволит запускать несколько команд последовательно из текстового файла или иного источника. Более того, современные командные интерфейсы (bash, zsh, powershell) являются вполне полноценными языками программирования. sh и bash вообще стояли у истоков многих языков программирования наподобие perl и php.

Драйвера устройств.

Драйвера устройств снизу работают непосредственно с тем или иным устройствам согласно его возможностей и способов коммуникации с устройством. Сверху (со стороны ОС) драйвера предоставляют унифицированный интерфейс, благодаря чему ОС работает одинаково с устройствами одного типа. ОС, в свою очередь, предоставляет возможность пользовательским программам стандартным способом обращаться к железу - звук, видео, сеть, устройства ввода и так далее. В современных ОС драйвера могут поставляться с ядром (UNIX-like, Linux), или поставляться вместе с конкретной железкой (Windows). Первый подход более удобен в том контексте, что обычно Linux сам ставит драйвера и они работают годами. Второй подход более гибкий, так как производитель hardware может написать любой драйвер, которого нет в ядре, однако обычно с новой версией Windows драйвера старых железок перестают поддерживаться. И Windows и Linux имеют драйвера обоих типов.

Сетевая подсистема.

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

Интерфейсы

Интерфейс - виртуальная модель одной сетевой платы с тем или иным набором сетевых настроек (адрес и прочее). Интерфейс не обязательно совпадает с реальной сетевой платой, например интерфейс loopback обеспечивает работу с этим же компьютером по сети и имеет IP aдрес 127.0.0.1. Реальные данные при этом в сеть не передаются.

Протоколы

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

TODO: OSI.JPG

Адресация

Для работы в сети используются те или иные адреса. На данный момент в условиях стека протоколов TCP/IP используются IP адреса и доменные имена, которые являются более удобными для запоминания чем числовые IP адреса. В ОС обязательно присутствует resolver, который отвечает за преобразование доменных имен в IP адреса, так как в сетях TCP/IP невозможно отправить данные по доменному имени.

Routing

Роутинг (маршрутизация) служит для того, что бы распределять потоки данных по разным интерфейсам в зависимости от адресов или иных условий. Например на любом компьютере с сетью при обращении на 127.0.0.1 данные отправляются через интерфейс loopback на этот же компьютер. А при обращении на другие адреса данные уходят через реальную сетевую плату/wifi адаптер/модем.

Firewall

Занимается фильтрацией данных для обеспечения защиты от перегруза сети (DOS, DDOS), или от тех или иных вредоносных данных, нацеленных на взлом тех или иных сетевых сервисов.

Общая структура файловой системы linux/unix/posix.

Директория Описание
/корень
/bin(binaries) бинарные файлы пользователя
/sbin(system binaries) системные исполняемые файлы
/etc(etcetera) конфигурационные файлы
/dev(devices) файлы устройств
/proc(proccess) информация о процессах
/var(variable) Переменные файлы
/var/logФайлы логов
/var/libпеременные библиотеки
/var/mailпочта
/var/spoolпринтер
/var/lockфайлы блокировок
/var/runPID процессов
/tmp(temp) Временные файлы
/usr(user applications) Программы пользователя
/usr/bin/Исполняемые файлы
/usr/sbin/Системные исполняемые файлы
/usr/lib/Библиотеки
/usr/localФайлы пользователя
/homeДомашняя папка
/bootФайлы загрузчика
/lib(library) Системные библиотеки
/opt(Optional applications) Дополнительные программы
/mnt(mount) Монтирование
/mediaСъемные носители
/srv(server) Сервер
/runпроцессы
/sys(system) Информация о системе

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

  • Корень (/) - раздел на физическом диске
  • /dev, /proc - виртуальные файловые системы, обеспечивают работу ОС
  • /boot - зачастую отдельный раздел с загрузчиком ОС
  • /media - флешки всякие
  • /mnt - что хотите, то и примонтируете.

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

Операции монтирования и отмонтирования

Для подключения файловой системы (монтирования) существует команда mount:

#mount шо куда:
#например
mount /dev/sda1 /mnt #подключаем устройство /dev/sda, это обычно первый раздел на первом винчестере в папку /mnt
# создаем файловую систему в оперативной памяти размером 512 мегабайт и подключаем её в папку /mnt. 
# Устройство в /dev при этом указывать не нужно, но параметр "шо" является обязательным, поэтому пишем tmpfs
mount -t tmpfs -o size=512m tmpfs /mnt/ 

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

umount /mnt
umount -l /mnt # -l - значит lazy, "мне лень искать программу которая сейчас в этой файловой системе"

mount без параметров покажет все присоединенные ФС скринчик

Файловые системы бывают разные

В отличие от, в linux есть удобные средства для создания своих файловых систем :

  • sshfs - подключаете удаленную файловую систему по ssh и работаете в вашем рабочем окружении без постоянного переливания файлов по ftp/ssh/git
  • ftpfs - аналог sshfs, только использует протокол ftp, работает не очень
  • btfs - подключает торрент файл. И можно сразу получить доступ к файлам. Не ожидая пока скачается.

UNIX-CLI

CLI - очень крутая штука, особенно в UNIX-системах. Все это благодаря простоте, гибкости и мощности возможностей shell.

Shell

Shell - это программа-оболочка, которая реализует CLI. На текущий момент самой популярной является bash, самой навороченной (из известных) - zsh, Выглядит это примерно так:

bash

Вы видите текст приглашения, и курсор для ввода команд.

Команды

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

Команды запускаются следующим образом:

команда ls

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

Удобство CLI

Несмотря на то, что для среднего мышевоза нажимать кнопки на клавиатуре - непосильная задача, командно-строковой интерфейс обладает удобством, если знать его возможности. Не зря же многие мощные программные продукты имеют CLI в том или ином виде (q3, hl, cs, autocad, linux, so on...)

Клавиатурные комбинации:

  • TAB - святая кнопка, которая дополняет ваш текст. Не надо писать всё, надо жать TAB. Иногда два раза.
  • CTRL-W - стереть слово до курсора
  • CTRL-R - поиск по истории команд. Достаточно ввести любую часть другой команды что бы её выдернуть для использования сейчас.
  • СТРЕЛКА ВВЕРХ - история
  • Alt-B - слово назад.

Более того, современная библиотека readline, которая используется в bash и других консолях (например mysql), умеет работать в режиме vi или emacs.

Команда history выводит историю ваших команд.

Создание и удаление файлов и директорий. touch, mkdir, rm, ls, cat, ...

Ниже идет джентльменский набор файловых операций, реализуемых командами:

Где я?

pwd #print working directory

Я хочу туда!

cd ~/tmp # change directory: зайти в папку tmp в домашней папке текущего пользователя
cd       # идем в домашнюю папку
cd ./    # зайти в эту же папку
cd ../   # выйти на папку выше.

А что тут есть?

ls -la   # list подробно и с правами
ls       # list неподробно
ls -lah  # list подробно и с понятными размерами файлов

Я хочу создать!

touch filename           # создает пустой файл filename, или обновляет время доступа к файлу ("касается" его)
mkdir ~/newFolder        # создаем папку в домашнем каталоге
mkdir newFolder          # создаем папку в текущем каталоге
mkdir ../newFolder       # создаем папку рядом с текущим (т. е. на уровень выше)
mkdir -p ~/newFolder/1/2/3/4/5/6 # создадим сразу несколько папок друг в друге

Переименовать или перенести:

mv ~/newFolder/1/2/3/4/5/6 ~/newFolder # перенесем папку 6 из папки 5 в папку ~/newFolder
mv filename otherFilename              # переименуем файл в другое имя файла.

Копировать

cp otherFilename filename             # копируем один файл из otherFilename в filename
cp -vrf ~/newFolder/1/2/ ~/newFolder  # copy verbose recursive force папку ~/newFolder/1/2 в ~/newFolder.

Удалить

rm otherFilename      # remove file otherFilename
rm -rf ~/newFolder/1  # remove files and directories recursively forced.

А что внутри файла?

cat /etc/resolv.conf # conCAT /etc/resolv.conf

Wildcard

Вы можете использовать символ * для замены части имени файла на любые:

ls -la *php # показать все файлы php в директории

При этом команда ls получит в качестве параметров все файлы в папке, которые оканчиваются на php.

Редактирование. vim и nano.

Все мы в той или иной степени знакомы с редакторами текста. Однако в мире UNIX редакторы изначально более мощные и гибкие, ориентированные на работу с кодом или конфигурационными файлами.

nano

nano - блокнот под CLI. имеет простой и понятный интерфейс, внизу есть подсказочки, все как вы ожидали в обычном простом редакторе. Символ ^ значит кнопку CTRL

nano

vim

ViM - (vi improved) - мощный редактор, который построен не на идее редактирования текста, а на идее программирования редактирования текста. Благодаря этому вы при редактировании оперируете не отдельными символами, а сущностями, имеющими отношение к структуре программного кода (слова, параметры, парные тэги/скобки и так далее)

Режимы работы ViM;

  • Нормальный. Это режим, в котором собственно происходит программирование текста

vim cheat sheet

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

Обычная команда для ViM состоит из:

<количество повторов><операция><перемещение>

Например:

  • 50 CTRL-A - добавить 50 к первому числу в строке справа от курсора
  • 5w - 5 слов вперед
  • 5dw - удалить 5 слов вперед
  • w - переместится на слово вперед
  • % - прыгаем по парным скобкам
  • c% - поменять текст в парных скобках

  • Режим ввода. Включается по i, c, s или a. Обычный ввод текста. выход по Esc

  • Режим выделение текста. Включается по v.

Выход
  • Esc:q! - выйти не сохраняясь
  • Esc:wqa - выйти, сохранив все файлы
  • ZZ - выход с сохранением.

Абсолютные и относительные пути, ~ и проч.

Пути бывают абсолютные и относительные, а так же относительно домашней папки. Для этого используется следующий синтаксис:

  • /etc/ - Путь, начинающийся со слеша - абсолютный
  • tmp - Путь без слеша означает путь относительно текущей папки. Иногда надо поставить ./ перед именем папки или файла (./tmp)
  • ~/ - домашняя папка. Обычно /home/username.
  • ~username - домашняя папка пользователя.
  • .., ../ - папка уровнем выше
  • ./ - текущая папка.

Права доступа. Группы, пользователи. chmod, chown

Каждый файл или папка в UNIX ОС имеют права доступа, которые побиты на 3 восьмеричных цифры (3 бита x 3 блока).

права доступа в ls -la

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

  • r - read
  • w - write
  • x - eXecute/доступ к папке

Каждый из этих трех прав доступа назначаются:

  • Владельцу
  • Группе
  • Остальным.

Для задания владельца используется команда chown (CHange OWNer):

chown username filename # меняем владельца
chown -R username:groupname ~/newFolder # меняем владельца и группу для папки ~/newFolder рекурсивно

Для задания прав доступа используется команда chmod

chmod 700 filename # полный доступ для владельца, ноль доступа группе и остальным
chmod -R a+x ~/newFolder # добавить всем доступ на запуск всем (владельцу, группе, и остальным) рекурсивно

Hard & symlinks.

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

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

для работы с этими ссылками используется команда ln.