← Terminal y Línea de Comandos en Linux Bloque 2 · Navegar el sistema de archivos · Tema 6 de 43

Tema 6

El árbol de directorios: pwd y cd

En un explorador de archivos siempre ves dónde estás. En la terminal hay que saberlo, y hay que saber decir con palabras dónde está cada cosa. Esa forma de decirlo es la ruta, y casi todos los comandos del curso reciben alguna. Este tema enseña a leerlas, a escribirlas y a moverse con ellas: es la base sobre la que se apoya todo lo que sigue.

1. Un solo árbol

Un sistema guarda cientos de miles de archivos. Para que sean manejables se los agrupa en directorios, que pueden contener archivos y también otros directorios. El resultado es una estructura en niveles, que se representa como un árbol invertido: arriba hay un único punto de partida y de él cuelga todo lo demás.

El directorio raíz es el directorio que contiene a todos los demás. Se escribe con una sola barra: /. Todo archivo del sistema está dentro de él, directamente o a través de otros directorios.

«Directorio» y «carpeta» son dos nombres de lo mismo. El segundo es el que usan los entornos gráficos; en la terminal y en la documentación se dice siempre directorio, y así lo haremos.

El árbol de directorios: de la raíz cuelgan bin, etc, home, tmp y usr; dentro de home está ana; dentro de ana, Documentos, practica y Descargas; dentro de practica, fotos, informe.txt y notas.txt / bin etc home tmp usr ana Documentos practica Descargas fotos informe.txt notas.txt
Una parte del árbol. Resaltado, el camino que va de la raíz al directorio de práctica: /home/ana/practica. La raíz tiene muchos más directorios que los cinco dibujados.

El vocabulario viene de los árboles genealógicos. ana es el directorio padre de practica; practica es un subdirectorio, o hijo, de ana. Cada directorio tiene exactamente un padre, y la raíz es el único que no tiene ninguno por encima.

Quien viene de Windows encontrará una diferencia de fondo. Allí cada disco tiene su propio árbol, identificado con una letra: C:, D:. En Linux hay un solo árbol para todo el sistema. Un segundo disco, una memoria USB o una carpeta de red no agregan otra raíz: aparecen como un directorio más, dentro del árbol único. Cómo se logra lo vemos en el tema 38.

LinuxWindows
Punto de partidaUna única raíz, /Una por unidad: C:\, D:\
SeparadorBarra: /Barra invertida: \
Mayúsculas y minúsculasSe distinguenNo se distinguen
Otro discoUn directorio dentro del árbolOtra letra

2. Las reglas de los nombres

Linux impone muy pocas restricciones a los nombres de archivos y directorios. Las reglas del sistema son tres:

ReglaDetalle
No puede contener la barra /.Es el separador de las rutas. Tampoco el carácter nulo, que no se puede escribir con el teclado.
Hasta 255 bytes de largo.Son 255 letras sin tilde. Las letras acentuadas y la ñ ocupan dos bytes cada una.
Mayúsculas y minúsculas son letras distintas.Notas.txt, notas.txt y NOTAS.TXT son tres archivos diferentes, que pueden convivir en el mismo directorio.

Todo lo demás está permitido: espacios, tildes, signos, incluso un nombre hecho solo de símbolos. Que el sistema lo permita no significa que convenga. Varios caracteres tienen un significado especial para la shell, y un nombre que los contiene obliga a tomar precauciones cada vez que se lo escribe:

Conviene evitarPor quéEn su lugar
Los espaciosLa shell los usa para separar argumentos.Guion o guion bajo: informe-final.txt, informe_final.txt
Un guion al comienzoEl nombre se confunde con una opción.Empezar con una letra o un número.
* ? [ ] $ & | ; < > ( ) ! ' " \Todos significan algo para la shell.Letras, números, punto, guion y guion bajo.

Dos convenciones más completan el cuadro. La primera: un nombre que empieza con un punto corresponde a un archivo oculto, que los listados no muestran salvo que se lo pidas. Lo vimos en el tema 3 con ls -a, y en el tema 5 usamos dos: .bashrc y .bash_history. No es una protección, solo una forma de no llenar la vista con archivos de configuración.

