[>a2384.html>] [<a2382.html<] [^a2.html^]


Capitolo 298.   File, link e directory

298.1   Copia, spostamento e cancellazione file

Come copio, sposto o cancello i file?

---------

Copiare: cp origine destinazione. Es.:

# cp /root/dog.gif /home/pino/[Invio]

# cp -i origine destinazione[Invio]

(chiede conferma prima di sovrascrivere)

Spostare: mv origine destinazione. Es.:

# mv /root/dog.gif /home/pino/[Invio]

Cancellare: rm file

# rm -i *.html[Invio]

(chiede conferma per ogni file che deve essere cancellato)

Cancellare una directory con tutto il suo contenuto:

# rm -rf directory[Invio]

Nota. Se nella copia dei file si vogliono copiare i collegamenti simbolici e mantenerli come tali si deve utilizzare l'opzione -d. Se questo è richiesto durante la copia di directory con sottodirectory, l'opzione -r diventerà -R.

298.2   dir *.html /s: come si fa in Linux?

Dalla directory radice (/) ho digitato:

# ls -R *.html[Invio]

ottenendo come risultato un bel niente, invece speravo che il comando equivalesse a quello Dos:

C:\>dir *.html /s[Invio]

Come faccio a trovare nel mio sistema tutti i file con estensione html?

---------

Con uno dei seguenti comandi:

# find / -name "*.html"[Invio]

# find / -print | grep -i "html$" > ./all_html.txt[Invio]

298.3   Come evitare la cancellazione di un file da parte di root?

Sapete come evitare che un file sia cancellabile da parte dell'utente root?

---------

Non credo che un semplice utente possa evitare la cancellazione dei suoi file da parte dell'utente root. Però dipende da cosa intendi fare. Per esempio, se un file è stato impostato da root con:

# chattr +i nome_file[Invio]

esso non potrà venire rinominato, cancellato, modificato da nessuno, utente root compreso, almeno non prima che l'attributo i venga tolto.

298.4   Copia di un'intera porzione del filesystem

Come faccio a copiare una directory (e il suo contenuto) per intero?

---------

Il comando che cerchi è:

# cp -av origine (/usr) destinazione (/home/dove_vuoi_tu)[Invio]

298.5   Undelete in Linux

Esistono funzioni di undelete in Linux?

