2.3 Lección 2
Certificación: |
Linux Essentials |
---|---|
Versión: |
1.6 |
Tema: |
2 Encontrando tu camino en el sistema Linux |
Objectivo: |
2.3 Usando directorios y listando archivos |
Lección: |
2 de 2 |
Introducción
El sistema operativo Unix se diseñó originalmente para computadoras mainframe a mediados de la década de 1960. Estas computadoras fueron compartidas entre muchos usuarios quienes accedieron a los recursos del sistema a través de terminales. Estas ideas se transmiten hoy en día a los sistemas Linux donde todavía se habla sobre el uso de “terminales” para ingresar comandos en el shell y donde cada sistema Linux está organizado de tal manera que es fácil crear varios usuarios en un solo sistema.
Directorios principales
Este es un ejemplo de un sistema de archivos normal en Linux:
$ tree -L 1 / / ├── bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
La mayoría de estos directorios son consistentes en todos los sistemas Linux desde pequeños sistemas embebidos, servidores y hasta supercomputadoras. Un usuario experimentado de Linux puede estar seguro de que puede encontrar el comando ls
dentro de /bin
, puede cambiar la configuración del sistema modificando archivos en /etc
, y leer los registros del sistema /var
. La ubicación de estos archivos y directorios está definido por el Estándar de jerarquía del sistema de archivos (FHS), el cual se discutirá en una lección posterior. Aprenderá más sobre el contenido de estos directorios a medida que continúe aprendiendo más sobre Linux, pero por el momento, sepa que:
-
Los cambios que realice en el sistema de archivos raíz afectarán a todos los usuarios.
-
Cambiar archivos en el sistema de archivos raíz requerirá permisos de administrador.
Esto significa que los usuarios normales tendrán prohibido modificar estos archivos, y también se les puede prohibir incluso leerlos. Cubriremos el tema de los permisos en una sección posterior.
Ahora, nos centraremos en el directorio /home
que debería ser algo familiar en este punto:
$ tree -L 1 /home /home ├── user ├── michael └── lara
En el ejemplo nuestro sistema tiene tres usuarios normales y cada uno tiene su propia ubicación donde pueden crear y modificar archivos y directorios sin afectar a su vecino. Por ejemplo, en la lección anterior estábamos trabajando con la siguiente estructura de archivos:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt
En realidad, el sistema de archivos real puede verse así:
$ tree /home /home ├── user │ └── Documents │ ├── Mission-Statement │ └── Reports │ └── report2018.txt ├── michael │ ├── Documents │ │ └── presentation-for-clients.odp │ └── Music
…y así sucesivamente para lara
.
En Linux, /home
es similar a un edificio de departamentos. Muchos usuarios pueden tener su espacio separados en departamentos dedicados. Las utilidades y el mantenimiento del edificio en sí son responsabilidad del superintendente (usuario root).
La ruta relativa especial para home
Cuando inicia una nueva sesión de terminal en Linux, ve un símbolo del sistema similar a este:
user@hostname ~ $
La tilde (~
) aquí representa nuestro directorio home . Si ejecuta el comando ls
verá algunos resultados familiares:
$ cd ~ $ ls Documents
Compare esto con el sistema de archivos anterior para verificar su comprensión.
Considere ahora lo que sabemos sobre Linux: es similar a un edificio de departamentos con muchos usuarios que residen en /home
. Por lo tanto, el home del user
será diferente al home del usuario michael
. Para demostrar esto, usaremos el comando su
para cambiar de usuario.
user@hostname ~ $ pwd /home/user user@hostname ~ $ su - michael Password: michael@hostname ~ $ pwd /home/michael
El significado de ~
cambia dependiendo de quién sea el usuario. Para michael
, la ruta absoluta de ~
es /home/michael
. Para lara
, la ruta absoluta de ~
es /home/lara
, y así sucesivamente.
Rutas relativas a los archivos de inicio (relative-to-home)
Es muy útil usar ~
siempre que no cambie de usuario. Consideraremos el siguiente ejemplo para user
que ha comenzado una nueva sesión:
$ ls Documents $ cd Documents $ ls Mission-Statement Reports $ cd Reports $ ls report2018.txt $ cd ~ $ ls Documents
Tenga en cuenta que los usuarios siempre comenzarán una nueva sesión en su directorio de inicio (home). En este ejemplo, user
ha navegado a su subdirectorio Documents/Reports
y con el comando cd ~
ha regresado a donde comenzó. Puede realizar la misma acción utilizando el comando cd
sin argumentos:
$ cd Documents/Reports $ pwd /home/user/Documents/Reports $ cd $ pwd /home/user
Como último punto a tener en cuenta: podemos especificar los directorios de inicio de otros usuarios especificando el nombre después de la tilde. Por ejemplo:
$ ls ~michael Documents Music
Tenga en cuenta que esto solo funcionará si michael
nos ha dado permiso para ver el contenido de su directorio de inicio.
Consideremos una situación en la que michael
quisiera ver el archivo report2018.txt
en el directorio de inicio de user
. Suponiendo que michael
tiene permiso para hacerlo, puede usar el comando less
.
$ less ~user/Documents/Reports/report2018.txt
Cualquier ruta de archivo que contenga el carácter ~
se llama ruta relative-to-home.
Archivos y directorios ocultos
En la lección anterior, presentamos la opción -a
para el comando ls
. Utilizamos ls -a
para introducir a las rutas relativas especiales: .
y ..
. La opción -a
enumerará todos los archivos y directorios incluidos los ocultos.
$ ls -a ~ . .. .bash_history .bash_logout .bash-profile .bashrc Documents
Los archivos y directorios ocultos siempre comenzarán con un punto (.
). Por defecto, el directorio de inicio(home) de un usuario incluirá muchos archivos ocultos que a menudo se usan para establecer configuraciones específicas del usuario. Estas configuraciones solo deben ser modificadas por un usuario experimentado.
La opción de listado largo (long list)
El comando ls
tiene muchas opciones para cambiar su comportamiento. Revisemos una de las más comunes:
$ ls -l -rw-r--r-- 1 user staff 3606 Jan 13 2017 report2018.txt
El argumento -l
crea un listado largo de detalles (long list). Cada archivo y directorio ocuparán una línea, pero se mostrará información adicional sobre cada uno de ellos.
-rw-r—r--
-
Tipo de archivo y permisos del archivo. Tenga en cuenta que un archivo normal comenzará con guión y un directorio comenzará con
d
. 1
-
Número de enlaces al archivo.
user staff
-
Especifica la propiedad del archivo,
user
es el propietario del archivo el cual también está asociado al grupostaff
. 3606
-
Tamaño del archivo en bytes.
Jan 13 2017
-
Fecha de la última modificación del archivo.
report2018.txt
-
Nombre del archivo.
Temas como propietarios, permisos y enlaces serán cubiertos en secciones futuras. Como puede observar, a menudo el formato de listado largo de ls
es preferible que el predeterminado.
Opciones adicionales del comando ls
A continuación, presentamos algunas de las formas más comunes al usar el comando ls
. Como podrá observar, el usuario puede combinar muchas opciones para obtener el resultado deseado.
ls -lh
-
La combinación de long list con human readable nos dará el tamaño de los archivos con sufijos útiles como
M
para megabytes oK
para kilobytes. ls -d */
-
La opción
-d
enumerará los directorios pero no sus contenidos. La combinación con*/
mostrará solo subdirectorios y ningún archivo. ls -lt
-
Combinar long list con la opción de ordenar por modification time. Los archivos con los cambios más recientes estarán en la parte superior y los archivos con los cambios más antiguos estarán en la parte inferior, pero este orden se puede revertir con:
ls -lrt
-
Combinar long list con sort by (modification) time, combinado con
-r
que invierte el orden. Ahora los archivos con los cambios más recientes se encuentran al final de la lista. Además de ordenar por modification time, los archivos también se pueden ordenar por access time o por status time. ls -lX
-
Combinar long list con la opción de ordenar por file eXtension. Esto agrupará todos los archivos que terminen con
.txt
, todos los que terminen con.jpg
y así sucesivamente. ls -S
-
El
-S
se ordena por archivo size de forma muy similar a-t
y-X
, tiempo y extensión respectivamente. Los archivos más grandes estarán primero y los más pequeños al final. Tenga en cuenta que el contenido de los subdirectorios no se incluye en el orden. ls -R
-
La opción
-R
modificará el comandols
para mostrar una lista recursiva. ¿Qué significa esto?
Recursión en Bash
La recursión se refiere a una situación en la que “algo se define en términos de sí mismo”. La recursión es un concepto muy importante en la informática, pero aquí su significado es mucho más simple. Consideremos nuestro ejemplo de antes:
$ ls ~ Documents
Sabemos desde antes que user
tiene un directorio personal, y en este directorio hay un subdirectorio. Hasta ahora ls
sólo nos ha mostrado los ficheros y subdirectorios de una ubicación, pero no puede decirnos el contenido de estos subdirectorios. En estas lecciones, hemos utilizado el comando tree
cuando queríamos mostrar el contenido de muchos directorios. Desafortunadamente, tree
no es una de las utilidades principales de Linux y por lo tanto no está siempre disponible. Compare la salida de tree
con la salida de ls -R
en los siguientes ejemplos:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt $ ls -R ~ /home/user/: Documents /home/user/Documents: Mission-Statement Reports /home/user/Documents/Reports: report2018.txt
Como puede observar, con la opción recursiva obtenemos una lista mucho más larga de archivos. De hecho, es como si ejecutáramos el comando ls
en el directorio de inicio de user
y encontráramos un subdirectorio, luego entramos en ese subdirectorio y ejecutamos el comando ls
nuevamente donde encontramos el archivo Mission-Statement
y otro subdirectorio llamado Reports
, y nuevamente, ingresamos al subdirectorio y ejecutamos el comando ls
. Prácticamente, ejecutar ls -R
es como decirle a Bash: “Ejecute ls
aquí y repita el comando en cada subdirectorio que encuentre”.
La recursión es particularmente importante en los comandos de modificación de archivos, como copiar o eliminar directorios. Por ejemplo, si desea copiar el subdirectorio Documents
, necesitara especificar una copia recursiva para extender este comando a todos los subdirectorios.
Ejercicios guiados
-
Use la siguiente estructura de archivos para responder las siguientes tres preguntas:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
¿Qué comando navegará en el directorio
network
independientemente de su ubicación actual? -
¿Qué comando puede ingresar
user
para navegar en su directorioDocuments
desde/etc/udev
? Use el camino más corto posible. -
¿Qué comando puede ingresar
user
para navegar en el directorioMusic
demichael
? Use el camino más corto posible.
-
-
Considere la siguiente salida de
ls -lh
para responder las siguientes dos preguntas. Tenga en cuenta que los directorios se indican con unad
al comienzo de la línea.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Cuando ejecutas el comando
ls -lrS
. ¿Qué archivo estará al principio? -
Describa lo que espera ver al ejecutar
ls -ad */
.
-
Ejercicios exploratorios
-
Ejecute el comando
ls -lh
en un directorio que contenga subdirectorios. Tenga en cuenta el tamaño indicado de estos directorios. ¿Te parecen correctos estos tamaños de archivo? ¿Representan con precisión el contenido de todos los archivos dentro de ese directorio? -
Aquí hay un nuevo comando para probar:
du -h
. Ejecute este comando y describa el resultado que le proporciona. -
En muchos sistemas Linux, puedes escribir
ll
y obtener el mismo resultado como si escribierasls -l
. Sin embargo, tenga en cuenta quell
no es un comando. Por ejemplo,man ll
le dará el mensaje de que no existe un manual para esto. Este es un ejemplo de un alias. ¿Por qué los alias podrían ser útiles para un usuario?
Resumen
En esta lección usted aprendió:
-
Que cada usuario de Linux tendrá un directorio de inicio.
-
Que puede acceder al directorio de inicio del usuario actual utilizando
~
. -
Cualquier ruta de archivo que use
~
se llama ruta relative-to-home.
También aprendió sobre algunas de las formas más comunes de modificar el comando ls
.
-a
(all)-
Imprime todos los archivos / directorios, incluidos los ocultos.
-d
(directories)-
Enumera directorios, pero sin sus contenidos.
-h
(human readable)-
Imprime tamaños de archivo en formato legible para humanos.
-l
(long list)-
Proporciona detalles adicionales en un archivo/directorio por línea.
-r
(reverse)-
Invierte el orden.
-R
(recursive)-
Enumera todos los archivos, incluidos los archivos de cada subdirectorio.
-S
(size)-
Ordena por tamaño de archivo.
-t
(time)-
Ordena por fecha de modificación.
-X
(eXtension)-
Ordena por extensión de archivo.
Respuestas a los ejercicios guiados
-
Use la siguiente estructura de archivos para responder las siguientes tres preguntas:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
¿Qué comando navegará en el directorio
network
independientemente de su ubicación actual?cd /etc/network
-
¿Qué comando puede ingresar
user
para navegar en su directorioDocuments
desde/etc/udev
? Use el camino más corto posible.cd ~/Documents
-
¿Qué comando puede ingresar
user
para navegar en el directorioMusic
demichael
? Use el camino más corto posible.cd ~michael/Music
-
-
Considere la siguiente salida de
ls -lh
para responder las siguientes dos preguntas. Tenga en cuenta que los directorios se indican con unad
al comienzo de la línea.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Cuando ejecutas el comando
ls -lrS
, ¿Qué archivo estará al principio?Las tres carpetas son todas de 4.0K, que es el tamaño de archivo más pequeño. Luego el comando
ls
ordenará por defecto los directorios alfabéticamente. La respuesta correcta es el archivoscary.jpg
. -
Describa lo que espera ver al ejecutar
ls -ad */
.Este comando mostrará todos los subdirectorios incluidos los ocultos.
-
Respuestas a los ejercicios exploratorios
-
Ejecute el comando
ls -lh
en un directorio que contenga subdirectorios. Tenga en cuenta el tamaño indicado de estos directorios. ¿Te parecen correctos estos tamaños de archivo? ¿Representan con precisión el contenido de todos los archivos dentro de ese directorio?No, cada directorio tiene un tamaño de archivo listado de 4096 bytes. Esto se debe a que los directorios son una abstracción: ellos no existen como una estructura de árbol en el disco. Cuando observas un directorio en la lista, esta observando un enlace a una lista de archivos. El tamaño de estos enlaces es de 4096 bytes.
-
Aquí hay un nuevo comando para probar:
du -h
. Ejecute este comando y describa el resultado que le proporciona.El comando
du
generará una lista de todos los archivos y directorios e indicará el tamaño de cada uno. Por ejemplo,du -s
mostrará el tamaño de todos los archivos, directorios y subdirectorios para una determinada ubicación. -
En muchos sistemas Linux, puedes escribir
ll
y obtener el mismo resultado como si escribierasls -l
. Sin embargo, tenga en cuenta quell
no es un comando. Por ejemplo,man ll
le dará el mensaje de que no existe un manual para esto. Este es un ejemplo de un alias. ¿Por qué los alias podrían ser útiles para un usuario?ll
es un alias dels -l
. En Bash podemos usar alias para simplificar los comandos de uso común.ll
a menudo se define por usted en Linux, pero también puede crear sus propios alias.