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.
/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.
| Linux | Windows | |
|---|---|---|
| Punto de partida | Una única raíz, / | Una por unidad: C:\, D:\ |
| Separador | Barra: / | Barra invertida: \ |
| Mayúsculas y minúsculas | Se distinguen | No se distinguen |
| Otro disco | Un directorio dentro del árbol | Otra 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:
| Regla | Detalle |
|---|---|
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 evitar | Por qué | En su lugar |
|---|---|---|
| Los espacios | La shell los usa para separar argumentos. | Guion o guion bajo: informe-final.txt, informe_final.txt |
| Un guion al comienzo | El 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:
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.
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.
/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:
$ 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.
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 trabajo | Ruta relativa | Ruta absoluta equivalente |
|---|---|---|
/home/ana | practica/notas.txt | /home/ana/practica/notas.txt |
/home/ana/practica | notas.txt | /home/ana/practica/notas.txt |
/home | ana/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:
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:
ana@equipo:~/practica$ ls -a
. .. fotos informe.txt notas.txt
| Nombre | Significa | Desde /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/practica | Señala a | Se lee |
|---|---|---|
.. | /home/ana | Subir un nivel. |
../.. | /home | Subir dos niveles. |
../../.. | / | Subir tres: la raíz. |
../Documentos | /home/ana/Documentos | Subir uno y entrar en Documentos: un directorio «hermano». |
../../../etc/hostname | /etc/hostname | Subir 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:
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:
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:
| Comando | Lleva a |
|---|---|
cd /ruta/absoluta | Ese lugar, desde cualquier parte. |
cd nombre | Un subdirectorio del actual. |
cd .. | El directorio padre. |
cd / | La raíz. |
cd | El directorio personal. |
cd ~/nombre | Un 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.
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:
$ 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:
| Propiedad | Consecuencia |
|---|---|
| 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:
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:
| Absoluta | Relativa | |
|---|---|---|
| Empieza con | /, o ~ | Cualquier otra cosa |
| Parte de | La raíz | El directorio de trabajo |
| Depende de dónde estés | No | Sí |
| Longitud | Suele ser larga | Suele ser corta |
| Sigue valiendo si mueves todo el proyecto a otro lugar | No | Sí, entre archivos del proyecto |
| Situación | Conviene | Por qué |
|---|---|---|
| El archivo está en el directorio actual, o cerca. | Relativa | Es 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. | Absoluta | Tiene 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:
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:
| Regla | Ejemplo | Equivale 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.txt | notas.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:
/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.
# 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:
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ó.
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
| Mensaje | Causa | Qué revisar |
|---|---|---|
No such file or directory | No 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 directory | Existe, pero es un archivo. | Para ver un archivo se usa cat, no cd. |
Permission denied | Existe y es un directorio, pero tu usuario no tiene permiso para entrar. | Es lo esperable en directorios de otros usuarios. Bloque 4. |
too many arguments | El 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.
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:
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:
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 escribe | Significa |
|---|---|
/ | La raíz; y, dentro de una ruta, el separador. |
. | El directorio actual. |
.. | El directorio padre. |
~ | Tu directorio personal. |
~usuario | El directorio personal de ese usuario. |
-, como argumento de cd | El directorio anterior. |
pwd | Muestra el directorio de trabajo. |
cd ruta | Cambia el directorio de trabajo. |
realpath ruta | Muestra 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
- Linux organiza todos los archivos en un único árbol de directorios, que parte del directorio raíz,
/. No hay letras de unidad. - Un nombre puede contener cualquier carácter salvo la barra, y distingue mayúsculas de minúsculas. Conviene limitarse a letras, números, punto, guion y guion bajo.
- Los nombres que empiezan con un punto son archivos ocultos. La extensión no tiene significado para el sistema.
- La shell está siempre situada en un directorio de trabajo, que
pwdinforma y el indicador muestra. - Una ruta absoluta empieza con
/, parte de la raíz y vale desde cualquier lugar. - Una ruta relativa no empieza con
/, parte del directorio de trabajo y su significado depende de él. .es el directorio actual y..es su padre. Con..las rutas relativas pueden subir.cdcambia el directorio de trabajo. Es interno de la shell porque solo ella puede cambiar su propio directorio.- Cada usuario tiene un directorio personal, normalmente
/home/usuario. La shell lo abrevia con la virgulilla,~. cdsin argumentos vuelve al directorio personal;cd -, al directorio anterior.- Las rutas relativas convienen para lo cercano; las absolutas y las que usan
~, para lo lejano y para todo lo que queda escrito. - Las rutas sirven para todos los comandos: no hace falta ir a un directorio para operar con lo que contiene.
- Los errores de
cdindican si el destino no existe, no es un directorio o no está permitido.
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
- 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.
- Ve a
/usr/share/doccon una ruta absoluta. Desde allí, sin usar~ni rutas absolutas, llega a tu directorio de práctica. ¿Cuántos..hicieron falta? - Desde
~/practica/fotos, muestra el contenido denotas.txtde tres maneras: con una ruta relativa, con una absoluta y con una que use la virgulilla. - Completa la tabla, estando en
/home/ana/practica: ¿qué ruta absoluta corresponde a., afotos/.., a../.., a./fotosy a../practica/notas.txt? Comprueba cada una conrealpath. - Ejecuta
echo ~,echo ~root,echo ~/practicayecho a~. Explica cada resultado. - Ve a
/var/logy luego a~/practica. Alterna entre los dos concd -varias veces. Luego ejecutaecho $PWD $OLDPWD. - Provoca los cuatro errores de la sección 13 y lee cada mensaje señalando sus partes.
- Sin moverte de tu directorio personal, lista el contenido de
/, de/homey de~/practicacon un solo comandols. - Entra en
/biny comparapwdconpwd -P. Luego ejecutacd ..y observa dónde quedaste. - Lee
help cdyhelp pwd. ¿Qué hacen las opciones-Ly-P?