GNU/Linux >> Tutoriales Linux >  >> Linux

Comando ls en Linux:17 ejemplos útiles explicados

Los ls command es uno de los primeros comandos que aprendemos cuando descubrimos el shell. Y después de eso, sea cual sea su nivel de habilidad, seguirá siendo uno de los más utilizados.

A pesar de esa popularidad, rara vez vamos más allá del -l , -d y -a opciones Es desafortunado ya que un típico ls ¡la implementación tiene decenas de opciones disponibles! Por lo tanto, te propongo que me sigas en mi búsqueda de las ls comandar gemas ocultas.

Ejemplo de jerarquía de archivos que usamos en esta guía de comandos ls

Antes de llegar al meollo del asunto, necesitamos un poco de preparación:sería difícil estudiar el ls comando sin algún directorio para trabajar. Para que pueda probar en su computadora los comandos dados en este artículo, aquí le mostramos cómo crear la jerarquía de archivos de muestra que usaré en todos mis ejemplos. Simplemente copie y pegue esa lista de comandos en su terminal y estará listo:

mkdir ls
cd ls
# Create a hidden file:
echo You can not see me > .hidden
# Create a couple of 2MiB files:
dd if=/dev/zero of=a bs=1M count=2
dd if=/dev/zero of=b bs=1M seek=1 count=1
# Create few sub-directories
mkdir -p dir/subdir dir/subdir2
# Create a bunch of empty files
touch c dir/{d,e,f} dir/subdir/{g,h,i} dir/subdir2/{j,k,l}
# Create few links (hard and symbolic)
ln  dir/e hardlink-to-file
ln -s dir/f symlink-to-file
ln -s dir/subdir symlink-to-subdir

Si tiene algún problema con estos comandos, no dude en utilizar la sección de comentarios para pedir ayuda. Asumiendo que ahora todo está en orden, es hora de profundizar en nuestro tema principal.

Los casos de uso conocidos del comando ls

Como cada viaje comienza con un primer paso, primero revisemos los casos de uso muy básicos para el ls dominio. Por supuesto, si te consideras un experto, no dudes en saltar inmediatamente a las secciones más avanzadas. Pero si prefieres quedarte conmigo por ahora, genial:¡podrías aprender una o dos cosas!

<no option> :el comportamiento predeterminado

Los ls El comando brinda información sobre cada objeto similar a un archivo señalado por las rutas proporcionadas en la línea de comando. Cuando se usa sin ninguna opción:

  • la única información que se muestra es el nombre del objeto similar a un archivo señalado por la ruta;
  • si esa ruta apunta a un directorio (o enlace simbólico a un directorio), el ls el comando también muestra el contenido de ese directorio;
  • si se muestran varias entradas, se ordenan alfabéticamente según su nombre de archivo.

Finalmente, cuando no se proporciona una ruta en la línea de comando, ls los comandos asumen ./ –ese es el directorio actual.

Veamos ahora todas esas reglas en acción:

# display the content of the current directory
sh:~/ls$ ls ./
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# without any option, `ls` is equivalent
# to `ls ./`
sh:~/ls$ ls
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# entries are sorted alphabetically
# ("dir/f" starts with a "d" so it is before "e")
sh:~/ls$ ls c b e dir/f a
a  b  c  dir/f    e

# when a command line argument is a directory
# (or a symbolic link to a directory)
# displays its content
sh:~/ls$ ls a b c link-to-subdir dir
a  b  c

dir:
d  e  f  subdir  subdir2

link-to-subdir:
g  h  i

-d :no enumerar el contenido del directorio

Con -d opción, ls ya no muestra el contenido del directorio proporcionado en la línea de comando, sino que tratará las entradas del directorio como si fueran entradas de archivo. Comparemos:

# Default behavior: display the content of the `dir` directory
sh:~/ls$  ls a dir b
a  b

dir:
d  e  f  subdir  subdir2

# `-d` option: directories are handled like files
sh:~/ls$  ls -d a dir b
a  b  dir

