GNU/Linux >> Linux Esercitazione >  >> Linux

I 7 spazi dei nomi Linux più utilizzati

Voglio fornire alcuni esempi per chiarire le definizioni tecniche relative agli spazi dei nomi . Wikipedia ha la seguente definizione:

Gli spazi dei nomi sono una caratteristica del kernel Linux che partiziona le risorse del kernel in modo tale che un insieme di processi veda un insieme di risorse e un altro insieme di processi un diverso insieme di risorse. La funzione funziona avendo lo stesso spazio dei nomi per un gruppo di risorse e processi, ma tali spazi dei nomi si riferiscono a risorse distinte.

Questa definizione è piuttosto difficile da digerire per alcune persone, quindi forse questa analogia aiuterà. Considera il mio condominio. Tecnicamente sono due edifici distinti con i propri ingressi. Tuttavia, il garage, la palestra, la piscina e le sale comuni sono in comune. Gli edifici hanno i loro nomi, City Place e Città 2 . Hanno i loro indirizzi stradali, piani e ascensori. Eppure, sono attaccati allo stesso complesso fisico.

Il complesso fisico è la stessa idea di un computer. Due spazi dei nomi (o più) possono risiedere sullo stesso computer fisico e, proprio come il condominio, gli spazi dei nomi possono condividere l'accesso a determinate risorse o avere un accesso esclusivo.

Oggi ci sono sette tipi comuni di spazi dei nomi ampiamente utilizzati. Utilizzando l'appartamento come nostra guida, esaminiamo un riepilogo di ciò che fa ogni tipo. Di seguito è riportata una breve panoramica di ciascun tipo di spazio dei nomi. Negli articoli successivi, mostreremo come funziona ogni spazio dei nomi con l'esempio.

Isolamento del processo (spazio dei nomi PID)

Un PID o ID processo aiuta un sistema a tenere traccia di un'attività specifica su un computer. Quando avvii Firefox sul tuo computer, avrà un PID associato. Per assicurarsi che il computer interagisca correttamente con un'attività, il PID fa riferimento all'attività. Supponiamo che tu abbia Firefox e Brave Browser aperti contemporaneamente. Accendi il tuo motore di ricerca preferito, come DuckDuckGo, in ogni browser e cerca immagini di gatti in uno e immagini di cani nell'altro. Entrambi i browser stanno effettuando una richiesta simile allo stesso sito web. In che modo il computer garantisce che i risultati di ricerca corretti vengano restituiti al browser corretto? Uno dei modi principali consiste nel tracciare le richieste effettuate da ciascun PID e quindi restituire i risultati al processo di richiesta.

"Fantastico, mi sono perso", dici. Cosa c'entra questo con condomini e spazi dei nomi? Bene, supponiamo che tu voglia eseguire copie identiche di un software. Alcuni software non sono stati scritti per avere più di una copia aperta alla volta. A tal fine, potrebbe essere necessario isolare il PID in modo che non sia a conoscenza di ciò che sta accadendo al di fuori dei propri processi. Questo è ciò che l'isolamento del processo può aiutare a risolvere.

Per dirla in altro modo, tornando al nostro condominio, i singoli appartamenti del complesso sono simili allo spazio dei nomi PID. Ogni famiglia nel complesso di appartamenti desidera accendere la TV e guardare una varietà di contenuti. In uno stupido universo parallelo, immagina che quando una sola persona nel condominio accende la TV, nessun altro potrebbe guardare la TV perché altrimenti, il provider via cavo non saprebbe quale TV dovrebbe guardare "The Office" e quale "The Office" Apprendista." Gli spazi dei nomi consentirebbero alla compagnia di cavi di isolare ogni famiglia e fornire una programmazione distinta a ciascun residente perché non importa più cosa stanno vedendo le altre persone nel tuo complesso.

[ Ulteriori informazioni sugli spazi dei nomi PID. ]

Interfacce di rete (spazio dei nomi di rete)

