SaLUG! @ Manifatture KNOS
26 Gennaio 2015
ogni comando in esecuzione ha a disposizione 3 file speciali (stream di dati):
- stdin
- stdout
- stderr
<
$ cat < /etc/lsb-release
>
$ ls -l /etc > etc_list.out
2>
$ ls -l /root 2> /tmp/ERRORS
- &> consente di redirigere sia stdout che stderr in un unico stream
- 2>&1 redirige lo stderr su stdout
>>
$ ls -l /home 2>> /tmp/ERRORS
$ ls -l /root 2>> /tmp/ERRORS
cmd1 | cmd2
La prima e piu' comune forma di composizione tra comandi di shell
$ ls -l /etc/ | less
$ man ls | grep human
...
$ man ls | grep -- -h
...
$ ls | grep ^[a-c]
...
tail -f /var/log/LOGFILE | grep PATTERN e' una combinazione molto utilizzata per filtrare un file di log in tempo reale
$ du -s * | sort -nr | head -n 3
...
$ cat /etc/group | cut -d : -f 1 | sort
...
$ cat /etc/hosts | \
awk '/^[0-9]/ { print " * " $2 " (" $1 ")" }'
cmd1 ... `cmd2` ...
Mediante l'uso del backtick (`comando`) o della sintassi $(comando) e' possibile utilizzare l'output del comando mediante interpolazione
$ ls -l `which man`
...
$ ls -l $(which man)
;
$ cd /etc/ ; ls -l profile ; cd -
&&
e or ||
$ cd /root && ls -l && cd - || echo "PERMESSO NEGATO"
...
$ cd /var/log && ls -l && cd - || echo "PERMESSO NEGATO"
Partendo dalle convenzioni utilizzate nei sistemi Unix, la Linux Foundation mantiene uno standard documentato delle directory comunemente utilizzate dai sistemi GNU/Linux:
- /boot: configurazioni e asset di boot
- /etc: configurazioni di sistema (per lo piu' statiche)
- /dev: directory contenente i device file
- /lib, /bin, /sbin: librerie e utility/applicazioni/demoni di sistema (base) e device firmware e kernel driver (e.g. minimal, network embedded os)
- /var: configurazioni e asset dinamici (e.g. cache, log, socket file, pid file, database)
- /tmp: directory dei file temporanei
- /root e /home: home dell'utente root e degli utenti non privilegiati
- /usr: alter-ego di "/" per le librerie e utility/applicazioni/demoni di sistema (livello utente/applicativo, e.g. sistema desktop/mobile o server)
- /opt: software opzionali (di solito organizzati informalmente in directory per vendor)
- /media: directory di mount storage esterni e hotplug
- /mnt: directory in cui per convenzione vengono montati dispositivi e filesystem esterni in maniera manuale o statica
- /proc: esposizione di statistiche e configurazioni (in lettura e a volte in scrittura) del kernel linux
- /sys: un evoluzione del vfs proc che espone programmaticamente stato e configurazioni di molti dei sottosistemi e device driver presenti nel kernel
$ mount
/dev/sda2 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
$ cat /etc/fstab /etc/mtab
...
$ cat /proc/mtab /proc/swaps
...
- ext2/ext3/ext4: filesystem nativo Linux (ext4 ed ext4 con journaling)
- vfat/ntfs: (interoperabilita' con sistemi windows, e usb storage)
- swap
- filesystem in user space (fuse) ed ntfs3g
- molti altri...
In un filesystem Unix esistono diversi tipi di file che rappresentano
- file, directory e link
- socket, named pipe
- char/block devices
file, directory e link servono ad organizzare lo spazio disco nella struttura gerarchica del filesystem
socket e named pipe sono delle astrazioni fornite dal kernel come canali di comunicazioni tra processi (IPC)
char e block devices rappresentano rispettivamente device con accesso sequenziale (porte seriali, usb, periferiche audio) e quelli con accesso a blocchi (dischi, cdrom)
E' possibile verificare il tipo di un file mediante il comando ls
e la conoscenza del
formato della codifica utilizzata per rappresentarli:
- Regular file (-)
- Directory (d)
- Symbolic link (l)
- Socket file (s)
- Named pipe (p)
- Char device (c)
- Block device (b)
ls
$ ls -l /etc/profile
...
$ ls -ld /etc/rc0.d
...
$ ls -l /dev/ttyS0
...
$ ls -l /dev/sda1
...
$ ls -l /etc/rcS.d/S*
...
$ ls -l /run/acpid.socket
...
L' inode (index node) e' una struttura dati del kernel che rappresenta un oggetto del filesystem (in altre parole un qualunque tipo file).
Tra le informazioni che un inode puo' contenere troviamo:
- tipo di file e altri metadata (permessi, utente e gruppo proprietari, date di creazione/modifica/accesso)
- posizione degli eventuali disk block associati (per gli inode di tipo file)
- insieme degli inode contenuti (per gli inode di tipo directory)
stat
$ stat .
...
$ stat .bashrc
...
I filesystem Unix supportano due tipi di link:
- hard link
- soft link (o symbolic link)
ln
consente la creazione e modifica dei file link (sia hard che soft link)I soft link possono fare riferimento a file o directory e possono attraversare filesystem differenti
Gli hard link possono riferirsi solo a file contenuti nello stesso filesystem in cui viene creato il link
La motivazione di questo differente comportamento va ricercato nel modo in cui queste funzionalita' vengono implementate:
- il link simbolico e' un nodo dell'albero del filesystem il cui valore e' un nuovo percorso
- l'hard link e' un nodo dell'albero del filesystem che punta alla stessa zona del disco del file da cui e' stato creato
Per questo motivo se il file originale viene rimosso:
ln
$ cp /etc/profile tmpfile
$ ln -s tmpfile softlink
$ ls -l
...
$ ln tmpfile hardlink
$ ls -l
...
$ rm tmpfile
$ ls -l