Cuando se usa -d sola opción, no hay mucha diferencia entre ls y un simple echo comando:

# In both case, the `*` glob pattern is expanded by
# the shell, which also takes care of
# sorting entries in the alphabetical order
sh:~/ls$  ls -d *
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

sh:~/ls$  echo *
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir

Pero el -d La opción se vuelve más útil cuando se asocia con otra opción para mostrar información adicional, como cuando se usa -l bandera que veremos ahora.

-l :la opción de formato largo

En el ls concurso de popularidad de opciones, el -l (letra minúscula ell) probablemente sea la opción ganadora. Es tan útil que muchos sistemas ofrecen un ll alias para ls -l (o ls -l<something> )

El -l representa el formato largo. Con esa opción, el ls El comando mostrará cada entrada en su propia línea que contiene la siguiente información:* modo de archivo * número de enlaces * nombre del propietario * nombre del grupo * número de bytes en el archivo * fecha y hora * ruta

Además, con -l opción, ls ya no seguirá enlaces simbólicos. Por lo tanto, mostrará la información (modo de archivo, número de enlaces, etc.) sobre el enlace en sí, y no sobre su destino. Por la misma razón, el ls El comando no mostrará el contenido de los directorios apuntados por enlaces simbólicos:

# Default behavior: displays only the filename and
# follows symbolic links:
sh:~/ls$  ls *
a  b  c  e  f  hardlink-to-file  symlink-to-file

dir:
d  e  f  subdir  subdir2

link-to-subdir:
g  h  i

symlink-to-subdir:
g  h  i

# `-l` option: displays extended informations and
# no longer follows symbolic links
sh:~/ls$  ls -l *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 19 22:18 c
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 22:18 symlink-to-subdir -> dir/subdir

dir:
total 8
-rw-r--r-- 1 sylvain sylvain    0 Sep 19 22:18 d
-rw-r--r-- 3 sylvain sylvain    0 Sep 19 22:18 e
-rw-r--r-- 1 sylvain sylvain    0 Sep 19 22:18 f
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir2

Para concluir esta sección, le permito examinar el resultado que obtenemos al combinar tanto -l y -d opciones:

sh:~/ls$  ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 19 22:18 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 19 12:09 dir
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 22:18 symlink-to-subdir -> dir/subdir

-a :mostrar todos los archivos

Con -a opción, ls incluye archivos ocultos al mostrar el contenido de un directorio. Pero, ¿qué es un archivo oculto?

Por convención, en sistemas similares a Unix, un archivo cuyo nombre comienza con un punto se considera oculto. Además, cada directorio también contiene dos entradas especiales, normalmente ocultas:. y ..

En cada directorio:

  • el . puntos de entrada al propio directorio. Ese tipo de autorreferencia puede parecer curioso. Pero a veces es útil, un poco como tener su propio número de teléfono en el repertorio de su teléfono inteligente.
  • el .. puntos de entrada al directorio principal. Dado que la jerarquía de archivos en los sistemas similares a Unix está estrictamente organizada como un árbol, cada directorio tiene uno y solo un padre. Excepto el directorio raíz / ¿quizás? Bueno, en realidad no:el padre del directorio raíz es... el propio directorio raíz.
# Default behavior: do not display hidden entries
# (including . and ..)
sh:~/ls$  ls
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# `-a` option: show hidden files and directories
sh:~/ls$  ls -a
.   a  c    e  hardlink-to-file  link-to-subdir   symlink-to-subdir
..  b  dir  f  .hidden         symlink-to-file

Las opciones útiles del comando ls

Después de haber revisado el conocido -l , -d y -a opciones, fijemos nuestra atención en un par de opciones menos conocidas que encuentro particularmente útiles.

-s :muestra el tamaño asignado

Puede recordar el -l opción muestra el número de bytes en el archivo. El -s La opción muestra el tamaño asignado en bloques. ¿Qué es un bloque? Bueno, un grupo de bytes cuyo tamaño depende de la implementación. Suele ser de 512 bytes en BSD y de 1024 bytes en Linux.

