Estoy en mi directorio de inicio en mi mac:
$ pwd
/Users/lukas
Cuando estoy cd
cerca, 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 /Users
pero no en ningún nivel posterior? ¿Es esto específico de macOS o es este comportamiento estándar de Unix?
linux
command-line
mac
terminal
LukasKawerau
fuente
fuente
Respuestas:
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). ComoDocuments
no está fuera de la raíz,/Documents
no se puede encontrar./Users
está fuera del directorio raíz, por lo que este problema no se produce.Podrías usar
cd /Users/lukas/Documents
para 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 ./Documents
te llevaría al lugar correcto.Supongamos que estaba dentro
/Users/Lukas/Documents
y quería ir/Users/Janes/Documents
, podría emitir un comandocd ../../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.fuente
Users/lukas
,cd Documents
llama a la ruta relativa ;cd /Users/Lukas/Documents
requiere la ruta absoluta (que funcionaría en cualquier repertorio en el que se encuentre al llamar a este comando)./
con `\`) ya que DOS lo tomó prestado (a través de un largo y complicado historial) de Unix./Users/lukas
es un camino "absoluto". El líder/
representa el directorio raíz de su sistema de archivos.lukas
es 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 unlukas
en él), esto fallará.Entonces, exploremos sus ejemplos, suponiendo que esté en
/Users/lukas
:Ruta relativa dada => cambiar al directorio "Documentos" que está dentro
/Users/lukas
.Ruta absoluta dada => cambiar al directorio
/Documents
.Esto muestra que ahora ha cambiado el directorio de trabajo al directorio raíz
/
(aunquecd
no se mostró el comando para hacerlo).Ruta relativa dada => cambiar al directorio "Usuarios" que está dentro
/
.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:
El argumento al que pasa
cd
pasa por este algoritmo; el directorio al que termina cambiando es la ruta que devuelve el algoritmo.Otras lecturas:
Joseph L. Zachary
"Introducción a la programación científica"
fuente