Quel directory DOIT exister dans / pour qualifier un operating system en tant que Linux

En étudiant le wikibook lpic pour l'examen lpic 1, j'ai rencontré la question suivante .

Which directory MUST exist in / to qualify this OS as Linux 

J'ai cherché google et le wikibook mais je ne trouve pas quel dossier dans / fait un 'unix' classifié comme 'linux'.

Voici la sortie d'une boîte Linux

 vagrant@precise64:~$ ls / bin boot dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin selinux srv sys tmp usr vagrant var vmlinuz vmlinuz.old 

Voici la sortie de / dans Mac OSX

 ls / Applications Network Users bin dev home net sbin usr Library System Volumes cores etc mach_kernel private tmp var 

Toute autre information sur ce qui fait unix dans Linux est appréciée.

Pour répondre à la question de l'IPV, je pense qu'il n'y a pas de directory réel et que c'est une question piège! Linux n'a pas de directorys obligatoires qui doivent être présents, il peut être installé dans n'importe quelle structure de directory choisie, configurable.


J'ai fait digérer cette page, intitulée: 4. Hiérarchie d'annuaire de Linux: orientée vers les parties de logiciel . Il a ceci à dire:

extrait

Résumons donc ce que la FHS a à dire à propos des directorys Linux:

Répertoires système Linux

————————————

/ usr / bin

Répertoire des exécutables accessibles par tous les users (tout le monde a ce directory dans leur $ PATH). Les principaux files de votre logiciel seront probablement là. Vous ne devriez jamais créer un sous-directory sous ce dossier.

/poubelle

Comme / usr / bin, mais vous ne findez ici que des exécutables vitaux, simples et petits. Votre logiciel (étant de haut niveau) n'a probablement rien à installer ici.

/ usr / sbin

Comme / usr / bin, mais ne contient que les exécutables auxquels l'administrateur doit avoir access (user root). Les users réguliers ne doivent jamais avoir ce directory dans leur $ PATH. Si votre logiciel est un démon, il s'agit du directory de certains exécutables.

/ sbin

Comme / usr / sbin, mais seulement pour le process de démarrage exécutables essentiels, et qui seront accessibles par sysadmin pour une certaine maintenance du système. Les commands comme fsck (vérification du système de files), init (père de tous les process), ifconfig (configuration réseau), mount, etc. peuvent être trouvées ici. C'est le directory le plus vital du système.

/ usr / lib

Contient des bibliothèques dynamics et supporte les files statiques pour les exécutables à / usr / bin et / usr / sbin. Vous pouvez créer un sous-directory comme / usr / lib / myproduct pour contenir vos files d'aide, ou des bibliothèques dynamics accessibles uniquement par votre logiciel, sans intervention de l'user. Un sous-directory peut être utilisé comme conteneur pour les plugins et les extensions.

/ lib

Comme / usr / lib mais contient des bibliothèques dynamics et supporte les files statiques nécessaires dans le process de démarrage. Vous ne findez jamais un exécutable dans / bin ou / sbin qui a besoin d'une bibliothèque en dehors de ce directory. Les modules du kernel (pilotes de périphériques) sont sous / lib.

/etc

Contient des files de configuration. Si votre logiciel utilise plusieurs files, placez-les dans un sous-dossier tel que / etc / myproduct /

/ var

Le nom provient de "variable", car tout ce qui est sous ce directory change fréquemment, et le système de package (RPM) ne garde pas le contrôle. Habituellement / var est monté sur une partition haute performance distincte. Dans les files de log / var / log grandir. Pour le contenu Web, nous utilisons / var / www, et ainsi de suite.

/maison

Contient les directorys personnels de l'user (vrais êtres humains). Votre progiciel ne doit jamais installer de files ici (dans le time d'installation). Si votre logique métier nécessite la création d'un user UNIX particulier (et non d'un être humain), vous devez lui assigner un directory personnel sous / var ou autre endroit à l'extérieur / à la maison. S'il vous plaît, n'oubliez jamais cela.

Vous pensez peut-être une mauvaise idée de briser votre logiciel (dans son set) en plusieurs morceaux, au lieu de tout garder sous un directory autonome. Mais un système de packages (RPM) a une database qui gère tout pour vous de manière très professionnelle, en prenant soin des files de configuration, des directorys, etc. Et si vous étirez votre logiciel en utilisant le FHS, au-delà de la convivialité, vous apporterez une façon intuitive de l'administrateur système de le configurer, et de travailler mieux avec les performances et la security.

Ma conclusion

Donc au less selon cette section ultérieure à la FHS ce sont des directorys que l'on pourrait considérer comme vaguement obligatoires, mais Linux n'a pas à suivre la FHS. Même le LSB (Linux Standards Base) n'est qu'un guide, pas une spécification de ridgid.

