Vad betyder Allt är en fil Betydande i Linux?
En av de grundläggande egenskaperna hos Linux och andra UNIX-liknande operativsystem är att "allt är en fil." Det här är en förenkling, men förstå vad det betyder för att hjälpa dig att förstå hur Linux fungerar.
Många saker på Linux visas i ditt filsystem, men de är egentligen inte filer. De är speciella filer som representerar hårdvaruenheter, systeminformation och andra saker - inklusive en slumpmässig talgenerator.
Dessa specialfiler kan placeras i pseudo- eller virtuella filsystem som / dev, som innehåller speciella filer som representerar enheter och / proc, som innehåller speciella filer som representerar system- och processinformation.
/ proc
Låt oss till exempel säga att du vill hitta information om din CPU. Katalogen / proc innehåller en speciell fil - / proc / cpuinfo - som innehåller denna information.
Du behöver inte ett speciellt kommando som berättar för din CPU-info - du kan bara läsa innehållet i den här filen med något standardkommando som fungerar med vanliga textfiler. Du kan till exempel använda kommandot katt / proc / cpuinfo att skriva ut den här filens innehåll till terminalen - skriva ut CPU-informationen till terminalen. Du kan till och med öppna / proc / cpuinfo i en textredigerare för att se innehållet.
Kom ihåg att / proc / cpuinfo inte är en textfil som innehåller denna information - Linux-kärnan och proc-filsystemet exponerar denna information för oss som en fil. Detta gör att vi kan använda bekanta verktyg för att se och arbeta med informationen.
Katalogen / proc innehåller också andra liknande filer, till exempel:
- / proc / uptime - Visar uppehållet för din Linux-kärna - med andra ord hur länge ditt system har varit på utan att stänga av.
- / proc / version - Visar versionen av din Linux-kärna.
/ dev
I katalogen / dev hittar du filer som representerar enheter - liksom filer som representerar andra speciella saker. Till exempel, / dev / cdrom är din cd-rom-enhet. / dev / sda representerar din första hårddisk, medan / dev / sda1 representerar den första partitionen på din första hårddisk.
Vill du montera din CD-ROM? Kör mount-kommandot och ange / dev / cdrom som den enhet du vill montera. Vill du partitionera din första hårddisk? Kör ett diskpartitioneringsverktyg och ange / dev / sda som hårddisken du vill redigera. Vill du formatera den första partitionen på din första hårddisk? Kör ett formateringskommando och berätta det för att formatera / dev / sda1.
Som du kan se är det fördelaktigt att exponera dessa enheter som en del av filsystemet. Filsystemet ger en konsekvent "namnrymd" som alla program kan använda för att adressera och komma åt enheterna.
/ dev / null, / dev / random, och / dev / zero
Filsystemet / dev innehåller inte bara filer som representerar fysiska enheter. Här är tre av de mest anmärkningsvärda specialenheter som den innehåller:
- / dev / null - Kassera alla data skrivna till den - tänk på det som en papperskorgen eller ett svart hål. Om du någonsin ser en kommentar som säger att du ska skicka klagomål till / dev / null - det är ett nötigt sätt att säga "kasta dem i papperskorgen".
- / dev / random - Producerar slumpmässighet med hjälp av miljöbuller. Det är en slumptalsgenerator som du kan använda.
- / dev / zero - Producerar nollor - en konstant ström av nollor.
Om du tänker på dessa tre som filer ser du inte en användning för dem. Tänk istället på dem som verktyg.
Till exempel producerar Linux-kommandon som standard felmeddelanden och annan utmatning som de skriver ut till standardutmatningen, normalt terminalen. Om du vill köra ett kommando och bryr dig inte om dess produktion, kan du omdirigera den utsignalen till / dev / null. Omdirigera ett kommandos utdata till / dev / null kasserar genast det. I stället för att ha varje kommando implementera sitt eget "tyst läge" kan du använda den här metoden med något kommando.
kommando> / dev / null
Om du ville ha en källa till slumpmässighet - säg att för att generera en krypteringsnyckel, behöver du inte skriva din egen slumptalsgenerator - du kan använda / dev / random.
För att radera en hårddisks innehåll genom att skriva 0 till den behöver du inte ett särskilt verktyg för att nollställa en enhet - du kan använda standardverktyg och / dev / noll. Till exempel, dd Kommandot läser från en plats och skriver till en annan plats. Följande kommando skulle läsa nollor från / dev / noll och skriva dem direkt till den första hårddiskpartitionen på ditt system, helt radera innehållet.
(Varning: Med det här kommandot raderas alla data på din första partition om du kör den. Kör endast kommandot om du vill förstöra data.)
dd om = / dev / noll av = / dev / sda1
Här använder vi dd med speciella filer (/ dev / zero och / dev / sda1), men vi kan också använda dd för att läsa från och skriva till aktuella filer. Samma kommando fungerar både för att manipulera enheter direkt och arbetar med filer.
Klargörande
I praktiken är det mer exakt att säga att "allt är en ström av byte" än "allt är en fil." / Dev / random är inte en fil, men det är verkligen en ström av byte. Och även om dessa saker tekniskt inte är filer, är de tillgängliga i filsystemet - filsystemet är ett universellt "namnrymd" där allt är tillgängligt. Vill du komma åt en slumptalsgenerator eller läs direkt från en enhet? Du hittar både i filsystemet; ingen annan form av adressering behövs.
Naturligtvis är vissa saker faktiskt inte filer - processer som körs på ditt system är inte en del av filsystemet. "Allt är en fil" är felaktigt, men många saker fungerar som filer.