La segunda: la extensión no significa nada para el sistema. En Linux, .txt es parte del nombre y nada más; un archivo es un programa ejecutable por sus permisos, no por terminar en .exe, y un texto sigue siendo un texto aunque no tenga extensión. Las extensiones se usan igual, por costumbre, porque ayudan a las personas y a algunos programas.

3. El directorio de trabajo y pwd

La shell está siempre situada en algún punto del árbol.

El directorio de trabajo, o directorio actual, es el directorio en el que la shell está situada en un momento dado. Los comandos actúan en él cuando no se les indica otro lugar.

Es el equivalente de la carpeta que tienes abierta en un explorador de archivos, con una diferencia: aquí no se ve su contenido hasta que lo pides. El comando pwd, de print working directory, lo informa:

terminal, recién abierta
ana@equipo:~$ pwd
/home/ana

Una terminal nueva empieza en tu directorio personal, del que hablamos en la sección 8. El indicador también muestra el directorio de trabajo, entre los dos puntos y el signo $; en este caso, abreviado con una virgulilla. Por esta vez mostramos el indicador completo, porque en este tema conviene verlo cambiar.

Ya lo aprovechamos sin nombrarlo. Cuando en un tema anterior escribimos ls sin argumentos, listó el directorio de trabajo; cuando escribimos cat notas.txt, buscó ese archivo en el directorio de trabajo.

Ante la duda, pwd

La mitad de los errores «No such file or directory» no se deben a que el archivo no exista, sino a que no estás donde creías. Antes de buscar otra explicación, pwd. Y antes de un comando que borra o sobrescribe, con más razón.

4. Rutas absolutas

Una ruta es el texto que indica dónde está un archivo o un directorio dentro del árbol. Se forma con los nombres de los directorios que hay que atravesar, separados por barras.

Hay dos maneras de escribirla. La primera parte siempre de la raíz:

Una ruta absoluta es la que empieza con una barra. Describe el camino completo desde el directorio raíz, y por eso señala el mismo lugar sin importar cuál sea el directorio de trabajo.

anatomía de una ruta absoluta
/home/ana/practica/notas.txt
│ │    │   │        │
│ │    │   │        └─ el archivo
│ │    │   └─ dentro de «ana», el directorio «practica»
│ │    └─ dentro de «home», el directorio «ana»
│ └─ dentro de la raíz, el directorio «home»
└─ la raíz

La barra cumple dos funciones, y conviene distinguirlas. La primera barra de una ruta absoluta es un nombre: el de la raíz. Las demás son separadores entre un directorio y lo que contiene. Por eso /, sola, es una ruta válida y completa.

Una ruta absoluta es como una dirección postal completa, con país, ciudad, calle y número. Es larga, pero sirve a cualquiera desde cualquier parte:

terminal
$ cat /home/ana/practica/notas.txt
Mi primer archivo
$ ls /home/ana/practica
fotos  informe.txt  notas.txt

Estas dos líneas dan el mismo resultado estés donde estés.

5. Rutas relativas

Escribir el camino completo cada vez sería agotador. La segunda forma lo evita:

Una ruta relativa es la que no empieza con una barra. Describe el camino a partir del directorio de trabajo, y por eso su significado depende de dónde estés.

Es la indicación que se da a quien ya está en el barrio: «la segunda puerta a la izquierda». Corta y práctica, pero solo vale para quien parte del mismo lugar.

terminal
ana@equipo:~$ cat practica/notas.txt            # desde /home/ana
Mi primer archivo
ana@equipo:~$ cd practica
ana@equipo:~/practica$ cat notas.txt             # desde /home/ana/practica
Mi primer archivo
ana@equipo:~/practica$ cat practica/notas.txt    # la primera ruta ya no sirve
cat: practica/notas.txt: No such file or directory

El último comando muestra cómo trabaja el sistema: une el directorio de trabajo con la ruta relativa, y busca el resultado. Desde /home/ana/practica, la ruta practica/notas.txt equivale a /home/ana/practica/practica/notas.txt, que no existe.

Directorio de trabajoRuta relativaRuta absoluta equivalente
/home/anapractica/notas.txt/home/ana/practica/notas.txt
/home/ana/practicanotas.txt/home/ana/practica/notas.txt
/homeana/practica/notas.txt/home/ana/practica/notas.txt
/home/ana/practica/notas.txt/home/ana/practica/notas.txt

