Linux Bash: Operazioni di base sui file

Linux Bash: Operazioni di base sui fileQuesta sera iniziamo a vedere i primi comandi che ci permettono di interagire con la shell linux per la gestione dei file1

Linux Bash: Operazioni di base sui file

in particolare vedremo l’utilizzo dei comandi:

lselenca i file contenuti in una directory
cpCopia un file
mvRinomina o sposta un file
rmRimuove un file
lnCrea un collegamento ad un file
ls [opzioni] [files]coreutils

/binstdin stdout -file --opt --help --version

Il comando ls elenca tutti i file contenuti in una directory, con il comando semplice, quindi senza opzioni, otterremo la lista di file e directory contenute nella posizione corrente.

Possiamo anche chiedere ad ls di elencarci i file contenuti all’interno di un determinato percorso, inserendolo dopo ls:

$ ls dir1
$ ls /dir1/dir2

Tra tutte le opzioni disponibili con ls, che verranno elencate dopo, le più importanti sono -a e -l, vediamo perchè:
Di default ls nasconde i file che iniziano con un . (punto), in quanto in ambiente linux sono file da considerare come “nascosti”; utilizzando -a otterremo l’elenco completo dei file, inclusivo dei file nascosti. Mentre con -l otterremo un elenco più dettagliato con (nell’ordine) tipologia di file, permessi, utenti e gruppi assegnati, dimensioni e data di ultima modifica/accesso.

-rw-r–r– 1 root root 6925 Apr 30 15:02 pkg

Ecco quindi tutte le opzioni disponibili per questo comando:

Opzioni Utili
-aElenca tutti i file compresi quelli il cui nome inizia con un punto
-lElenco esteso, completo degli attributi dei file, se si aggiunge l’opzione -h vengono visualizzate le dimensioni in Kilobyte, Megabyte, Gigabyte anziche in bytes.
-FAggiunge alcuni simboli ai nomi per identificare i files: “/” per le directory, “*” per gli eseguibili, “@” per il link simbolici, “|” alle pipe con nome, “=” ai socket.
-iPrepone gli inode dei files.
-sPrepone le dimensioni in blocchi
-RElenca il contenuto ricorsivamente (per le directory)
-dElenca solo il nome delle directory e non il contenuto.
cp [opzioni] files (file|dir)coreutils

/binstdin stdout -file --opt --help --version

Il comando cp copia un file in un altro:

$ cp file1 file2

oppure più file in una directory:

$ cp file1 file2 file3 dir

Utilizzando le opzioni -a e -r, possiamo copiare in maniera ricorsiva le directory.

Opzioni Utili
-pCopia non solo il contenuto, ma anche i permessi, il timestamp ed owner e gruppo.
-aE’ una combinazione delle opzioni -R -p e -d. la prima per copiare in maniera ricorsiva una directory, la seconda per copiare anche i permessi dei files, e la terza per i link tra i files.
-iModalità interattiva, chiede conferma prima di sovrascrivere i files.
-fForza la copia, se un file di destinazione già esiste viene copiato incondizionatamente.
mv [opzioni] sorgente destinazione
coreutils

/binstdin stdout -file --opt --help --version

Il comando mv può semplicemente rinominare un file:

$ mv file1 file2

oppure può spostare files e directory in un altra directory di destinazione:

$ mv file1 file2 file3 dir4 dir5 dir_destinazione

Per questo comando abbiamo solo -i e -f come opzioni che sono analoghe a quelle del comando cp.

rm [opzioni] files|directory
coreutils

/binstdin stdout -file --opt --help --version

con rm cancelliamo invece i files

$ rm file1 file2

oppure

$ rm -r dir1 dir2

Qui oltre ad -i e -f, come abbiamo appena visto, possiamo utilizzare anche -r per agire ricorsivamente sulle directory.

ln [opzioni] sorgente destinazione
coreutils

/binstdin stdout -file --opt --help --version

Con Linux possiamo effettuare, come su windows, dei collegamenti ai files; solo che a differenza di questo sistema, su linux vengono chiamati link.
Un link è un riferimento, per l’appunto, ad un altro file e viene creato mediante il file ln.
I link si dividono in due tipi, softlink o anche link simbolici, che fanno riferimento al file tramite il suo percorso:

