Операционная система - программный комплекс, который предназначен для управления аппаратурой компьютеров и предоставления стандартного набора возможностей (API) приложениям.
Это означает, что с точки зрения прикладных программ работа с сетью реализуется одинаково, несмотря на то, что каждая сетевая плата работает по своему. Драйвер унифицирует работу с сетью: снизу он работает с конкретной сетевой платой по её правилам, сверху он реализует такой же интерфейс как и любые другие сетевые драйвера. Таким образом прикладные программы не зависят от конкретной реализации драйвера и конкретной сетевой платы.
В каждой операционной системе на одном компьютере одновременно работают десятки процессов, и ОС разделяет ресурсы таким образом, что бы их хватало. Основные разделяемые ресурсы:
Сетевой канал для обмена данными
Если вниз от программ идет операционная система с её стандартными подходами для получения тех или иных ресурсов, то вверх - пользовательский интерфейс, который, отчасти, обеспечивается ОС и тоже должен быть унифицирован для удобства работы пользователя. Это может быть терминал или графическая оконная оболочка, или что-то еще, однако программы, использующие ОС для работы с пользователем выглядят схоже и работают однотипно.
Файловая система - древовидная база данных, предназначенная для хранения файлов и директорий. Файловые системы обычно работают с энергонезависимыми носителями (HDD, SSD), однако в UNIX-системах файловые системы бывают еще виртуальные или, например, в ОЗУ, что, временами, очень удобно. Файловые системы бывают разные, но обычно они привязаны к одному носителю (диск, память, удаленный доступ по сети), имеют лимитированный объем, хранят в себе полезную информацию (в файлах) и, собственно, информацию о структуре файловой системы (имена файлов, права доступа, дерево директорий и т.д.)
Каждый компьютер имеет лимитированный объем диска и ОЗУ, и задача файловой системы и менеджера памяти - иметь возможность перераспределять этот объем по запросу прикладных программ. В разное время жизни программ может понадобится разные объемы памяти в ОЗУ и на диске. Менеджер памяти операционной системы так же занимается освободжением памяти после окончания работы программы, а так же изолируют память программ друг от друга.
Любая ОС предоставляет возможность работы с ней используя устройства ввода/вывода для человека: экран, звук, клавиатура, мышь, тач- пад и скрин.
На текущий момент на рынке интерфейсов победили GUI (Graphical User Interface) - те или иные графические интерфейсы, ориентированные на работу с тачскрином или мышью. Удобные и интуитивные для пользователя, они плохо подходят для автоматизации действий, так как предполагают наличие оператора, который будет находить и нажимать нужные кнопки на экране.
GUI на десктопе предполагают оконный интерфейс с программами, которые имеют доступ к определенному (обычно прямоугольному) блоку экрана - окну.
Мобильные интерфейсы, в силу небольшого размера экрана, обычно не показывают более одной программы одновременно, так же часть экрана уходит на клавиатуру при вводе текста.
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 невозможно отправить данные по доменному имени.
Роутинг (маршрутизация) служит для того, что бы распределять потоки данных по разным интерфейсам в зависимости от адресов или иных условий. Например на любом компьютере с сетью при обращении на 127.0.0.1 данные отправляются через интерфейс loopback на этот же компьютер. А при обращении на другие адреса данные уходят через реальную сетевую плату/wifi адаптер/модем.
Занимается фильтрацией данных для обеспечения защиты от перегруза сети (DOS, DDOS), или от тех или иных вредоносных данных, нацеленных на взлом тех или иных сетевых сервисов.
Дириктория | Описание |
---|---|
/ | корень |
/bin | (binaries) бинарные файлы пользователя |
/sbin | (system binaries) системные исполняемые файлы |
/etc | (etcetera) конфигурационные файлы |
/dev | (devices) файлы устройств |
/proc | (proccess) информация о процессах |
/var | (variable) Переменные файлы |
/var/log | Файлы логов |
/var/lib | переменные библиотеки |
/var/mail | почта |
/var/spool | принтер |
/var/lock | файлы блокировок |
/var/run | PID процессов |
/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/gitftpfs
- аналог sshfs
, только использует протокол ftp, работает не оченьbtfs
- подключает торрент файл. И можно сразу получить доступ к файлам. Не ожидая пока скачается.CLI - очень крутая штука, особенно в UNIX-системах. Все это благодаря простоте, гибкости и мощности возможностей shell.
Shell - это программа-оболочка, которая реализует CLI. На текущий момент самой популярной является bash, самой навороченной (из известных) - zsh, Выглядит это примерно так:
Вы видите текст приглашения, и курсор для ввода команд.
Команды бывают внутренние (их реализует непосредственно программа-оболочка) или же другие программы, существующие в файловой системе.
Команды запускаются следующим образом:
Первым словом идет имя команды, далее идут её параметры, разделенные одним или несколькими пробелами. Команда получает параметры и выполняет свою задачу исходя из настроек, переданных в параметрах.
Несмотря на то, что для среднего мышевоза нажимать кнопки на клавиатуре - непосильная задача, командно-строковой интерфейс обладает удобством, если знать его возможности. Не зря же многие мощные программные продукты имеют CLI в том или ином виде (q3, hl, cs, autocad, linux, so on...)
Клавиатурные комбинации:
Более того, современная библиотека 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
Вы можете использовать символ *
для замены части имени файла на любые:
ls -la *php # показать все файлы php в директории
При этом команда ls
получит в качестве параметров все файлы в папке, которые оканчиваются на php.
vim
и nano
.Все мы в той или иной степени знакомы с редакторами текста. Однако в мире UNIX редакторы изначально более мощные и гибкие, ориентированные на работу с кодом или конфигурационными файлами.
nano
nano - блокнот под CLI. имеет простой и понятный интерфейс, внизу есть подсказочки, все как
вы ожидали в обычном простом редакторе. Символ ^
значит кнопку CTRL
vim
ViM - (vi improved) - мощный редактор, который построен не на идее редактирования текста, а на идее программирования редактирования текста. Благодаря этому вы при редактировании оперируете не отдельными символами, а сущностями, имеющими отношение к структуре программного кода (слова, параметры, парные тэги/скобки и так далее)
ViM
;Каждая клавиша на клавиатуре в этом режиме отвечает за то или иное действие: перемещение, изменение, удаление, вставку, копирование блока текста и так далее.
Обычная команда для ViM состоит из:
<количество повторов><операция><перемещение>
Например:
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 блока).
r
- readw
- writex
- eXecute/доступ к папкеКаждый из этих трех прав доступа назначаются:
Для задания владельца используется команда chown
(CHange OWNer):
chown username filename # меняем владельца
chown -R username:groupname ~/newFolder # меняем владельца и группу для папки ~/newFolder рекурсивно
Для задания прав доступа используется команда chmod
chmod 700 filename # полный доступ для владельца, ноль доступа группе и остальным
chmod -R a+x ~/newFolder # добавить всем доступ на запуск всем (владельцу, группе, и остальным) рекурсивно
В файловой системе есть ссылки двух типов - текстовые файлы с путем к другим файлам. Это симлинки. А так же есть копии файловых записей, которые ссылаются на контент файлов. Это хардлинки
Первые работают в разных файловых системах, однако если файл, на который сделана ссылка удалится - ссылка станет битая Вторые работают только в одной файловой системе, однако все ссылки на контент файла равноправны и файловая система ведет подсчет этих ссылок, освобождая место только после удаления последней ссылки.
для работы с этими ссылками используется команда ln
.