Основната концепция в Linux – всичко е файл

14
3611

В програмирането, за опростяване на писането на сорс код е прието използването на различни шаблони, модели и абстракции. Разработчиците на Linux не са правили изключение от това правило и една от тези абстракции е основната концепция в Linux, че всичко е файл. Тази концепция е приета от Unix и е избрана, за да може да се предостави съвсем лесен и опростен достъп до всички възможности на операционната система без да се налага разработването на специални интерфейси.

Този подход дава богати възможности, като например обръщането към всеки един файл с помощта на текстов редактор, запис на данни в него и други подобни действия. Тук малко по-подробно ще се спрем върху тази концепция и ще покажем някои интересни експерименти.

Абсолютно всичко е файл

Нека най-напред да разберем как работи тази концепция. В Linux масово се използва понятието коренова файлова система. Именно там се монтира раздела на хард или флаш диска, на който е инсталиран Linux. В различните подпапки се включват или по-точно монтират дяловете на хард диска – така например, домашният дял е монтиран в папката /home, зареждащият в папката /boot. Да подчертаем, че в Linux паралелно съществуват не само реалните файлови системи, но и виртуални файлови системи, създадени от Linux ядрото – така например, в папката /proc се монтира файловата система procfs, която дава възможност да се получи достъп до различните параметри на ядрото, а в папката /dev се монтира devfs с информацията за различния хардуер и периферните устройства, включени към компютърната система, които разбира се, също са във вид на файлове.

Естествено, файловете в тези файлови системи не са съвсем обикновени. Ако например, отворим един обикновен текстов файл, какъвто е /etc/passwd с помощта на помощната програма file, то веднага ще видим информацията за файл:

file /etc/passwd

Виждаме, че това е текстов файл, който може да бъде отворен с текстов редактор и да се види какво е неговото съдържание.

Хардуерните устройства в Linux също са файлове

Нека да започнем с различните устройства. В папката /dev се монтира системата devfs и именно там се намират всичкия включен към Linux системата хардуер, както и някои интерфейси за достъп до възможностите на Linux ядрото. Нека в терминала въведем следната команда:

ls -l /dev

Ако се опитаме да получим информация, например за файла /dev/sda1, то помощната програма file ще ни съобщи, че това е блоков файл:

file /dev/sda

А това означава, че този файл може да бъде отворен с помощта на някой редактор за дяловете на диска, както и да се настрои работата на този дял (или диск). Естествено, може да се разгледа какво съдържа този файл, но едва ли ще открием нещо, понеже данните в него са в двоичен вид.

cat /dev/sda

Това работи и в обратен ред – възможно е отварянето на произволен файл в редактор за дяловете на диска и в него да се създаде файлова система.

И още, в папката /dev са налични символни файлове каквито са например /dev/random, /dev/null и /dev/zero. Когато отваряте първия винаги ще получавате случайна поредица от байтове. Във втория файл могат да бъдат записвани всякакви данни, които никога няма да бъдат запазени, а третият е винаги празен и ако от него се копират данни към някой раздел или друг файл, то те винаги ще бъдат запълнени с нули (00).

Информацията за Linux ядрото също е във вид на файлове

Информацията за операционната система, за Linux ядрото и за работещите системни процеси се намира в папката /proc. Както направихме по-горе, всички тези файлове могат да бъдат видени с помощта на помощната програма ls:

ls -l /proc

Така например, информацията за използваната оперативна памет е поместена във файла /proc/meminfo и може да се види с помощта на следната команда:

file /proc/meminfo

ls ни показва, че това е празен файл, но ако се опитате да го прочетете, ще получите маса интересна информация за паметта и нейното състояние. Него да го отворим с един текстов редактор:

vi /proc/meminfo

Но записът в този файл не е възможен, понеже тази файлова система е достъпна само за четене. Всъщност тези информационни файлове са много.

Да напомним, че версията 5.10 на Linux ядрото е с дълъг срок на поддръжка (LTS), обновяванията за която ще излизат в продължение на не по-малко от две години. Сред най-значителните нововъведения са: поддръжката на механизма за защита MemTag за ARM64 системите, опцията за монтиране nosymfollow, значителни оптимизации на файловата система Ext4, решението на проблема с 2038 година в XFS, добавянето на новото системно извикване process_madvise, разширената поддръжка на AMD SEV с криптиране регистрите на централния процесор, възможност за спиране изпълнението на BPF програмите и други.

Едновременно с излизането на ядрото Linux 5.10 TLS, латиноамериканската фондация за отворен код и свободен софтуер, сформира версия на новото Линукс ядро с изцяло отворен и свободен код. Това е версията Linux-libre 5.10-gnu, изчистена от каквито и да било елементи на фърмуери, блобове и драйвери, съдържащи несвободни компоненти или участъци от код, областта на приложение на който е ограничена от производителя

Настройката на Linux ядрото също е във вид на файлове

Настройката на Linux ядрото се осъществява чрез папките /sys и /proc/sys. Файловете от тези директории могат да се извеждат във вид на списък и за разлика от предишните, в тези файлове е възможен записа и по този начин се променят необходимите параметри. Един от най-често променяните файлове е /proc/sys/net/ipv4/ip_forward. Нека да получим информация какъв точно е този файл:

file /proc/sys/net/ipv4/ip_forward

Изглежда празен, но не е. В него има данни, които могат да бъдат разгледани по следния начин:

cat /proc/sys/net/ipv4/ip_forward

Те могат да бъдат променяни:

echo "0" | sudo tee /proc/sys/net/ipv4/ip_forward

Всъщност, това можеше да се направи по следния начин:

echo "0" > /proc/sys/net/ipv4/ip_forward

Разбира се, възможно е този файл да се редактира с помощта на обикновен текстов редактор. Но това няма да сработи, ако не сте влезли в терминала с Root права. Ако не сте Root, текстовият редактор ще направи копие на файла и ще редактира именно него, като оригиналният файл няма да бъде променен.

Странните сокети в Linux също са файлове

За мрежовата работа и мрежовото взаимодействие на различните приложения и програми се използват сокети. Това също са файлове, но те са по-различни от обикновените стандартни файлове. Сокетите се използват, за да могат в тях приложенията по софтуерен път да записват и четат най-различни данни и по този начин да взаимодействат помежду си. Нека да създадем един собствен сокет. Това може да стане с помощта на следната команда в терминала:

nc -lU socket.sock

Помощната програма file веднага ще съобщи, че това е сокет. Командата е:

nc -U socket.sock

Но този файл не може да се отвори с помощта на текстов редактор или с помощната програма cat. Можем да се включим към новосъздадения сокет с помощта на следната команда:

nc -U socket.sock

 

След тази команда всички данни които набирате в единия терминал ще се показва и във втора сесия на терминала – тоест, имаме обмен на данни. Но това си е файл, като списъка със сокетите може да бъде изведен с помощта на командата ls.

Заключение

Това в съвсем основни линии е концепцията, че всичко в Linux е представено във вид на файл. Всички възможни функции, хардуер, данни и т.н. са представени като файлове. Това е много удобно, понеже за достъпа до която и да било функция или периферно устройство не се налага създаването на отделен софтуерен инструмент, а могат да се използват вече съществуващите и проверени в течение на времето програми. Помощните cat, ls и echo се предоставят във всяка Linux дистрибуция и в повечето случаи се справят със всички файлове.

4.8 17 гласа
Оценете статията
Абонирай се
Извести ме за
guest
14 Коментара
стари
нови оценка
Отзиви
Всички коментари