Que diretório DEVE existir em / para qualificar um SO como Linux

4

Estudando o wikibook do lpic para o exame lpic 1, eu encontrei a pergunta a seguir .

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

Eu pesquisei no google e no wikibook, mas não consigo encontrar qual pasta em / torna um 'unix' classificado como 'linux'.

Aqui está a saída de uma caixa 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

Aqui está a saída de / no Mac OSX

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

Qualquer outra informação sobre o que faz um unix no linux é apreciada.

    
por spuder 02.02.2014 / 06:04

8 respostas

13

Para responder a pergunta sobre o LPI, acho que não há nenhum diretório real e que essa é uma pergunta difícil! O Linux não possui diretórios obrigatórios que devem estar presentes, ele pode ser instalado em qualquer estrutura de diretório que seja escolhida, é configurável.

Eu desenterrei esta página, intitulada: 4. Hierarquia de Diretórios Linux: Orientada para as Partes de Software . Tem isto a dizer:

trecho

So let's summarize what the FHS has to say about Linux directories:

Linux system directories

------------------------------------

/usr/bin

Directory for the executables that are accessed by all users (everybody have this directory in their $PATH). The main files of your Software will probably be here. You should never create a subdirectory under this folder.

/bin

Like /usr/bin, but here you'll find only boot process vital executables, that are simple and small. Your Software (being high-level) probably doesn't have nothing to install here.

/usr/sbin

Like /usr/bin, but contains only the executables that must be accessed by the administrator (root user). Regular users should never have this directory in their $PATH. If your Software is a daemon, This is the directory for some of executables.

/sbin

Like /usr/sbin, but only for the boot process vital executables, and that will be accessed by sysadmin for some system maintaining. Commands like fsck (filesystem check), init (father of all processes), ifconfig (network configuration), mount, etc can be found here. It is the system's most vital directory.

/usr/lib

Contains dynamic libraries and support static files for the executables at /usr/bin and /usr/sbin. You can create a subdirectory like /usr/lib/myproduct to contain your helper files, or dynamic libraries that will be accessed only by your Software, without user intervention. A subdirectory here can be used as a container for plugins and extensions.

/lib

Like /usr/lib but contains dynamic libraries and support static files needed in the boot process. You'll never find an executable at /bin or /sbin that needs a library that is outside this directory. Kernel modules (device drivers) are under /lib.

/etc

Contains configuration files. If your Software uses several files, put them under a subfolder like /etc/myproduct/

/var

The name comes from "variable", because everything that is under this directory changes frequently, and the package system (RPM) doesn't keep control of. Usually /var is mounted over a separate high-performance partition. In /var/log logfiles grow up. For web content we use /var/www, and so on.

/home

Contains the user's (real human beings) home directories. Your Software package should never install files here (in installation time). If your business logic requires a special UNIX user (not a human being) to be created, you should assign him a home directory under /var or other place outside /home. Please, never forget that.

...

You may think is a bad idea to break your Software (as a whole) in many pieces, instead of keeping it all under a self-contained directory. But a package system (RPM) has a database that manages it all for you in a very professional way, taking care of configuration files, directories etc. And if you spread your Software using the FHS, beyond the user friendliness, you'll bring an intuitive way to the sysadmin configure it, and work better with performance and security.

Minha conclusão

Assim, pelo menos de acordo com essa seção posterior do FHS, esses são alguns diretórios que podem ser considerados vagamente obrigatórios, mas o Linux não precisa seguir o FHS. Mesmo o LSB (Linux Standards Base) é apenas um guia, não uma especificação ridícula.

A única coisa que o Linux tenta aderir é a conformidade com POSIX, e o POSIX não faz nenhuma transferência como essa quando se trata de uma variante específica do UNIX.

Referências

[1] O seguinte material foi extraído de Graham Glass e King Ables, Linux para programadores e usuários, Pearson Prentice-Hall, 2006. ISBN 0-13-185748-7. p 4-15

    
por 02.02.2014 / 07:57
6

Você sabe, estou meio tentado a fazer uma distribuição Linux personalizada em que:

  • O carregador de boot coloca o init em outro lugar, como hey_lpi_guys_this_is_a_linux_system / sh
  • Usando ext2ed ou uma ferramenta semelhante, remova '.' e '..' do diretório raiz (enquanto estou nisso, hackear o e2fsck para não reclamar que '.' e '..' não estão no nível superior).
  • Certifique-se de que o espaço do usuário (provavelmente apenas sh , já que isso será uma prova de conceito) não se importe com o fato de o diretório raiz não ter '.' e '..'

O fato é o seguinte: o Linux pode inicializar em um sistema sem um único diretório que um sistema de arquivos típico do Linux tende a ter. E vai funcionar. Não há praticamente nenhum must no Linux - esse é o poder do código aberto.

A flexibilidade do Linux é uma espada de dois gumes. Uma desvantagem é que algo tão simples como "como eu me certifico de que este programa é iniciado na inicialização do sistema?" tem várias respostas incompatíveis, dependendo da distro e do sistema init.

    
por 02.02.2014 / 14:32
4

Não tenho certeza, mas eu diria que a pergunta é referente a /proc . Isso tem que existir no Linux em / , pois é criado pelo kernel e não reside no disco.

