Uso de / ao usar cd

12

Estou no meu diretório pessoal no meu mac:

$ pwd
/Users/lukas

Quando estou por cdperto, não (e não posso) iniciar o caminho com /:

$ cd Documents/
/Users/lukas/Documents

$ cd /Documents
-bash: cd: /Documents: No such file or directory

Exceto quando estou em /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Por que posso usar /na frente do caminho ao passar /para, /Usersmas não nos níveis subseqüentes? Isso é específico para o macOS ou esse é o comportamento padrão do Unix?

LukasKawerau
fonte
11
Acho perguntas sobre caminhos relativos e absolutos foram convidados befofre
adamczi
6
@adamczi É bastante óbvio que o OP não sabe o que é um caminho relativo ou qual é sua sintaxe, portanto, ele não pode procurá-lo.
Reintegrar Monica
12
@ K.Gkinis O que não é um motivo para não fechar como duplicado. Ajuda os solicitantes a obter boas respostas (suponha que as respostas sejam boas) e os respondentes a manter menos versões do mesmo conteúdo.
usar o seguinte comando
9
@ K.Gkinis E, em certo sentido, essa é uma grande parte do ponto de fechar como duplicado: as pessoas farão perguntas de várias maneiras diferentes; portanto, muitas perguntas (combinando essas maneiras) que apontam para uma única resposta são uma Coisa boa. Em casos como este (em que um OP não conhece o termo a ser pesquisado), fechar como um idiota não é uma crítica a eles, apenas a melhor maneira de lidar com a maneira como as pessoas fazem perguntas.
TripeHound #
1
@adamczi Eles já foram perguntados antes (obrigado pelos links!), mas minha pergunta e especialmente as ótimas respostas fornecidas aqui são muito mais detalhadas e explicam o conceito melhor do que as respostas que você vinculou. Não sei se isso é importante para fechar como duplicado, mas pode ser uma consideração.
LukasKawerau

Respostas:

45

Esse é o comportamento padrão do Unix.

O /no início do caminho representa a raiz do disco (ou o nível inicial / superior da árvore do sistema de arquivos). Como Documentsnão está fora da raiz, /Documentsnão pode ser encontrado.

/Users está fora do diretório raiz, portanto, esse problema não ocorre.

Você pode usar cd /Users/lukas/Documentspara mudar para esse caminho.

Como alternativa, você pode usar o endereçamento relativo. Os sistemas de arquivos baseados em Unix têm 2 diretórios especiais:

  • . o que significa "este diretório",
  • .. o que significa o diretório pai.

Se você estiver dentro /Users/lukas, cd ./Documentslevará você ao local correto.

Vamos supor que você estava /Users/Lukas/Documentse queria ir /Users/Janes/Documents, você poderia emitir um comando cd ../../Janes/Documents- usando ..você levaria um nível para trás -, então você faria isso duas vezes, antes de seguir para o novo caminho relativo.

davidgo
fonte
1
Nota: como o @davidgo disse, quando estiver dentro Users/lukas, cd Documentspede o caminho relativo ; cd /Users/Lukas/Documentssolicita o caminho absoluto (que estaria funcionando qualquer repertório em que você esteja ao chamar este comando).
Shan-x
1
Enquanto a pergunta é sobre um Mac, que é um sistema Unix, esse também é o comportamento padrão do MS-DOS / Windows (substituindo /por `\`), já que o DOS o emprestou (através de uma longa e complicada história) do Unix.
FreeMan
2
Além disso, dependendo do shell usado, o cd $ HOME / Documents ou o cd ~ / Documents também funcionaria. A variável do shell HOME (acessada com $ HOME) é o local de armazenamento usual para o diretório inicial (~ sendo um alias especial para $ HOME).
Pboss3010
13

/Users/lukasé um caminho "absoluto". O líder /representa o diretório raiz do seu sistema de arquivos.

lukasé um caminho "relativo". Como não está ancorado na raiz, significa "procure por isso no diretório atual ". A menos que o diretório atual seja /Users(ou algum outro diretório com um lukas), isso falhará.

Então, vamos explorar seus exemplos, supondo que você esteja /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Caminho relativo fornecido => mude para o diretório "Documents" que está dentro /Users/lukas.

$ cd /Documents
-bash: cd: /Documents: No such file or directory

Caminho absoluto dado => mude para o diretório /Documents.

$ pwd
/

Isso mostra que você agora mudou o diretório de trabalho para o diretório raiz /(embora o cdcomando para fazer isso não tenha sido mostrado).

$ cd Users
/Users

Caminho relativo fornecido => mude para o diretório "Usuários" que está dentro /.

$ cd /Users
/Users

Caminho absoluto dado => mude para o diretório /Users.

A chave de cada vez é essa liderança /. Com isso, o caminho é absoluto. Sem ele, o caminho é relativo. Esta regra é inequívoca porque todos os caminhos absolutos começam com /(porque o diretório raiz é sempre chamado /).

Aqui estão alguns pseudocódigos que descrevem livremente esse algoritmo:

MakePathAbsolute(path):
   if <path> starts with '/'
      return <path>
   else
      return <current directory>/<path>

O argumento para o qual você passa cdpassa por esse algoritmo; o diretório para o qual você acaba alterando é o caminho que o algoritmo retorna.


Leitura adicional:

Corridas de leveza com Monica
fonte
Este também é um ótimo passo a passo e realmente ajuda a entender esse comportamento. Obrigado! :)
LukasKawerau