Uso de / cuando se usa cd

12

Estoy en mi directorio de inicio en mi mac:

$ pwd
/Users/lukas

Cuando estoy cdcerca, no (y no puedo) iniciar el camino con /:

$ cd Documents/
/Users/lukas/Documents

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

Excepto cuando estoy en /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

¿Por qué puedo usar /en frente de la ruta cuando voy de un nivel /a otro /Userspero no en ningún nivel posterior? ¿Es esto específico de macOS o es este comportamiento estándar de Unix?

LukasKawerau
fuente
11
Creo que las preguntas acerca de las rutas relativas y absolutas se han preguntado befofre
adamczi
66
@adamczi Es bastante obvio que OP no sabe qué es una ruta relativa o cómo es su sintaxis, por lo que no puede buscarla.
Restablece a Mónica el
12
@ K.Gkinis Lo cual no es una razón para no cerrar como duplicado. Ayuda a los solicitantes a obtener buenas respuestas (supongamos que las respuestas son buenas) y a los que responden a mantener menos versiones del mismo contenido.
user202729
99
@ K.Gkinis Y, en cierto sentido, esa es una gran parte del punto de cierre como un duplicado: las personas harán preguntas de muchas maneras diferentes, por lo que muchas preguntas (que coinciden con esas formas) que apuntan a una sola respuesta es un Buena cosa. En casos como este (donde un OP no conoce el término para buscar), cerrar como engañado no es una crítica de ellos, solo la mejor manera de manejar las muchas formas en que las personas hacen preguntas.
TripeHound
1
@adamczi Se les ha preguntado antes (¡gracias por los enlaces!), pero mi pregunta y especialmente las excelentes respuestas que se dan aquí son mucho más detalladas y explican el concepto mejor que las respuestas que ha vinculado. No sé si eso es importante para cerrar como duplicado, pero podría ser una consideración.
LukasKawerau

Respuestas:

45

Este es el comportamiento estándar de Unix.

El /principio de la ruta representa la raíz del disco (o el nivel inicial / superior del árbol del sistema de archivos). Como Documentsno está fuera de la raíz, /Documentsno se puede encontrar.

/Users está fuera del directorio raíz, por lo que este problema no se produce.

Podrías usar cd /Users/lukas/Documentspara cambiar a ese camino.

Alternativamente, podría usar el direccionamiento relativo. Los sistemas de archivos basados ​​en Unix tienen 2 directorios especiales:

  • . que significa "este directorio",
  • .. lo que significa el directorio padre.

Si estás dentro /Users/lukas, cd ./Documentste llevaría al lugar correcto.

Supongamos que estaba dentro /Users/Lukas/Documentsy quería ir /Users/Janes/Documents, podría emitir un comando cd ../../Janes/Documents, el uso ..lo llevaría de vuelta a un nivel, por lo que lo haría dos veces, antes de ingresar a la nueva ruta relativa.

davidgo
fuente
1
Nota: como dijo @davidgo, cuando está dentro Users/lukas, cd Documentsllama a la ruta relativa ; cd /Users/Lukas/Documentsrequiere la ruta absoluta (que funcionaría en cualquier repertorio en el que se encuentre al llamar a este comando).
Shan-x
1
Si bien la pregunta es sobre una Mac, que es un sistema Unix, este también es un comportamiento estándar de MS-DOS / Windows (reemplazando /con `\`) ya que DOS lo tomó prestado (a través de un largo y complicado historial) de Unix.
FreeMan el
2
También dependiendo del shell que use, cd $ HOME / Documents o cd ~ / Documents también funcionarían. La variable de shell HOME (a la que se accede con $ HOME) es la ubicación de almacenamiento habitual para su directorio de inicio (~ es un alias especial para $ HOME).
pboss3010
13

/Users/lukases un camino "absoluto". El líder /representa el directorio raíz de su sistema de archivos.

lukases un camino "relativo". Como no está anclado a la raíz, significa "buscar esto en el directorio actual ". A menos que el directorio actual sea /Users(o algún otro directorio con un lukasen él), esto fallará.

Entonces, exploremos sus ejemplos, suponiendo que esté en /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Ruta relativa dada => cambiar al directorio "Documentos" que está dentro /Users/lukas.

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

Ruta absoluta dada => cambiar al directorio /Documents.

$ pwd
/

Esto muestra que ahora ha cambiado el directorio de trabajo al directorio raíz /(aunque cdno se mostró el comando para hacerlo).

$ cd Users
/Users

Ruta relativa dada => cambiar al directorio "Usuarios" que está dentro /.

$ cd /Users
/Users

Ruta absoluta dada => cambiar al directorio /Users.

La clave cada vez es ese liderazgo /. Con ella, el camino es absoluto. Sin ella, el camino es relativo. Esta regla no es ambigua porque todas las rutas absolutas comienzan con /(porque siempre se llama al directorio raíz /).

Aquí hay un pseudocódigo que describe libremente ese algoritmo:

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

El argumento al que pasa cdpasa por este algoritmo; el directorio al que termina cambiando es la ruta que devuelve el algoritmo.


Otras lecturas:

La ligereza corre con Mónica
fuente
Este es también un gran recorrido y realmente ayuda a comprender este comportamiento. ¡Gracias! :)
LukasKawerau