Navegar entre archivos

Este es uno de los capítulos del tutorial El terminal. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

El capítulo anterior del tutorial pudiste ver que era eso de la línea de comandos. En este capítulo vas a dar un paso mas allá, vas a comenzar a navegar entre archivos. Empezando por saber donde te encuentras, para terminar desplazándote y moviéndote a lo largo de todo tu sistema de archivos, solo con tus dedos sin necesidad de recurrir al ratón en ningún momento.

Además de los comandos básicos que se utilizan para navegar entre archivos, he incluido algunos adicionales, que te permitirán o bien, mejorar tu experiencia en la navegación, o bien hacerlo de otra forma, o bien que te aporta mas información.

Navegar en el terminal

Navegar entre archivos

Nota del capítulo

En este artículo, solo nos vamos a desplazar entre los diferentes directorios con lo que no es necesario que utilices docker. Sin embargo, a la hora de probar algunas aplicaciones que indico, tendrás que instalarlas, con lo que si no tienes claro, lo que estás haciendo, no dudes en recurrir a docker para evitarte inseguridad.

Recuerda que para iniciar el contenedor, deberás ejecutar,

docker container start <nombre-del-contendor>

Y luego vamos al terminal,

docker exec -it <nombre-del-contenedor> /bin/bash

echo

Antes de meterte en faena necesitas conocer un comando que utilizarás en mas de una ocasión. Se trata de echo. Este es uno de los comandos mas ampliamente utilizados, sobre todo en scripts. Este comando nos permite mostrar texto directamente en el terminal. Algunos ejemplos para que conozcas su uso,

  • echo hola nos mostrará hola
  • Ahora introducimos una variable, para ello, ejecutaremos lo siguiente
nombre=Lorenzo
echo Hola $nombre

Esto nos mostrará Hola Lorenzo

¿Quienes somos?

Si, ya se que sabes quien eres 🤔. Sin embargo, en el terminal, puedes estar utilizando un usuario u otro, dependiendo de lo que estés haciendo. No quiero adelantarme en este aspecto, pero, si que te interesa recordar este comando whoami. De esta manera sabrás el usuario que utilizas.

Así, por ejemplo en mi caso, si utilizo whoami en un terminal cualquiera me mostrará lorenzo. Sin embargo, si lo hago en el contenedor, lo que dice es que siy root.

Otra opción es utilizar echo $USER. Sin embargo, no siempre te devolverá el usuario. Depende de lo que esté configurado en el shell. Así, para conocer las variables definidas, puedes utilizar printenv.

En este caso, para un shell de mi equipo al ejecutar echo $USER, mostrará lorenzo. Mientras que si esto mismo lo hacemos en nuestro contenedor docker, no nos devolverá nada.

¿Donde estamos?

Ahora que ya sabes quien eres 😉, lo siguiente que querrás saber es donde estás.

  • Con pwd podrás ver en que directorio te encuentras. Igual que en el caso de nuestro usuario, también podemos utilizar echo $PWD para conocer el directorio en el que nos encontramos. Aquí hay que hacer una pequeña matización, si utilizamos pwd -L nos mostrará el directorio actual con enlaces simbólicos, mientras que si utilizamos pwd -P nos mostrará la dirección real.
  • uname -a. Por supuesto, no podemos quedarnos en saber donde nos encontramos. También nos interesa saber el sistema operativo y la arquictura que utilizamos. Para esto, tendremos que ejecutar uname -a. En mi caso me devuelve lo siguiente,
Linux xps13 4.18.0-13-generic #14-Ubuntu SMP Wed Dec 5 09:04:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  • lsb_release -a. Este comando nos da información relativa a la distribución que estamos utilizando. De nuevo, en mi caso, el resultado de ejecutar este comando, es el siguiente,
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 18.10
Release:    18.10
Codename:    cosmic

Es posible que te estés preguntando que es eso de los enlaces simbólicos. No es mas que una etiqueta, una forma de llamar a un directorio o un archivo. Con un enlace simbólico podemos tener un acceso rápido a un directorio o archivo que se encuentra en otro lugar de nuestro equipo.

