• seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Come ordinare i files in base alla data di creazione, ultima modifica o accesso, in Linux. I comandi ls, find, sort.

di :: 18 febbraio 2020 11:13
Come ordinare i files in base alla data di creazione, ultima modifica o accesso, in Linux. I comandi ls, find, sort.

In questo articolo vediamo come individuare, nel nostro filesystem Linux, uno o più files, creati o modificati in una particolare data o orario, e di come ordinare il risutato della nostra ricerca, utilizzando delle istruzioni da linea di comando.

Utilizzeremo per i nostri esempi 3 comandi: ls, sort e find

Ordinare i files in base alla data di creazione o modifica

A questo scopo utilizziamo il comando "ls", abbreviazione di "list", seguito dalle seguenti opzioni:

  • l: serve a visualizzare varie informazioni dei files tra cui i premessi, il propriteario, il gruppo, il peso del file e la data
  • t: serve ad ordinare la lista per data, in modalità decrescente, quindi in testa andrà la data più recente
ls -lt

Il risultato sarà

-rw-r--r-- 1 apache apache 360 17 feb 23.35 2020-02-17.txt
-rw-r--r-- 1 apache apache 495 18 feb 10.35 2020-02-18.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-cartdeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-code.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-deltmpfam.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-deltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-orddeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 01.35 check-statsday.txt
-rw-r--r-- 1 apache apache  10 18 feb 01.35 check-statsieri.txt

Volendo ribaltare l'ordinamento aggiungiamo l'opzione "r" (reverse)

ls -ltr

Ecco il risultato: i file più vecchi verranno mostrati per primi

-rw-r--r-- 1 apache apache 360 17 feb 23.35 2020-02-17.txt
-rw-r--r-- 1 apache apache  10 18 feb 01.35 check-statsieri.txt
-rw-r--r-- 1 apache apache  10 18 feb 01.35 check-statsday.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-code.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-orddeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-deltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-cartdeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 05.35 check-deltmpfam.txt
-rw-r--r-- 1 apache apache 495 18 feb 10.35 2020-02-18.txt

Se vogliamo estendere il concetto di ultima modifica, anche a modifiche relative ad informazioni di stato quali proprietario, gruppo, autorizzazioni, dimensioni, ... dobbiamo utilizzare l'opzione "c", abbreviazione di "ctime".

ls -ltc

Ecco il risutlato

-rw-r--r-- 1 apache apache 540 18 feb 11.35 2020-02-18.txt
-rw-r--r-- 1 apache apache 360 18 feb 11.35 2020-02-17.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-cartdeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-code.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-deltmpfam.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-deltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-orddeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-statsday.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-statsieri.txt

Ordinare i files in base alla data di ultimo accesso

Per visualizzare la lista dei files ordinate per data di ultimo accesso, utilizziamo l'opzione "u", abbreviazione di "use".

ls -ltu

Il risulato sarà

-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-cartdeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-code.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-deltmpfam.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-deltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-orddeltmp.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-statsday.txt
-rw-r--r-- 1 apache apache  10 18 feb 11.35 check-statsieri.txt
-rw-r--r-- 1 apache apache 540 18 feb 00.35 2020-02-18.txt
-rw-r--r-- 1 apache apache 360 17 feb 16.35 2020-02-17.txt

Ordinare il risultato di "ls -l" per data

Introduciamo adesso il comando "sort" ("ordina") da applicare al risultato di "ls -l"

Prima di tutto, rivediamo il risultato di un semplice ls -l (mi limito ad una parte di estrazione)

drwxr-xr-x. 2 root   root         176 24 lug  2019 anaconda
drwx------. 2 root   root          99 18 feb 08.11 audit
-rw-------. 1 root   root           0 25 lug  2019 boot.log
-rw-------  1 root   root       35041 25 lug  2019 boot.log-20190725
-rw-------  1 root   utmp   141094656 18 feb 13.20 btmp
-rw-------  1 root   utmp   178138368  1 feb 04.59 btmp-20200201
drwxr-xr-x. 2 chrony chrony         6 12 apr  2018 chrony
-rw-------  1 root   root        3886 18 feb 13.20 cron
-rw-------  1 root   root       19775 15 feb 08.16 cron-20200215
-rw-------  1 root   root       13969 16 feb 04.32 cron-20200216
-rw-------  1 root   root       20521 17 feb 09.18 cron-20200217
-rw-------  1 root   root       16062 18 feb 07.49 cron-20200218
-rw-r--r--  1 root   root       37519 24 lug  2019 dmesg
-rw-r--r--  1 root   root       37417 24 lug  2019 dmesg.old
.............

