GNU/Linux >> Tutoriels Linux >  >> Linux

Les 7 espaces de noms Linux les plus utilisés

Je veux fournir quelques exemples pour clarifier les définitions techniques autour des espaces de noms . Wikipédia a la définition suivante :

Les espaces de noms sont une fonctionnalité du noyau Linux qui partitionne les ressources du noyau de sorte qu'un ensemble de processus voit un ensemble de ressources et qu'un autre ensemble de processus voit un ensemble différent de ressources. La fonctionnalité fonctionne en ayant le même espace de noms pour un groupe de ressources et de processus, mais ces espaces de noms font référence à des ressources distinctes.

Cette définition est un peu difficile à digérer pour certaines personnes, alors peut-être que cette analogie aidera. Considérez mon immeuble. Il s'agit techniquement de deux bâtiments distincts avec leurs propres entrées. Cependant, le parking, la salle de sport, la piscine et les salles communes sont partagés. Les bâtiments ont leurs propres noms, City Place et City Place 2 . Ils ont leurs propres adresses, étages et ascenseurs. Pourtant, ils sont attachés au même complexe physique.

Le complexe physique est la même idée qu'un ordinateur. Deux espaces de noms (ou plus) peuvent résider sur le même ordinateur physique, et tout comme l'immeuble, les espaces de noms peuvent partager l'accès à certaines ressources ou avoir un accès exclusif.

Il existe sept types courants d'espaces de noms largement utilisés aujourd'hui. En utilisant l'appartement comme guide, parcourons un résumé de ce que fait chaque type. Vous trouverez ci-dessous un bref aperçu de chaque type d'espace de noms. Dans les articles suivants, nous montrerons comment chaque espace de noms fonctionne par exemple.

Isolation des processus (espace de noms PID)

Un PID , ou ID de processus aide un système à suivre une tâche spécifique sur un ordinateur. Lorsque vous lancez Firefox sur votre ordinateur, un PID lui est associé. Afin de s'assurer que l'ordinateur interagit correctement avec une tâche, la tâche est référencée par le PID. Supposons que Firefox et Brave Browser soient ouverts en même temps. Vous lancez votre moteur de recherche préféré, tel que DuckDuckGo, dans chaque navigateur et recherchez des images de chat en un et photos de chiens dans l'autre. Les deux navigateurs font une demande similaire au même site Web. Comment l'ordinateur s'assure-t-il que les bons résultats de recherche sont renvoyés au bon navigateur ? L'un des principaux moyens consiste à suivre les requêtes effectuées par chaque PID, puis à renvoyer les résultats au processus de requête.

"Génial, je suis perdu", dites-vous. Qu'est-ce que cela a à voir avec les immeubles d'appartements et les espaces de noms ? Eh bien, disons que vous voulez exécuter des copies identiques d'un logiciel. Certains logiciels n'ont pas été écrits pour avoir plus d'une copie ouverte à la fois. Pour ce faire, vous devrez peut-être isoler le PID afin qu'il ne soit pas au courant de ce qui se passe en dehors de ses propres processus. C'est ce que l'isolation des processus peut aider à résoudre.

Pour le dire autrement, en revenant à notre immeuble, les appartements individuels du complexe sont similaires à l'espace de noms PID. Chaque ménage du complexe d'appartements souhaite allumer sa télévision et regarder une variété de contenus. Dans un univers parallèle idiot, imaginez que lorsqu'une seule personne dans l'immeuble allumait sa télévision, personne d'autre ne pouvait regarder la télévision, car sinon, le câblodistributeur ne saurait pas quelle télévision devrait regarder "The Office" et quelle "The Apprenti." Les espaces de noms permettraient au câblodistributeur d'isoler chaque foyer et de fournir une programmation distincte à chaque résident, car peu importe ce que les autres personnes de votre complexe regardent.

[ En savoir plus sur les espaces de noms PID. ]

Interfaces réseau (espace de noms net)

Chaque ordinateur connecté à un réseau (comme Internet) nécessite une adresse IP. Il s'agit d'un numéro unique qui permet aux ordinateurs de communiquer efficacement. Lorsqu'un type spécifique de ressource est accessible, par exemple une page Web, un port particulier est utilisé pour cette communication. En effet, un ordinateur peut héberger un serveur Web, un serveur de jeu et peut-être un serveur de messagerie sur le même hôte. Les ports peuvent être 80 ou 443 pour le trafic Web, 8888 pour le trafic de jeu et 25 pour le courrier électronique. Lorsque je saisis https:// dans mon navigateur, l'ordinateur la traduit pour envoyer le trafic vers l'adresse IP xxx.xxx.xxx.xxx du navigateur sur le port 443 . Le serveur à l'autre bout répond ensuite avec le contenu approprié via l'adresse IP source. Certaines piles technologiques, comme mentionné précédemment, ne prennent pas en charge plusieurs instances du logiciel exécutées simultanément. Contrairement à l'isolation PID, cependant, lorsqu'un logiciel tel qu'un serveur de messagerie reçoit une connexion, il s'attend à être sur un port spécifique. Ainsi, même si vous avez isolé le PID, le serveur de messagerie n'aurait qu'une seule instance en cours d'exécution car le port 25 est déjà utilisé. Les espaces de noms réseau permettent aux processus à l'intérieur de chaque instance d'espace de noms d'avoir accès à une nouvelle adresse IP ainsi qu'à la gamme complète de ports. Ainsi, vous pouvez exécuter plusieurs versions d'un serveur de messagerie écoutant sur le port 25 sans aucun conflit logiciel.

Dans mon scénario de construction, les bâtiments sont attachés au même complexe physique et sont des images miroir les uns des autres. Cela signifie qu'il y a le même nombre d'espaces de vie dans chaque bâtiment. De plus, ils suivent le même schéma de numérotation des appartements. Cela signifie que chaque bâtiment a l'unité 707, par exemple. Dans cet exemple, l'adresse IP est comme l'adresse postale des immeubles d'appartements et le numéro d'appartement est le port. Chaque complexe d'appartements fait partie du même bâtiment physique, mais ils ont des adresses différentes. Étant donné que les bâtiments ne sont pas physiquement séparés, sans cet espace de noms net une entreprise qui envoie une facture à Steve Ovens, 123 Fake Street Unit 707 peut ne jamais recevoir de réponse parce qu'il est allé à la mauvaise adresse. Plus probablement, le bureau de poste n'essaierait tout simplement pas de livrer la lettre en raison de l'ambiguïté de l'adresse. Cependant, les espaces de noms nets nous permettent d'avoir 123 Fake Street et 125 Fake Street dans le même bâtiment physique.

[ En savoir plus sur les espaces de noms nets. ]

Système de partage de temps Unix (uts namespace)

Cet espace de noms est malheureusement nommé selon les normes d'aujourd'hui. Cela remonte aux premiers jours d'Unix et concerne la manière dont les informations étaient stockées pour un appel système spécifique. Aujourd'hui, ce détail est en grande partie perdu dans l'histoire et ce que vous devez vraiment savoir, c'est que l'espace de noms UTS permet la ségrégation des noms d'hôte. Souvent, les noms d'hôte sont simplement une commodité. Comme mentionné précédemment, à quelques exceptions près, la plupart des communications vers et depuis un hôte se font via l'adresse IP et le numéro de port. Cependant, cela rend la vie beaucoup plus facile pour nous, les humains, lorsque nous avons une sorte de nom attaché à un processus. La recherche dans les fichiers journaux, par exemple, est beaucoup plus facile lors de l'identification d'un nom d'hôte. Pas le moindre car, dans un environnement dynamique, les IP peuvent changer.

Dans notre analogie avec le bâtiment, le nom d'hôte est similaire au nom de l'immeuble. Dire au chauffeur de taxi que j'habite à City Place appartements est généralement plus efficace que de fournir l'adresse réelle. Avoir plusieurs noms d'hôte sur un seul hôte physique est d'une grande aide dans les grands environnements conteneurisés.

[ En savoir plus sur les espaces de noms uts. ]

Espace de noms d'utilisateur

Chaque système informatique a un moyen de suivre quel utilisateur possède quel(s) fichier(s). Cela permet au système de restreindre l'accès aux fichiers système sensibles. Cela empêche également les personnes utilisant le même ordinateur d'accéder aux fichiers des autres. Pour l'utilisateur final, les fichiers sont présentés comme appartenant à un nom de connexion tel que stratus . Pour l'ordinateur, cependant, il ne s'agit que d'une combinaison arbitraire de caractères alphanumériques. Afin de suivre correctement ces autorisations, il existe un processus de mappage de l'utilisateur stratus à un numéro d'identification d'utilisateur (UID) spécifique, tel que 1001. Cet UID est ensuite appliqué aux métadonnées du fichier. Cela vous permet de changer votre nom d'utilisateur en stratus1 sans que le système ait à effectuer une quantité importante de mise à jour des métadonnées. Le fichier de mappage est mis à jour afin que l'UID 1001 soit ensuite associé à stratus1 au lieu de stratus . L'entrée est modifiée en un seul (ou un petit nombre) d'endroits.

Pensez à cela comme aux boîtes aux lettres sur le sol de mon immeuble. Chaque boîte aux lettres a un nom ou plusieurs noms qui lui sont associés. Quand quelqu'un veut me livrer du courrier, il met le courrier dans la case 707, par exemple. Si je décide de changer mon nom, ou d'ajouter le nom de ma femme à la boîte aux lettres, rien ne change. Le courrier va toujours au même endroit, seules les personnes autorisées peuvent voir ces fichiers, et ma clé pour déverrouiller la boîte reste inchangée.

[ En savoir plus sur les espaces de noms d'utilisateurs. ]

Monter (espace de noms mnt)

L'espace de noms de montage est utilisé pour isoler les points de montage de sorte que les processus dans différents espaces de noms ne puissent pas voir les fichiers des autres. Si vous connaissez la commande chroot, elle fonctionne de la même manière.

Dans notre analogie, je vais m'écarter un peu de l'appartement. Supposons que deux personnes se marient. Dans ce scénario, il y a un tas de choses qui finissent généralement par être partagées. Vous mettez probablement leur nom sur la liste d'adresses, vous pouvez avoir les deux noms sur les factures, avoir les deux noms sur tous les propriétaires de voitures et les ajouter à vos cartes de crédit, etc. En ce sens, vous partagez le même point de montage avec le autre personne. Cependant, leur crédit peut être distinct, ils peuvent payer leurs propres impôts, etc. Leur numéro d'assurance sociale (numéro de sécurité sociale pour nos amis aux USA) reste distinct du vôtre et inversement. Par conséquent, bien que votre partenaire puisse avoir une vision similaire de la situation financière, ce ne sera pas exactement la même chose. Ils n'ont aucune capacité réelle à voir les questions financières qui sont légalement votre seule possession.

Il en va de même pour les points de montage du système de fichiers. Par défaut, différents espaces de noms de montage ne peuvent pas afficher le contenu de l'autre. En ce qui concerne l'espace de noms, il se trouve à la racine du système de fichiers et rien d'autre n'existe. Cependant, vous pouvez monter des parties d'un système de fichiers sous-jacent dans l'espace de noms de montage, lui permettant ainsi de voir des informations supplémentaires.

[ En savoir plus sur les espaces de noms mnt. ]

Communication interprocessus (IPC)

Cet espace de noms est très technique et complexe à comprendre et à décrire. À tel point que Marty Kalin a publié une série d'articles sur Opensource.com détaillant la communication interprocessus (IPC). Si vous êtes vraiment intéressé, je vous référerai à la série de Marty car je ne pourrais pas rendre justice à ce sujet. Les IPC gèrent la communication entre les processus en utilisant des zones de mémoire partagée, des files d'attente de messages et des sémaphores. Si tout cela vous semble étranger, ne vous inquiétez pas, vous n'êtes pas seul. L'application la plus courante pour ce type de gestion est peut-être l'utilisation de bases de données.

Si nous zoomons sur un seul aspect de l'IPC, la mémoire partagée, nous pouvons obtenir une compréhension de base de l'importance. En programmation, chaque fois que l'application a besoin de garder temporairement une trace de certaines informations, elle demande au système d'exploitation de dédier une certaine quantité de mémoire vive (RAM) à son processus. Vous pouvez penser à cela, comme si vous démarriez une conversation avec quelqu'un dans un programme de chat. Par défaut, il n'y a que deux destinataires, vous-même et la personne à l'autre bout du fil, ou pensé autrement, le système d'exploitation et l'application. Les deux participants peuvent voir l'historique complet de la conversation, mais personne d'autre ne le peut. Cependant, si quelqu'un de nouveau est invité dans le chat, il peut également lire et participer à la discussion. La mémoire partagée peut agir de la même manière, permettant à deux programmes ou plus d'avoir accès aux mêmes informations. Un changement par un programme sera immédiatement visible par l'autre programme.

Cgroups

Pour un examen approfondi des cgroups, je vous recommande de lire ma série sur redhat.com. Dans cette série en quatre parties, je détaille le fonctionnement des cgroups et comment vous pouvez les mettre en pratique. En bref, les cgroups sont un mécanisme de contrôle des ressources système. Lorsqu'un groupe de contrôle est actif, il peut contrôler la quantité de CPU, de RAM, d'E/S de bloc et d'autres facettes qu'un processus peut consommer. Par défaut, les cgroups sont créés dans le système de fichiers virtuel /sys/fs/cgroup . La création d'un espace de noms de groupe de contrôle différent déplace essentiellement le répertoire racine du groupe de contrôle. Si le cgroup était, par exemple, /sys/fs/cgroup/mycgroup , un nouveau groupe de contrôle d'espace de noms pourrait l'utiliser comme répertoire racine. L'hôte peut voir /sys/fs/cgroup/mycgroup/{group1,group2,group3} mais la création d'un nouvel espace de noms cgroup signifierait que le nouvel espace de noms ne verrait que {group1,group2,group3} .

Vous pourriez vous demander pourquoi cela pourrait être nécessaire. Une partie de cela est liée à la sécurité. Si un nouvel espace de noms de groupe de contrôle n'a pas été créé, il existe un risque de fuite d'informations. La page de manuel le dit le mieux :

Il empêche les fuites d'informations par lesquelles les chemins d'accès aux répertoires de groupe de contrôle en dehors d'un conteneur seraient autrement visibles pour les processus du conteneur. De telles fuites pourraient, par exemple, révéler des informations sur le cadre du conteneur aux applications conteneurisées.

Dans une hiérarchie de groupes de contrôle traditionnelle, il est possible qu'un groupe de contrôle imbriqué puisse accéder à son ancêtre. Cela signifie qu'un processus dans /sys/fs/cgroup/mycgroup/group1 a le potentiel de lire et/ou de manipuler tout ce qui est imbriqué sous mycgroup .

Enfin, en pensant spécifiquement aux conteneurs, les espaces de noms de cgroup permettent aux conteneurs d'être indépendants des cgroups ancêtres. Ceci est important pour quelque chose comme OpenShift, qui peut migrer des conteneurs entre les hôtes. Sans l'isolation fournie par les espaces de noms, les noms de chemin complets du groupe de contrôle devraient être répliqués sur un nouvel hôte lors de la migration d'un conteneur. Étant donné que le chemin doit être unique, les espaces de noms de groupe de contrôle permettent d'éviter les conflits sur le nouveau système hôte.

En termes d'analogie avec le bâtiment, un groupe de contrôle est similaire aux services publics de chaque unité. Bien que les cgroups puissent limiter l'utilisation des ressources, ils peuvent également agir en tant que comptable. Ainsi, bien que mon appartement ne m'empêche pas d'utiliser une certaine quantité d'électricité ou d'eau, il suit (et facture) ma consommation. Cette utilisation n'est qu'une infime partie de l'utilisation du bâtiment dans son ensemble. Je ne connais pas la consommation totale de l'immeuble (l'ancêtre de mon appartement), ni la consommation de mon voisin. Ils se trouvent dans un espace de noms de groupe de contrôle complètement différent.

[ Obtenez cet ebook gratuit :Gérer vos clusters Kubernetes pour les nuls. ]

Conclusion

Vous avez donc un bref aperçu des sept espaces de noms les plus utilisés. J'espère que mon analogie était utile et claire. Dans les deux prochains articles, j'explore certains de ces espaces de noms et comment ils sont créés à la main. Cela vous permettra de mieux comprendre l'utilité des espaces de noms. Dans le dernier article, je relie tout cela, y compris l'utilisation de groupes de contrôle pour expliquer comment les conteneurs fonctionnent "sous le capot".


Linux
  1. Maîtrisez la commande Linux ls

  2. Quelle commande de terminal Linux utilisez-vous le plus ?

  3. Quel a été le moment le plus important de l'histoire de Linux ?

  4. Espaces de noms Linux

  5. 80 applications Linux essentielles les plus utilisées en 2021

Commande Linux DF – Les 3 options les plus utilisées

5 des commandes les plus ennuyeuses de Linux

Les 50 commandes Linux les plus utiles à exécuter dans le terminal

Les 8 distributions Linux les plus populaires disponibles

Comment trouver le PID et le PPID d'un processus sous Linux

Les 50 questions et réponses d'entrevue Linux les plus posées