Por otro lado, en la línea de comandos, tal y como vimos en el capítulo anterior, verás algo como esto root@7b69de258bbc:/usr/local/lib#. Con est ya sabes tanto quien eres root, como donde te encuentras /usr/local/lib. Entonces ¿para que estos comandos?. Hay dos razones. Por un lado, esto depende de la configuración establecida. Es posible que no muestre ningún tipo de información. Por otro lado si estamos haciendo un script, no vemos la línea de comandos.

¿Que hay por aquí?

Ahora ya sabes quien eres y donde te encuentras, pero ¿Que es lo que hay donde estás?. Para poder navegar entre archivos, es necesario conocer no solo donde te encuentras, sino también que otros directorios hay, para poder navegar o moverte por ellos.

  • ls. Este primer comando nos muestra el contenido del directorio en el que nos encontramos. Es necesario conocer las opciones de ls, porque depende de lo que indiquemos nos mostrará un resultado u otro. Algunas de las opciones básicas sería,
    • ls -a te muestra los archivos ocultos
    • ls -l imprimirá el resultado con un formato largo, dando todo tipo de información.
    • ls -h los tamaños de los archivos aparecerán en formato legible.
  • tree. Esta herramienta no viene instalada por defecto en tu distribución, con lo que para poder utilizarla necesitarás instalarla. Para instalarlo,
sudo apt update
sudo apt install tree

Así por ejemplo, si ejecutamos tree -L 1 -d para que solo nos muestre el primer nivel de sub directorios, nos mostrará algo como lo que ves a continuación,

root@7b69de258bbc:/usr# tree -L 1
.
|-- bin
|-- games
|-- include
|-- lib
|-- local
|-- sbin
|-- share
`-- src

8 directories, 0 files

La ventaja de utilizar tree es que te da una visión gráfica de tu arbol de directorios.

  • df es una herramienta que te muestra información del sistema de archivos. Para que no se muestren algunos tipos de sistemas de archivos tienes que utilizar la opción -x. Así, por ejemplo, para que no muestre todos los sistemas de archivos que generan los paquetes snap, nuestra opción sería -x squashfs. Así, por ejemplo, en mi caso la ejecución de df me muestra la siguiente información,
$ df -x tmpfs -x squashfs

S.ficheros     bloques de 1K    Usados Disponibles Uso% Montado en
udev                 4012860         0     4012860   0% /dev
/dev/sda2           50132760  41805996     5750420  88% /
/dev/sda1             632532      8812      623720   2% /boot/efi
/dev/sda7          161374080 137756012    15391260  90% /datos
  • du. Esta utilidad te servirá sobre todo para conocer el uso de espacio de disco. Indicarte que tiene gran número de opciones, con lo que tendrás que utilizar la ayuda para seleccionar las que consideras mas importantes. Así, por ejemplo du -chd 1 te mostrará el primer nivel de directorios, -d 1, en formato legible -h y el espacio total ocupado -c. Así, en mi caso, muestra el siguiente resultado para /usr,
$ du -chd 1

8,0K    ./games
4,8G    ./lib
24M    ./libx32
24M    ./lib32
43M    ./include
22M    ./sbin
2,8G    ./share
165M    ./local
1,5M    ./libexec
395M    ./src
832M    ./bin
9,0G    .
9,0G    total

Indicarte que la estructura de directorios en Linux es mas o menos fija. Me refiero a que es mas o menos fija, a que puede cambiar ligeramente con la distribución que utilices. De esta manera, en mi caso es el siguiente,

root@7b69de258bbc:/# tree -L 2 -d
.
|-- bin
|-- boot
|-- dev
|-- etc
|   |-- apt
|   |-- cron.daily
|   |-- cron.weekly
|   |-- dpkg
|   |-- init.d
|   |-- kernel
|   |-- systemd
|   `-- update-motd.d
|-- home
|   `-- lorenzo
|-- lib
|   |-- init
|   |-- lsb
|   |-- systemd
|   |-- terminfo
|   |-- udev
|   `-- x86_64-linux-gnu
|-- lib64
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin
|-- srv
|-- sys
|   |-- bus
|   |-- class
|   |-- dev
|   |-- devices
|   |-- firmware
|   |-- fs
|   |-- hypervisor
|   |-- kernel
|   |-- module
|   `-- power
|-- tmp
|-- usr
|   |-- bin
|   |-- games
|   |-- include
|   |-- lib
|   |-- local
|   |-- sbin
|   |-- share
|   `-- src
`-- var
    |-- backups
    |-- cache
    |-- lib
    |-- local
    |-- lock -> /run/lock
    |-- log
    |-- mail
    |-- opt
    |-- run -> /run
    |-- spool
    `-- tmp