Il risultato, come possiamo vedere, è disposto su più colonne, esattamente 9 colonne.

Vogliamo ordinare in base per data, utilizzando il comando sort con alcune opzioni

ls -l | sort -k7M -k6n

k7: k serve ad identificare la chiave di ordinamento, cioè su quale delle nostre colonne applicare l'ordinamento. Abbiamo scelto la settima colonna quindi k7, cioè la colonna del mese
M: identifica il metodo di ordinamento della settima colonna, per mese.

Poi riordiniamo per
k6: mi baso sulla sesta colonna, cioè la colonna relativa giorno
n: ordino numericamente la sesta colonna

Ecco il risultato (mi limito ad una parte di estrazione)

-rw-------  1 root   root           0  1 gen 08.09 yum.log
-rw-------  1 root   utmp   178138368  1 feb 04.59 btmp-20200201
-rw-------  1 root   root           0 14 feb 04.47 spooler-20200215
-rw-------  1 root   root           0 15 feb 08.16 spooler-20200216
-rw-------  1 root   root       19775 15 feb 08.16 cron-20200215
-rw-------  1 root   root       23558 15 feb 08.16 messages-20200215
-rw-------  1 root   root       26852 15 feb 07.40 maillog-20200215
-rw-------  1 root   root    78336829 15 feb 08.16 fail2ban.log-20200215
-rw-------  1 root   root     8327458 15 feb 08.16 secure-20200215
-rw-------  1 root   root           0 16 feb 04.32 spooler-20200217
-rw-------  1 root   root       12886 16 feb 04.32 messages-20200216
..................

Abbiamo introdotto il comando sort, che a breve riprenderemo.
Adesso vediamo come utilizzare il comando find per le nostre ricerche.

Ordinare i files per mese

In questo esempio, vogliamo ordinare tutti i files presenti nella cartella "/var/log"

find /var/log -type f -printf "\n%Ab %p" | head -n 10

Vediamo nel dettaglio il suo significato

find /var/log: cerca nella cartella /var/log
-type f: cerco solo dei files
-printf "\n%Ab %p": voglio visualizzare una lista, con un file per riga (\n) che visualizzi il mese (%Ab) e il nome del file (%p)
head -n 10: voglio vedere solo 10 files

Il risultato sarà il seguente

Dec /usr/lib/nvidia/pre-install
Dec /usr/lib/libcpufreq.so.0.0.0
Apr /usr/lib/libchromeXvMCPro.so.1.0.0
Apr /usr/lib/libt1.so.5.1.2
Apr /usr/lib/libchromeXvMC.so.1.0.0
Apr /usr/lib/libcdr-0.0.so.0.0.15
Dec /usr/lib/msttcorefonts/update-ms-fonts
Nov /usr/lib/ldscripts/elf32_x86_64.xr
Nov /usr/lib/ldscripts/elf_i386.xbn
Nov /usr/lib/ldscripts/i386linux.xn

Abbiamo ottenuto una lista, divisa su due colonne: la prima con il mese, la seconda con il nome del file

Se adesso vogliamo ordinare il risultato ottenuto per mese, utilizziamo il comando sort in questo modo

find /var/log -type f -printf "\n%Ab %p" | head -n 10 | sort -k 1M

k: k serve ad identificare la chiave di ordinamento, cioè su quale delle due colonne ottenute precedentemente applicare l'ordinamento.
1: abbiamo scelto la prima colonna, quella che presenta il mese
M
: identifica il metodo di ordinamento della prima colonna, per mese.
Potremmo anche scrivere k1M tutto assieme.

Ecco il risultato

feb /var/log/audit/audit.log.1
feb /var/log/audit/audit.log.2
feb /var/log/audit/audit.log.3
feb /var/log/audit/audit.log.4
feb /var/log/lastlog
lug /var/log/grubby_prune_debug
lug /var/log/tallylog
lug /var/log/tuned/tuned.log
lug /var/log/wtmp

Ordinare i files per data di ultimo accesso

Riprendiamo l'esempio precedente e modifichiamolo come segue

find /var/log -type f -printf "\n%AD %AT %p" | head -n 10

La lista che adesso vogliamo ottenere deve visualizzare la data di ultimo accesso "%AD", l'orario di ultimo accesso "%AT" e il nome del file "%p".

Ecco il risultato (la data visualizzata nella prima colonna rappresenta il mese, il giorno e l'anno)

07/24/19 12:39:32.5745365390 /var/log/tallylog
07/24/19 12:39:39.1628274950 /var/log/grubby_prune_debug
02/18/20 11:23:35.4275652480 /var/log/lastlog
07/24/19 12:39:50.3403211220 /var/log/wtmp
07/24/19 12:46:37.9350649710 /var/log/tuned/tuned.log
02/17/20 06:44:51.9133584380 /var/log/audit/audit.log.4
02/17/20 12:17:01.3952619590 /var/log/audit/audit.log.3
02/17/20 19:05:25.6964568940 /var/log/audit/audit.log.2
02/18/20 03:27:38.4339185610 /var/log/audit/audit.log.1

Ordiniamo questo risultato applicando l'ordinamento sulla prima colonna

find /var/log -type f -printf "\n%AD %AT %p" | head -n 10 | sort -k 1.7nr -k 1.1,2nr - k 1.4,5nr

In questo caso abbiamo utilizzato più ordinamenti successivi:

k 1.7nr: ordina per la prima colonna (k1), considerandola dal settimo carattere (7) alla fine della colonna, cioè l'anno, ed applico un ordinamento numerico (n), inverso (r) cioè dall'anno più recente al più vecchio
k 1.1,2nr: ordina per la prima colonna (k1), considerandola dal primo al secondo carattere (1,2), cioè il mese, è un ordinamento numerico (n), in ordine inverso (r) quindi dal mese più recente al più vecchio
k 1.4,5nr: infine ordina il tutto per la prima colonna (k1), considerando solo dal quarto al quinto carattere (4,5), cioè il giorno, è un ordinamento numerico (n), in ordine inverso (r) cioè dal giorno più recente al più vecchio.

Ecco il risultato

02/18/20 03:27:38.4339185610 /var/log/audit/audit.log.2
02/18/20 08:11:13.7399532650 /var/log/audit/audit.log.1
02/18/20 11:23:35.4275652480 /var/log/lastlog
02/17/20 12:17:01.3952619590 /var/log/audit/audit.log.4
02/17/20 19:05:25.6964568940 /var/log/audit/audit.log.3
07/24/19 12:39:32.5745365390 /var/log/tallylog
07/24/19 12:39:39.1628274950 /var/log/grubby_prune_debug
07/24/19 12:39:50.3403211220 /var/log/wtmp
07/24/19 12:46:37.9350649710 /var/log/tuned/tuned.log

Ordinare i files per orario

Modifichiamo il nostro esempio così

find /var/log -type f -printf "\n%AT %p" | head -n 10

La lista che vogliamo ottenere deve visualizzare solo l'orario di ultimo accesso "%AT" e il nome del file "%p".

A questa lista applichiamo, ad esempio, l'ordinamento numerico basato sulla prima cifra dell'orario

find /var/log -type f -printf "\n%AT %p" | head -n 10 | sort -k1.1n

Il risultato:

03:27:38.4339185610 /var/log/audit/audit.log.1
06:44:51.9133584380 /var/log/audit/audit.log.4
11:23:35.4275652480 /var/log/lastlog
12:17:01.3952619590 /var/log/audit/audit.log.3
12:39:32.5745365390 /var/log/tallylog
12:39:39.1628274950 /var/log/grubby_prune_debug
12:39:50.3403211220 /var/log/wtmp
12:46:37.9350649710 /var/log/tuned/tuned.log
19:05:25.6964568940 /var/log/audit/audit.log.2

Abbiamo visto una panoramica relativa all'utilizzo di ordinamento dei files con alcuni esempi, che ovviamente potete e dovete sviluppare secondo le vostre necessità.

Buon lavoro!

Potrebbe interessarti

 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

 
 
 
x

ATTENZIONE