# Gestione dei file `In Linux, tutto è un file`. Un file è composto da *contenuto* e *metadati*, che includono dimensione, proprietario, data di creazione e autorizzazioni. I file sono organizzati in *directory*, che sono un tipo specifico di file progettato per contenere altri file. Esistono diverse tipologie di file, ciascuna con funzioni distinte: - `File regolari`: utilizzati per memorizzare dati o programmi - `Directory`: contengono altri file e forniscono una struttura gerarchica per l'organizzazione dei dati - `File speciali`: impiegati per la gestione di input e output ## Inode Gli `inode` (o *index nodes*) sono una struttura dati utilizzata nei file system Unix e Unix-like per gestire le informazioni sui file e le directory. Ogni file o directory presente nel file system è associato a un inode, il quale contiene *metadati essenziali* per la gestione e l'accesso ai dati. Ecco alcune delle informazioni che un inode può contenere: 1. **Tipo di file**: indica se l'oggetto è un file regolare, una directory, un link simbolico, ecc. 2. **Dimensione del file** in byte 3. **Permessi di accesso**: le autorizzazioni che determinano chi può leggere, scrivere o eseguire il file 4. **Proprietario e gruppo**: informazioni su chi possiede il file e a quale gruppo appartiene 5. **Timestamp**: diverse informazioni temporali, come la data di creazione, l'ultima modifica e l'ultimo accesso al file ## Manipolazione dei file ### ls Nella forma base, `ls` elenca solo i nomi di file e directory. Utilizzando il parametro `-l`, mostra i *permessi* di file e directory, *proprietario*, *dimensione*, *data di ultima modifica*, *ora* e *nome*: ```bash > ls -l totale 148 drwxr-xr-x 4 dado dado 4096 1 nov 20.07 Applications drwxr-xr-x 2 dado dado 4096 13 dic 2023 bin drwxr-xr-x 2 dado dado 4096 21 gen 2024 Documents drwxr-xr-x 12 dado dado 4096 1 nov 15.40 git drwxr-xr-x 2 dado dado 4096 17 set 22.55 logs ``` Il primo carattere nell'output indica il tipo di file: - `-`: indica un file regolare - `d`: una directory - `c`: un file speciale #### Ricorsione - `ls -R directory`: elenca il contenuto di una directory e delle sue sottodirectory ### Altri comandi per la gestione di file e directory - `touch`: crea un nuovo file vuoto. Se il file esiste già, aggiorna la data di accesso e modifica - `cp`: copia un file. Utilizzare l'opzione `-i` per richiedere conferma prima di sovrascrivere un file esistente - `cp -r`: consente di copiare una directory insieme a tutte le sue sottodirectory e file - `mv`: sposta o rinomina un file. Utilizzare l'opzione `-i` per richiedere conferma prima di sovrascrivere un file esistente - `rm`: rimuove un file. Utilizzare l'opzione `-i` per richiedere conferma prima di eliminare un file - `rm -r`: elimina una directory insieme a tutto il suo contenuto, incluse le sottodirectory - `mkdir`: crea una nuova directory. Con l'opzione `-p`, è possibile creare una directory insieme a tutte le sue sottodirectory - `rmdir`: rimuove una directory, ma solo se è vuota. Per rimuovere una directory e tutte le sue sottodirectory, utilizzare l'opzione `-r` ### File globbing e wildcards Il `file globbing` è una funzionalità della shell che consente di rappresentare più nomi di file utilizzando caratteri speciali noti come `wildcards`. Esistono tre caratteri jolly in Linux: - `*`: rappresenta zero, una o più occorrenze di qualsiasi carattere. Ad esempio, `*.txt` corrisponde a tutti i file con estensione .txt. - `?`: rappresenta una singola occorrenza di qualsiasi carattere. Ad esempio, `file?.txt` corrisponde a file1.txt, fileA.txt, ma non a file.txt. - `[]` (caratteri tra parentesi quadre): qualsiasi occorrenza di carattere/i racchiuso/i tra le parentesi quadre sarà considerata una corrispondenza. Ad esempio, `l[ae]st.txt` corrisponde a last.txt e lest.txt. Le parentesi quadre possono includere anche intervalli, come `[A-Z]`, `[0-9]`