¿Por qué me molestaría con el tamaño en bloques cuando ya tengo acceso al tamaño en bytes? Bueno, las -s las opciones muestran el asignado Talla. No el lógico tamaño del archivo. Esas pueden ser dos cosas completamente diferentes para archivos dispersos. Los archivos dispersos son archivos que contienen "agujeros". Cuando se leen, esos agujeros se comportan como bloques de archivo normales que contienen solo ceros. Pero prácticamente no ocupan espacio en el disco. Podemos usar el dd comando con el seek opción para crear archivos dispersos como lo hice para el b archivo en mi jerarquía de muestra:

sh:~/ls$ ls -ls a b
2052 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
1028 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b

Como puede ver, tanto mi a y b los archivos parecen tener dos mebibytes de largo. Pero el b el archivo es escaso, solo necesita 1028 bloques en el disco (aproximadamente un mebibyte).

-h mostrar tamaños legibles por humanos

Con el -h opción, ls mostrará los tamaños de los archivos usando sufijos de unidades para que sean más fáciles de usar. Esta opción solo tiene sentido cuando se usa en combinación con -l opción (Linux, BSD) o -s (Linux):

sh:~/ls$ ls -lsh a b
2.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 b

openbsd-6.3$ ls -lsh a b
4128 -rw-r--r--  1 sylvain  sylvain   2.0M Sep 19 23:49 a
2112 -rw-r--r--  1 sylvain  sylvain   2.0M Sep 19 23:49 b

Es posible que haya notado que los tamaños se muestran usando potencias de 1024 unidades, donde K representa 2 ^ 10 =1024 bytes, M para 1024 ^ 2 =1048576 bytes y así sucesivamente. Vale la pena mencionar aquí el ls La implementación provista como parte de GNU Coreutils tiene un --si extra opciones para usar potencia 1000 en lugar de potencias de 1024:

sh:~/ls$ ls -lsh --si a b
2.2M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 b

-i mostrar número de inodo

En un sistema de archivos de estilo Unix, un número de inodo (o número de serie del archivo en la terminología POSIX) es un número que identifica de forma única un objeto del sistema de archivos (un archivo, un directorio, una canalización con nombre,...). Con el -i opción, el ls El comando mostrará su número de inodo junto a cada ruta.

Incluso si parece algo exótico, me encuentro usando el -i opción de vez en cuando, especialmente para identificar entradas de directorio que hacen referencia al mismo objeto del sistema de archivos. Usará esa opción principalmente cuando investigue enlaces duros o monturas enlazadas. Mire ese video para ver un ejemplo práctico:https://youtu.be/Jp58Osb1uFo?t=140

sh:~/ls$  ls -i *
8222 a    8243 b    8262 c    8264 hardlink-to-file  8272 symlink-to-file

dir:
8263 d    8264 e    8265 f    8245 subdir  8261 subdir2

symlink-to-subdir:
8266 g    8267 h    8268 i

En el ejemplo anterior, puede ver cada nombre de archivo con el prefijo del número de inodo asociado con esa ruta. En su sistema, los números seguramente serán diferentes. De todos modos, eche un vistazo más de cerca al hardlink-to-file y dir/e entradas. Ambos tienen el mismo número de inodo (8264 en mi caso). Eso significa que son dos entradas que hacen referencia al mismo objeto del sistema de archivos subyacente, que es, de hecho, la definición exacta de lo que es un vínculo fijo.

Puede recordar que dije anteriormente que el padre del directorio raíz era el propio directorio raíz. Usando el -i opción, es bastante fácil verificar esa afirmación:

openbsd-6$  ls -id /
2 /
openbsd-6$ ls -ia /
    2 .             25985 bin               5 dev           77954 sbin
    2 ..             1235 boot          51969 etc              10 sys
    8 .cshrc         1240 bsd               2 home              7 tmp
    9 .profile       1241 bsd.booted    77953 mnt               2 usr
51968 altroot           4 bsd.rd        26016 root          78016 var