$ ln -s file1 softlink

Bisogna fare attenzione ai link simbolici, in quanto se cancelliamo “file”, softlink punterà ad un percorso non valido e quindi sarà un link orfano.
Un hard link invece è una specie di copia di un file,2 a dir la verità effettivamente l’hard link è semplicemente un secondo nome dato ad un file, esso non punta al percorso come il simbolico, ma punta al suo iNode,3 ciò rende possibile la cancellazione del file “padre” senza comportare un errore con il link rendendo questo orfano:

$ ln file hardlink

Perchè utilizzare uno piuttosto che un altro? Non c’è una regola precisa, il tutto va in base alle proprie esigenze, bisogna tenere conto infatti che un link simbolico, che in quanto tale fa riferimento al percorso assoluto del file padre, può effere piazzato in qualsiasi partizione/dispositivo; un hard link invece no, in quanto facente riferimento all’inode del file padre, che non avrebbe significato in un altra partizione o disco.
Un link simbolico può puntare ad una directory, un hard link invece è possibile puntarlo ad essa solo se si è il superutente.

Opzioni Utili
-sCrea un link simbolico, senza questa opzione di default viene creato un link fisico.
-iModalità interattiva, Chiede conferma prima di sovrascrivere i file di destinazione.
-fCondizione forzata, se il link di destinazione esiste lo sovrascrive incondizionatamente.
-dPermette ad un superutente di creare un hard link ad una directory

Per sapere dove punta un link simbolico possiamo utilizzare uno dei due seguenti comandi:

$ readlink link1

$ ls -l link

  1. Per file intenderemo sia il vero e proprio file che le directory []
  2. Comunicazione di servizio ai puristi del settore: lo so che non è una copia, ho fatto un esempio per rendere più pratica e facile la comprensione []
  3. Nei sistemi Unix un inode è una struttura dati sul file system che archivia le informazioni base dei file, delle cartelle o di qualsiasi altro oggetto. Le informazioni includono:

    * la dimensione del file e la sua locazione fisica (se risiede su un dispositivo a blocchi come, ad es., un hard disk)
    * il proprietario e il gruppo di appartenenza
    * le informazioni temporali di creazione, modifica e ultimo accesso
    * il numero di collegamenti fisici che referenziano l’inode
    * i permessi d’accesso

    Il termine inode normalmente si usa sui dispositivi a blocchi che gestiscono file, cartelle e collegamenti simbolici. Il concetto è particolarmente importante quando è necessario ripristinare un file system danneggiato.

    Ogni inode ha associato un numero univoco all’interno del dispositivo e ogni file presente è identificato come un collegamento fisico all’inode tramite il suo numero. Quando un programma cerca di accedere ad un file tramite un nome (es. documento.txt), il sistema operativo cerca l’inode corrispondente e recupera tutte le informazioni sopra descritte per operare correttamente con il file.

    Per recuperare le informazioni sull’inode dei file si può usare la chiamata di sistema stat.
    From Wikipedia. []


Altri articoli che potrebbero interessarti

Nuova categoria bash e nuovi argomenti Ho deciso di aprire una nuova categoria, chiamata bash...in questa categoria da oggi in poi verranno...
Iniziamo a conoscere Linux Ecco il primo, di tanti articoli, dedicati alla conoscenza delle basi di linux...Linux...cosi come...
Linux Bash: Operazioni sulle directory Dopo aver visto come gestire i files sulla nostra linux box, vediamo come gestire le directory...Abbiamo...
10 consigli per programmare meglio in bash Da wikipedia: Descrizione delle azioni richieste mediante opportuni linguaggi di programmazione, detti...
bash: pushd e popd not found… come risolvere… Chi è abituato a compilare i sorgenti dei software che utilizza, sicuramente oramai si sarà...

About the Author

M0rF3uS al secolo Alex è un ggiovine 25enne appassionato di informatica e linux. Lavora come Network and System Administrator e nel tempo libero gioca un pò con la sua fotocamera (Canon EOS 1000D) riuscendo a volte, per sbaglio, a fare qualche scatto decente. Completano il corredo, degli hobbies "vorrei ma non posso" ossia l'astronomia e l'astronautica....si è uno di quelli che da grande vorrebbe fare l'astronauta (povero coglione vero?).