Ogni computer connesso a una rete (come Internet) richiede un indirizzo IP. Questo è un numero univoco che consente ai computer di comunicare in modo efficace. Quando si accede a un tipo specifico di risorsa, ad esempio una pagina Web, c'è una porta particolare utilizzata per quella comunicazione. Questo perché un computer potrebbe ospitare un server Web, un server di gioco e forse un server di posta elettronica sullo stesso host. Le porte potrebbero essere 80 o 443 per il traffico web, 8888 per il traffico di gioco e 25 per la posta elettronica. Quando digito https:// nel mio browser, il computer lo traduce in inviare il traffico all'IP del browser xxx.xxx.xxx.xxx sulla porta 443 . Il server dall'altra parte risponde quindi con il contenuto appropriato tramite l'indirizzo IP di origine. Alcuni stack tecnologici, come accennato in precedenza, non supportano più istanze del software in esecuzione contemporaneamente. A differenza dell'isolamento PID, tuttavia, quando un software come un server di posta elettronica riceve una connessione, si aspetta di trovarsi su una porta specifica. Quindi, anche se hai isolato il PID, il server di posta elettronica avrebbe solo una singola istanza in esecuzione perché la porta 25 è già in uso. Gli spazi dei nomi di rete consentono ai processi all'interno di ciascuna istanza dello spazio dei nomi di accedere a un nuovo indirizzo IP insieme all'intera gamma di porte. Pertanto, puoi eseguire più versioni di un server di posta in ascolto sulla porta 25 senza alcun conflitto software.

Nel mio scenario edilizio, gli edifici sono collegati allo stesso complesso fisico e sono immagini speculari l'uno dell'altro. Ciò significa che ci sono la stessa quantità di spazi abitativi in ​​ogni edificio. Inoltre, seguono lo stesso schema di numerazione degli appartamenti. Ciò significa che ogni edificio ha l'Unità 707, per esempio. In questo esempio, l'indirizzo IP è come la via dei condomini e il numero dell'appartamento è la porta. Ogni complesso di appartamenti fa parte dello stesso edificio fisico, ma ha indirizzi stradali diversi. Poiché gli edifici non sono fisicamente separati, senza questo spazio dei nomi di rete un'azienda che invia una fattura a Steve Ovens, 123 Fake Street Unit 707 potrebbe non ricevere mai una risposta perché è andato all'indirizzo sbagliato. Più probabilmente, l'ufficio postale semplicemente non tenterà di consegnare la lettera a causa dell'ambiguità dell'indirizzo. Tuttavia, gli spazi dei nomi di rete ci consentono di avere 123 Fake Street e 125 Fake Street nello stesso edificio fisico.

[ Ulteriori informazioni sugli spazi dei nomi di rete. ]

Sistema di multiproprietà Unix (uts namespace)

Questo spazio dei nomi è purtroppo denominato dagli standard odierni. Risale ai primi giorni di Unix e ha a che fare con il modo in cui le informazioni venivano archiviate per una specifica chiamata di sistema. Oggi, questo dettaglio è in gran parte perso nella storia e ciò che devi davvero sapere è che lo spazio dei nomi UTS consente la segregazione dei nomi host. Spesso i nomi host sono semplicemente una comodità. Come accennato in precedenza, con alcune eccezioni, la maggior parte delle comunicazioni da e verso un host avviene tramite l'indirizzo IP e il numero di porta. Tuttavia, rende la vita molto più facile per noi umani quando abbiamo una sorta di nome associato a un processo. La ricerca nei file di registro, ad esempio, è molto più semplice quando si identifica un nome host. Non ultimo perché, in un ambiente dinamico, gli IP possono cambiare.

Nella nostra analogia con l'edificio, il nome host è simile al nome del condominio. Dico al tassista che abito a City Place appartamenti è generalmente più efficace che fornire l'indirizzo effettivo. Avere più nomi host su un singolo host fisico è di grande aiuto negli ambienti containerizzati di grandi dimensioni.

[ Ulteriori informazioni sugli spazi dei nomi uts. ]

Spazio dei nomi utente

Ogni sistema informatico ha un modo per tracciare quale utente possiede quali file. Ciò consente al sistema di limitare l'accesso ai file di sistema sensibili. Impedisce inoltre alle persone che utilizzano lo stesso computer di accedere ai file degli altri. Per l'utente finale, i file vengono mostrati come di proprietà di un nome di accesso come stratus . Per il computer, tuttavia, questa è solo una combinazione arbitraria di caratteri alfanumerici. Per monitorare correttamente queste autorizzazioni, esiste un processo di mappatura dell'utente stratus a un numero di identificazione utente (UID) specifico, ad esempio 1001. Questo UID viene quindi applicato ai metadati del file. Ciò ti consente di modificare il tuo nome utente in stratus1 senza che il sistema debba eseguire una quantità significativa di aggiornamento dei metadati. Il file di mappatura viene aggiornato in modo che l'UID 1001 sia quindi associato a stratus1 invece di strato . La voce viene modificata in uno (o in un numero limitato) di posizioni.