Cuatro rutas relativas distintas, un mismo archivo. La regla para reconocerlas no tiene excepciones:

Todo depende del primer carácter

Si la ruta empieza con /, es absoluta y parte de la raíz. Si empieza con cualquier otra cosa, es relativa y parte de donde estás. Un simple nombre de archivo, como notas.txt, es la ruta relativa más corta que existe.

6. El punto y los dos puntos

Con lo visto, una ruta relativa solo permite bajar: entrar en subdirectorios. Para subir hacen falta dos nombres especiales, que existen en todos los directorios. Aparecieron en el listado ls -a del tema 3, sin explicación:

terminal
ana@equipo:~/practica$ ls -a
.  ..  fotos  informe.txt  notas.txt
NombreSignificaDesde /home/ana/practica es…
.Este mismo directorio./home/ana/practica
..El directorio padre: el que contiene a este./home/ana

Los dos puntos se usan como cualquier otro nombre dentro de una ruta, y se pueden encadenar para subir varios niveles:

Ruta relativa, desde /home/ana/practicaSeñala aSe lee
../home/anaSubir un nivel.
../../homeSubir dos niveles.
../../../Subir tres: la raíz.
../Documentos/home/ana/DocumentosSubir uno y entrar en Documentos: un directorio «hermano».
../../../etc/hostname/etc/hostnameSubir hasta la raíz y bajar por otra rama.

La raíz no tiene padre, así que en ella .. señala a la propia raíz. Subir de más no da error: se queda en /.

El punto solo parece inútil: ¿para qué nombrar el lugar donde ya estás? Tiene dos usos frecuentes. Uno es indicar «aquí» como destino, en los comandos que exigen uno:

una forma que usaremos en el tema 11 (no hace falta ejecutarla ahora)
cp /etc/hostname .                  # copiar ese archivo aquí, con el mismo nombre

El otro lo vimos en el tema 3: para ejecutar un programa que está en el directorio actual hay que escribir ./programa, porque la shell no busca comandos allí. El ./ convierte un nombre suelto en una ruta, y eso le indica a la shell que no debe buscar en el PATH.

No hay que confundir este punto con el que encabeza los archivos ocultos. En .bashrc el punto es la primera letra de un nombre; en ./notas.txt es un nombre completo, seguido del separador.

7. cd: cambiar de directorio

El comando cd, de change directory, cambia el directorio de trabajo. Recibe una ruta, absoluta o relativa:

terminal
ana@equipo:~$ cd /etc                           # con una ruta absoluta
ana@equipo:/etc$ pwd
/etc
ana@equipo:/etc$ cd /home/ana/practica
ana@equipo:~/practica$ cd fotos                 # con una relativa: bajar
ana@equipo:~/practica/fotos$ cd ..              # subir
ana@equipo:~/practica$ cd ../..                 # subir dos niveles
ana@equipo:/home$ 

Cuando funciona, cd no responde nada: es el «silencio es éxito» del tema 1. La confirmación está en el indicador, que cambia en cada línea.

cd es un comando interno de la shell, como averiguamos en el tema 3, y ahora se entiende por qué no podría ser de otra manera. El directorio de trabajo es un dato de cada proceso. Un programa externo cambiaría el suyo, terminaría, y la shell seguiría donde estaba. Solo la shell puede cambiar su propio directorio.

Estas son todas las formas de uso corriente; las tres últimas se explican en las dos secciones siguientes:

ComandoLleva a
cd /ruta/absolutaEse lugar, desde cualquier parte.
cd nombreUn subdirectorio del actual.
cd ..El directorio padre.
cd /La raíz.
cdEl directorio personal.
cd ~/nombreUn subdirectorio del directorio personal.
cd -El directorio en el que estabas antes.

En todas vale lo aprendido en el tema anterior: los nombres se completan con Tab, y después de cd la shell ofrece solo directorios.

8. El directorio personal y la virgulilla

Cada usuario tiene un directorio propio, donde guarda sus archivos y su configuración.

