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ú?