A barra ( /
) realmente faz parte do nome do diretório raiz do Linux? Ou é apenas um símbolo para isso?
Que /etc
tal e assim por diante?
Atualizar
Suponha que /dev/sda2
seja o dispositivo de bloco de um diretório raiz do Linux.
$ sudo debugfs / dev / sda2 debugfs 1.44.1 (24 / mar / 2018) debugfs: pwd [pwd] INODE: 2 CAMINHO: / [raiz] INODE: 2 CAMINHO: / debugfs: stat / Inode: 2 Tipo: diretório Modo: 0755 Sinalizadores: 0x80000 Geração: 0 Versão: 0x00000000: 00000077 Usuário: 0 Grupo: 0 Projeto: 0 Tamanho: 4096 Arquivo ACL: 0 Links: 25 Quantidade: 8 Fragmento: Endereço: 0 Número: 0 Tamanho: 0 Por favor, digite seu e-mail do Facebook para receber um link de criação de senha. Atime: 0x5b13ca0f: 3b3ee380 - Dom Jun 3 15:29:27 2018 Mtime: 0x5b13c9f1: 3f017990 - Dom Jun 3 15:28:57 2018 Crtime: 0x5aad1843: 00000000 - sáb 17 mar 16:59:39 2018 Tamanho dos campos extra de inode: 32 EXTENSÕES: (0): 9249
Portanto, há um diretório lá, no inode # 2, mas não tem um nome.
linux
filesystems
filenames
fhs
mlibre
fonte
fonte
debugfs
saída. Você pode esclarecer como isso muda a questão?Respostas:
O padrão POSIX.1-2008 diz
O padrão ainda faz uma distinção entre nomes de arquivos e nomes de caminhos .
/
é o nome do caminho para o caminho do diretório raiz. O nome do diretório é "o diretório raiz", mas no sistema de arquivos é sem nome, não possui um nome de arquivo. Se tivesse um nome de arquivo, esse nome seria uma entrada de diretório no diretório acima do diretório raiz e não existe esse diretório.O caractere
/
nunca pode fazer parte de um nome de arquivo, pois é o separador de caminho.Para maior clareza:
/
não é o nome do diretório raiz, mas o caminho para ele, o nome do caminho ./etc
é outro nome de caminho. É o nome do caminho absoluto para oetc
diretório. O nome do diretório nesse caminho éetc
(seu nome do arquivo éetc
)./usr/local/bin/curl
é o nome do caminho docurl
arquivo executável da mesma maneira que/etc
o nome do caminho doetc
diretório.fonte
/..
aponta para trás/
e/
possui uma entrada de diretório para si - esse é o bom e velho/.
; todas essas 3 coisas estão apontando para o mesmo inode - 2./
é definido em termos de raiz por processo, mas não sabia que o inodechroot
não é necessariamente 2. Um fato muito interessante. Também levanta uma questão de qual é o/
diretório para processos privilegiados do kernel. Isso significa que apenas os processos de espaço do usuário têm os/
quais eles se associam?barra é um separador ; os nomes de diretório não incluem separadores, mas os nomes de caminho completos incluem os separadores.
Portanto, o "nível raiz"
/
não tem nome . Na maioria dos sistemas tipo Unix, isso é tratado como um caso especial.
e..
(embora, é claro, não exista diferença entre os dois no nível raiz).Nomenclatura pode ser diferente. O POSIX.1-2017, por exemplo, lista algumas definições comumente usadas :
3.2 Nome do caminho absoluto
3.271 Nome do caminho
3.272 Componente do nome do caminho
3.170 Nome do arquivo
Então ... se você estiver procurando esclarecimentos , talvez essa não seja sua primeira parada. Tutoriais como esta página de conceitos do UNIX são úteis, por exemplo, apontando que "nome do caminho completo" é sinônimo de "nome do caminho" absoluto ".
fonte
/
não é um nome de arquivo ou componente de nome de caminho válido e não é uma string que contém esses componentes, mas ainda é um nome de caminho completamente válido para um determinado diretório. O que tem que existir, embora a parte que exige isso não mencione seu "nome". De alguma forma, acho isso um pouco divertido...
da/
vinculação/
.No Unix, arquivos (e diretórios são apenas arquivos) não possuem "nomes". Links têm nomes, links são entradas em um diretório que mapeia nomes para arquivos.
Você pode dizer que os links dão nomes aos arquivos, mas observe: isso implica que um arquivo pode ter mais de um nome, pois pode ter mais de um link.
Como o diretório raiz é, bem, o diretório raiz, não há um diretório "superior" dentro do qual possa haver um link para ele, portanto, não pode haver um nome associado a ele. Teoricamente, seria possível adicionar um link ao diretório raiz dentro de outro diretório, mas a maioria dos Unices proíbe adicionar links aos diretórios existentes, pois isso pode levar a ciclos na hierarquia do sistema de arquivos (que na verdade é um gráfico direcionado) e detectar ciclos. em um gráfico é caro, mas não detectá-los pode levar a uma recursão infinita ao tentar resolver nomes no kernel.
Então, basicamente, o diretório raiz não tem nome, porque não há diretório acima dele dentro do qual possamos gravar o nome.
Como foi apontado em outras respostas, precisamos distinguir entre um nome e um caminho (nome). O diretório raiz pode ser consultado através do caminho (nome)
/
.fonte
O uso da palavra "nome" é um pouco flexível; pode se referir a um "nome completo do caminho"; pode se referir à "entrada de diretório"; pode se referir ao "nome do arquivo" passado para várias funções ou rotinas.
Assim, por exemplo,
/etc/foo
e/var/tmp/../../etc/foo
e/tmp/../../../../../../foo
são todas as maneiras de se referir ao mesmo arquivo; todos são nomes válidos , comofoo
no/etc
diretório.Então, vamos voltar ao básico.
Um nome de arquivo no unix é composto de componentes separados pelo separador de diretório
/
. Praticamente a única restrição aos componentes é que eles não podem conter os/
caracteres ou NUL; qualquer outra coisa é permitida.Assim, o "nome do caminho totalmente qualificado" de
/etc
é a sequência completa:/etc
. Isso significa que ele possui oetc
componente no diretório raiz.Da mesma forma
/x/y/z/foo
teria ofoo
componente no/x/y/z
diretórioAgora, o diretório raiz é único, pois não possui componente em um diretório pai; -lo única tem o caminho completo como o seu nome:
/
.fonte