Como puede ver, en mi sistema, el directorio raíz está asociado con el inodo número 2, que también es el inodo de su padre. Eso prueba que el directorio raíz es su propio padre.

Las opciones raramente utilizadas del comando ls

Usualmente uso las opciones descritas en la sección anterior, pero de las que hablaré ahora… bueno… sé que existen. Sin embargo, debo admitir que cuando los necesito, a menudo tengo que mirar al man para refrescar mi memoria.

Esta opción modifica el comportamiento del ls comando cuando se aplica a enlaces simbólicos. Con el -L opción, ls mostrará la información sobre el objetivo del enlace simbólico en lugar de mostrar los relacionados con el enlace simbólico en sí. Al examinar el siguiente ejemplo, la diferencia será obvia:

# Pay special attention to the permission
# and file size for symbolic links with and without
# the `-L` option:
sh:~/ls$  ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain       5 Sep 20 00:09 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
[email protected]:/tmp/ls/ls/ls$ ls -lLd *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 symlink-to-file
drwxr-xr-x 2 sylvain sylvain    4096 Sep 20 00:09 symlink-to-subdir

-F :añade un carácter de clasificación al nombre del archivo

El -F La opción agrega un carácter adicional después del nombre de ruta de algunas categorías de objetos del sistema de archivos para identificarlos. Agregará:

  • un \ después de cada nombre de ruta que es un directorio,
  • un @ después de cada nombre de ruta que es un enlace simbólico,
  • un * después de cada archivo ejecutable,
  • y un | después de cada FIFO (ver mkfifo para obtener más información al respecto)

En mis primeros días en Unix, usaba mucho esa opción. Pero desde ls puede colorear su salida (¡y como tenemos monitores a color!), rara vez necesito eso. Pero lo recuerdo. Y de vez en cuando, en un terminal remoto, encuentro una ocasión para utilizarlo:

sh:~/ls$ ls -F
a  b  c  dir/  hardlink-to-file  [email protected]  [email protected]

t :ordena las entradas por tiempo de modificación

Con el -t opción, el ls comando con las entradas del directorio de visualización ordenadas por hora de modificación (las más recientes primero) en lugar de ordenarlas por su nombre:

# Default sort order (by filename)
sh:~/ls$  ls
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

# Sort by modification date
sh:~/ls$ ls -t
symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b  a

Si cambio un archivo, ahora aparecerá como la primera entrada (es decir, modificada más recientemente) en la lista:

sh:~/ls$ echo >> a
sh:~/ls$ ls -t
a  symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b

-S :ordena las entradas por tamaño

Con el -S opción, ls mostrará las entradas ordenadas por tamaño, el archivo más grande primero. En caso de empate, las entradas se ordenan según su ruta:

sh:~/ls$ ls -lS
total 6244
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file

-r :orden inverso

Esta opción invierte el orden de clasificación. Lo encuentro más útil cuando está asociado con -t opción para mostrar primero el archivo modificado menos recientemente o con -S opción para mostrar primero el archivo más pequeño. Pero también funciona con el orden de clasificación predeterminado, por nombre de ruta:

# Display the least recently modified file first
sh:~/ls$ ls -rt
b  hardlink-to-file  dir  c  symlink-to-file  symlink-to-subdir  a

# Display the smallest file first
sh:~/ls$ ls -rS
hardlink-to-file  c  symlink-to-file  symlink-to-subdir  dir  b  a

# Display path names in reversed alphabetical order
sh:~/ls$ ls -r
symlink-to-subdir  symlink-to-file  hardlink-to-file  dir  c  b  a

-n :Mostrar UID/GID numérico

Esta opción es exactamente igual que -l opción— excepto con -n la identificación del grupo del propietario (GID) y la identificación del usuario (UID) se muestran como números en lugar de usar su nombre asociado:

 sh:~/ls$ ls -ld a b c /
