В програмирането, за опростяване на писането на сорс код е прието използването на различни шаблони, модели и абстракции. Разработчиците на 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 дистрибуция и в повечето случаи се справят със всички файлове.