Alcune delle tecniche che puoi usare per effettuare il recupero dei file cancellati su filesystem ext2 sono descritte nel Linux Ext2fs Undeletion mini-HOWTO (<http://www.praeclarus.demon.co.uk/tech/e2-undel/>)

In questo HOWTO si parla di una caratteristica apposita del Midnight Commander (mc), che sembra ideale per utenti alle prime armi ma nulla di più. Tieni presente che la cancellazione, nei filesystem ad inode (quasi tutti quelli Unix, più HPFS e NTFS) è un provvedimento molto più drastico che non sotto Dos (che si limita a sostituire il primo carattere del nome del file con «?»). Mc credo che sostituisca il comando 'rm' con un finto 'rm' che sposta il file su una directory di file cancellati da cui eventualmente 'unrm' effettua i recuperi.

298.6   Visualizzazione della posizione nel filesystem

In che posizione del filesystem mi trovo?

---------

Puoi dare il comando:

$ pwd[Invio]

298.7   Visualizzazione del contenuto di un file

Come faccio a visualizzare il contenuto di un file?

---------

Con uno dei seguenti comandi:

$ cat file[Invio]

$ more file[Invio]

(una schermata alla volta)

$ less file[Invio]

(una schermata alla volta, si può tornare 'indietro' nella visualizzazione del file, per uscire quando si è arrivati alla fine, si preme il tasto 'q')

Tutti questi comandi valgono solo per file di testo.

298.8   Visualizzazione parziale di un file

C'è un comando per visualizzare solo una riga di un file?

---------

Se intendi visualizzare la n-sima riga del file pippo fai:

$ cat pippo | head -n | tail -1[Invio]

298.9   Visualizzazione del contenuto di una directory

In quanti modi posso visualizzare il contenuto di una directory?

---------

Ecco i vari modi:

$ ls[Invio]

$ ls -la[Invio]

per vedere tutti i file compresi quelli nascosti e i relativi permessi;

$ ls -la |more[Invio]

per vedere il contenuto della directory una schermata alla volta;

$ ls -la > testo[Invio]

per creare un file chiamato testo contenente l'elenco del contenuto della directory attuale.

Per aggiungere il contenuto di un'altra directory al file:

$ ls -la >> testo[Invio]

$ ls |sort |more (o less)[Invio]

visualizza in ordine il contenuto della directory corrente una schermata alla volta;

$ ls --color[Invio]

per visualizzare con colori uguali, tipi di file uguali: directory, eseguibili, ecc.

298.10   ls colorata

Come si ottengono i colori che distinguono i diversi tipi di file quando si esegue il comando ls?

---------

Nel ~/.bash_profile ho messo:

alias ls='ls -lF --color=always'

298.11   Come mantenere il colore di ls nel terminale grafico?

Come mantenere il colore di ls in ambiente grafico xterm? Devo ridare il comando:

alias ls='ls --color'

se voglio avere i colori che ho sulla console testuale.

---------

Utilizza:

# xterm -ls[Invio]

298.12   ls con percorso relativo

Vorrei che ls * mi visualizzasse tutti i file con il percorso relativo alla directory in cui mi trovo.

---------

Usa:

$ find .[Invio]

298.13   Vedere il contenuto di tutti i file di una directory

Vorrei visualizzare il contenuto di tutti i file di una directory. Come si fa?

---------

Con:

$ cat /nome_dir/* | less[Invio]

o:

$ less /nome_dir/*[Invio]

298.14   Vedere il contenuto di uno stesso file presente in diverse directory

Se volessi vedere il contenuto dei file rp_filter contenuti nelle varie directory /proc/sys/net/conf/* con un solo comando, come posso fare?

---------

Eccoti tre metodi:

  1. # cat `find /proc/sys/net/conf -name rp_filter -print`[Invio]

  2. # for i in `find /proc/sys/net/conf -name rp_filter -print` ; do echo $i; cat $i; done[Invio]

  3. # find /proc/sys/net/conf -name rp_filter -exec "echo '{}' && cat '{}'" ;[Invio]

298.15   Less disattiva la colorazione di ls

Qualcuno saprebbe dirmi come fare per vedere le voci colorate col comando in oggetto? Se metto '|more', tutto funziona, ma se uso '|less', che è più pratico, compaiono invece questi codici:

ESC[01;34mat-3.1.7ESC[0m/

ESC[01;34maudiofile-0.1.6ESC[0m/

ESC[01;34maumix-1.18.2ESC[0m/

ESC[01;34mawesfx-0.4.3aESC[0m/

---------

less protegge di norma il terminale evitando di mandare sequenze di caratteri che potrebbero «sporcarlo». Ovviamente questo è sconveniente a volte, quindi c'è l'opzione -r

Puoi ottenere ciò che dici infatti con il comando:

# ls -alF --color=always |less -r[Invio]

chiaramente in questi casi si fa un alias.

298.16   Creazione istantanea di un file

Come creo un file all'istante?

---------

# touch file[Invio]

(lo crea e basta)

# cat > file[Invio]

(lo crea e ci scrive tutto quello che voglio fino a quando non premo ctrl+d)

298.17   Unire più file di testo

Esiste un comando che permetta di concatenare più file di testo, fra di loro?

---------

O così:

$ cat file1.txt > ris.txt[Invio]

$ cat file2.txt >> ris.txt[Invio]

$ cat file3.txt >> ris.txt[Invio]

o, più facilmente:

$ cat file1.txt file2.txt file3.txt > ris.txt[Invio]

298.18   Informazioni sul tipo di file

Come faccio a sapere di che tipo è un file?

---------

Con il comando:

$ file nome_file[Invio]

298.19   Ordinamento alfabetico di un file

Se ho un elenco in un file, come faccio a metterlo in ordine alfabetico?

---------

Con il comando:

$ sort < file.txt > fileinordine.txt[Invio]

298.20   Creazione ed eliminazione delle directory

Come si crea e come si cancella una directory?

---------

Creare:

$ mkdir nome[Invio]

Cancellare:

$ rmdir nome[Invio]

(la directory deve essere vuota)

$ rm -rf /prova[Invio]

(elimina la directory prova e tutte le sue eventuali discendenti) [Attenzione: è un comando cui bisogna prestare attenzione].

298.21   File non cancellabili - attributi estesi

Qualcuno (leggasi intrusione) ha cambiato un file di sistema con uno modificato; ora lo voglio sostituire con il file corretto, ma non riesco a cancellarlo:

cp: overwrite `/bin/login', overriding mode 4755? y
cp: cannot create regular file `/bin/login': Permission denied
[...]
rm -rf /bin/login
rm: /bin/login: Operation not permitted

---------

Vedi gli attributi estesi:

# lsattr[Invio]

per cambiarli:

# chattr[Invio]

Forse hanno impostato il file come immutabile (una 'i' negli attributi estesi).

Per la documentazione sui due comandi naturalmente:

# man lsattr[Invio]

# man chattr[Invio]

298.22   Spostamento nelle directory del filesystem

Come mi muovo tra le directory del filesystem?

---------

$ cd nome[Invio]

(per entrare in una directory figlia di quella attuale)

$ cd /nome/nome2/[Invio]

(per entrare nella directory di secondo livello 'nome2' figlia di 'nome')

$ cd ..[Invio]

(per tornare alla directory di livello superiore a quello attuale)

$ cd ~[Invio]

(per tornare alla directory home)

$ cd ../conti[Invio]

(per spostarmi alla directory conti, sorella della directory in cui mi trovo)

$ cd -[Invio]

(per tornare nell'ultima directory in cui sono stato)

298.23   Differenza tra link soft e hard

Qualcuno mi spiega i vari tipi di link e che differenze ci sono?

---------

Un link soft è praticamente un nome diverso che tu dai allo stesso file. Non occupa spazio su disco (se non per un inode). Un link hard è praticamente una copia fisica del file con il più il fatto che ogni cambiamento che fai all'originale (o alla copia) verrà fatta anche sulla copia (o sull'originale).

Se hai un link soft e cancelli l'originale, il file viene perso; se il link è hard resterà il link (ed il contenuto viene mantenuto).

298.24   Creazione di un link simbolico

Come creo un link simbolico?

---------

# ln -s /home/mario/resoconto.txt /root/resocontomario[Invio]

dove /home/mario/resoconto.txt è il file che già esiste, e /root/resocontomario è il link.

298.25   Trovare un file in tutto il filesystem

Come posso trovare un file in tutto il mio filesystem?

---------

Con il comando:

# find / -name nomefile -print[Invio]

Oppure, usando locate:

# locate nomefile[Invio]

Locate è più veloce di find, ma per usarlo bisogna prima aggiornare il suo archivio (da root) con:

# updatedb[Invio]

298.26   Trovare un file in una porzione del filesystem

Come posso sapere se c'è un determinato file nella directory /var e nelle sue discendenti?

Con:

# find /var -name nomefile -print[Invio]

298.27   Cerca, trova e copia

Come faccio a cercare tutti i file di un certo tipo (*.png) e a copiarli in una directory? (/home/pippo/pngfile/)

---------

# find / -name "*.png" -exec cp -p {} /home/pippo/pngfile \;[Invio]

298.28   Visualizzazione dei file che contengono una stringa

Come posso sapere tutti i file che contengono la stringa «resoconti»?

---------

$ grep resoconti *[Invio]

oppure

$ find nome_percorso -print -exec grep stringa {} \;[Invio]

il comando restituisce tutti i file trovati nel percorso più le stringhe trovate.

298.29   Ricerca di una stringa nei file

Dovrei cercare un certo termine all'interno di alcuni file. Come effettuare la ricerca in tutti i file presenti in tutte le directory?

---------

$ rgrep -r altre_opzioni stringa_da_cercare directory_di_partenza[Invio]

oppure:

$ find directory_di_partenza -type f -exec grep -l altre_opzioni {} \;[Invio]

298.30   Ricerca dei file che iniziano con una determinata stringa

Come trovo tutti i file che iniziano per 'conf'?

---------

Con:

# find / -name conf\*[Invio]

298.31   Spezzare i file di grandi dimensione

Qualche volta ho la necessità di portare sul mio elaboratore di casa che ha Linux dei file di grosse dimensioni che scarico all'università. Fino a questo momento ho utilizzato WinZip per spezzare i file e ricostruirli a casa. Poi, da Linux, montavo la partizione Windows e copiavo i file sul filesystem di Linux. In verità questo è l'unico motivo per cui ho ancora Windows. Considerato che all'università, oltre alle macchine con Windows, ci sono alcune Sun con Solaris, mi sapreste suggerire una procedura per spezzare i file di grosse dimensioni su dischetti per ricostruirli poi a casa sotto Linux?

---------

Usa split:

$ split -b 1400k nome_file[Invio]

ti separa nome_file in file di 1400k chiamati di default xaa, xab, ecc. C'è anche su Sun Solaris.

Una volta copiati nella macchina Linux di casa, usi:

$ cat xaa xab ... > nome_file[Invio]

oppure direttamente:

$ cat x* > nome_file[Invio]

In alternativa puoi usare il comando tar con l'opzione M, scrivendo direttamente su /dev/fd0.

Un inconveniente: il tar scrive direttamente sul disco senza badare al filesystem, per riutilizzare il dischetto lo devi riformattare (l'mformat è ottimo in questo caso)

Es.:

$ tar cvfM /dev/fd0 pippo[Invio]

Per estrarre ovviamente:

$ tar xvfM /dev/fd0[Invio]

LDR --- Copyright © 1999-2000 Gaetano Paolone --  bigpaul @ pluto.linux.it

[>a2384.html>] [<a2382.html<] [^a2.html^]