GNU/Linux >> Tutoriales Linux >  >> Linux

Domina el comando ls de Linux

Los ls El comando enumera archivos en un sistema POSIX. Es un comando simple, a menudo subestimado, no en lo que puede hacer (porque en realidad solo hace una cosa), sino en cómo puede optimizar su uso.

De los 10 comandos de terminal más esenciales que debe conocer, el humilde ls comando está entre los tres primeros, porque ls no simplemente lista de archivos, te dice información importante sobre ellos. Le dice cosas como quién es el propietario de un archivo o directorio, cuándo se perdió o modificó cada archivo e incluso qué tipo de archivo es. Y luego está su función incidental de darte una idea de dónde estás, qué objetos cercanos hay por ahí y qué puedes hacer con ellos.

Si su experiencia con ls está limitado a cualquier alias que su distribución le dé en .bashrc , entonces probablemente te lo estés perdiendo.

¿GNU o BSD?

Antes de mirar los poderes ocultos de ls , debe determinar qué ls comando que está ejecutando. Las dos versiones más populares son la versión GNU, incluida en GNU coreutils paquete y la versión BSD. Si está ejecutando Linux, probablemente tenga ls instalado. Si está ejecutando BSD o MacOS, entonces tiene la versión BSD. Hay diferencias, de las cuales se da cuenta en este artículo.

Puede averiguar qué versión hay en su computadora con --version opción:

$ ls --version

Si esto devuelve información sobre GNU coreutils, entonces tiene la versión de GNU. Si devuelve un error, probablemente esté ejecutando la versión BSD (ejecute man ls | head para estar seguro).

También debe investigar qué ajustes preestablecidos puede tener su distribución. Las personalizaciones de los comandos del terminal se colocan con frecuencia en $HOME/.bashrc o $HOME/.bash_aliases o $HOME/.perfil , y se logran creando un alias ls a un ls más complejo dominio. Por ejemplo:

alias ls='ls --color'

Los ajustes preestablecidos proporcionados por las distribuciones son muy útiles, pero dificultan discernir qué ls hace por sí solo y lo que ofrecen sus opciones adicionales. Si alguna vez desea ejecutar ls y no el alias, puede "escapar" del comando con una barra invertida:

$ \ls

Clasificar

Funciona solo, ls simplemente enumera los archivos en tantas columnas como pueda caber en su terminal:

$ ls ~/example
bunko        jdk-10.0.2
chapterize   otf2ttf.ff
despacer     overtar.sh
estimate.sh  pandoc-2.7.1
fop-2.3      safe_yaml
games        tt

Es información útil, pero todos esos archivos se ven básicamente iguales sin la conveniencia de los íconos para transmitir rápidamente cuál es un directorio, un archivo de texto, una imagen, etc.

Usa la -F (o --clasificar en GNU) para mostrar indicadores después de cada entrada que identifican el tipo de archivo que es:

$ ls ~/example
bunko         jdk-10.0.2/
chapterize*   otf2ttf.ff*
despacer*     overtar.sh*
estimate.sh   pandoc@
fop-2.3/      pandoc-2.7.1/
games/        tt*

Con esta opción, los elementos enumerados en su terminal se clasifican por tipo de archivo usando esta abreviatura:

  • Una barra oblicua (/ ) denota un directorio (o "carpeta").
  • Un asterisco (* ) denota un archivo ejecutable. Esto incluye un archivo binario (código compilado) así como scripts (archivos de texto que tienen permiso de ejecución).
  • Un signo de arroba (@ ) denota un enlace simbólico (o "alias").
  • Un signo igual (= ) denota un socket.
  • En BSD, un signo de porcentaje (% ) denota un blanqueamiento (un método de eliminación de archivos en ciertos sistemas de archivos).
  • En GNU, un corchete angular (> ) denota una puerta (comunicación entre procesos en Illumos y Solaris).
  • Una barra vertical (| ) denota un FIFO.

Una versión más simple de esta opción es -p , que solo diferencia un archivo de un directorio.

Lista larga

Obtener una "lista larga" de ls es tan común que muchas distribuciones alias ll a ls -l . El formulario de lista larga proporciona muchos atributos de archivo importantes, como permisos, el usuario propietario de cada archivo, el grupo al que pertenece el archivo, el tamaño del archivo en bytes y la fecha en que se modificó por última vez:

$ ls -l
-rwxrwx---. 1 seth users         455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth users         662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20697793 Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth users        6210 May 22 10:22 geteltorito
-rwxrwx---. 1 seth users         177 Nov 12  2018 html4mutt.sh
[...]

Si no piensa en bytes, agregue -h bandera (o --humano en GNU) para traducir los tamaños de archivo a una notación más amigable para los humanos:

$ ls --human
-rwxrwx---. 1 seth users    455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth seth     662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20M Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth seth    6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth users    177 Nov 12  2018 html4mutt.sh

Puede ver un poco menos de información mostrando solo la columna del propietario con -o o solo la columna del grupo con -g :

$ ls -o
-rwxrwx---. 1 seth    455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth    662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth    20M Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth   6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth    177 Nov 12  2018 html4mutt.sh

Combina ambas opciones para no mostrar ninguna.

Formato de fecha y hora

El formato de lista larga de ls por lo general se ve así:

-rwxrwx---. 1 seth users         455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth users         662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20697793 Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth users        6210 May 22 10:22 geteltorito
-rwxrwx---. 1 seth users         177 Nov 12  2018 html4mutt.sh

Los nombres de los meses no son fáciles de ordenar, tanto computacionalmente como (dependiendo de si su cerebro tiende a preferir cadenas o números enteros) por reconocimiento. Puede cambiar el formato de la marca de tiempo con --time-style opción más el nombre de un formato. Los formatos disponibles son:

  • iso completo (1970-01-01 21:12:00)
  • iso largo (1970-01-01 21:12)
  • iso (01-01 21:12)
  • locale (usa su configuración local)
  • posix-STYLE (reemplace STYLE con una definición de configuración regional)

También puede crear un estilo personalizado utilizando la notación formal de la fecha comando.

Ordenar por tiempo

Por lo general, el ls ordena alfabéticamente. Puede hacer que se ordene de acuerdo con el archivo que se modificó más recientemente (el más nuevo aparece primero) con -t opción.

Por ejemplo:

$ touch foo bar baz
$ ls
bar  baz  foo
$ touch foo
$ ls -t
foo bar baz

Tipo de lista

La salida estándar de ls equilibra la legibilidad con la eficiencia del espacio, pero a veces desea que su lista de archivos tenga un arreglo específico.

Para obtener una lista de archivos separados por comas, use -m :

ls -m ~/example
bar, baz, foo

Para forzar un archivo por línea, use -1 opción (esa es la número uno, no una L minúscula):

$ ls -1 ~/bin/
bar
baz
foo

Para ordenar las entradas por extensión de archivo en lugar de por nombre de archivo, use -X (eso es una X mayúscula):

$ ls
bar.xfc  baz.txt  foo.asc
$ ls -X
foo.asc  baz.txt  bar.xfc

Ocultar el desorden

Hay algunas entradas en algunos ls listados que quizás no le interesen. Por ejemplo, los metacaracteres . y .. representan "aquí" y "atrás un nivel", respectivamente. Si está familiarizado con la navegación en una terminal, probablemente ya sepa que cada directorio se refiere a sí mismo como . y a su padre como .. , por lo que no es necesario que te lo recuerden constantemente cuando usas la -a opción para mostrar archivos ocultos.

Para mostrar casi todos los archivos ocultos (el . y .. excluido), use el -A opción:

$ ls -a
.
..
.android
.atom
.bash_aliases
[...]
$ ls -A
.android
.atom
.bash_aliases
[...]

Con muchas buenas herramientas de Unix, existe la tradición de guardar archivos de copia de seguridad agregando algún carácter especial al nombre del archivo que se guarda. Por ejemplo, en Vim, las copias de seguridad se guardan con ~ carácter añadido al nombre.

Este tipo de archivos de respaldo me han salvado de errores estúpidos en varias ocasiones, pero después de años de disfrutar de la sensación de seguridad que brindan, no siento la necesidad de tener evidencia visual de que existen. Confío en las aplicaciones de Linux para generar archivos de copia de seguridad (si afirman que lo hacen), y estoy feliz de creer que existen.

Para ocultar los archivos de respaldo de la vista, use -B o --ignore-backups para ocultar formatos comunes de copia de seguridad (esta opción no está disponible en BSD ls ):

$ ls
bar.xfc  baz.txt  foo.asc~  foo.asc
$ ls -B
bar.xfc  baz.txt  foo.asc

Por supuesto, el archivo de copia de seguridad aún existe; simplemente se filtra para que no tengas que mirarlo.

GNU Emacs guarda archivos de copia de seguridad (a menos que se configure de otra manera) con un carácter hash (# ) al principio y al final del nombre del archivo (#file# ). Otras aplicaciones pueden usar un estilo diferente. No importa qué patrón se use, porque puede crear sus propias exclusiones con --hide opción:

$ ls
bar.xfc  baz.txt  #foo.asc#  foo.asc
$ ls --hide="#*#"
bar.xfc  baz.txt  foo.asc

Lista de directorios con recursión

Los contenidos de los directorios no se enumeran con ls comando a menos que ejecute ls en ese directorio específicamente:

$ ls -F 
example/  quux*  xyz.txt
$ ls -R
quux  xyz.txt

./example:
bar.xfc  baz.txt  #foo.asc#  foo.asc

Hazlo permanente con un alias

Los ls command es probablemente el comando que se usa con más frecuencia durante cualquier sesión de shell. Son sus ojos y oídos, brindándole contexto y confirmando los resultados de los comandos. Si bien es útil tener muchas opciones, parte de la belleza de ls es su brevedad:dos caracteres y la tecla Retorno, y sabes exactamente dónde estás y qué hay cerca. Si tiene que detenerse a pensar (mucho menos escribir) varias opciones diferentes, se vuelve menos conveniente, por lo que, por lo general, incluso las opciones más útiles se dejan de lado.

La solución es crear un alias para ls comando para que cuando lo uses, obtengas la información que más te importa.

Para crear un alias para un comando en el shell de Bash, cree un archivo en su directorio de inicio llamado .bash_aliases (debes incluir el punto al principio). En este archivo, enumere el comando para el que desea crear un alias y luego el alias que desea crear. Por ejemplo:

alias ls='ls -A -F -B --human --color'

Esta línea hace que su shell Bash interprete el ls comando como ls -A -F -B --human --color .

No está limitado a redefinir los comandos existentes. Puede crear sus propios alias:

alias ll='ls -l'
alias la='ls -A'
alias lh='ls -h'

Para que los alias funcionen, su shell debe saber que .bash_aliases existe el archivo de configuración. Abra el .bashrc archivo en un editor (o créelo, si no existe) e incluya este bloque de código:

if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

Cada vez .bashrc está cargado (que es cada vez que se inicia un nuevo shell Bash), Bash cargará .bash_aliases en su entorno. Puede cerrar y reiniciar su sesión de Bash o simplemente obligarla a hacerlo ahora:

$ source ~/.bashrc

Si olvida si ha asignado un alias a un comando, el cuál el comando te dice:

$ which ls
alias ls='ls -A -F -B --human --color'
        /usr/bin/ls

Si ha creado un alias para ls comando a sí mismo con opciones, puede anular su propio alias en cualquier momento anteponiendo ls con barra invertida. Por ejemplo, en el alias de ejemplo, los archivos de copia de seguridad se ocultan mediante -B opción, lo que significa que no hay forma de hacer una copia de seguridad de los archivos con ls dominio. Anule el alias para ver los archivos de copia de seguridad:

$ ls
bar  baz  foo
$ \ls
bar  baz  baz~  foo

Haz una cosa y hazla bien

Los ls El comando tiene una cantidad asombrosa de opciones, muchas de las cuales son de nicho o dependen en gran medida de la terminal que use. Eche un vistazo a info ls en sistemas GNU o man ls en sistemas GNU o BSD para más opciones.

Puede resultarle extraño que un sistema famoso por la premisa de que cada herramienta "hace una cosa y la hace bien" reste peso a su comando más común con 50 opciones. Pero ls solo hace una cosa:enumera los archivos. Y con 50 opciones que le permiten controlar cómo recibe esa lista, ls hace su único trabajo muy, muy bien.


Linux
  1. comando linux mv

  2. Linux du comando

  3. Comando IP de Linux

  4. Comando cd de linux

  5. El comando de localización en Linux

El comando del temporizador en Linux

El comando curl de Linux

Ejemplos esenciales del comando ps en Linux

¿Qué es el comando matar en Linux?

Entendiendo el comando time en Linux

Uso del comando grep en Linux