Categorías
DevOps SysAdmin

Comando ls en Linux con ejemplos

La triada de comandos básicos para el principiante en Linux son: pwd, cd, y ls. Conozco gente que parecía que sabía hacer cosas simplemente tecleando estos comandos a gran velocidad. Pero si sabes por qué directorios tienes que moverte y qué ficheros tienes que buscar entonces con estos tres comandos llegarás a cualquier sitio y podrás hacer de todo. Ahora veremos ejemplos útiles para el comando ls en Linux.

Sintaxis

ls [-1abcdfghiklmnopqrstuvwxABCDFGHLNQRSUX] [-w cols] [-T cols] [-I patrón] [--full-time] [--show-control-chars]
[--block-size=tamaño] [--format={long,verbose,commas,across,vertical,single-column}] [--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}]
[--color[={none,auto,always}]] [--help] [--version] [--]

Es una locura la cantidad de opciones que tiene ls, así que sólo voy a dar unos pocos ejemplos que me son habitualmente útiles.

Ejemplos

Antes de nada tenemos que verificar con el comando alias, si en nuestra distribución actual ya nos han metido alguna de las múltiples opciones del comando. Aquí vemos que los bonitos colores que nos da ls, es porque tiene un alias.

inthenite@debian10:~$ alias
alias ls='ls --color=auto'

Y como segundo detalle importante, ls por defecto nos presenta los resultados ordenados por nombre.

ls

Vayamos al primero ejemplo. ls sin ninguna opción ni argumento los pone uno detrás de otro todos los ficheros y directorios del directorio actual. ¿Tiene sentido? Con los colores más o menos podrías saber qué es cada cosa, aunque habitualmente no. Pero sí lo tiene, si lo que estamos buscando es usar todo el contenido del directorio para una tarea posterior. Ejemplo:

#!/bin/bash
contenido=$(ls) # Se ejecuta el comando ls y lo guarda en $contenido
for i in $contenido #Bucle sobre las palabras de $contenido
do
 if [ -f $i ] ; # -f pregunta si es un fichero
 then
   echo "$i es un fichero"
 else
   echo "$i es otra cosa"
 fi
done
ls -l

La opción básica para empezar a ver algo con sentido con ls es -l. Ya que te da el tipo de fichero Unix, los permisos, número de enlaces, propietario, grupo al que pertenece, tamaño (si es un fichero), fecha de la última modificación y nombre. Este es el comando que vale para el 99% de las veces.

inthenite@debian10:~$ ls -l
total 16
drwxr-xr-x 2 inthenite inthenite 4096 may 14 16:29 dir1
lrwxrwxrwx 1 inthenite inthenite    4 may 14 16:29 dir2 -> dir1
-rwxr-xr-x 1 inthenite inthenite  141 may 21 03:12 f.sh
-rwxr-xr-x 1 inthenite inthenite   57 may 16 09:46 p2
-rwxr-xr-x 1 inthenite inthenite  187 may 16 10:00 puertossh
Ficheros ocultos: ls -la

Aunque yo suelo utilizar tres opciones más de ls. La primera es -a para que saque todos los ficheros del directorio. Por definición, un fichero que empieza por el carácter . está oculto y no aparece. De esta forma podremos ver entre otros «.» el directorio actual «..» el directorio padre y un montón de ficheros ocultos como la historia «.bash_history» o los comandos que se ejecutan al iniciar la sesión «.bashrc»

inthenite@debian10:~$ ls -la
total 56
drwxr-xr-x 5 inthenite inthenite 4096 may 21 03:28 .
drwxr-xr-x 3 root      root      4096 mar 25 10:15 ..
-rw------- 1 inthenite inthenite 4808 may 21 00:10 .bash_history
-rw-r--r-- 1 inthenite inthenite  220 mar 25 10:15 .bash_logout
-rw-r--r-- 1 inthenite inthenite 3526 mar 25 10:15 .bashrc
drwxr-xr-x 2 inthenite inthenite 4096 may 14 16:29 dir1
lrwxrwxrwx 1 inthenite inthenite    4 may 14 16:29 dir2 -> dir1
Ordenados por fecha: ls -lrt

Me suele interesar el último fichero modificado, una tarea habitual de un administrador es ir al directorio de logs y ver lo último que ha pasado. Yo suelo ejecutarlo con un tail -5 y así sólo veo los 5 últimos archivos modificados. El que me interesará será seguramente el último en aparecer. -t es ordenado por fecha y -r ordenado de forma inversa.

inthenite@debian10:/var/log$ ls -lrt | tail -5
-rw-rw-r-- 1 root     utmp  292292 may 21 19:54 lastlog
-rw-r----- 1 root     adm   726816 may 21 19:55 ufw.log
-rw-r----- 1 root     adm       41 may 21 19:55 user.log
-rw-r----- 1 root     adm    34352 may 21 19:55 syslog
-rw-r----- 1 root     adm     2567 may 21 19:55 messages
Humanamente legible: ls -lh

Quizás -h también pueda resultar interesante para alguien y así ver el tamaño de los ficheros de una forma más racional. Siempre está bien que te aparezcan las típicas K, M, G al lado del número en lugar de contar los dígitos que tiene el número. A no ser que quieras procesar con un script la columna del tamaño.

inthenite@debian10:/var/log$ ls -lrth | tail -5
-rw-rw-r-- 1 root utmp 286K may 21 19:54 lastlog
-rw-r----- 1 root adm  710K may 21 19:55 ufw.log
-rw-r----- 1 root adm    41 may 21 19:55 user.log
-rw-r----- 1 root adm   34K may 21 19:55 syslog
-rw-r----- 1 root adm  2,6K may 21 19:55 messages
SELinux: ls -lZ

Me he fijado que no no devuelve el mismo resultado un simple comando ls en mi Debian 10 que en mi CentOs 8. Aparece un punto al final de la primera columna, la de los permisos. Significa que el fichero tiene un contexto SELinux, aunque para verlo tengamos que usar la opción -Z

[inthenite@centos8 log]$ ls -lZ | tail -4
-rw-------. 1 root   root   system_u:object_r:var_log_t:s0            31547 may 21 19:45 secure
drwxr-x---. 2 sssd   sssd   system_u:object_r:sssd_var_log_t:s0          93 may 18 19:45 sssd
drwxr-xr-x. 2 root   root   system_u:object_r:tuned_log_t:s0             23 may 18 16:38 tuned
-rw-rw-r--. 1 root   utmp   system_u:object_r:wtmp_t:s0               25344 may 21 19:45 wtmp

¿Y qué opciones de ls utilizas tú?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.