Tutoriales

Ordene archivos por fecha y hora usando el comando ls en Linux

una llanura ls -l Los archivos se enumeran alfabéticamente, por lo que los archivos que se modificaron hace cinco minutos se pierden en un directorio largo. Aquí se explica cómo ordenar por modificación, acceso, cambio y hora de nacimiento. ls -t, -r, -u, -cy find.

Enumerar el contenido de un directorio es una de las primeras cosas que hace en cualquier directorio. linux servidor, y la mayoría de las veces ls es el comando que desea ejecutar.

Pero por defecto, ls Ordena la salida alfabéticamente por nombre de archivo, esto está bien para directorios de inicio pequeños, pero no es tan útil cuando está activado /etc o /var/log y me pregunto qué ha cambiado recientemente.

Esto ocurre a menudo en el trabajo real de gestión del sistema. El servicio dejó de funcionar después de una actualización del paquete y desea saber qué perfiles se acaban de tocar. La tarea de copia de seguridad se ejecuta todas las noches y el script debe seleccionar el archivo más reciente. El directorio de registro contiene cientos de archivos rotativos y a usted solo le importan los archivos en los que está escribiendo actualmente.

este ls comando La salida se puede ordenar por tiempo usando un solo indicador y se puede ordenar por varias marcas de tiempo diferentes, no solo por la hora de la última modificación. Una vez que sepa qué marca de tiempo se utiliza para cada indicador, encontrar el archivo más nuevo o más antiguo en cualquier directorio solo le llevará unos segundos.

Cómo realizar un seguimiento de las marcas de tiempo de los archivos en Linux

Antes de ordenar por hora, es útil saber qué horas linux en realidad almacena un archivo porque cada ls Al ordenar banderas se leen diferentes banderas, y elegir la bandera incorrecta le dará un orden aparentemente aleatorio.


Cada archivo tiene estas marcas de tiempo, almacenadas en su inodo (el pequeño registro en el disco que contiene los metadatos del archivo):

  • mtime (tiempo de modificación) cambia cuando cambia el contenido del archivo. es hora ls -l Pantalla predeterminada.
  • atime (tiempo de acceso) cambia a medida que se lee el archivo, aunque la mayoría de los sistemas sólo lo actualizan ocasionalmente, como se explica a continuación.
  • ctime (hora de cambio) Cambia cuando cambian los metadatos del archivo (como sus permisos, propietario o nombre) y cuando cambia su contenido. Este no es el tiempo de la creación, lo cual es una confusión común.
  • btime (Hora de nacimiento) Registra la hora en que se creó el archivo en los sistemas de archivos compatibles (como ext4, XFS y Btrfs).

La forma más sencilla de ver los cuatro al mismo tiempo es Comandos de estadísticasasí que ejecutémoslo /etc/hosts:

stat /etc/hosts

producción:

  File: /etc/hosts
  Size: 268       	Blocks: 8          IO Block: 4096   regular file
Device: 252,1	Inode: 1310834     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2026-11-02 08:55:10.412367219 +0530
Modify: 2026-10-28 14:03:22.180415667 +0530
Change: 2026-10-28 14:03:22.180415667 +0530
 Birth: 2026-09-14 11:20:47.904112031 +0530

El tamaño, los números de inodo y las líneas de dispositivo diferirán en su sistema, así que concéntrese en las cuatro líneas de tiempo inferiores. si Birth Mostrar guión (-), su sistema de archivos o kernel no informará la hora de creación del archivo.

Los tiempos de acceso requieren atención adicional. La mayoría de las distribuciones de Linux montan sistemas de archivos de forma predeterminada con la opción relatime, lo que significa que el kernel solo se actualiza cada vez si la hora de acceso anterior es anterior a la hora de modificación o cambio del archivo, o tiene más de 24 horas. Esto ahorra escrituras en el disco en cada lectura, pero también significa que leer un archivo dos veces en la misma tarde no lo moverá a la parte superior de la lista de tiempos de acceso.

Si esto finalmente elimina la diferencia entre mtime y ctime Para ti, compártelo con los que todavía piensan. ctime Indica el tiempo de creación.

Leer columnas de fecha y hora de la salida ls -l

Ahora que sabes qué marcas de tiempo, veamos dónde ls Se muestran porque cada uno de los ejemplos de clasificación siguientes depende de la lectura correcta de esta columna.

este -l Las opciones se proporcionan en formato de lista larga, incluidos permisos, número de enlaces, propietario, grupo, tamaño, hora de modificación y nombre:

ls -l /etc/nginx

producción:

total 68
drwxr-xr-x 2 root root 4096 Feb  9  2026 conf.d
-rw-r--r-- 1 root root 1125 Dec  1  2023 fastcgi.conf
-rw-r--r-- 1 root root 1055 Dec  1  2023 fastcgi_params
-rw-r--r-- 1 root root 2837 Dec  1  2023 koi-utf
-rw-r--r-- 1 root root 2223 Dec  1  2023 koi-win
-rw-r--r-- 1 root root 5465 Dec  1  2023 mime.types
drwxr-xr-x 2 root root 4096 Feb  9  2026 modules-available
drwxr-xr-x 2 root root 4096 Feb  9  2026 modules-enabled
-rw-r--r-- 1 root root 1446 Dec  1  2023 nginx.conf
-rw-r--r-- 1 root root  180 Dec  1  2023 proxy_params
-rw-r--r-- 1 root root  636 Dec  1  2023 scgi_params
drwxr-xr-x 2 root root 4096 Sep 23 12:13 sites-available
drwxr-xr-x 2 root root 4096 Apr 19  2026 sites-enabled
drwxr-xr-x 2 root root 4096 Sep 23 12:13 snippets
-rw-r--r-- 1 root root  664 Dec  1  2023 uwsgi_params
-rw-r--r-- 1 root root 3071 Dec  1  2023 win-utf

Tenga en cuenta que algunas líneas muestran la hora, p. 12:13mientras que algunos muestran el año, como 2026. ÑU ls Muestra la hora de los archivos modificados en los últimos seis meses y cambia al año de los archivos más antiguos, por lo que Dec 01 2023 Simplemente significa que el archivo es lo suficientemente antiguo como para que falte la hora exacta. Veremos cómo mostrar siempre la marca de tiempo completa en el Ejemplo 3.

Ejemplo práctico de clasificación de la salida de ls por tiempo

Teniendo en cuenta las columnas de marca de tiempo y fecha, podemos comenzar a ordenar. Los siguientes ejemplos se basan entre sí y están extraídos de la vida diaria. ls -lt Ordena todo el árbol de directorios.

Ejemplo 1: use ls -lt para ordenar archivos por hora de modificación

este -t las opciones dicen ls Ordenar por hora, la última primero, la hora de modificación predeterminada. combinar -lque es la forma más rápida de ver los cambios recientes en un directorio, p. /etcque es donde te ocupas después de que una actualización o un cambio de configuración salga mal.

desde /etc Guarde cientos de entradas y canalice la salida al encabezado para que solo se muestren las primeras líneas:

ls -lt /etc | head -n 6

producción:

total 1092
-rw-r--r--  1 root root    95381 Nov  2 09:12 ld.so.cache
drwxr-xr-x  3 root root     4096 Nov  2 09:11 nginx
drwxr-xr-x  2 root root     4096 Nov  2 09:11 alternatives
-rw-r-----  1 root shadow   1302 Nov  1 18:40 shadow
-rw-r--r--  1 root root     2914 Nov  1 18:40 passwd

La primera línea, totales el espacio en disco utilizado por los archivos enumerados en bloques de 1K, por lo que head -n 6 Se le proporciona la fila más las cinco últimas entradas. En este ejemplo puedes ver que algo en el directorio nginx ha cambiado 09:11y la contraseña y la sombra se cambiaron la noche anterior, lo que generalmente significa que se agregó o modificó la cuenta de usuario.

También puedes escribir el mismo tipo usando una forma más larga y legible. --sort=timelo cual es conveniente en scripts que otros leerán:

ls -l --sort=time /etc | head -n 6

Ejemplo 2: use ls -ltr para enumerar los archivos más recientes al final

El primer ejemplo coloca los archivos más nuevos en la parte superior, lo que funciona bien con el encabezado, pero en un directorio con cientos de archivos, la parte superior de la salida se desplazará fuera de la pantalla. añadir -r Invierta el orden para que los archivos más nuevos terminen en la parte inferior, justo encima del mensaje, y pueda leerlos sin tener que desplazarse.

Esta es probablemente la forma de comando más utilizada en el servidor, especialmente en el directorio de registro:

ls -ltr /var/log

producción:

...
-rw-r-----  1 syslog adm    184322 Nov  2 08:30 auth.log.1
drwxr-xr-x  2 root   root     4096 Nov  2 09:05 nginx
-rw-r-----  1 syslog adm     48210 Nov  2 09:18 auth.log
-rw-r-----  1 syslog adm    912644 Nov  2 09:20 syslog

Las últimas líneas muestran el archivo en el que se está escribiendo actualmente, lo que le indica qué registro abrir primero al solucionar un problema inmediato.

si ls -ltr Simplemente le evita tener que desplazarse por un directorio de registro largo y compartirlo con sus compañeros de equipo, quienes seguirán abriendo cada archivo de registro uno por uno.

Ejemplo 3: utilice –full-time para mostrar la fecha y hora completas