La seule chose que Linux essaie de respecter est la conformité POSIX, et POSIX ne fait aucun transfert de ce type lorsqu'il s'agit d'une variante spécifique d'UNIX.

Les references

  • Les spécifications de base du groupe ouvert Numéro 7
  • Qu'est-ce que Linux? [1]
  • Notes de la class Programmation avancée en ingénierie ECE 537

[1] Les documents suivants sont extraits de Graham Glass et King Ables, Linux pour les programmeurs et les users, Pearson Prentice-Hall, 2006. ISBN 0-13-185748-7. p 4-15

Vous savez, je suis à moitié tenté de faire une dissortingbution Linux personnalisée où:

  • Le chargeur de démarrage place init ailleurs, comme hey_lpi_guys_this_is_a_linux_system / sh
  • En utilisant ext2ed ou un outil similaire, supprimez '.' et '..' depuis le directory racine (pendant que j'y suis, hack e2fsck pour ne pas me plaindre que '.' et '..' ne sont pas au top niveau).
  • Assurez-vous que l'espace user (probablement seulement parce que ce sera une preuve de concept) ne dérange pas le directory racine ne pas avoir «. et '..'

Le fait est que Linux peut démarrer dans un système sans directory unique que le système de files Linux typique a tendance à avoir. Et ça va marcher. Il n'y a pratiquement pas de points forts sous Linux – c'est le pouvoir de l'open source.

La flexibilité Linux est une épée à deux tranchants. Un inconvénient est que quelque chose d'aussi simple que "comment puis-je m'assurer que ce programme est démarré au démarrage du système?" a plusieurs réponses incompatibles, en fonction de son système de distro et init.

Je ne suis pas sûr, mais je dirais que la question se réfère à /proc . Cela doit exister sur Linux dans / car il est créé par le kernel et ne réside pas sur le disque.

Les systèmes Unix semblent avoir /proc aussi, donc ce n'est pas exclusif, mais je pense que vous pouvez lire la question comme si "if /XYZ n'existe pas, alors ce n'est pas Linux", au lieu de "if /XYZ existe, ce ne peut être que Linux ". La deuxième version peut toujours être dépréciée sur votre Mac OSX en faisant sudo mkdir /XYZ pour tout directory non encore existant dans /

J'ai délibérément mis ceci comme une autre réponse car il s'appuie sur une interprétation très littérale de la question:

 Which directory MUST exist in / to qualify this OS as Linux 

Eh bien, je vois:

 amb@ubuntu$ ls -la / total 1380 drwxr-xr-x 27 root root 4096 Jan 3 10:19 . drwxr-xr-x 27 root root 4096 Jan 3 10:19 .. (... other stuff...) 

Selon mon autre réponse, aucun directory présent dans / identifie uniquement un OS comme Linux par opposition à tout autre UNIX et est toujours là. Cependant, les deux . et .. DOIT exister dans / pour le operating system pour être considéré comme Linux. IE, ils sont tous deux des conditions nécessaires, mais pas suffisantes.

Toute autre information sur ce qui fait unix dans Linux est appréciée.

En termes de hiérarchie des directorys, il n'y a vraiment rien; /proc n'est pas unique à linux . Il est également utilisé sur Solaris et au less certaines forms de BSD. En outre, je pense que le kernel linux peut encore être configuré sans lui ou support de sysfs.

Comme vous le reconnaissez, le FHS est destiné à couvrir une variété de systèmes semblables à unix. Cependant, il est produit et maintenu par la Linux Foundation, et la version actuelle (2.3) inclut un chapitre 6 "Annexe Spécifique au Système d'Exploitation" avec une seule section, 6.1 Linux (la version PDF est plus agréable à lire, btw). Il existe différentes conventions propres à Linux, y compris quelques éléments obligatoires dans /dev ( null , zero , tty ) et il peut y avoir un vector qui les combine. La raison pour laquelle quelqu'un n'a pas identifié cela est probablement parce qu'il n'aurait aucune valeur d'utilité (il y a de meilleures façons d'identifier un kernel d'OS, par exemple en le demandant directement).

Linux est un clone du operating system Unix, écrit à partir de rien par Linus Torvalds avec l'aide d'une équipe de hackers un peu lâche sur le Net. Il vise la conformité aux spécifications POSIX et Single UNIX .

Il possède toutes les fonctionnalités que vous attendez d'un système Unix moderne complet, notamment le multitâche, la memory virtuelle, les bibliothèques partagées, le chargement à la request, les exécutables de copy sur écriture partagée, la memory management et le réseau multipiste, y compris IPv4 et IPv6.

Les archives du kernel Linux – À propos de Linux Kernel – Qu'est-ce que Linux ?.

Du lien de spécification UNIX unique :

 Common Directories and Devices The Single UNIX Specification describes an applications portability environment, and as such defines a certain minimal set of directories and devices that applications regularly use. The following directories are defined: / The root directory of the file system. /dev Contains the devices /dev/console, /dev/null, and /dev/tty. /tmp A directory where applications can create temporary files. The directory structure does not cross into such system management issues as where user accounts are organized or software packages are installed. Refer to XBD, Section 10.1, Directory Structure and Files for more information. XBD, Chapter 10, Directory Structure and Devices also defines the mapping of <control>- char sequences to control character values, and associated requirements on system documentation. 

De l' Open Group IEEE Std 1003.1, Édition 2013 ie POSIX :

 The following directories shall exist on conforming systems and conforming applications shall make use of them only as described. Ssortingctly conforming applications shall not assume the ability to create files in any of these directories, unless specified below. / The root directory. /dev Contains /dev/console, /dev/null, and /dev/tty, described below. The following directory shall exist on conforming systems and shall be used as described: /tmp A directory made available for applications that need a place to create temporary files. Applications shall be allowed to create files in this directory, but shall not assume that such files are preserved between invocations of the application. The following files shall exist on conforming systems and shall be both readable and writable: /dev/null An empty data source and infinite data sink. Data written to /dev/null shall be discarded. Reads from /dev/null shall always return end-of-file (EOF). /dev/tty In each process, a synonym for the controlling terminal associated with the process group of that process, if any. It is useful for programs or shell procedures that wish to be sure of writing messages to or reading data from the terminal no matter how output has been redirected. It can also be used for applications that demand the name of a file for output, when typed output is desired and it is tiresome to find out what terminal is currently in use. The following file shall exist on conforming systems and need not be readable or writable: /dev/console The /dev/console file is a generic name given to the system console (see System Console). It is usually linked to an implementation-defined special file. It shall provide an interface to the system console conforming to the requirements of General Terminal Interface. 

Puisque les directorys requirejs SUS sont un sous-set des systèmes conforms POSIX , et puisque Linux vise la conformité avec les deux, alors on peut dire qu'un operating system est considéré comme Linux s'il a the *POSIX* conforming list of 5 directories plus the root(/) directory .

La question qui vous est posée est mauvaise (pas la question de l'OS).

Je soupçonne que la réponse qu'ils searchnt est /boot ou /sys , mais les deux sont faux. Je pense qu'une meilleure réponse est /sbin .

Voici ce qu'il y a dans mon directory racine:

  • /bin
  • /boot
  • /cdrom
  • /dev
  • /etc
  • /home
  • /lib
  • /lib32
  • /lib64
  • /lost+found
  • /media
  • /mnt
  • /proc
  • /root
  • /run
  • /sbin
  • /selinux
  • /srv
  • /sys
  • /tmp
  • /usr
  • /var

Parmi les directorys utilisés par Linux, les éléments suivants sont dans SuS ou sont utilisés d'une autre manière dans de nombreux UNIX:

Les éléments suivants sont uniques (ou quasi uniques) pour Linux, mais il y a beaucoup de configuration Linux (embeddeds, anciens, etc.) qui n'en ont pas besoin:

  • /lib32
  • /lib64
  • /selinux
  • /sys

Les éléments suivants dépendent entièrement de la dissortingbution / de l'user et peuvent s'appliquer à tout système UNIX:

  • /media
  • /cdrom
  • /srv

Celui-ci est présent sur presque tous les Linux, mais n'est pas nécessaire sur (par exemple) EC-2 où vous utilisez un kernel externe, ainsi que sur certaines configurations Linux embarquées:

  • /boot

Donc, il n'y a pas de directory

  • est présent sur toutes les instances Linux; et
  • n'est pas présent sur les instances non-Linux

Alors quelle est la bonne réponse? Si vous prenez la question «Quel directory DOIT exister dans / pour qualifier complètement ce operating system sous Linux», cela pourrait signifier «quel directory, s'il est absent, ne le ferait pas Linux». La réponse ici n'est pas linux-y /proc , /sys , /selinux ou /boot car vous pouvez exécuter Linux sans heurt sans ces derniers dans certaines circonstances – en effet, vous pouvez comstackr le kernel sans support pour les 3 premiers et le dernier est un bootloader convention.

Je dirais que la réponse est /sbin . Pourquoi? Bien /sbin est le seul directory codé en dur dans le kernel linux, en ce sens que le code de démarrage par défaut exécute /sbin/init . Il ne se réfère pas à /bin ou quoi que ce soit d'autre. Théoriquement les autres pourraient tous être renommés sans changer le kernel linux.

Les noms de dossier Filesystem ne sont pas quelque chose qui peut classifier Unix sous Linux ou pas. En fait, il existe un contre-exemple à tout système de files de dissortingbution Linux commun, appelé GoboLinux (l'idée derrière est la réorganisation complète du système de files).

Après coup, on peut renommer n'importe quel directory avec n'importe quel nom rendant même un système de files standard méconnaissable.