Forklaring af "Alt er en fil" og filtyper i Linux


Hvis du er ny hos Linux eller har brugt det i et par måneder, skal du have hørt eller læst udsagn som “I Linux er alt en fil”.

Det er faktisk sandt, selvom det bare er et generaliseringskoncept, i Unix og dets derivater som Linux betragtes alt som en fil. Hvis noget ikke er en fil, skal den køre som en proces på systemet.

For at forstå dette skal du f.eks. Tage mængden af plads i din rod (/) -mappe altid forbruges af forskellige typer Linux-filer. Når du opretter en fil eller overfører en fil til dit system, optager den noget plads på den fysiske disk, og den anses for at være i et bestemt format (filtype).

Og også Linux-systemet skelner ikke mellem filer og mapper, men mapper gør et vigtigt job, det vil sige at gemme andre filer i grupper i et hierarki for nem placering. Alle dine hardwarekomponenter er repræsenteret som filer, og systemet kommunikerer med dem ved hjælp af disse filer.

Ideen er en vigtig beskrivelse af en stor egenskab ved Linux, hvor input/output ressourcer såsom dine dokumenter, mapper (mapper i Mac OS X og Windows), tastatur, skærm, harddiske, flytbare medier, printere, modemer, virtual terminaler og også inter-proces og netværkskommunikation er strømme af bytes defineret af filsystemplads.

En bemærkelsesværdig fordel ved alt at være en fil er, at det samme sæt Linux-værktøjer, hjælpeprogrammer og API'er kan bruges på ovenstående input/output-ressourcer.

Selvom alt i Linux er en fil, er der visse specielle filer, der er mere end bare en fil, for eksempel stikkontakter og navngivne rør.

Hvad er de forskellige typer filer i Linux?

I Linux er der grundlæggende tre typer filer:

  1. Almindelige/almindelige filer
  2. Særlige filer
  3. Kataloger

Dette er filer, der indeholder tekst, data eller programinstruktioner, og de er den mest almindelige type filer, du kan forvente at finde på et Linux-system, og de inkluderer:

  1. Læsbare filer
  2. Binære filer
  3. Billedfiler
  4. Komprimerede filer og så videre.

Specielle filer inkluderer følgende:

Bloker filer: Disse er enhedsfiler, der giver bufferadgang til systemhardwarekomponenter. De giver en metode til kommunikation med enhedsdrivere gennem filsystemet.

Et vigtigt aspekt ved blokfiler er, at de kan overføre en stor blok med data og information på et givet tidspunkt.

Notering af blokfilstik i et bibliotek:

# ls -l /dev | grep "^b"
brw-rw----  1 root disk        7,   0 May 18 10:26 loop0
brw-rw----  1 root disk        7,   1 May 18 10:26 loop1
brw-rw----  1 root disk        7,   2 May 18 10:26 loop2
brw-rw----  1 root disk        7,   3 May 18 10:26 loop3
brw-rw----  1 root disk        7,   4 May 18 10:26 loop4
brw-rw----  1 root disk        7,   5 May 18 10:26 loop5
brw-rw----  1 root disk        7,   6 May 18 10:26 loop6
brw-rw----  1 root disk        7,   7 May 18 10:26 loop7
brw-rw----  1 root disk        1,   0 May 18 10:26 ram0
brw-rw----  1 root disk        1,   1 May 18 10:26 ram1
brw-rw----  1 root disk        1,  10 May 18 10:26 ram10
brw-rw----  1 root disk        1,  11 May 18 10:26 ram11
brw-rw----  1 root disk        1,  12 May 18 10:26 ram12
brw-rw----  1 root disk        1,  13 May 18 10:26 ram13
brw-rw----  1 root disk        1,  14 May 18 10:26 ram14
brw-rw----  1 root disk        1,  15 May 18 10:26 ram15
brw-rw----  1 root disk        1,   2 May 18 10:26 ram2
brw-rw----  1 root disk        1,   3 May 18 10:26 ram3
brw-rw----  1 root disk        1,   4 May 18 10:26 ram4
brw-rw----  1 root disk        1,   5 May 18 10:26 ram5
...

Tegnfiler: Disse er også enhedsfiler, der giver ubufret seriel adgang til systemhardwarekomponenter. De arbejder ved at give en måde at kommunikere med enheder ved at overføre data et tegn ad gangen.

Notering af tegnfiler-stik i et bibliotek:

# ls -l /dev | grep "^c"
crw-------  1 root root       10, 235 May 18 15:54 autofs
crw-------  1 root root       10, 234 May 18 15:54 btrfs-control
crw-------  1 root root        5,   1 May 18 10:26 console
crw-------  1 root root       10,  60 May 18 10:26 cpu_dma_latency
crw-------  1 root root       10, 203 May 18 15:54 cuse
crw-------  1 root root       10,  61 May 18 10:26 ecryptfs
crw-rw----  1 root video      29,   0 May 18 10:26 fb0
crw-rw-rw-  1 root root        1,   7 May 18 10:26 full
crw-rw-rw-  1 root root       10, 229 May 18 10:26 fuse
crw-------  1 root root      251,   0 May 18 10:27 hidraw0
crw-------  1 root root       10, 228 May 18 10:26 hpet
crw-r--r--  1 root root        1,  11 May 18 10:26 kmsg
crw-rw----+ 1 root root       10, 232 May 18 10:26 kvm
crw-------  1 root root       10, 237 May 18 10:26 loop-control
crw-------  1 root root       10, 227 May 18 10:26 mcelog
crw-------  1 root root      249,   0 May 18 10:27 media0
crw-------  1 root root      250,   0 May 18 10:26 mei0
crw-r-----  1 root kmem        1,   1 May 18 10:26 mem
crw-------  1 root root       10,  57 May 18 10:26 memory_bandwidth
crw-------  1 root root       10,  59 May 18 10:26 network_latency
crw-------  1 root root       10,  58 May 18 10:26 network_throughput
crw-rw-rw-  1 root root        1,   3 May 18 10:26 null
crw-r-----  1 root kmem        1,   4 May 18 10:26 port
crw-------  1 root root      108,   0 May 18 10:26 ppp
crw-------  1 root root       10,   1 May 18 10:26 psaux
crw-rw-rw-  1 root tty         5,   2 May 18 17:40 ptmx
crw-rw-rw-  1 root root        1,   8 May 18 10:26 random

Symboliske linkfiler: Et symbolsk link er en henvisning til en anden fil på systemet. Derfor er symbolske linkfiler filer, der peger på andre filer, og de kan enten være mapper eller almindelige filer.

Notering af symbolske linkstik i et bibliotek:

# ls -l /dev/ | grep "^l"
lrwxrwxrwx  1 root root             3 May 18 10:26 cdrom -> sr0
lrwxrwxrwx  1 root root            11 May 18 15:54 core -> /proc/kcore
lrwxrwxrwx  1 root root            13 May 18 15:54 fd -> /proc/self/fd
lrwxrwxrwx  1 root root             4 May 18 10:26 rtc -> rtc0
lrwxrwxrwx  1 root root             8 May 18 10:26 shm -> /run/shm
lrwxrwxrwx  1 root root            15 May 18 15:54 stderr -> /proc/self/fd/2
lrwxrwxrwx  1 root root            15 May 18 15:54 stdin -> /proc/self/fd/0
lrwxrwxrwx  1 root root            15 May 18 15:54 stdout -> /proc/self/fd/1

Du kan oprette symbolske links ved hjælp af ln -værktøjet i Linux som i eksemplet nedenfor.

# touch file1.txt
# ln -s file1.txt /home/tecmint/file1.txt  [create symbolic link]
# ls -l /home/tecmint/ | grep "^l"         [List symbolic links]

I ovenstående eksempel oprettede jeg en fil kaldet file1.txt i/tmp-biblioteket og oprettede derefter det symbolske link /home/tecmint/file1.txt for at pege på /tmp/file1.txt.

Rør eller navngivne rør: Disse er filer, der muliggør kommunikation mellem processer ved at forbinde output fra en proces til input fra en anden.

Et navngivet rør er faktisk en fil, der bruges af to processer til at kommunikere med hver, og den fungerer som et Linux-rør.

Notering af rørstik i et bibliotek:

# ls -l | grep "^p"
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe1
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe2
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe3
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe4
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe5

Du kan bruge mkfifo-værktøjet til at oprette et navngivet rør i Linux som følger.

# mkfifo pipe1
# echo "This is named pipe1" > pipe1

I ovenstående eksempel oprettede jeg et navngivet rør kaldet pipe1 , og derefter sendte jeg nogle data til det ved hjælp af ekkokommandoen, efter at skallen blev un-interaktiv under bearbejdning af input.

Så åbnede jeg en anden skal og kørte den anden kommando for at udskrive, hvad der blev sendt til rør.

# while read line ;do echo "This was passed-'$line' "; done<pipe1

Socket-filer: Dette er filer, der giver et middel til kommunikation mellem processer, men de kan overføre data og information mellem proces, der kører i forskellige miljøer.

Dette betyder, at stikkontakter giver data- og informationsoverførsel mellem proces, der kører på forskellige maskiner på et netværk.

Et eksempel på at vise sockets arbejde ville være en webbrowser, der opretter forbindelse til en webserver.

# ls -l /dev/ | grep "^s"
srw-rw-rw-  1 root root             0 May 18 10:26 log

Dette er et eksempel på en sokkel, der oprettes i C ved hjælp af systemkaldet -stik() .

int socket_desc= socket(AF_INET, SOCK_STREAM, 0 );

I ovenstående:

  1. AF_INET er adressefamilien (IPv4)
  2. SOCK_STREAM er typen (forbindelsen er TCP-protokolorienteret)
  3. 0 er protokollen (IP-protokol)

For at henvise til socket-filen skal du bruge socket_desc , som er den samme som filbeskrivelsen, og bruge read() og skriv() systemopkald til henholdsvis at læse og skrive fra stikkontakten.

Dette er specielle filer, der gemmer både almindelige og andre specielle filer, og de er organiseret på Linux-filsystemet i et hierarki startende fra rod (/) -mappen.

Notering af stikkontakter i et bibliotek:

# ls -l / | grep "^d" 
drwxr-xr-x   2 root root  4096 May  5 15:49 bin
drwxr-xr-x   4 root root  4096 May  5 15:58 boot
drwxr-xr-x   2 root root  4096 Apr 11  2015 cdrom
drwxr-xr-x  17 root root  4400 May 18 10:27 dev
drwxr-xr-x 168 root root 12288 May 18 10:28 etc
drwxr-xr-x   3 root root  4096 Apr 11  2015 home
drwxr-xr-x  25 root root  4096 May  5 15:44 lib
drwxr-xr-x   2 root root  4096 May  5 15:44 lib64
drwx------   2 root root 16384 Apr 11  2015 lost+found
drwxr-xr-x   3 root root  4096 Apr 10  2015 media
drwxr-xr-x   3 root root  4096 Feb 23 17:54 mnt
drwxr-xr-x  16 root root  4096 Apr 30 16:01 opt
dr-xr-xr-x 223 root root     0 May 18 15:54 proc
drwx------  19 root root  4096 Apr  9 11:12 root
drwxr-xr-x  27 root root   920 May 18 10:54 run
drwxr-xr-x   2 root root 12288 May  5 15:57 sbin
drwxr-xr-x   2 root root  4096 Dec  1  2014 srv
dr-xr-xr-x  13 root root     0 May 18 15:54 sys
drwxrwxrwt  13 root root  4096 May 18 17:55 tmp
drwxr-xr-x  11 root root  4096 Mar 31 16:00 usr
drwxr-xr-x  12 root root  4096 Nov 12  2015 var

Du kan oprette et bibliotek ved hjælp af kommandoen mkdir.

# mkdir -m 1666 linux-console.net
# mkdir -m 1666 news.linux-console.net
# mkdir -m 1775 linuxsay.com

Resumé

Du skal nu have en klar forståelse af, hvorfor alt i Linux er en fil og de forskellige typer filer, der kan afslutte på dit Linux-system.

Du kan tilføje mere til dette ved at læse mere om de enkelte filtyper, og de oprettes. Jeg håber, dette finder denne guide nyttig, og hvis du har spørgsmål og yderligere oplysninger, som du gerne vil dele, bedes du give en kommentar, så vi diskuterer mere.