Pensa a questo come simile alle cassette delle lettere sul pavimento del mio condominio. Ogni casella di posta ha un nome o più nomi ad essa associati. Quando qualcuno vuole consegnarmi la posta, ad esempio, inserisce la posta nella casella 707. Se dovessi decidere di cambiare il mio nome, o aggiungere il nome di mia moglie alla casella di posta, non cambia nulla. La posta va sempre nella stessa posizione, solo le persone autorizzate possono visualizzare questi file e la mia chiave per sbloccare la casella rimane invariata.

[ Ulteriori informazioni sugli spazi dei nomi utente. ]

Mount (mnt namespace)

Lo spazio dei nomi di montaggio viene utilizzato per isolare i punti di montaggio in modo tale che i processi in spazi dei nomi diversi non possano visualizzare i file degli altri. Se hai familiarità con il comando chroot, funziona in modo simile.

Nella nostra analogia, ho intenzione di deviare un po' dall'appartamento. Supponiamo che due persone si sposino. In questo scenario, ci sono un sacco di cose che di solito finiscono per essere condivise. Probabilmente metti il ​​loro nome nell'elenco degli indirizzi, potresti avere entrambi i nomi sulle bollette, avere entrambi i nomi su qualsiasi proprietà di auto e aggiungerli alle tue carte di credito, ecc. In questo senso, stai condividendo lo stesso punto di montaggio con il altra persona. Tuttavia, il loro credito potrebbe essere separato, potrebbero pagare le proprie tasse e così via. Il loro numero di previdenza sociale (numero di previdenza sociale per i nostri amici negli Stati Uniti) rimane distinto dal tuo e viceversa. Pertanto, sebbene il tuo partner possa vedere una visione simile della situazione finanziaria, non sarà esattamente la stessa. Non hanno alcuna reale capacità di vedere le questioni finanziarie che sono legalmente di tuo esclusivo possesso.

Lo stesso vale per i punti di montaggio del filesystem. Per impostazione predefinita, spazi dei nomi di montaggio diversi non possono visualizzare il contenuto dell'altro. Per quanto riguarda lo spazio dei nomi, è alla radice del file system e non esiste nient'altro. Tuttavia, puoi montare parti di un file system sottostante nello spazio dei nomi di montaggio, consentendogli così di visualizzare informazioni aggiuntive.

[ Ulteriori informazioni sugli spazi dei nomi mnt. ]

Comunicazione tra processi (IPC)

Questo spazio dei nomi è altamente tecnico e complesso da comprendere e descrivere. Tanto che Marty Kalin ha pubblicato una serie di articoli su Opensource.com che descrivono in dettaglio la comunicazione interprocesso (IPC). Se sei veramente interessato, ti rimando alla serie di Marty perché non potrei rendere giustizia a questo argomento. Gli IPC gestiscono la comunicazione tra i processi utilizzando aree di memoria condivisa, code di messaggi e semafori. Se tutto ciò ti suona estraneo, non preoccuparti, non sei solo. L'applicazione più comune per questo tipo di gestione è forse l'utilizzo di database.

Se ingrandiamo un singolo aspetto dell'IPC, la memoria condivisa, possiamo ottenere una comprensione di base dell'importanza. Nella programmazione, ogni volta che l'applicazione ha bisogno di tenere traccia di alcune informazioni temporaneamente, richiede che il sistema operativo dedichi una certa quantità di memoria ad accesso casuale (RAM) al suo processo. Puoi pensare a questo, come iniziare una conversazione con qualcuno in un programma di chat. Per impostazione predefinita, ci sono solo due destinatari, te stesso e la persona dall'altra parte, o pensato in un altro modo, il sistema operativo e l'applicazione. Entrambi i partecipanti possono vedere l'intera cronologia della conversazione, ma nessun altro può. Tuttavia, se qualcuno di nuovo viene invitato nella chat, anche lui può leggere e partecipare alla discussione. La memoria condivisa può agire in modo simile, consentendo a due o più programmi di avere accesso alle stesse informazioni. Una modifica di un programma sarà immediatamente visibile all'altro programma.