drwxr-xr-x 28 root    root       4096 May  6 00:28 /
-rw-r--r--  1 sylvain sylvain 2097153 Sep 20 00:45 a
-rw-r--r--  1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r--  1 sylvain sylvain       0 Sep 20 00:09 c
sh:~/ls$ ls -nd a b c /
drwxr-xr-x 28    0    0    4096 May  6 00:28 /
-rw-r--r--  1 1000 1000 2097153 Sep 20 00:45 a
-rw-r--r--  1 1000 1000 2097152 Sep 20 00:09 b
-rw-r--r--  1 1000 1000       0 Sep 20 00:09 c

El uso realmente exótico del comando ls

Nadie puede pretender saberlo todo. Y mientras escribía este artículo, (re)descubrí un par de ls opciones No recuerdo haberlos usado yo mismo, pero tal vez tú sí? Si es el caso, me gustaría leer en la sección de comentarios en qué circunstancias los encuentras útiles. De todos modos, aquí hay una selección que puede resultarle interesante.

-R :enumerar recursivamente los subdirectorios

Por defecto, el ls El comando solo muestra el contenido de los directorios especificados explícitamente en la línea de comando. Con el -R opción, también mostrará recursivamente el contenido de los directorios encontrados:

sh:~/ls$ ls -R
.:
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

./dir:
d  e  f  subdir  subdir2

./dir/subdir:
g  h  i

./dir/subdir2:
j  k  l

Si bien es interesante en teoría, encuentro (juego de palabras intencionado) la salida producida por find . comando más legible para ese propósito. Pero su millaje puede variar, por supuesto:

sh:~/ls$  find .
.
./c
./.hidden
./hardlink-to-file
./b
./symlink-to-subdir
./dir
./dir/d
./dir/e
./dir/subdir2
./dir/subdir2/l
./dir/subdir2/j
./dir/subdir2/k
./dir/subdir
./dir/subdir/g
./dir/subdir/i
./dir/subdir/h
./dir/f
./symlink-to-file
./a

-A :muestra casi todos los archivos

Si bien no está definido en el estándar POSIX, el -A las opciones aparecen tanto en el mundo GNU como en BSD. En ambos casos, funciona como -a , pero excluyendo el . y .. entradas. Vale la pena mencionar en los sistemas BSD, -A está implícito para el superusuario:

sh:~/ls$  ls -a
.   a  c    hardlink-to-file  symlink-to-file
..  b  dir  .hidden          symlink-to-subdir
sh:~/ls$  ls -A
a  b  c  dir  hardlink-to-file    .hidden  symlink-to-file  symlink-to-subdir

openbsd-6.3$ su root
openbsd-6.3# ls
.hidden a  b  c  dir  hardlink-to-file  symlink-to-file  symlink-to-subdir

-f :no ordenar

Con el -f opción, ls mostrará las entradas en el orden en que aparecen en el directorio. Ese orden depende del sistema de archivos subyacente y el orden en que se crearon los archivos, por lo que es difícilmente predecible. El -f la opción también implica el -a opción:

sh:~/ls$  ls -f
..  .hidden          b             dir          a
c   hardlink-to-file  symlink-to-subdir  symlink-to-file  .

openbsd-6$ ls -f
.                   a                   c                   symlink-to-subdir
..                  b                   hardlink-to-file
.hidden             dir                 symlink-to-file

Curiosamente, con GNU Coreutils 8.26 ls implementación, puede usar tanto -l y -f opciones si lo escribes -fl –pero no si escribes -lf . En OpenBSD, ambos funcionan como se esperaba:

sh:~/ls$ ls -lf
..  .hidden          b             dir          a
c   hardlink-to-file  symlink-to-subdir  symlink-to-file  .
sh:~/ls$ ls -fl
total 3100
drwxr-xr-x 3 sylvain sylvain    4096 Sep 19 12:09 ..
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
-rw-r--r-- 1 sylvain sylvain      19 Sep 20 00:09 .hidden
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
lrwxrwxrwx 1 sylvain sylvain      10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 20 00:09 symlink-to-file -> dir/f
-rw-r--r-- 1 sylvain sylvain 2097153 Sep 20 00:45 a
drwxr-xr-x 3 sylvain sylvain    4096 Sep 20 00:09 .