Sistemas Unix também parecem ter /proc , então não é exclusivo, mas eu acho que você pode ler a pergunta do jeito que "se /XYZ não existe, então não é Linux", ao invés de " se /XYZ existe, só pode ser Linux ". A segunda versão sempre pode ser refutada em seu Mac OSX fazendo sudo mkdir /XYZ para qualquer diretório ainda não existente em /

    
por 02.02.2014 / 08:08
4

Eu deliberadamente coloquei isso como outra resposta, pois se baseia em uma interpretação muito literal da questão:

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

Bem, eu vejo:

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...)

De acordo com minha outra resposta, nenhum diretório presente em / identifica exclusivamente um sistema operacional como o Linux em oposição a qualquer outro UNIX e está sempre lá. No entanto, . e .. DEVEM existir em / para que o SO se qualifique como Linux. Ou seja, são condições necessárias, mas não suficientes.

    
por 02.02.2014 / 12:02
2

Any other information about what makes a unix into linux is appreciated.

Em termos da hierarquia diretório , não há realmente nada; /proc não é exclusivo do linux . Ele também é usado no Solaris e pelo menos em algumas formas de BSD. Além disso, acho que o kernel do linux ainda pode ser configurado sem ele ou suporte sysfs.

Como você reconhece, o FHS pretende abranger uma variedade de sistemas semelhantes a unix. No entanto, é produzido e mantido pela Linux Foundation e a versão atual (2.3) não inclui um capítulo 6 "Sistema operacional anexo específico" com apenas uma seção, 6.1 Linux (a versão em PDF é melhor ler, btw). Existem várias convenções específicas do Linux, incluindo alguns itens obrigatórios em /dev ( null , zero , tty ) e pode haver um vetor combinando esses que é único. A razão pela qual alguém não identificou isso provavelmente é porque não teria nenhum valor de uso (há maneiras melhores de identificar um kernel do sistema operacional, como perguntar diretamente a ele).

    
por 02.02.2014 / 12:22
1

Linux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance.

It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6.

Os arquivos do kernel do Linux - Sobre o kernel do Linux - O que é o Linux?

Do link Especificação Single UNIX :

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.

Do Grupo aberto IEEE Std 1003.1, 2013 Edition , ou seja, POSIX :

The following directories shall exist on conforming systems and conforming applications shall make use of them only as described. Strictly 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. 

Como os diretórios necessários SUS são um subconjunto dos POSIX , e como o Linux tem como objetivo a conformidade com ambos, podemos dizer que um sistema operacional é qualificado como Linux a esse respeito, se tiver the *POSIX* conforming list of 5 directories plus the root(/) directory .

    
por 02.02.2014 / 10:52
0

A pergunta que você está fazendo é ruim (não é a pergunta SO).

Eu suspeito que a resposta que eles estão procurando seja /boot ou /sys , mas ambos estão errados. Eu acho que uma resposta melhor é /sbin .

Aqui está o que está no meu diretório raiz:

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

Dos diretórios usados pelo Linux, os seguintes são em SuS ou de uso comum em muitos UNIXes:

  • /bin
  • /dev
  • /etc
  • /home
  • /lib
  • /lost+found
  • /mnt
  • /proc - consulte o link
  • /root
  • /run
  • /sbin
  • /tmp
  • /usr
  • /var

As seguintes são exclusivas (ou quase exclusivas) do Linux, mas há muitas configurações do Linux (incorporadas, antigas etc.) que não precisam delas:

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

Os itens a seguir são totalmente dependentes da distribuição / usuário e podem ser aplicados a qualquer UNIX:

  • /media
  • /cdrom
  • /srv

Este é um em quase todos os Linux, mas é desnecessário em (por exemplo) EC-2, onde você usa um kernel externo, bem como em algumas configurações Linux embarcadas:

  • /boot

Portanto, não há diretório que

  • está presente em todas as instâncias do Linux; e
  • não está presente em nenhuma instância não-Linux

Então, qual é a resposta certa? Se você pegar a pergunta 'Qual diretório DEVE existir em / para qualificar este SO como Linux' completamente literalmente, isso pode significar 'qual diretório, se ausente, não o tornará linux'. A resposta aqui não é o linux-y /proc , /sys , /selinux ou /boot já que você pode rodar o Linux muito bem sem estes em algumas circunstâncias - na verdade você pode compilar o kernel sem suporte para os 3 primeiros e a última é uma convenção de bootloader.

Eu diria que a resposta é /sbin . Por quê? Bem, /sbin é o diretório apenas codificado no kernel linux, em que o código de inicialização padrão executa /sbin/init . Não se refere a /bin ou qualquer outra coisa. Teoricamente os outros poderiam ser renomeados sem mudar o kernel do Linux.

    
por 02.02.2014 / 11:57
0

Nomes de pastas do sistema de arquivos não é algo que possa classificar o Unix como Linux ou não. Na verdade, existe um contra-exemplo para qualquer sistema comum de arquivos de distribuição Linux, chamado GoboLinux (a idéia por trás dele < em> é a reorganização completa do sistema de arquivos).

Como uma reflexão tardia, é possível renomear qualquer diretório com qualquer nome, tornando até mesmo um sistema de arquivos padrão irreconhecível.

    
por 03.02.2014 / 06:57