No aparecen todos los directorios, porque he eliminado algunos de ellos, dejando los que me han parecido mas relevantes.

Con toda seguridad, tarde o temprano, tendrás que recurrir a uno de ellos, con lo que te recomiendo que tengas en mente, como puedes ver el arbol de archivos.

Navegar entre archivos

Ahora que ya sabes donde estás y su contenido, es muy probable que quieras cambiar de directorio. Moverte o navegar a un directorio superior o inferior. Para ello tienes la herramienta cd. Esta herramienta te permite cambiar el directorio de trabajo en el que te encuentras. Pero además tiene algunas llamadas interesantes. Por ejemplo,

  • cd y cd ~ te llevarán a tu directorio home.
  • cd . te mantiene en el directorio en el que te encuentras
  • cd .. este te llevará al directorio inmediatamente superior, si es que hay directorio superior, claro.
  • cd - te lleva al directorio en el que te encontrabas anteriormente.
  • cd / por supuesto, te lleva al directorio raiz.
  • bd es una herramienta que nos ayuda a desplazarnos a un directorio superior de forma sencilla. Así por ejemplo, si nos encontramos en /dir1/dir2/dir3/dir4/dir5/dir6 y queremos movernos a dir3, podemos o bien ejecutar cd ../../../ o bien bd dir3. Está clara la ventaja. Esta herramienta no se encuentra instalada por defecto. Para instalar esta utilidad, simplemente ejecuta sudo apt install bd.

El historial de comandos

Lo normal cuando estás utilizando el terminal, es que repitas órdenes ejecutadas con anterioridad. Algunas son sencillas, y las tienes muy interiorizadas. Sin embargo, en ocasiones utilizas alguna herramienta que tiene multitud de opciones y que te resultará difícil de recordar, sobre todo si nos las utilizas con frecuencia.

Para soslayar este problema, puedes recurrir al historial. Y es que cada una de las órdenes que ejecutas en el terminal se guarda en un registro. De esta forma, recuperar una orden anterior, es tan sencillo como o bien utilizar algún atajo, o bien consultar directamente este registro, consultar el historial.

  • ó Ctrl+P. Te permite desplazarte entre las órdenes ejecutadas anteriormente.
  • ó Ctrl+N. Este segundo atajo es justo el opuesto al anterior, pues te permite desplazarte hacia delante en el historial. Siempre que no hayas llegado al final.
  • Ctrl+R. Te permite realizar una búsqueda de las órdenes que has ejecutado. Se trata de una búsqueda inversa, es decir, de las últimas ejecutadas hacia las primeras.
  • history. Si ejecutas history verás un listado de todas las órdenes que has ejecutado. Cada una de las órdenes ejecutadas está precedida por un número. Este número te permite acceder a estas órdenes, para que de esta forma te evites volver a escribir la orden en cuestión. Es una forma sencilla de navegar por el historial de órdenes ejecutadas. Así,
    • !n se refiere a la orden n. De esta forma, si, por ejemplo, escribes en el terminal !123 ejecutrá la orden número 123.
    • Si ejecutas !-n ejecutará la orden número n contando desde el final.
  • tab. Este atajo, realmente no pertenece al historial, pero seguro te será de mucha ayuda, pues te permite autocompletar las órdenes que estás escribiendo en el mismo. De esta manera si escribe hist y pulsas la tecla tab, se completará la orden hasta history.

Más información,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *