Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
---|---|---|
Indietro | Capitolo 7. Verifiche | Avanti |
il file esiste
il file esiste
Effetto identico a -e, ma ne è stato "deprecato" [1] e scoraggiato l'utilizzo.
il file è un file regolare (non una directory o un file di dispositivo)
il file ha dimensione superiore a zero
il file è una directory
il file è un dispositivo a blocchi (floppy, cdrom, ecc.)
il file è un dispositivo a caratteri (tastiera, modem, scheda audio, ecc.)
il file è una pipe
il file è un link simbolico
il file è un link simbolico
il file è un socket
il file (descrittore) è associato ad un terminale
Questa opzione può essere utilizzata per verificare se lo stdin ([ -t 0 ]) o lo stdout ([ -t 1 ]) in un dato script è un terminale.
il file ha il permesso di lettura (per l'utente che esegue la verifica)
il file ha il permesso di scrittura (per l'utente che esegue la verifica)
il file ha il permesso di esecuzione (per l'utente che esegue la verifica)
è impostato il bit set-group-id (sgid) su un file o directory
Se una directory ha il bit sgid impostato, allora un file creato in quella directory appartiene al gruppo proprietario della directory, non necessariamente al gruppo dell'utente che ha creato il file. Può essere utile per una directory condivisa da un gruppo di lavoro.
è impostato il bit set-user-id (suid) su un file
Un file binario di proprietà di root con il bit set-user-id impostato funziona con i privilegi di root anche quando è invocato da un utente comune. [2] È utile con eseguibili (come pppd e cdrecord) che devono accedere all'hardware del sistema. Non impostando il bit suid, questi eseguibili non potrebbero essere invocati da un utente diverso da root.
-rwsr-xr-t 1 root 178236 Oct 2 2000 /usr/sbin/pppd |
è impostato lo sticky bit
Comunemente conosciuto come sticky bit, il bit save-text-mode è un tipo particolare di permesso. Se un file ha il suddetto bit impostato, quel file verrà mantenuto nella memoria cache, per consentirne un accesso più rapido. [3] Se impostato su una directory ne limita il permesso di scrittura. Impostando lo sticky bit viene aggiunta una t all'elenco dei permessi di un file o di una directory.
drwxrwxrwt 7 root 1024 May 19 21:26 tmp/ |
siete il proprietario del file
l'id di gruppo del file è uguale al vostro
il file è stato modificato dall'ultima volta che è stato letto
il file f1 è più recente del file f2
il file f1 è meno recente del file f2
i file f1 e f2 sono hard link allo stesso file
"not" -- inverte il risultato delle precedenti opzioni di verifica (restituisce vero se la condizione è assente).
Esempio 7-4. Ricerca di link interrotti (broken link)
#!/bin/bash # broken-link.sh # Scritto da Lee Bigelow <ligelowbee@yahoo.com> # Utilizzato con il consenso dell'autore. # Uno script di pura shell per cercare i link simbolici "morti" e visualizzarli #+ tra virgolette, in modo tale che possano essere trattati e dati in pasto a #+ xargs :) es. broken-link.sh /unadirectory /altradirectory | xargs rm # #Il seguente, tuttavia, è il metodo migliore: # #find "unadirectory" -type l -print0|\ #xargs -r0 file|\ #grep "broken symbolic"| #sed -e 's/^\|: *broken symbolic.*$/"/g' # #ma non sarebbe bash pura, come deve essere. #Prudenza: state attenti al file di sistema /proc e a tutti i link circolari! ############################################################################# # Se nessun argomento viene passato allo script, la directory di ricerca #+ directorys viene impostata alla directory corrente. Altrimenti directorys #+ viene impostata all'argomento passato. ######################################## [ $# -eq 0 ] && directorys=`pwd` || directorys=$@ # Implementazione della funzione verlink per cercare, nella directory # passatale, i file che sono link a file inesistenti, quindi visualizzarli #+ tra virgolette. Se uno degli elementi della directory è una sottodirectory, #+ allora anche questa viene passata alla funzione verlink. ########## verlink () { for elemento in $1/*; do [ -h "$elemento" -a ! -e "$elemento" ] && echo \"$elemento\" [ -d "$elemento" ] && verlink $elemento # Naturalmente, '-h' verifica i link simbolici, '-d' le directory. done } # Invia ogni argomento passato allo script alla funzione verlink, se è una #+ directory valida. Altrimenti viene visualizzato un messaggio d'errore e le #+ informazioni sull'utilizzo. ############################# for directory in $directorys; do if [ -d $directory ] then verlink $directory else echo "$directory non è una directory" echo "Utilizzo: $0 dir1 dir2 ..." fi done exit 0 |
Vedi anche Esempio 28-1, Esempio 10-7, Esempio 10-3, Esempio 28-3 e Esempio A-1 che illustrano gli utilizzi degli operatori di verifica di file.
[1] | Dall'edizione del 1913 del Webster's Dictionary:
| |
[2] | Fate attenzione che il bit suid impostato su file binari (eseguibili) può aprire falle di sicurezza. Il bit suid non ha alcun effetto sugli script di shell. | |
[3] | Nei moderni sistemi UNIX, lo sticky bit viene utilizzato solo sulle directory e non più sui file. |