El directorio personal, o home, es el directorio que pertenece a un usuario. Es el lugar donde empieza cada sesión y el único, en principio, donde ese usuario puede crear y borrar libremente.

Los directorios personales están, por convención, dentro de /home, cada uno con el nombre de su usuario: el de ana es /home/ana. La excepción es el administrador, root, cuyo directorio personal es /root.

terminal (el contenido depende de la instalación)
ana@equipo:~$ ls
Descargas  Documentos  Escritorio  Imágenes  Música  Plantillas  practica  Público  Vídeos

Los directorios con mayúscula los crea el entorno gráfico de Ubuntu; en un servidor o en WSL no suelen estar. Fuera de su directorio personal, un usuario común puede leer casi todo el sistema, pero no modificarlo. Ese reparto es el tema del bloque 4.

Como se lo nombra todo el tiempo, el directorio personal tiene una abreviatura: la virgulilla, ~. La shell la reemplaza por la ruta completa antes de ejecutar el comando:

terminal
$ echo ~
/home/ana
$ echo ~/practica/notas.txt
/home/ana/practica/notas.txt
$ echo ~root                        # el directorio personal de otro usuario
/root

echo permite ver el reemplazo: el comando no recibe la virgulilla, sino la ruta ya escrita. De ahí salen sus tres propiedades:

PropiedadConsecuencia
El resultado es una ruta absoluta.~/practica señala el mismo lugar desde cualquier directorio de trabajo.
Depende del usuario.La misma línea funciona para ana, para luis y en otra máquina, sin cambiar nada.
Solo vale al comienzo de una palabra.~/notas.txt se reemplaza; en copia~ o en a/~/b, la virgulilla es un carácter más.

La virgulilla es obra de la shell, no del sistema. Dentro de un archivo de configuración o en un programa puede no significar nada. Para esos casos existe una variable con el mismo valor, $HOME.

9. Volver: cd - y cd sin argumentos

Dos formas de cd no llevan ruta, y son de las más usadas. cd a secas vuelve al directorio personal, desde cualquier lugar; equivale a cd ~. Es la manera de regresar a terreno conocido cuando te perdiste en el árbol.

cd - vuelve al directorio en el que estabas antes del último cambio:

terminal
ana@equipo:~/practica/fotos$ cd /etc
ana@equipo:/etc$ cd -
/home/ana/practica/fotos
ana@equipo:~/practica/fotos$ cd -
/etc
ana@equipo:/etc$ 

Es el único caso en que cd escribe algo: muestra el lugar al que fue, porque no lo indicaste tú. Repetido, alterna entre dos directorios, como el botón de «canal anterior» de un control remoto. Es justo lo que hace falta al trabajar en dos lugares alejados: se consulta algo en uno y se vuelve al otro con cuatro teclas.

La shell recuerda un solo directorio anterior, no una lista. Lo guarda en una variable, OLDPWD, así como guarda el actual en PWD.

10. Absoluta o relativa: cuál conviene

Las dos formas llegan a los mismos lugares. Cuál usar depende de la situación:

AbsolutaRelativa
Empieza con/, o ~Cualquier otra cosa
Parte deLa raízEl directorio de trabajo
Depende de dónde estésNoSí
LongitudSuele ser largaSuele ser corta
Sigue valiendo si mueves todo el proyecto a otro lugarNoSí, entre archivos del proyecto
SituaciónConvienePor qué
El archivo está en el directorio actual, o cerca.RelativaEs más corta.
El archivo está en otra rama del árbol.Absoluta/etc/hostname es más claro que ../../../etc/hostname.
El archivo es del sistema: configuración, registros.AbsolutaTiene un lugar fijo, igual en todas las máquinas.
El archivo es tuyo.Con ~Corta y válida desde cualquier parte.
La línea va a quedar escrita: un alias, un script, una tarea programada.Absoluta, o con ~No se sabe desde qué directorio se ejecutará.

La última fila explica el alias del tema anterior: se definió como cd ~/practica, y no como cd practica, para que funcione desde cualquier lugar.

Pasar de una forma a otra es un ejercicio que conviene dominar. El comando realpath hace la conversión, y sirve para comprobar que una ruta relativa señala lo que crees:

terminal
ana@equipo:~/practica/fotos$ realpath ../notas.txt
/home/ana/practica/notas.txt
ana@equipo:~/practica/fotos$ realpath ../../Documentos
/home/ana/Documentos

11. Cómo se simplifica una ruta

Un mismo lugar admite muchas escrituras. El sistema las acepta todas, y conocer las equivalencias evita dudas al leer rutas escritas por otros:

ReglaEjemploEquivale a
Varias barras seguidas valen por una./home//ana///practica/home/ana/practica
Una barra al final de un directorio no cambia nada./home/ana/practica//home/ana/practica
Un punto en el medio no cambia nada./home/./ana/./practica/home/ana/practica
Dos puntos anulan el directorio anterior./home/ana/practica/../Documentos/home/ana/Documentos
Un ./ al comienzo no cambia nada../notas.txtnotas.txt

La segunda regla tiene un matiz útil. La barra final afirma que el nombre es un directorio: cat notas.txt/ da el error Not a directory, porque notas.txt no lo es. Tab la añade por eso, y algunos comandos se comportan de manera más segura cuando el destino lleva la barra, como veremos al copiar en el tema 11.

La cuarta regla permite leer rutas largas con .. en el medio, frecuentes en scripts y mensajes de error. Se recorren de izquierda a derecha, y cada .. borra el nombre que tiene delante:

simplificar paso a paso
/home/ana/practica/fotos/../../Documentos
/home/ana/practica/fotos/../../Documentos      se anulan «fotos» y «..»
/home/ana/practica/../Documentos               se anulan «practica» y «..»
/home/ana/Documentos

12. Ir a un lugar o señalarlo

Un hábito frecuente de quien empieza es moverse con cd hasta el directorio de cada archivo antes de hacer algo con él. No hace falta. Las rutas sirven para todos los comandos, no solo para cd: en cualquier lugar donde un comando espera un nombre de archivo, acepta una ruta.

dos maneras de hacer lo mismo
# yendo: tres comandos, y terminas en otro lugar
ana@equipo:~/practica$ cd /etc
ana@equipo:/etc$ cat hostname
equipo
ana@equipo:/etc$ cd -
/home/ana/practica

# señalando: un comando, y no te moviste
ana@equipo:~/practica$ cat /etc/hostname
equipo

Un comando puede además recibir varias rutas de lugares distintos, mezclando absolutas y relativas, cosa imposible si hubiera que «estar» en cada uno:

terminal
ana@equipo:~/practica$ ls -ld fotos .. /tmp ~/Documentos
drwxr-x--- 17 ana  ana  4096 oct 12 10:32 ..
drwxrwxr-x  2 ana  ana  4096 oct 12 10:40 fotos
drwxr-xr-x  2 ana  ana  4096 oct  5 09:14 /home/ana/Documentos
drwxrwxrwt 18 root root 4096 oct 12 11:05 /tmp

La opción -d hace que ls muestre los datos de cada directorio, en lugar de su contenido. Los cuatro argumentos son rutas: una relativa hacia abajo, una hacia arriba, una absoluta y una con virgulilla, que llegó al comando ya convertida.

Como criterio: conviene ir a un directorio cuando vas a trabajar un rato en él, con varios comandos sobre sus archivos. Conviene señalar cuando necesitas una sola cosa de otro lugar.

13. Los errores de cd

cd puede fallar por pocas razones, y el mensaje dice cuál. Se leen con la anatomía del tema 3: quién informa, sobre qué, y qué pasó.

terminal
ana@equipo:~$ cd Practica
bash: cd: Practica: No such file or directory
ana@equipo:~$ cd practica/notas.txt
bash: cd: practica/notas.txt: Not a directory
ana@equipo:~$ cd /root
bash: cd: /root: Permission denied
ana@equipo:~$ cd Mis documentos
bash: cd: too many arguments
MensajeCausaQué revisar
No such file or directoryNo existe nada con ese nombre en ese lugar.Las mayúsculas; un error de tipeo; el directorio de trabajo, con pwd; si la ruta debía empezar con /.
Not a directoryExiste, pero es un archivo.Para ver un archivo se usa cat, no cd.
Permission deniedExiste y es un directorio, pero tu usuario no tiene permiso para entrar.Es lo esperable en directorios de otros usuarios. Bloque 4.
too many argumentsEl nombre tiene un espacio y la shell lo partió en dos.Escribirlo entre comillas, cd "Mis documentos", o completarlo con Tab.

