Shell Unix:Gestione di file e cartelle
Indice
Argomenti correlati
File e Cartelle
- cd <cartella>
- si muove alla <cartella> (con path relativo o assoluto)
- cd ..
- si muove alla cartella superiore
- cd -
- si torna alla cartella dove si era prima
- cp
- copia file e directory, questo comando ci permette di copiare un file o una directory (copy).
- -r copia le directory e le sottodirectory ricorsivamente
- -f forza la copia sovrascrivendo i file
- -i interattivo, chiede prima di sovrascrivere
- Per aprofondire Il comando cp →
- cp file1 cart1
- copia file1 dentro la directory cart1
- cp -r cart1 cart2
- copia tutta la directory cart1 dento a cart2
- mv
- muove o rinomina un file o una directory, questo comando è possibile spostare file o directory (move). Può essere anche utilizzato per rinominare un file o una directory.
- -i chiede la conferma
- -f forza la copia sovrascrivendo i file
- Per aprofondire Il comando mv→
- mv vecchio nuovo
- rinomina il file vecchio in nuovo
- mv file1 cart1
- sposta il file file1 dentro la directory cart1
- Nota: il comando mv non sovrascrive le cartelle, per ovviare a questo, si puñ utilizzare il comando di copia cp.
- mkdir <cartella>
- crea la cartella
- -p crea anche i parent se non esistono
- rmdir <cartella>
- elimina la cartella, se è vuota
- rm <file>
- elimina il file
- -fr genera un'aziomne ricorsiva, quindi:
- rm -fr <cartella>
- elimina la cartella e il suo contenuto ricorsivamente
- ln -s <file_orifginale> <link>
- crea un link simbolico chiamato <link> che punta a <file_orifginale>
- ln -s /root/bin/firewall.sh /etc/init.d/firewall
- ls
- elenca file e cartelle
- -l mostra i file in ordine alfabetico
- -a mostra anche i file nascosti
- -F Inserisce uno slash alla fine del nome delle cartelle contenute nella directory e un asterisco alla fine del nome dei file eseguibili
- -r inverte il senso dell’ordinamento
- -t ordina secondo l’orario di modifica.
Per avere la lista delle sole directory: ls | grep ^d
- ll
- è un alias frequente che indica ls -l
- ll –tr
- ordina i file per data, utile per visionare gli ultimi file scritti.
- touch
- crea un file vuoto
- > <nome-file>
- utilizzato dopo un comando, serve per creare il file specificato con l'output (di testo) del comando.
- >> <nome-file>
- utilizzato dopo un comando, serve per aggiungere l'output (di testo) del comando al file specificato.
- | (pipe)
- serve per aggiungere un comando su una stessa linea di comando. Attraverso questa opzione il sistema applicherà il secondo comando all'output del primo, senza la necessità di passare per un file di passaggio.
GREP
- grep <schema> <nome_file>
- serve per cercare all'interno di un file quelle linee che rispettano un certo schema.
- -v recupera le linee che non corrispondono allo schema
- -n recupera la linea corrispondente allo schema e riporta anche il numero della linea
- -l produce in output una lista dei files che contengono almeno una linea corrisponedente allo schema (utile nel caso di ricerche fatte su più file)
- -c produce in output il conteggio delle linee corrispondenti allo schema all'interno del file o dei file oggetto della ricerca
- -i rende la ricerca case-insensitive
- -f È un'opzione molto interessante. Da inserire al posto dello schema seguita da un nome di file. Utilizza le righe contenute nel file come schema per l'operazione di ricerca. Utilizzato in concomitanza con l'opzione -v può servire per eliminare da un file tutte le righe che coincidono con quelle contenute in un altro file.
- GREP con più argomenti in OR
- .... | grep -E 'arg1|arg2'
MORE
- more
- serve per visualizzare l'output di qualsiasi comando una schermata o una riga alla volta.
cat file_1 | more = more file_1
- more non è esattamente un comando, bensì un vero e proprio programma.
- h visualizza una schermata di aiuto che spiega i tasti da usare all'interno di more
- Comandi in esecuzione di more:
- SPAZIO passa alla schermata successiva
- b passa alla schermata precedente
- INVIO avanza di una riga
Ciclo sulle cartelle presenti
for DIR in $(ls -d */) do echo $DIR done
Per contare i files all’interno di una directory
Per contare i files all’interno di una directory linux il comando è:
find [directory] -type f | wc -l
oppure
ls -l [directory] | grep ^- | wc -l
- ls -l fa la lista dettagliata del contenuto della directory
- grep ^- filtra l’output del primo comando mostrando tutte le righe che iniziano con –
- wc -l conta le linee in output dai primi 2 comandi
Il modo più semplice per contare i file in una directory è elencare un file per riga con ls e convogliare l’output per contare le righe wc
ls -1 DIR_NAME | wc -l
Questo comando restituisce la somma di tutti i file tranne quelli nascosti (dotfile), incluse directory e collegamenti simbolici.
Se si desidera contare solo i file e non includere le directory, è possibile utilizzare questo comando:
ls -1p DIR_NAME | grep -v / | wc -l
Se voleste contare solo le directory potreste lanciare il comando:
ls -l [directory] | grep ^d | wc -l
Ricorsivamente ...
Numero di file in una cartella (ricorsivo)
find [directory] -type f | wc -l
Numero di cartelle in una cartella (ricorsivo)
find [directory] -type d | wc -l
fonti:
- https://www.pietrolazzaro.com/linux-come-sapere-il-numero-di-file-contenuti-in-una-cartella/
- http://www.net-addiction.net/come-contare-il-numero-di-files-allinterno-di-una-cartella-in-linux/
- http://www.chiappucci.it/blog/2008/10/linux/linux-contare-il-numero-di-file-contenuti-in-una-cartella.html
Ricerca
Per la ricerca si utilizza il comando find, ecco alcuni esempi che ne spiegano l'utilizzo:
cerca e visualizza i file nella home con estensione NEF e con dimensione maggiore di 7Mb
find /home -iname "*.NEF" -and -size +7M
cerca e visualizza i file nella home con dimensione maggiore di 7Mb che non hanno estensione NEF
find /home -size +7M ! -iname ".*NEF"
cerca e visualizza i file nella home con dimensione maggiore di 7Mb o che hanno estensione NEF
find /home -size +7M or -iname ".*NEF"
per cercare file che hanno almeno 30 minuti
find /home -mmin +30
fonti:
- https://it.wikipedia.org/wiki/Find_(Unix)
- http://www.mattepuffo.com/site/linux/56-troviamo-i-file-con-bash.html
Ricerca e rimozione
Applicando gli stessi criteri di prima per cercare i file, è possibile eseguire un'azione su di essi
find dir-name criteria action
dove:
- dir-name è la cartella su cui lavorare;
- criteria sono i criteri di filtraggio dei file;
- action è l'azione da intraprendere.
Es: per cancellare i file più vecchi di 60 giorni dalla cartella corrente:
find . -mtime +60 -exec rm -fr {} \;
fonte: https://www.cyberciti.biz/faq/linux-unix-how-to-find-and-remove-files/
Permessi e proprietari
Per assegnare i permessi su file e cartelle si usa il comando chmod.
- chmod <valore> <oggetto>
- assegna i permessi <valore> a <oggetto>
Notazione numerica:
- 1 = x (esecuzione)
- 2 = w (scrittura)
- 4 = r (lettura)
Combinandoli:
- 3 = xw
- 5 = xr
- 6 = rw
- 7 = xrw
(es: 766 assegna 7 (xrw) al proprietario, 6 (rw) al gruppo e 6 (rw) a tutti gli altri)
- chmod a+x <fileName>
- aggiunge(+) il permesso di eseguire(x) il file a tutti.
- chown <valore> <oggetto>
- cambia il proprietario di <oggetto> a <valore>
- fuser -u <fileName>
- controlla chi sta usando il file
Filesystem
- du -sh <cartella>
- mostra le informazioni sulla dimensione di una cartella e delle sue sottodirectory (./* questa).
- h in forma leggibile
- s si ferma al primo livello, sommando il contenuto delle sottodirectory
- history –c
- per cancellare la cronologia dei comani
- blkid
- consente di visualizzare informazioni sui dispositivi a blocchi disponibili.
- Per ciascun dispositivo a blocchi elencato, il comando blkid visualizza gli attributi disponibili come l’identificatore univoco universale (UUID), il tipo di file system
Per utilizzare dischi formattati in NTFS è necessario installare il pacchetto di librerie ntfs-3g.
Zip e Unzip
fonte http://www.cyberciti.biz/tips/how-can-i-zipping-and-unzipping-files-under-linux.html Utilizzando il programma zip e unzip
apt-get install zip unzip
ziping files/directories
zip data *
Crea il file archivio data.zip e vi inserisce tutti i file presenti nella directory corrente in forma compressa
zip -r data *
Per farlo agire ricorsivamente tra le sottocartelle
unzip -l pics.zip
Per avere la lista dei file
unziping files/directories examples
unzip pics.zip
Estrae tutti i file nella directory corrente
unzip -tq pics.zip
Per avere un sommario dei file estratti
unzip pics.zip cv.doc
Per estrarre solo il file cv.dov
unzip pics.zip -d /tmp
Per estrarre solo i file nella directory /tmp
Verifica la presenza di File o Directory
Esistono vari casi un cui può essere molto utile riuscire a verificare se un file o una Directory esiste oppure no dentro nel nostro Sistema Operativo GNU/Linux.
Questo sarà possibile con usando una verifica condizionale IF :
if [ -f nomefile_test ]; then echo "Il file esiste! "; else echo "Il file non esiste! "; fi
al posto di "nomefile_test" digitare il nome del file di cui si vuole verificare la presenza.
Se si vuole creare uno script di modo che sia più semplice eseguirlo, basta creare un file con il comando
vi testfile.sh
e incollare le linee in basso:
#!/bin/bash if [ -f nomefile_test ]; then echo "Il file esiste!" else echo "Il file non esiste!" fi
E' possibile fare la stessa cosa con le directory usando questa forma:
if [ -d nomedirectory_test ]; then echo "La directory esiste! "; else echo "La directory non esiste! "; fi
Se si vuole creare uno script di modo che sia più semplice eseguirlo, basta creare un file con il comando:
vi testdirectory.sh
e incollare le linee in basso:
#!/bin/bash if [ -f nomedirectory_test ]; then echo "La directory esiste!" else echo "La directory non esiste!" fi
fonte: http://www.vplug.it/vplug/Blog?id=19
Trasformare il nome dei file
Ecco il comando per trasformare il nome di tutti i file di una cartella facendoli diventare minuscoli
for i in `ls *`; do mv "$i" "$(echo $i | tr [:upper:] [:lower:])"; done
Il comando DD
L’utility dd copia il file di input specificato nell’uscita specificata con possibili conversioni. Lo standard input e output vengono utilizzati di default. Le dimensioni dei blocchi di input e output possono essere specificati per sfruttare raw physical I/O. Le dimensioni sono specificate in byte, un numero può terminare con k, b, o w per indicare la moltiplicazione per 1024, 512, o 2, rispettivamente. I numeri possono anche essere separati da x per indicare la moltiplicazione.
Esempi:
dd if=/dev/sda of=/dev/sdb
Questo comando farà la esatta copia di /dev/sda in /dev/sdb
dd if=/dev/dvd of=dvd.iso
Questo comando farà una copia del DVD nel file dvd.iso
dd if=/dev/zero of=/dev/sda
Riempie la partizione /dev/sda con zero, utile per far scomparire una partizione fisica (o logica).
dd if=/dev/hda | gzip > hda.img.gz
Questo comando farà una copia di /dev/hda e attraverso una pipe la passa al programma di compressione gzip.
Fonte http://linuxaria.com/howto/the-dd-command-on-linux-terminal?lang=it