openbsd-6$ ls -lf
total 6256
drwxr-xr-x  3 sylvain  sylvain      512 Sep 19 23:49 .
drwxr-xr-x  5 sylvain  sylvain      512 Sep 19 23:49 ..
-rw-r--r--  1 sylvain  sylvain       19 Sep 19 23:49 .hidden
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
openbsd-6$ ls -fl
total 6256
drwxr-xr-x  3 sylvain  sylvain      512 Sep 19 23:49 .
drwxr-xr-x  5 sylvain  sylvain      512 Sep 19 23:49 ..
-rw-r--r--  1 sylvain  sylvain       19 Sep 19 23:49 .hidden
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir

-q :Mostrar caracteres de nombre de archivo no imprimibles como ?

En los sistemas de archivos de estilo Unix, un nombre de archivo puede contener cualquier carácter excepto \ y los caracteres NUL. Esto significa que un nombre de archivo puede contener caracteres no imprimibles o incluso secuencias de control que pueden interferir con su terminal. Probemos algo divertido:

touch "$(echo -e '\x1B[7mBOO\x1B[0m')"

Obviamente, ese nombre de archivo contiene caracteres no imprimibles. En implementaciones modernas de ls , el -q La opción está implícita cuando la salida es un terminal, para evitar posibles efectos nefastos. Entonces, los caracteres no imprimibles serán reemplazados por un signo de interrogación:

sh:~/ls$ ls *BOO*
?[7mBOO?[0m

Sin embargo, las cosas serán diferentes si escribes eso en su lugar:

# I let you try that by yourself
# to not spoil the fun;)
sh:~/ls$ ls *BOO* | cat

El | cat es inútil, pero como efecto secundario, el ls El comando ahora ve una canalización en su salida estándar en lugar de un tty (un "terminal"). Dado que la salida ya no es una terminal, -q la opción ya no está implícita, y ls mostrará el nombre del archivo palabra por palabra. En ese caso, si todo funciona como se esperaba, para presentar el nombre del archivo con un efecto de video funky.

Uso explícito de -q la opción arreglaría eso. Te dejaré intentarlo por ti mismo (y eventualmente jugar con otras secuencias de escape ANSI). Pero aprovecho esa ocasión para advertirle contra el uso de ls Comando en scripts de shell. En la práctica, ls está diseñado para el “consumo humano”. Hay muchos casos secundarios relacionados con nombres de archivo especialmente diseñados que son muy difíciles de manejar correctamente. Si necesita recorrer una lista de archivos, le recomiendo encarecidamente que utilice el comando de búsqueda en su lugar. En los casos más simples, un simple for loop es incluso suficiente, pero esa sería otra historia.

for f in *; do echo "$f"; done

¿El final?

Así concluye nuestro recorrido por el ls opciones de comando. No es necesario mencionar que estuvo lejos de ser exhaustivo y traté de concentrarme aquí en las opciones más útiles y portátiles. Pero cada ls La implementación tiene su parte de características geniales, así que si conoces alguna buena opción que me perdí en este artículo, no dudes en compartirla con nosotros usando la sección de comentarios. Si tenemos suficientes comentarios, ¡incluso podemos compilarlos y publicarlos en un artículo de seguimiento!

Hablando del comando ls, ¿conoces el comando lsof? No está relacionado con ls pero te dice qué usuario está accediendo a un archivo determinado.


Linux
  1. 7 ejemplos de comandos Linux df

  2. 8 ejemplos de comandos TR de Linux

  3. Ejemplos de comandos rm en Linux

  4. Ejemplos de comandos ps en Linux

  5. w Ejemplos de comandos en Linux

9 ejemplos útiles de comandos táctiles en Linux

Comando Linux rm explicado para principiantes (8 ejemplos)

Comando Tr en Linux explicado con ejemplos

w Comando explicado con ejemplos en Linux

12 ejemplos útiles de comandos de fecha de Linux

Ejemplos de comandos id en Linux