Wstęp

Dzień dobry, dziś opowiem o podstawowym założenie linuxa i Unixa, czyli “wszystko jest plikiem”. Serdecznie zapraszam.

Wszystko jest plikiem.

Tak nawet twój dysk jest plikiem. Nie znaczy to oczywiście, że on nie istnieje albo, że tworząc więcej plików, masz więcej dysków :)

Prosty opis filozofii UNIXa, która również pasuje do Linuxa to:

“Wszystko jest plikiem; jeśli coś nie jest plikiem, jest procesem”

Linux (Unix także), nie rozróżnia pliku czy katalogu. Dla systemu katalog jest plikiem zawierającym nazwy innych plików. Programy, serwisy, treści, obrazy i inne, również są plikami. Urządzenia wejścia i wyjścia, właściwie wszystkie urządzenia są dla systemu plikami.

Typy plików

Większość plików jest zwykłymi plikami. Zawierają dane, jak np. tekst, pliki wykonywalne, programy, wejście lub wyjście z programu itd.

W systemie jednak plik plikowi sobie nierówny i istnieje kilka wyróżniających się plików:

Nazwa PL Nazwa ENG Opis    
Katalogi Directory “Pliki które są listami plików”  
Pliki specjalne Special files Mechanizm używany dla operacji wejścia i wyjścia. Większość takich plików znajduje się w /dev    
Linki Links System do umożliwienia dostępu do pliku/zasobu z różnych miejsc systemu plików    
Gniazda domenowe (Domain) sockets “Podobne do gniazd TCP/IP umożliwiają połączenia między procesami chronione przez kontrolę dostępu systemu plików”
Nazwane potoki Named pipes Działają podobnie jak gniazda i umożliwiają komunikację między procesami bez składni dla gniazd sieciowych    

Co to za typ?

Do wyświetlenia informacji o pliku i jego typie, możemy się posłużyć komendą ls -l

mlewicki@wsl:~$ ls -l
total 29028
-rw-r--r-- 1 mlewicki mlewicki 29717060 Feb  2  2020 SourceCodePro.zip
lrwxrwxrwx 1 mlewicki mlewicki        1 Sep  3 13:03 b -> a
drwxr-xr-x 1 mlewicki mlewicki      512 Sep  3 12:21 font
-rw-r--r-- 1 mlewicki mlewicki      749 Sep  2 14:14 id_rsa
lrwxrwxrwx 1 mlewicki mlewicki       41 Sep  3 13:04 projects -> /mnt/c/Users/mlewicki/Documents/Projects/
drwxr-xr-x 1 mlewicki mlewicki      512 Sep 28 15:56 some

Typ pliku jest zawsze pierwszym znakiem z lewej strony. Dla przykładu:

drwxr-xr-x 1 mlewicki mlewicki 512 Sep 3 12:21 font

d w tym przypadku mówi nam, że font jest katalogiem (directory)

Lista oznaczeń typów

Oznaczenie Nazwa PL Nazwa ENG
- Zwykły plik Regular file
d Katalog Directory
l Link Link
c Specjalny plik Special file
s Gniazdo Socket
p Nazwany potok Named pipe
b Urządzenie blokowe Block device

Jeżeli nie chcemy stale wykonywać długiego listowania plików, możemy wykorzystać komendę ls -F , która zwróci nam pliki wraz z dopisanym suffixem (symbolem na końcu) odpowiadającemu typowi. Znaki te różnią się od tych w tabeli wyżej i są one następujące:

Suffix Znaczenie
[brak] Plik
/ Katalog
@ Link
* Plik wykonywalny
= Gniazdo
| Nazwany potok

Więcej informacji o pliku.

W przypadku, jeśli chcemy się dowiedzieć czegoś więcej o pliku, możemy skorzystać z komendy file, która nam powie np. czy jest to archiwum, plik csv, pdf czy plik binarny.

Przykład:

mlewicki@wsl:~$ file someDir/
Documents/: directory

mlewicki@wsl:~$ file some.pdf
some.pdf: PDF document, version 1.2

mlewicki@wsl:~$ file obraz.xcf
obraz.xcf: GIMP XCF image data, version 0, 150 x 38, RGB Color

mlewicki@wsl:~$ file cv.txt
cv.txt: ASCII text

mlewicki@wsl:~$ file image.png
image.png: PNG image data, 616 x 862, 8-bit grayscale, non-interlaced

mlewicki@wsl:~$ file figure
figure: ASCII text

mlewicki@wsl:~$ file me+tux.jpg
me+tux.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI),
            "2 Aug 2021", 144 x 144

mlewicki@wsl:~$ file 42.zip.gz
42.zip.gz: gzip compressed data, deflated, original filename,
         '42.zip'

mlewicki@wsl:~$ file vi.gif
vi.gif: GIF image data, version 89a, 88 x 31

mlewicki@wsl:~$ file slide1
slide1: HTML document text

mlewicki@wsl:~$ file template.xls
template.xls: Microsoft Office Document

mlewicki@wsl:~$ file abook.ps
abook.ps: PostScript document text conforming at level 2.0

mlewicki@wsl:~$ file /dev/log
/dev/log: socket

mlewicki@wsl:~$ file /dev/hda
/dev/hda: block special (3/0)

Epilog

Temat plików rozległy. Można, by opisać każdy typ z osobna i pewnie kiedyś to zrobię. Jednak dziś chciałem tylko poruszyć temat filozofii “Wszystko jest plikiem”. Przez lata ta definicja ewoluowała, najpierw do “wszystko jest deskryptorem pliku”, a obecnie do “wszystko jest strumieniem bajtów”. Najważniejsze jest to, by sobie uzmysłowić, że my widzimy i operujemy na wszystkim, jak na pliku. A co już z tym plikiem dzieje i od czego on jest, to już sprawa dla Kernela. :)

Jeśli macie jakieś pytania, prośby, czy przemyślenia zapraszam do kontaktu

Życzę miłego dnia i pozdrawiam.

Mateusz Lewicki