Hay un quinto error que no produce mensaje, y por eso es el más traicionero: olvidar la barra inicial, o ponerla de más. cd etc busca un directorio etc dentro del actual; cd /practica busca practica en la raíz. Las dos líneas fallan con No such file or directory, y la causa es un solo carácter.

Una ruta mal escrita, en un comando que borra

Con cd, un error de ruta no cuesta nada: el comando falla y sigues donde estabas. Con los comandos que modifican o borran, que empiezan en el tema 11, la misma equivocación actúa sobre otro lugar. La diferencia entre practica/ y /practica, o un espacio de más después de una barra, puede ser la diferencia entre un directorio tuyo y uno del sistema. La costumbre de completar las rutas con Tab y de mirar la línea antes del Enter se forma ahora, cuando equivocarse es gratis.

14. La ruta lógica y la ruta física

Hay un caso en el que pwd responde algo que parece contradecir el árbol. Pruébalo con el directorio /bin:

terminal, en Ubuntu
ana@equipo:~$ cd /bin
ana@equipo:/bin$ pwd
/bin
ana@equipo:/bin$ pwd -P
/usr/bin

En las distribuciones actuales, /bin no es un directorio real: es un enlace simbólico, un nombre que apunta a otro lugar, en este caso a /usr/bin. Los estudiamos en el tema 14. Al entrar por el enlace, la shell recuerda el camino que escribiste y lo informa con pwd: es la ruta lógica. La opción -P pide la ruta física, la del directorio en el que realmente estás.

En el trabajo diario la diferencia no molesta. Importa saberla por una consecuencia: tras entrar por un enlace, cd .. vuelve al lugar por el que llegaste, no al padre real del directorio. Si alguna vez cd .. te deja en un sitio inesperado, pwd -P lo aclara.

15. Un recorrido completo

Para fijar todo, un paseo por el árbol que usa cada recurso del tema. Conviene repetirlo en tu terminal, adivinando el indicador de cada línea antes de pulsar Enter:

terminal
ana@equipo:~$ cd practica/fotos                 # relativa, dos niveles hacia abajo
ana@equipo:~/practica/fotos$ cd ..              # al padre
ana@equipo:~/practica$ cd ../Documentos         # a un hermano
ana@equipo:~/Documentos$ cd /usr/share/doc      # absoluta, a otra rama
ana@equipo:/usr/share/doc$ cd ../..             # subir dos
ana@equipo:/usr$ cd -                           # al anterior
/usr/share/doc
ana@equipo:/usr/share/doc$ cd ~/practica        # con virgulilla, desde cualquier parte
ana@equipo:~/practica$ cd /                     # a la raíz
ana@equipo:/$ cd ..                             # la raíz no tiene padre: no cambia nada
ana@equipo:/$ cd                                # a casa
ana@equipo:~$ 

La referencia rápida del tema:

Se escribeSignifica
/La raíz; y, dentro de una ruta, el separador.
.El directorio actual.
..El directorio padre.
~Tu directorio personal.
~usuarioEl directorio personal de ese usuario.
-, como argumento de cdEl directorio anterior.
pwdMuestra el directorio de trabajo.
cd rutaCambia el directorio de trabajo.
realpath rutaMuestra la ruta absoluta equivalente.

Sabemos movernos, pero todavía vemos poco de cada lugar. En el tema 7 estudiamos a fondo ls: qué significa cada columna del formato largo, cómo ordenar y cómo ver los archivos ocultos.

16. Resumen

17. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué es el directorio raíz y cómo se escribe?

Es el directorio que contiene a todos los demás, el punto de partida del árbol. Se escribe con una sola barra, /.

2. ¿En qué se diferencia el árbol de Linux del de Windows?

Linux tiene un único árbol para todo el sistema, y los demás discos aparecen como directorios dentro de él. Windows tiene un árbol por unidad, cada uno con su letra. Además, Linux separa con / y distingue mayúsculas de minúsculas.

3. ¿Pueden existir Notas.txt y notas.txt en el mismo directorio?