Antes vimos ls -l Oculta la hora de archivos antiguos y nunca muestres segundos. Esto no es lo suficientemente preciso cuando dos archivos cambian en el mismo minuto o cuando necesita hacer coincidir los archivos con las marcas de tiempo en los registros.

este --full-time La opción soluciona este problema imprimiendo la fecha completa, la hora en nanosegundos y el desplazamiento de la zona horaria, y es compatible con -t:

ls -lt --full-time /etc/nginx

producción:

total 64
-rw-r--r-- 1 root root 1477 2026-11-02 09:11:37.551209183 +0530 nginx.conf
drwxr-xr-x 2 root root 4096 2026-10-28 14:10:02.118540871 +0530 conf.d
drwxr-xr-x 2 root root 4096 2026-10-28 14:10:02.118540871 +0530 sites-available
drwxr-xr-x 2 root root 4096 2026-10-28 14:10:02.118540871 +0530 sites-enabled
-rw-r--r-- 1 root root 1125 2026-04-14 10:02:18.000000000 +0530 fastcgi.conf
-rw-r--r-- 1 root root 1055 2026-04-14 10:02:18.000000000 +0530 fastcgi_params

Los archivos de paquetes a menudo muestran .000000000 Porque el tiempo almacenado en el paquete solo puede tener una precisión de segundos. Si la marca de tiempo completa de nanosegundos supera sus necesidades, --time-style Le permite elegir un formato más corto, como long-iso, que proporciona fechas y horas ordenables sin segundos:

ls -lt --time-style=long-iso /etc/nginx

producción:

total 64
-rw-r--r-- 1 root root 1477 2026-11-02 09:11 nginx.conf
drwxr-xr-x 2 root root 4096 2026-10-28 14:10 conf.d

Ejemplo 4: Ordenar por visita, cambio o hora de nacimiento

Hasta ahora, cada ejemplo se ha ordenado por hora de modificación. Otras marcas de tiempo que encontramos al usar stat también son útiles, por ejemplo, cuando desea saber qué scripts en un directorio se ejecutaron realmente recientemente o qué archivos cambiaron sus permisos.

Combina estas opciones con -l y -t:

  • -u Mostrar hora de acceso en lugar de hora de modificación y ordenar por hora de acceso -t También dado. en sí mismo -lmuestra el tiempo de acceso pero aún se ordena por nombre, así que recuerda agregar -t.
  • -c Cambiar la hora funciona de la misma manera (ctime), lo cual es útil después de un chmod o chown que no ha tocado el contenido del archivo.
  • --time=birth Ordene por tiempo de compilación y muestre el tiempo de compilación del sistema de archivos y el informe central.

Por ejemplo, vea qué scripts /usr/local/bin Contenido leído recientemente, ordenado por tiempo de acceso:

ls -ltu /usr/local/bin

Para buscar archivos en la raíz web cuyos permisos o propiedad hayan cambiado recientemente, ordénelos por hora de cambio:

ls -ltc /var/www/html

porque relatime El comportamiento explicado anteriormente trata el orden del tiempo de acceso como una guía aproximada en lugar de un registro preciso de cada lectura.

Ejemplo 5: obtener el archivo o directorio más reciente en el script

Hasta ahora, los ejemplos se han leído en una pantalla, pero el orden cronológico también puede resultar útil en los guiones. Una situación común es un directorio de respaldo donde un trabajo nocturno escribe nuevos archivos y otro script solo necesita copiar o verificar el último archivo.

desde -t Primero ordene el último y obtenga la primera línea del resultado para obtener el archivo más reciente:

latest=$(ls -t /srv/backups/*.tar.gz | head -n 1)
echo "Latest backup: $latest"

producción:

Latest backup: /srv/backups/web-2026-11-02.tar.gz

La misma idea se aplica a los directorios. este -d las opciones dicen ls enumerar el directorio en sí en lugar de su contenido, y */ pattern Solo coinciden los directorios, por lo que esto muestra las carpetas de proyectos modificadas más recientemente:

ls -ltd /srv/projects/*/

Recuerde, solo es seguro analizar la salida de ls si el nombre del archivo comprimido está bajo su control, como el nombre de la copia de seguridad con fecha anterior. Los nombres de los archivos comprimidos que contienen nuevas líneas pueden dañar los resultados, por lo que el siguiente ejemplo utiliza buscar si no puede determinar el nombre.

Ejemplo 6: use buscar para ordenar archivos en un subdirectorio por tiempo

Hasta ahora, cada ejemplo ha ordenado archivos en un directorio. si lo intentas ls -ltR En el árbol de directorios, ls Cada subdirectorio todavía está ordenado individualmente, por lo que no puede ver qué archivo en todo el árbol se modificó por última vez.

Para tal fin, encontrar comando es la herramienta adecuada porque -printf Opción para imprimir la hora de modificación de cada archivo en un formato ordenable. este %T+ El comando imprime la hora como YYYY-MM-DD+HH:MM:SSque se ordena correctamente como texto sin formato, y %p Ruta de impresión:

sudo find /var/log -type f -printf '%T+ %p\n' | sort -r | head -n 5

producción:

2026-11-02+09:20:14.5521378870 /var/log/syslog
2026-11-02+09:20:14.1189022310 /var/log/journal/8f3c2a.../system.journal
2026-11-02+09:18:41.7703315260 /var/log/auth.log
2026-11-02+09:05:12.3341908870 /var/log/nginx/access.log
2026-11-02+08:30:00.9921045310 /var/log/nginx/error.log

usamos sudo Esto se debe a que varios directorios de registro solo pueden ser leídos por el grupo raíz o administrador sin él. find imprimir Permission denied para estos directorios y omítelos. clasificar -r Coloque primero el archivo más nuevo y luego diríjase -n 5 Mantenga los cinco más cercanos en todo el árbol.

Si solo necesita los archivos que cambiaron en la ventana más reciente en lugar de la lista ordenada completa, busque /etc -type f -mmin -60 Enumere cada archivo a continuación /etc Modificado en los últimos 60 minutos, que suele ser la forma más rápida de responder «¿Qué acaba de cambiar en la actualización?»

Si esta combinación de búsqueda y clasificación le ayuda a realizar un seguimiento de los cambios recientes en todo su árbol de directorios, compártala con cualquiera que todavía esté ejecutando ls -ltR y pergaminos.

Consejos para ordenar por hora del día usando ls

Ahora que puede ordenar por cualquier marca de tiempo, algunos pequeños hábitos pueden hacer que estos comandos sean más rápidos de usar y evitar resultados confusos.

si entras ls -ltr Varias veces al día, agregue un alias corto a su cuenta ~/.bashrc Por eso siempre está disponible. extra -h La bandera imprime el tamaño, p.e. 1,2 M, en lugar del número bruto de bytes, lo que hace que la lista sea más fácil de escanear:

echo "alias lt="ls -ltrh"" >> ~/.bashrc
source ~/.bashrc

Cuando compare horas en diferentes servidores, recuerde que ls muestra la hora en la zona horaria local del servidor. Si un servidor se ejecuta en UTC y otro servidor se ejecuta en IST, el mismo tiempo tendrá una diferencia de cinco horas y media. Al configurar la variable TZ para un solo comando se muestra la hora UTC para que pueda compararlas directamente:

TZ=UTC ls -lt --full-time /etc/nginx

Las versiones recientes de Ubuntu tienen uutils coreutils basados ​​en Rust como predeterminados lsa pesar de LokiLinux, AlmaLinuxy RHEL Utilice las herramientas básicas de GNU.

Las opciones de este artículo se comportan de la misma manera en la clasificación diaria, pero algunos pequeños detalles (como el espaciado exacto de la salida) pueden diferir, así que verifique la salida en su propio sistema antes de confiar en ella en su script.

Finalmente, si el archivo que acaba de copiar muestra una hora de modificación anterior, esto es normal. Comandos como cp -p, rsync -ay tar Fetch conserva intencionalmente la hora de modificación original, por lo que los archivos se ordenan por la última vez que se modificó su contenido, no por la hora en que llegaron al servidor.

Por otro lado, su ctime mostrará el tiempo de copia, que es otro caso. ls -ltc Dándote las respuestas que buscas.

en conclusión

Ahora puede ordenar cualquier listado de directorio por modificación, acceso, cambio o hora de nacimiento usando ls -t y -u, -co --timeinvertir el orden -re imprimir la marca de tiempo exacta --full-time.

Para todo el árbol de directorios, find y -printf '%T+ %p\n' y sort Muestra inmediatamente los archivos más recientes en cada subdirectorio.

Si desea familiarizarse con el resto de la línea de comando diaria, nuestro Más de 100 cursos de instrucción básica de Linux existir ProfesionalTecmint cubrir ls, find, sort, staty más con ejemplos prácticos.

Cuando esté listo para convertir frases ingeniosas como el ejemplo de copia de seguridad en scripts confiables, Bash Scripts for Beginners lo guiará paso a paso.

Nos encantaría saber cómo ordenas por tiempo en tu servidor. ¿Eres dependiente? ls -ltr¿O ha recurrido a la mayoría de esos trabajos?

¿Alguna vez te has confundido con relatime o ctime, que no significa tiempo de creación? No dudes en compartir tus alias favoritos o publicar una lista confusa en los comentarios y te ayudaremos a leerla.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba