Capítulo 4. Navegando por el Sistema de Archivos
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
En la película Las aventuras de Buckaroo Banzai en la 8ª Dimensión, una comedia clásica de culto de 1984, el espadachín personaje del título ofrece las siguientes palabras de sabiduría zen: "Recuerda, vayas donde vayas... ahí estás". Buckaroo bien podría haber estado hablando del sistema de archivos Linux:
$ cd /usr/share/lib/etc/bin No matter where you go... $ pwd /usr/share/lib/etc/bin ...there you are.
También ocurre que dondequiera que estés en el sistema de archivos de Linux -tu directorio actual- acabarás yendo a otro lugar (a otro directorio). Cuanto más rápida y eficazmente puedas realizar esta navegación, más productivo serás.
Las técnicas de este capítulo te ayudarán a navegar por el sistema de archivos más rápidamente y tecleando menos. Parecen aparentemente sencillas, pero son muy rentables, con pequeñas curvas de aprendizaje y grandes beneficios. Estas técnicas se dividen en dos grandes categorías:
-
Moverse rápidamente a un directorio específico
-
Volver rápidamente a un directorio que has visitado antes
Para un rápido repaso de los directorios de Linux, consulta el Apéndice A. Si utilizas un intérprete de comandos distinto de bash
, consulta el Apéndice B para obtener notas adicionales.
Visitar eficazmente directorios específicos
Si preguntas a 10 expertos en Linux cuál es el aspecto más tedioso de la línea de comandos, siete de ellos responderán: "Escribir largas rutas de directorio".1 Al fin y al cabo, si tus archivos de trabajo están en/home/mañana/Trabajo/Proyectos/Aplicaciones/Neutron-Star/src/include, tus documentos financieros están en/home/mañana/Finanzas/Banco/Cheques/Declaraciones, y tus vídeos están en /data/Artes/Vídeo/Colección, no es divertido volver a escribir estas rutas una y otra vez. En esta sección, aprenderás técnicas para navegar a un directorio determinado de forma eficiente.
Saltar a tu directorio de inicio
Empecemos por lo básico. Vayas donde vayas en el sistema de archivos, puedes volver a tu directorio raíz ejecutando cd
sin argumentos:
$ pwd /etc Start somewhere else $ cd Run cd with no arguments... $ pwd /home/smith ...and you're home again
Para saltar a subdirectorios dentro de tu directorio personal desde cualquier parte del sistema de archivos, haz referencia a tu directorio personal con una abreviatura en lugar de una ruta absoluta como /home/smith. Una abreviatura es la variable de shell HOME
:
$ cd $HOME/Work
$ cd ~/Work
Tanto $HOME
como ~
son expresiones expandidas por el intérprete de comandos, hecho que puedes comprobar enviándolas por eco a stdout:
$ echo $HOME ~ /home/smith /home/smith
La tilde también puede referirse al directorio personal de otro usuario si la colocas inmediatamente delante de su nombre de usuario:
$ echo ~jones /home/jones
Muévete más rápido con la finalización por pestañas
Cuando introduzcas comandos cd
, ahorra tecleando pulsando la tecla Tabulador para producir nombres de directorio automáticamente. Como demostración, visita un directorio que contenga subdirectorios, como /usr:
$ cd /usr $ ls bin games include lib local sbin share src
Supongamos que quieres visitar el subdirectorio Compartir. Escribe sha
y pulsa una vez la tecla Tabulador:
$ cd sha<Tab>
El intérprete de comandos completa el nombre del directorio por ti:
$ cd share/
Este práctico atajo se llama completar tabulación. Funciona inmediatamente cuando el texto que has escrito coincide con un único nombre de directorio. Cuando el texto coincide con varios nombres de directorio, tu shell necesita más información para completar el nombre deseado. Supongamos que sólo has escrito s
y has pulsado Tabulador:
$ cd s<Tab>
El intérprete de comandos no puede completar el nombre compartir (todavía) porque otros nombres de directorio también empiezan por s
: sbin y src. Pulsa Tabulador una segunda vez y el intérprete de comandos imprimirá todas las terminaciones posibles para guiarte:
$ cd s<Tab><Tab> sbin/ share/ src/
y espera tu próxima acción. Para resolver la ambigüedad, escribe otro carácter, h
, y pulsa Tab una vez:
$ cd sh<Tab>
El intérprete de comandos completa el nombre del directorio por ti, de sh a compartir:
$ cd share/
En general, pulsa Tabulador una vez para realizar la mayor compleción posible, o pulsa dos veces para imprimir todas las compleciones posibles. Cuantos más caracteres escribas, menos ambigüedad y mejor será la coincidencia.
El tabulador es estupendo para acelerar la navegación. En lugar de escribir una ruta larga como /home/smith/Proyectos/Web/src/include, escribe tan poco como quieras y mantén pulsada la tecla Tabulador. Le cogerás el truco rápidamente con la práctica.
Pestaña Finalización Varía según el Programa
El tabulador no es sólo para los comandos de cd
. Funciona para la mayoría de los comandos, aunque su comportamiento puede diferir. Cuando el comando escd
, la tecla Tab completa los nombres de directorio. Para otros comandos que operan sobre archivos, como cat
, grep
, y sort
, el completado con tabulador también expande los nombres de archivo. Si el comando es ssh
(shell seguro), completa los nombres de host. Si el comando es chown
(cambiar el propietario de un archivo), completa los nombres de usuario. Incluso puedes crear tus propias reglas de completado para mayor rapidez, como veremos en el Ejemplo 4-1. Consulta también man bash
y lee su tema "Finalización programable".
Salta a directorios visitados con frecuencia utilizando alias o variables
Si visitas con frecuencia un directorio lejano, como/home/smith/Trabajo/Proyectos/Web/src/include, crea un alias que realice la operación cd
:
# In a shell configuration file:
alias
work
=
"cd
$HOME
/Work/Projects/Web/src/include"
Sólo tienes que ejecutar el alias en cualquier momento para llegar a tu destino:
$ work $ pwd /home/smith/Work/Projects/Web/src/include
También puedes crear una variable que contenga la ruta del directorio:
$ work=$HOME/Work/Projects/Web/src/include $ cd $work $ pwd /home/smith/Work/Projects/Web/src/include $ ls $work/css Use the variable in other ways main.css mobile.css
Editar archivos editados frecuentemente con un alias
A veces, la razón para visitar un directorio con frecuencia es editar un archivo concreto. Si ese es el caso, considera la posibilidad de definir un alias para editar ese archivo por la ruta absoluta sin cambiar de directorio. La siguiente definición de alias te permite editar $HOME/.bashrc, sin importar en qué parte del sistema de archivos te encuentres, ejecutando rcedit
. No se necesita cd
:
# Place in a shell configuration file and source it:
alias
rcedit
=
'$EDITOR $HOME/.bashrc'
Si visitas regularmente muchos directorios con rutas largas, puedes crear alias o variables para cada uno de ellos. Sin embargo, este enfoque tiene algunas desventajas:
-
Es difícil recordar todos esos alias/variables.
-
Podrías crear accidentalmente un alias con el mismo nombre que un comando existente, provocando un conflicto.
Una alternativa es crear una función shell como la que aparece enEjemplo 4-1, a la que he llamado qcd
("cd rápido"). Esta función acepta una clave de cadena como argumento, como work
o recipes
, y ejecutacd
hacia una ruta de directorio seleccionada.
Ejemplo 4-1. Una función para cd
-ing a directorios lejanos
# Define the qcd function
qcd
()
{
# Accept 1 argument that's a string key, and perform a different
# "cd" operation for each key.
case
"
$1
"
in
work
)
cd
$HOME
/Work/Projects/Web/src/include
;;
recipes
)
cd
$HOME
/Family/Cooking/Recipes
;;
video
)
cd
/data/Arts/Video/Collection
;;
beatles
)
cd
$HOME
/Music/mp3/Artists/B/Beatles
;;
*
)
# The supplied argument was not one of the supported keys
echo
"qcd: unknown key '
$1
'"
return
1
;;
esac
# Helpfully print the current directory name to indicate where you are
pwd
}
# Set up tab completion
complete
-W
"work recipes video beatles"
qcd
Guarda la función en un archivo de configuración del intérprete de comandos, como$HOME/.bashrc (consulta "Entornos y archivos de inicialización, la versión abreviada"), obtén el código fuente y estará lista para ejecutarse. Escribe qcd
seguido de una de las teclas admitidas para visitar rápidamente el directorio asociado:
$ qcd beatles /home/smith/Music/mp3/Artists/B/Beatles
Como extra, la línea final del script ejecuta el comando complete
, un shell builtin que configura el completado de tabulador personalizado para qcd
, de modo que completa las cuatro teclas admitidas. Ahora ya no tienes que recordar los argumentos deqcd
. Sólo tienes que escribir qcd
seguido de un espacio y pulsar dos veces la tecla Tabulador, y el intérprete de comandos imprimirá todas las teclas para tu referencia, y podrás completar cualquiera de ellas de la forma habitual:
$ qcd <Tab><Tab> beatles recipes video work $ qcd v<Tab><Enter> Completes 'v' to 'video' /data/Arts/Video/Collection
Haz que un sistema de archivos grande parezca más pequeño con CDPATH
La función qcd
sólo maneja los directorios que especifiques. El shell proporciona una solución más general cd
-ing sin este inconveniente, denominada ruta de búsqueda cd. Esta función del shell transformó mi forma de navegar por el sistema de archivos de Linux.
Supón que tienes un subdirectorio importante que visitas a menudo, llamadoFotos. Se encuentra en /home/smith/Family/Memories/Photos. Mientras navegas por el sistema de archivos, siempre que quieras llegar al directorioFotos, tendrás que escribir una ruta larga, como por ejemplo
$ cd ~/Family/Memories/Photos
¿No sería estupendo que pudieras acortar esta ruta a sólo Fotos, sin importar en qué parte del sistema de archivos te encuentres, y llegar a tu subdirectorio?
$ cd Photos
Normalmente, este comando fallaría:
bash: cd: Photos: No such file or directory
a menos que por casualidad te encuentres en el directorio principal correcto(~/Familia/Memorias) o en algún otro directorio con un subdirectorio Fotos. Pues bien, con una pequeña configuración, puedes ordenar a cd
que busque tu subdirectorio Fotos en ubicaciones distintas de tu directorio actual. La búsqueda es rapidísima y sólo busca en los directorios padre que especifiques. Por ejemplo, puedes indicar a cd
que busque en $HOME/Familia/Memorias además de en el directorio actual. Entonces, cuando escribas cd Photos
desde cualquier otro lugar del sistema de archivos, cd
tendrá éxito:
$ pwd /etc $ cd Photos /home/smith/Family/Memories/Photos
Una ruta de búsqueda cd funciona como tu ruta de búsqueda de comandos, $PATH
, pero en lugar de encontrar comandos, encuentra subdirectorios. Configúrala con la variable de shell CDPATH
, que tiene el mismo formato que PATH
: una lista de directorios separados por dos puntos. Si tu CDPATH
consta de estos cuatro directorios, por ejemplo:
$HOME:$HOME/Projects:$HOME/Family/Memories:/usr/local
y tecleas:
$ cd Photos
entonces cd
comprobará la existencia de los siguientes directorios en orden, hasta que encuentre uno o falle por completo:
-
Fotos en el directorio actual
-
$HOME/Fotos
-
$HOME/Proyectos/Fotos
-
$HOME/Familia/Memorias/Fotos
-
/usr/local/Fotos
En este caso, cd
tiene éxito en su cuarto intento y cambia el directorio a$HOME/Familia/Memorias/Fotos. Si dos directorios de $CDPATH
tienen un subdirectorio llamado Fotos, gana el anterior.
Nota
Normalmente, un cd
correcto no imprime ninguna salida. Sin embargo, cuando cd
localiza un directorio utilizando tu CDPATH
, imprime la ruta absoluta en stdout para informarte de tu nuevo directorio actual:
$ CDPATH=/usr Set a CDPATH $ cd /tmp No output: CDPATH wasn't consulted $ cd bin cd consults CDPATH... /usr/bin ...and prints the new working directory
Llena CDPATH
con tus directorios padre más importantes o utilizados con frecuencia, y podrás cd
en cualquiera de sus subdirectorios desde cualquier lugar del sistema de archivos, sin importar su profundidad, sin tener que escribir la mayor parte de la ruta. Créeme, esto es increíble, y el siguiente caso práctico debería demostrarlo.
Organiza tu directorio de inicio para una navegación rápida
Utilicemos CDPATH
para simplificar la forma en que navegas por tu directorio personal. Con un poco de configuración, puedes hacer que muchos directorios de tu directorio personal sean fácilmente accesibles con un tecleo mínimo, sin importar en qué parte del sistema de archivos te encuentres. Esta técnica funciona mejor si tu directorio raíz está bien organizado, con al menos dos niveles de subdirectorios. La Figura 4-1 muestra un ejemplo de una disposición de directorios bien organizada.
El truco está en configurar tu CDPATH
para que incluya, por orden:
-
$HOME
-
Los subdirectorios de
$HOME
-
La ruta relativa de un directorio padre, indicada por dos puntos (
..
)
Incluyendo $HOME
, puedes saltar inmediatamente a cualquiera de sus subdirectorios(Familia, Finanzas, Linux, Música y Trabajo) desde cualquier otro lugar del sistema de archivos sin escribir una ruta inicial:
$ pwd /etc Begin outside your home directory $ cd Work /home/smith/Work $ cd Family/School You jumped 1 level below $HOME /home/smith/Family/School
Incluyendo subdirectorios de $HOME
en tu CDPATH
, puedes saltar asussubdirectorios de una sola vez:
$ pwd /etc Anywhere outside your home directory $ cd School /home/smith/Family/School You jumped 2 levels below $HOME
Todos los directorios de tu CDPATH
hasta ahora son rutas absolutas en$HOME
y sus subdirectorios. Sin embargo, al incluir la ruta relativa..
, potencias el nuevo comportamiento de cd
en cada directorio. No importa en qué parte del sistema de archivos te encuentres, puedes saltar a cualquier directoriohermano(../sibling
) por su nombre sin escribir los dos puntos, porque cd
buscará en su padre actual. Por ejemplo, si estás en/usr/bin y quieres ir a /usr/lib, todo lo que necesitas es cd lib
:
$ pwd /usr/bin Your current directory $ ls .. bin include lib src Your siblings $ cd lib /usr/lib You jumped to a sibling
O, si eres un programador que trabaja con código que tiene subdirectoriossrc, include y docs:
$ pwd /usr/src/myproject $ ls docs include src
puedes saltar entre los subdirectorios de forma concisa:
$ cd docs Change your current directory $ cd include /usr/src/myproject/include You jumped to a sibling $ cd src /usr/src/myproject/src Again
Un CDPATH
para el árbol de la Figura 4-1 podría contener seis elementos: tu directorio personal, cuatro de sus subdirectorios y la ruta relativa de un directorio padre:
# Place in a shell configuration file and source it:
export
CDPATH
=
$HOME
:$HOME
/Work:$HOME
/Family:$HOME
/Linux:$HOME
/Music:..
Después de crear el archivo de configuración, puedes acceder a cd
a un gran número de directorios importantes sin tener que escribir largas rutas de directorios, sólo nombres cortos de directorios. ¡Hurra!
Esta técnica funciona mejor si todos los subdirectorios bajo los directoriosCDPATH
tienen nombres únicos. Si tienen nombres duplicados, como $HOME/Música y $HOME/Linux/Música, es posible que no obtengas el comportamiento que deseas. El comando cd Music
siempre comprobará $HOMEantes que $HOME/Linux y, en consecuencia, no localizará$HOME/Linux/Music mediante la búsqueda.
Para comprobar si hay nombres de subdirectorios duplicados en los dos primeros niveles de$HOME
, prueba este descarado one-liner. Enumera todos los subdirectorios y subsubdirectorios de $HOME
, aísla los nombres de los subsubdirectorios con cut
, ordena la lista y cuenta las apariciones con uniq
:
$ cd $ (ls -d */ && ls -d */*/ | cut -d/ -f2-) | sort | uniq -c | sort -nr | less
Puede que reconozcas esta técnica de comprobación de duplicados de"Detectar archivos duplicados". Si la salida muestra algún recuento superior a 1, tienes duplicados. Me doy cuenta de que este comando incluye algunas funciones que aún no he cubierto. Aprenderás el doble ampersand (&&
) en " Técnica nº 1: Listas condicionales"y los paréntesisen "Técnica nº 10: Subconjuntos explícitos".
Volver a los directorios con eficacia
Acabas de ver cómo visitar un directorio de forma eficaz. Ahora te mostraré cómo volver a visitar un directorio rápidamente cuando necesites volver atrás.
Alternar entre dos directorios con "cd -"
Supón que estás trabajando en un directorio profundo y ejecutas cd
para ir a otro sitio:
$ pwd /home/smith/Finances/Bank/Checking/Statements $ cd /etc
y luego piensa: "No, espera, quiero volver al directorio de Declaracionesdonde acabo de estar". No vuelvas a escribir la ruta larga del directorio. Simplemente ejecuta cd
con un guión como argumento:
$ cd - /home/smith/Finances/Bank/Checking/Statements
Este comando devuelve tu intérprete de comandos a su directorio anterior e imprime su ruta absoluta para que sepas dónde estás.
Para saltar adelante y atrás entre un par de directorios, ejecuta repetidamente cd -
. Esto es un ahorro de tiempo cuando estás haciendo trabajo concentrado en dos directorios en un solo intérprete de comandos. Sin embargo, hay un inconveniente: el intérprete de comandos sólo recuerda un directorio anterior cada vez. Por ejemplo, si estás alternando entre /usr/local/bin y /etc:
$ pwd /usr/local/bin $ cd /etc The shell remembers /usr/local/bin $ cd - The shell remembers /etc /usr/local/bin $ cd - The shell remembers /usr/local/bin /etc
y ejecutas cd
sin argumentos para saltar a tu directorio personal:
$ cd The shell remembers /etc
el intérprete de comandos ha olvidado ahora /usr/local/bin como directorio anterior:
$ cd - The shell remembers your home directory /etc $ cd - The shell remembers /etc /home/smith
La siguiente técnica supera esta limitación.
Alternar entre varios directorios con pushd y popd
El comando cd -
alterna entre dos directorios, pero ¿qué ocurre si tienes que controlar tres o más? Supón que estás creando un sitio web local en tu ordenador Linux. Esta tarea suele implicar cuatro o más directorios:
-
La ubicación de las páginas web activas e implementadas, como /var/www/html
-
El directorio de configuración del servidor web, a menudo /etc/apache2
-
La ubicación de los certificados SSL, a menudo /etc/ssl/certs
-
Tu directorio de trabajo, como ~/Work/Projects/Web/src
Créeme, es tedioso seguir tecleando:
$ cd ~/Work/Projects/Web/src $ cd /var/www/html $ cd /etc/apache2 $ cd ~/Work/Projects/Web/src $ cd /etc/ssl/certs
Si tienes una pantalla grande con ventanas, puedes aliviar la carga abriendo una ventana de shell distinta para cada directorio. Pero si estás trabajando en un único shell (por ejemplo, a través de una conexión SSH ), aprovecha una función del shell llamada pila de directorios. Te permite desplazarte rápidamente entre varios directorios con facilidad, utilizando los comandos de shell incorporados pushd
, popd
, y dirs
. La curva de aprendizaje es de unos 15 minutos, y el enorme beneficio en velocidad dura toda la vida.2
Una pila de directorios es una lista de directorios que has visitado en el shell actual y de los que has decidido hacer un seguimiento. Manipulas la pila realizando dos operaciones llamadas empujar y saltar. Empujar un directorio lo añade al principio de la lista, lo que tradicionalmente se llama la parte superior de la pila. Desplegar elimina el directorio más alto de la pila.3 Inicialmente, la pila sólo contiene tu directorio actual, pero puedes añadir (push) y eliminar (pop) directorios y rápidamente cd
entre ellos.
Nota
Cada shell en ejecución mantiene su propia pila de directorios.
Empezaré con las operaciones básicas (empujar, reventar, ver) y luego llegaré a lo bueno.
Introduce un directorio en la pila
El comando pushd
(abreviatura de "empujar directorio") hace todo lo siguiente:
-
Añade un directorio dado a la parte superior de la pila
-
Realiza un
cd
a ese directorio -
Imprime la pila de arriba abajo para tu referencia
Construiré una pila de directorios de cuatro directorios, introduciéndolos en la pila de uno en uno:
$ pwd /home/smith/Work/Projects/Web/src $ pushd /var/www/html /var/www/html ~/Work/Projects/Web/src $ pushd /etc/apache2 /etc/apache2 /var/www/html ~/Work/Projects/Web/src $ pushd /etc/ssl/certs /etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src $ pwd /etc/ssl/certs
El shell imprime la pila después de cada operación pushd
. El directorio actual es el directorio situado más a la izquierda (arriba).
Ver una pila de directorios
Imprime la pila de directorios de una shell con el comando dirs
. No modifica la pila:
$ dirs /etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src
Si prefieres imprimir la pila de arriba abajo, utiliza la opción -p
:
$ dirs -p /etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src
e incluso canalizar la salida al comando nl
para numerar las líneas de cero en adelante:
$ dirs -p | nl -v0 0 /etc/ssl/certs 1 /etc/apache2 2 /var/www/html 3 ~/Work/Projects/Web/src
Aún más sencillo, ejecuta dirs -v
para imprimir la pila con líneas numeradas:
$ dirs -v 0 /etc/ssl/certs 1 /etc/apache2 2 /var/www/html 3 ~/Work/Projects/Web/src
Si prefieres este formato descendente, considera la posibilidad de crear un alias:
# Place in a shell configuration file and source it:
alias
dirs
=
'dirs -v'
Hacer saltar un directorio de la pila
El comando popd
("directorio pop") es el inverso de pushd
. Hace todo losiguiente:
-
Elimina un directorio de la parte superior de la pila
-
Realiza un
cd
al nuevo directorio superior -
Imprime la pila de arriba abajo para tu referencia
Por ejemplo, si tu pila tiene cuatro directorios:
$ dirs /etc/ssl/certs /etc/apache2 /var/www/html ~/Work/Projects/Web/src
entonces, si ejecutas repetidamente popd
, recorrerás estos directorios de arriba abajo:
$ popd /etc/apache2 /var/www/html ~/Work/Projects/Web/src $ popd /var/www/html ~/Work/Projects/Web/src $ popd ~/Work/Projects/Web/src $ popd bash: popd: directory stack empty $ pwd ~/Work/Projects/Web/src
Intercambiar directorios en la pila
Ahora que ya puedes construir y vaciar la pila de directorios, centrémonos en casos prácticos de uso. pushd
sin argumentos intercambia los dos directorios superiores de la pila ynavega hasta el nuevo directorio superior. Saltemos entre /etc/apache2 y tu directorio de trabajo varias veces simplemente ejecutando pushd
. Observa cómo el tercer directorio /var/www/htmlpermanece en la pila mientras los dos primeros directorios intercambian posiciones:
$ dirs /etc/apache2 ~/Work/Projects/Web/src /var/www/html $ pushd ~/Work/Projects/Web/src /etc/apache2 /var/www/html $ pushd /etc/apache2 ~/Work/Projects/Web/src /var/www/html $ pushd ~/Work/Projects/Web/src /etc/apache2 /var/www/html
Observa que pushd
se comporta de forma similar al comando cd -
, alternando entre dos directorios, pero no tiene la limitación de recordar sólo un directorio.
Convierte un cd equivocado en un pushd
Supón que estás saltando entre varios directorios con pushd
y accidentalmente ejecutas cd
en su lugar y pierdes un directorio:
$ dirs ~/Work/Projects/Web/src /var/www/html /etc/apache2 $ cd /etc/ssl/certs $ dirs /etc/ssl/certs /var/www/html /etc/apache2
Uy, el comando accidental cd
sustituyó ~/Work/Projects/Web/srcen la pila por /etc/ssl/certs. Pero no te preocupes. Puedes volver a añadir el directorio que falta a la pila sin escribir su ruta larga. Sólo tienes que ejecutar pushd
dos veces, una con el argumento guión y otra sin él:
$ pushd - ~/Work/Projects/Web/src /etc/ssl/certs /var/www/html /etc/apache2 $ pushd /etc/ssl/certs ~/Work/Projects/Web/src /var/www/html /etc/apache2
Analicemos por qué funciona:
-
El primer
pushd
vuelve al directorio anterior de tu shell,~/Trabajo/Proyectos/Web/src, y lo empuja a la pila.pushd
, al igual quecd
, acepta un guión como argumento para significar "volver a mi directorio anterior". -
El segundo comando
pushd
intercambia los dos directorios superiores, devolviéndote a /etc/ssl/certs. El resultado final es que has restaurado~/Trabajo/Proyectos/Web/src a la segunda posición en la pila, exactamente donde habría estado si no hubieras cometido tu error.
Este comando "ups, olvidé un pushd" es lo suficientemente útil como para que merezca un alias. Yo lo llamo slurp
porque en mi mente, "sorbe de vuelta" un directorio que perdí por error:
# Place in a shell configuration file and source it:
alias
slurp
=
'pushd - && pushd'
Profundiza en la pila
¿Y si quieres cd
entre directorios de la pila distintos de los dos primeros? pushd
y popd
aceptan un argumento entero positivo o negativo para operar más adentro en la pila. El comando
$ pushd +N
desplaza N
los directorios de la parte superior de la pila a la parte inferior y, a continuación, realiza un cd
al nuevo directorio superior. Un argumento negativo (-N
) desplaza los directorios en sentido contrario, de abajo a arriba, antes de realizar el cd
.4
$ dirs /etc/ssl/certs ~/Work/Projects/Web/src /var/www/html /etc/apache2 $ pushd +1 ~/Work/Projects/Web/src /var/www/html /etc/apache2 /etc/ssl/certs $ pushd +2 /etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src /var/www/html
De esta forma, puedes saltar a cualquier otro directorio de la pila con un simple comando. Sin embargo, si tu pila es larga, puede resultar difícil juzgar a simple vista la posición numérica de un directorio. Entonces, imprime la posición numérica de cada directorio con dirs -v
, como hiciste en"Visualizar una pila de directorios":
$ dirs -v 0 /etc/apache2 1 /etc/ssl/certs 2 ~/Work/Projects/Web/src 3 /var/www/html
Para desplazar /var/www/html a la parte superior de la pila (y convertirlo en tu directorio actual), ejecuta pushd +3
.
Para saltar al directorio situado en la parte inferior de la pila, ejecuta pushd -0
(guión cero):
$ dirs /etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src /var/www/html $ pushd -0 /var/www/html /etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src
También puedes eliminar directorios de la pila más allá del directorio superior, utilizando popd
con un argumento numérico. El comando:
$ popd +N
elimina el directorio en la posición N de la pila, contando hacia abajo desde la parte superior. Un argumento negativo (-N
) cuenta hacia arriba desde la parte inferior de la pila. La cuenta empieza en cero, por lo que popd +1
elimina el segundo directorio desde arriba:
$ dirs /var/www/html /etc/apache2 /etc/ssl/certs ~/Work/Projects/Web/src $ popd +1 /var/www/html /etc/ssl/certs ~/Work/Projects/Web/src $ popd +2 /var/www/html /etc/ssl/certs
Resumen
Todas las técnicas de este capítulo son fáciles de comprender con un poco de práctica y te ahorrarán mucho tiempo y mecanografía. Las técnicas que me han cambiado especialmente la vida son:
-
CDPATH
para una navegación rápida -
pushd
ypopd
para rendimientos rápidos -
El comando ocasional
cd -
1 Me lo he inventado, pero seguro que es verdad.
2 Una alternativa es abrir varias pantallas virtuales utilizando programas de línea de comandos como screen
y tmux
, que se llaman multiplexores de terminal. Son más difíciles de aprender que las pilas de directorios, pero merece la pena echarles un vistazo.
3 Si conoces las pilas de informática, una pila de directorios es precisamente una pila de nombres de directorio.
4 Los programadores pueden reconocer estas operaciones como girar la pila.
Get Linux eficiente en la línea de comandos now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.