Gruppi C

Per uno sguardo approfondito a cgroups, consiglio di leggere le mie serie su redhat.com. In quella serie di quattro parti, vado nei dettagli su come funzionano i cgroup e come puoi metterli in pratica. In breve, i cgroup sono un meccanismo per il controllo delle risorse di sistema. Quando un cgroup è attivo, può controllare la quantità di CPU, RAM, blocco I/O e alcuni altri aspetti che un processo può consumare. Per impostazione predefinita, i cgroup vengono creati nel filesystem virtuale /sys/fs/cgroup . La creazione di uno spazio dei nomi cgroup diverso sposta essenzialmente la directory principale del cgroup. Se il cgroup fosse, ad esempio, /sys/fs/cgroup/mycgroup , un nuovo spazio dei nomi cgroup potrebbe usarlo come directory radice. L'host potrebbe visualizzare /sys/fs/cgroup/mycgroup/{group1,group2,group3} ma la creazione di un nuovo spazio dei nomi cgroup significherebbe che il nuovo spazio dei nomi vedrebbe solo {group1,group2,group3} .

Potresti chiederti perché questo potrebbe essere necessario. Parte di questo è legato alla sicurezza. Se non è stato creato un nuovo spazio dei nomi cgroup, è possibile che le informazioni trapelino. La pagina man lo dice meglio:

Previene le perdite di informazioni per cui i percorsi delle directory di cgroup all'esterno di un contenitore sarebbero altrimenti visibili ai processi nel contenitore. Tali perdite potrebbero, ad esempio, rivelare informazioni sul framework dei container alle applicazioni containerizzate.

In una gerarchia di cgroup tradizionale, esiste la possibilità che un cgroup nidificato possa accedere al suo predecessore. Ciò significa che un processo in /sys/fs/cgroup/mycgroup/group1 ha il potenziale per leggere e/o manipolare qualsiasi cosa annidata in mycgroup .

Infine, pensando in modo specifico ai contenitori, gli spazi dei nomi cgroup consentono ai contenitori di essere agnostici rispetto ai cgroup predecessori. Questo è importante per qualcosa come OpenShift, che può migrare container tra host. Senza l'isolamento fornito dagli spazi dei nomi, i nomi di percorso completi di cgroup dovrebbero essere replicati su un nuovo host durante la migrazione di un contenitore. Poiché il percorso deve essere univoco, gli spazi dei nomi cgroup aiutano a evitare conflitti nel nuovo sistema host.

In termini di analogia dell'edificio, un cgroup è simile alle utenze in ciascuna unità. Mentre cgroups può limitare l'utilizzo delle risorse, può anche fungere da contabile. Quindi, mentre il mio appartamento non mi impedisce di utilizzare una certa quantità di elettricità o acqua, tiene traccia (e fattura) del mio utilizzo. Tale utilizzo è solo una piccola parte dell'utilizzo dell'edificio nel suo insieme. Non conosco l'utilizzo totale dell'edificio (l'antenato del mio appartamento), né posso sapere quanto sta utilizzando il mio vicino. Si trovano in uno spazio dei nomi cgroup completamente diverso.

[ Ottieni questo ebook gratuito:Gestione dei cluster Kubernetes per i manichini. ]

Conclusione

Quindi ecco una breve panoramica di quali sono i sette spazi dei nomi più utilizzati. Si spera che la mia analogia sia stata utile e chiara. Nei prossimi due articoli, esploro alcuni di questi spazi dei nomi e come vengono creati a mano. Questo ti darà una migliore comprensione dell'utilità degli spazi dei nomi. Nell'articolo finale, lego tutto insieme, incluso l'uso di cgroups per spiegare come funzionano i contenitori "sotto il cofano".


Linux
  1. Padroneggia il comando ls di Linux

  2. Quale comando del terminale Linux usi di più?

  3. Qual è stato il momento più importante nella storia di Linux?

  4. Linux:come elencare gli spazi dei nomi in Linux?

  5. Come pulire le cache utilizzate dal kernel Linux

Comando Linux DF – Le 3 opzioni più utilizzate

5 dei comandi più noiosi in Linux

I 50 comandi Linux più utili da eseguire nel terminale

Le 8 distribuzioni Linux più popolari disponibili là fuori

Come trovare il PID e il PPID di un processo in Linux

Le 50 domande e risposte di interviste su Linux più frequenti