Passiamo a vedere come gestire i file attraverso la linea di comando.
Il più conosciuto è sicuramente il comando ls, acronimo di list. Tra le opzioni sicuramente la più utilizzata è
ls -al
dove -a significa mostra i file nascosti ( quelli con il punto davanti, tipo .htaccess );
mentre -l significa mostra i file in modalità lista, o formato lungo.
In molte distribuzioni esiste un comando di tipo alias, che fa le veci di ls -al ed è
[textmarker color=”000000″]ll [/textmarker]
Esistono molte opzioni di ls, alcune anche interessanti, l’elenco completo:
-a, --all non nasconde le voci che iniziano con .
-A, --almost-all non elenca le voci . e ..
--author con -l stampa l'autore di ogni file
-b, --escape stampa escape in stile C per i caratteri non grafici
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information);
with -l: show ctime and sort by name;
otherwise: sort by ctime, newest first
-C list entries by columns
--color[=WHEN] colorize the output; WHEN can be 'always' (default
if omitted), 'auto', or 'never'; more info below
-d, --directory list directories themselves, not their contents
-D, --dired generate output designed for Emacs' dired mode
-f do not sort, enable -aU, disable -ls --color
-F, --classify append indicator (one of */=>@|) to entries
--file-type likewise, except do not append '*'
--format=WORD across -x, commas -m, horizontal -x, long -l,
single-column -1, verbose -l, vertical -C
--full-time like -l --time-style=full-iso
-g come -l, ma non elenca il proprietario
--group-directories-first
group directories before files;
can be augmented with a --sort option, but any
use of --sort=none (-U) disables grouping
-G, --no-group in a long listing, don't print group names
-h, --human-readable with -l and/or -s, print human readable sizes
(e.g., 1K 234M 2G)
--si likewise, but use powers of 1000 not 1024
-H, --dereference-command-line
follow symbolic links listed on the command line
--dereference-command-line-symlink-to-dir
follow each command line symbolic link
that points to a directory
--hide=PATTERN do not list implied entries matching shell PATTERN
(overridden by -a or -A)
--indicator-style=WORD append indicator with style WORD to entry names:
none (default), slash (-p),
file-type (--file-type), classify (-F)
-i, --inode print the index number of each file
-I, --ignore=PATTERN do not list implied entries matching shell PATTERN
-k, --kibibytes default to 1024-byte blocks for disk usage
-l usa un formato di elenco lungo
-L, --dereference quando mostra le informazioni su un collegamento,
simbolico, mostra le informazioni sul file a cui si
riferisce invece che sul collegamento stesso
-m elenca le voci separandole con virgole
-n, --numeric-uid-gid come -l, ma elenca gli id utente e di gruppo
-N, --literal stampa i nomi grezzi (es.: non tratta in modo
speciale i caratteri di controllo)
-o come -l, ma non elenca le informazioni sul gruppo
-p, --indicator-style=slash
appende / come indicatore alle directory
-q, --hide-control-chars print ? instead of nongraphic characters
--show-control-chars show nongraphic characters as-is (the default,
unless program is 'ls' and output is a terminal)
-Q, --quote-name enclose entry names in double quotes
--quoting-style=WORD use quoting style WORD for entry names:
literal, locale, shell, shell-always,
shell-escape, shell-escape-always, c, escape
-r, --reverse inverte il senso dell'ordinamento
-R, --recursive elenca ricorsivamente le sottodirectory
-s, --size stampa la dimensione allocata in blocchi di ogni file
-S sort by file size, largest first
--sort=WORD sort by WORD instead of name: none (-U), size (-S),
time (-t), version (-v), extension (-X)
--time=WORD with -l, show time as WORD instead of default
modification time: atime or access or use (-u);
ctime or status (-c); also use specified time
as sort key if --sort=time (newest first)
--time-style=STYLE with -l, show times using style STYLE:
full-iso, long-iso, iso, locale, or +FORMAT;
FORMAT is interpreted like in 'date'; if FORMAT
is FORMAT1FORMAT2, then FORMAT1 applies
to non-recent files and FORMAT2 to recent files;
if STYLE is prefixed with 'posix-', STYLE
takes effect only outside the POSIX locale
-t ordina secondo l'orario di modifica, prima il più recente
-T, --tabsize=COL assume che le tabulazioni siano ad ogni COL invece di 8
-u with -lt: sort by, and show, access time;
with -l: show access time and sort by name;
otherwise: sort by access time, newest first
-U do not sort; list entries in directory order
-v natural sort of (version) numbers within text
-w, --width=COLS set output width to COLS. 0 means no limit
-x list entries by lines instead of by columns
-X sort alphabetically by entry extension
-Z, --context print any security context of each file
-1 list one file per line. Avoid '\n' with -q or -b
--help mostra questo aiuto ed esce
--version stampa le informazioni sulla versione ed esce
Conoscere la path
oramai gran parte delle shell mostrano dopo l’utente loggato e il nome macchina, la cartella partendo dalla propria home directory. Tuttavia talvolta è bene ricordare, o per esigenze di programmazione, trovare la path completa di una cartella. Per questo esiste il comando:
pwd
Creare
Passiamo a parti più creative, ovvero come creare file e cartelle. Partiamo dalle seconde che è più semplice.
mkdir nomecartella
andremo a creare, all’interno della cartella corrente una sottocartella, con i diritti di utenza definita dalla configurazione della bash e con i permessi utente che stiamo detenendo in quel momento. Quindi se stiamo impersonando root, e creiamo una cartella dentro la home directory di un utente, quello non riuscirà a cancellarla poiché non avrà i diritti per farlo. La gestione dei diritti e dei permessi sarà oggetto di un articolo specifico.
Abbiamo visto come creare una cartella / directory, per creare i file ci sono vari modi. Utilizzando touch:
touch prova.txt
questo comando crea il file se non esiste, altrimenti ne effettua un aggiornamento. Ad esempio apponendo l’opzione -m aggiornerà solo la data e ora del file, senza toccare il contenuto.
Un altro esempio:
echo " " > prova2.txt
In questo caso si utilizza una echo, dove potremo anche direttamente scrivere qualcosa, da poi apporre all’interno del file prova2.txt. Quella mostrata sopra è anche una tecnica per svuotare l’interno di un file già compilato.
Utilizzare editor, come vi, nano o midnight commander. Ma ve ne sono moltissimi altri. E’ il caso più comune poiché spesso i file vanno modificati, e proprio utilizzando quello di maggiore preferenza lo utilizzeremo per creare o modificare . L’editor più semplice è sicuramente nano. Se presente nel vostro sistema operativo sarà:
nano prova3.txt
sul fondo dello schermo saranno presenti i vari comandi per salvare, e/o uscire dal programma.
Distruggere.
Dopo la creazione la distruzione, il comando più utilizzato è sicuramente:
rm prova3.txt
Nel caso di una directory il comando sarà:
rm -frd nomecartella
dove -f forza la cancellazione anche se la cartella contiene dei file;
l’opzione -r è recursiva, cancella in modo recursivo il suo interno;
l’opzione -d indica che vogliamo cancellare una directory.
La cancellazione può anche avvalersi delle espressioni regolari, ad esempio se vogliamo cancellare tutti i file che iniziano per prov scriveremo:
rm prov*
altre opzioni di rm sono:
Uso: rm [OPZIONE]... [FILE]...
Remove (unlink) the FILE(s).
-f, --force ignore nonexistent files and arguments, never prompt
-i prompt before every removal
-I prompt once before removing more than three files, or
when removing recursively; less intrusive than -i,
while still giving protection against most mistakes
--interactive[=WHEN] prompt according to WHEN: never, once (-I), or
always (-i); without WHEN, prompt always
--one-file-system quando rimuove ricorsivamente una gerarchia, salta ogni
directory che è su un file system differente da quello
indicato dall'argomento corrispondente della riga di comando
--no-preserve-root do not treat '/' specially
--preserve-root do not remove '/' (default)
-r, -R, --recursive remove directories and their contents recursively
-d, --dir remove empty directories
-v, --verbose explain what is being done
--help mostra questo aiuto ed esce
--version stampa le informazioni sulla versione ed esce
Copiare e muovere.
Vediamo come copiare/clonare o muovere file e cartelle. Il comando più noto sicuramente è :
cp prova.txt prova2.txt
Dove appunto diamo il comando con il file sorgente e destinazione. Possiamo per entrambi, o solo per uno, indicare la path qual’ora non si trovi nella posizione in cui siamo. CP è utilizzato per copiare anche le directory
cp -R /root/dirprova /usr/share/dirprova
oppure se sta nella stessa posizione
cp -R dirprova/ dirprova2/
l’opzione -R indica la recursività del contenuto, anche se esso è vuoto.
Altre opzioni di cp sono:
Uso: cp [OPZIONE]... [-T] ORIGINE DESTINAZIONE
o: cp [OPZIONE]... ORIGINE... DIRECTORY
o: cp [OPZIONE]... -t DIRECTORY ORIGINE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
-a, --archive come -dR --preserve=all
--attributes-only non copia i dati del file, solo gli attributi
--backup[=TIPO] fa il backup di ogni file di destinazione esistente
-b come --backup ma non accetta un argomento
--copy-contents quando agisce ricorsivamente copia il contenuto dei file speciali
-d come --no-dereference --preserve=links
-f, --force if an existing destination file cannot be
opened, remove it and try again (this option
is ignored when the -n option is also used)
-i, --interactive prompt before overwrite (overrides a previous -n
option)
-H follow command-line symbolic links in SOURCE
-l, --link crea i collegamenti fisici dei file invece di copiarli
-L, --dereference segue sempre i collegamenti simbolici in ORIGINE
-n, --no-clobber non sovrascrive un file esistente (prevale su
una precedente opzione -i)
-P, --no-dereference non segue mai i collegamenti simbolici in ORIGINE
-p come --preserve=mode,ownership,timestamps
--preserve[=ELENCO_ATTR] preserva gli attributi specificati (predefinito:
mode,ownership,timestamps), se possibile
gli attributi addizionali: context, links, xattr, all
--no-preserve=ELENCO_ATTR non conserva gli attributi specificati
--parents utilizza il nome completo della sorgente sotto DIRECTORY
-R, -r, --recursive copia le directory ricorsivamente
--reflink[=WHEN] controlla le copie clone/CoW copies. Consultare in basso
--remove-destination rimuove ogni file di destinazione esistente
prima di cercare di aprirlo (al contrario
con --force)
--sparse=WHEN controlla la creazione di file sparsi. Consultare in basso
--strip-trailing-slashes rimuove i caratteri "/" alla fine di ogni parametro
ORIGINE
-s, --symbolic-link crea collegamenti simbolici invece di copiare
-S, --suffix=SUFFISSO prevale sul normale suffisso dei backup
--target-directory=DIRECTORY copia ogni ORIGINE in DIRECTORY
-T, --no-target-directory tratta DEST come un file normale
-u, --update copia solo quando ORIGINE è più recente del
file di destinazione o questo è mancante
-v, --verbose spiega cosa sta facendo
-x, --one-file-system rimane su questo file system
-Z set SELinux security context of destination
file to default type
--context[=CTX] like -Z, or if CTX is specified then set the
SELinux or SMACK security context to CTX
--help mostra questo aiuto ed esce
--version stampa le informazioni sulla versione ed esce
Per muovere un file invece andremo ad utilizzare il comando:
mv prova.txt prova2.txt
in questo caso, non avendo indicato nessuna path di destinazione, il comando muovi ha l’effetto della funzione rinomina che vedremo più avanti nell’articolo. Generalmente muovi viene seguito dalla path di destinazione:
mv prova.txt /usr/share/prova.txt
il comando muovi funziona anche per le directory se utilizzato con l’opzione -t. Altre opzioni del comando mv sono:
Uso: mv [OPZIONE]... [-T] ORIGINE DESTINAZIONE
o: mv [OPZIONE]... ORIGINE... DIRECTORY
o: mv [OPZIONE]... -t DIRECTORY ORIGINE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
--backup=[CONTROL] fa un backup di ogni file di destinazione esistente
-b come --backup ma non accetta argomenti
-f, --force sovrascrive le destinazioni esistenti senza chiedere
-i, --interactive chiede prima di sovrascrivere
-n, --no-clobber non sovrascrive un file esistente
Se viene specificato più di uno tra -i, -f, -n, solo l'ultimo ha effetto.
--strip-trailing-slashes rimuove gli slash dalla fine di ogni argomento
ORIGINE
-S, --suffix=SUFFISSO cambia il normale suffisso dei backup
-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-T, --no-target-directory treat DEST as a normal file
-u, --update move only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
-Z, --context set SELinux security context of destination
file to default type
--help mostra questo aiuto ed esce
--version stampa le informazioni sulla versione ed esce