Sí. Para Linux son dos nombres distintos.

4. ¿Cómo se reconoce si una ruta es absoluta o relativa?

Por su primer carácter. Si empieza con / es absoluta; si no, es relativa. Una ruta que empieza con ~ se convierte en absoluta, porque la shell la reemplaza por el directorio personal.

5. Estás en /home/ana/practica. ¿A qué ruta absoluta equivale ../Documentos?

A /home/ana/Documentos: los dos puntos suben a /home/ana, y desde allí se entra en Documentos.

6. Estás en /usr/share/doc. Escribe dos comandos distintos para ir a /usr.

cd /usr, con ruta absoluta, y cd ../.., con ruta relativa.

7. ¿Qué diferencia hay entre cd etc y cd /etc?

La primera busca un directorio etc dentro del directorio de trabajo. La segunda va al directorio etc de la raíz, estés donde estés.

8. ¿Para qué sirve el punto, si señala el directorio en el que ya estás?

Para indicar «aquí» como destino, como en cp /etc/hostname ., y para convertir un nombre en una ruta, como en ./programa, de modo que la shell lo ejecute sin buscarlo en el PATH.

9. ¿Qué hacen cd, cd ~ y cd -?

Las dos primeras llevan al directorio personal. La tercera, al directorio en el que estabas antes del último cambio, y muestra su ruta.

10. ¿Por qué cd tiene que ser un comando interno de la shell?

Porque el directorio de trabajo pertenece a cada proceso. Un programa externo cambiaría su propio directorio y terminaría, sin afectar a la shell.

11. ¿Quién reemplaza la virgulilla por la ruta, y cómo se comprueba?

La shell, antes de ejecutar el comando. Se comprueba con echo ~, que muestra la ruta ya reemplazada.

12. Simplifica la ruta /home/ana/practica/../../ana/./practica/fotos/..

/home/ana/practica. Los dos .. seguidos anulan practica y ana, dejando /home; luego se entra en ana, el punto no cambia nada, se entra en practica y en fotos, y el último .. anula fotos.

13. cd Documentos responde «No such file or directory», pero sabes que el directorio existe. ¿Qué revisas?

El directorio de trabajo, con pwd: probablemente no estás en el directorio que lo contiene. También las mayúsculas del nombre. La solución segura es una ruta que no dependa del lugar: cd ~/Documentos.

14. ¿Por qué en un alias o en un script conviene evitar las rutas relativas?

Porque no se sabe desde qué directorio se ejecutarán, y una ruta relativa señala lugares distintos según el directorio de trabajo.

15. ¿Hace falta entrar en /etc para ver el contenido de /etc/hostname?

No. Cualquier comando acepta una ruta: cat /etc/hostname funciona desde cualquier directorio.

Para practicar

  1. Repite el recorrido de la sección 15 en tu terminal. Antes de cada Enter, di en voz alta cuál será el directorio de trabajo, y verifica con el indicador.
  2. Ve a /usr/share/doc con una ruta absoluta. Desde allí, sin usar ~ ni rutas absolutas, llega a tu directorio de práctica. ¿Cuántos .. hicieron falta?
  3. Desde ~/practica/fotos, muestra el contenido de notas.txt de tres maneras: con una ruta relativa, con una absoluta y con una que use la virgulilla.
  4. Completa la tabla, estando en /home/ana/practica: ¿qué ruta absoluta corresponde a ., a fotos/.., a ../.., a ./fotos y a ../practica/notas.txt? Comprueba cada una con realpath.
  5. Ejecuta echo ~, echo ~root, echo ~/practica y echo a~. Explica cada resultado.
  6. Ve a /var/log y luego a ~/practica. Alterna entre los dos con cd - varias veces. Luego ejecuta echo $PWD $OLDPWD.
  7. Provoca los cuatro errores de la sección 13 y lee cada mensaje señalando sus partes.
  8. Sin moverte de tu directorio personal, lista el contenido de /, de /home y de ~/practica con un solo comando ls.
  9. Entra en /bin y compara pwd con pwd -P. Luego ejecuta cd .. y observa dónde quedaste.
  10. Lee help cd y help pwd. ¿Qué hacen las opciones -L y -P?