Home / Indice sezione | www.icosaedro.it | ![]() |
1. Login
2. Eventi conseguenti al login:
3. Info telegrafiche su Bash
4. File di testo ASCII
5. File di testo ASCII-esteso
6. File di testo Unicode e UTF-8
7. Creare, editare e visualizzare file di testo
8. File System
9. Directory
10. Impostare i permessi e le altre proprietà degli inode dei file e delle directory
11. Navigare nel file system
12. Orientarsi nel file system
13. Trovare file e comandi
14. Esercizio riepilogativo
Bibliografia
Tipi di terminali:
Tipo | Descrizione | Periodo storico di utilizzo |
---|---|---|
Pannello di controllo | Interruttori, bottoni e lucette varie | Anni '50 e primi anni '60 |
Perforatore di schede | Sistema per la perforazione di schede di Hollerith a 80 colonne, una riga per scheda | Dalla fine dell'800 al 1986 (visto coi miei occhi) |
Console del computer | Solo i primi mini e personal computer degli anni '70 disponevano di una scheda video e di un monitor, con un formato che poteva andare da 40x24 fino a 80x25 | Dagli anni '70 ad oggi |
Telescrivente | Tastiera + stampante collegati via seriale a 300 b/s al computer | Anni '60 e '70 |
Videoterminale | Tastiera + schermo CRT collegati via seriale 300-19200 b/s al computer; il più famoso è il "VT100" di DEC (Data Equipment Corp.): molti programmi terminale di oggi ne supportano l'emulazione | Dagli anni '70 ad oggi |
Workstation grafica | Ovvero, costoso computer dotato di costoso monitor grafico, sacrificato alla sola funzione di terminale grafico di un computer centrale. Solo alla fine degli anni '80, con l'affermazione del protocollo X Window, sui sistemi Unix è diventato disponibile un sistema per terminale grafico accessibile via rete | Dalla fine degli anni '80 ad oggi |
Telnet ed emulatore terminale | Console, videoterminale o finestra (xterm) utilizzati per emulare un terminale di un computer remoto accessibile via protocollo IP, più modernamente sostituito dal protocollo SSH crittato | Dai primi anni `60 ad oggi |
- il processo che gestisce il login richiama lo shell scelto dall'utente (con chsh) e riportato in /etc/passwd, ultimo campo;
- la directory corrente viene impostata su /home/pippo, che è lo spazio di lavoro normale dell'utente pippo; nel caso di root, la home dir. è invece /root.
- lo shell (facciamo contro che sia bash) esegue /home/pippo/.bash_profile e /home/pippo/.bashrc in questo ordine (se presenti) e quindi presenta il prompt "$" in attesa di comandi;
- l'utente termina la sessione con il comando "logout" oppure "exit".
- Si possono usare i tasti delle frecce sx/dx per posizionare il cursore, Del o CTRL-H per cancellare.
- I tasti freccia-su e freccia-giù per navigare nello storico dei comandi.
- Il tasto "Tab" per l'auto-completamento di comandi e nomi di file.
- Una volta premuto Enter, lo shell scompone la riga in parole: i caratteri separatori validi sono lo spazio e il tabulatore. Due o più spazi valgono come un separatore.
- La prima parola viene considerata come nome di comando, le eventuali altre parole come parametri da passare al comando.
- Per inserire spazi o altri caratteri strani nei parametri, delimitare tali parametri con le virgolette doppie ".
- Sequenze lunghe di comandi si possono mettere in un file di testo esattamente come le si batterebbe da tastiera ed eseguite con il comando
- Come fa Bash a trovare il comando? Si possono usare pathfile assoluti o relativi, altrimenti Bash si basa sul contenuto della variabile d'ambiente PATH (echo $PATH per vederne il valore corrente).source nomefile
- E' possibile creare propri comandi e metterli ad esempio in /home/pippo/bin; poi conviene aggiungere questo path a quelli predefiniti mettendo in .bashrc:
Per vedere subito l'effetto di questo comando, impartirlo anche da prompt, oppure eseguire .bashrc, oppure ri-eseguire il login.export PATH=/home/pippo/bin:$PATH
Per una panoramica sul linguaggio Bash, vedi anche l'articolo Bash.
0 | 16 | 32 | 48 | 64 | 80 | 96 | 112 | |
---|---|---|---|---|---|---|---|---|
0 | NUL | DLE | SP | 0 |
@ |
P |
` |
p |
1 | SOH | DC1 | ! |
1 |
A |
Q |
a |
q |
2 | STX | DC2 | " |
2 |
B |
R |
b |
r |
3 | ETX | DC3 | # |
3 |
C |
S |
c |
s |
4 | EOT | DC4 | $ |
4 |
D |
T |
d |
t |
5 | ENQ | NAK | % |
5 |
E |
U |
e |
u |
6 | ACK | SYN | & |
6 |
F |
V |
f |
v |
7 | BEL | ETB | ' |
7 |
G |
W |
g |
w |
8 | BS | CAN | ( |
8 |
H |
X |
h |
x |
9 | HT | EM | ) |
9 |
I |
Y |
i |
y |
10 | LF | SUB | * |
: |
J |
Z |
j |
z |
11 | VT | ESC | + |
; |
K |
[ |
k |
{ |
12 | FF | FS | , |
< |
L |
\ |
l |
| |
13 | CR | GS | - |
= |
M |
] |
m |
} |
14 | SO | RS | . |
> |
N |
^ |
n |
~ |
15 | SI | US | / |
? |
O |
_ |
o |
DEL |
Osserviamo che la tabella ha 8 colonne per 16 righe, per un totale di 128
caselle e altrettanti simboli: è esattamente quello che ci dobbiamo
aspettare con un codice ad 7 bit: infatti 27=128. Il codice
decimale di un simbolo si ottiene sommando i numeri in grigio al cui
incrocio si trova il simbolo. Ad esempio, il codice ASCII decimale
della lettera A
è 1+64=65.
Non tutti i simboli producono la scrittura di un carattere sulla carta (o sullo schermo): alcuni codici sono speciali e sono detti codici di controllo. I codici di controllo sono indicati con una sigla a due o tre lettere in corsivo. I codici di controllo occupano le prime 32 posizioni e l'ultima. Non tutti questi codici hanno conservato il significato originario che avevano nelle telescriventi, ma alcuni di essi sì: vediamo i principali usati ancora oggi:
NUL (0) - Il codice di controllo nullo non aveva effetto sulle telescriventi. La libreria standard del C, a fondamento del sistema UNIX e quindi anche di GNU/Linux, lo usa per marcare la fine delle stringhe nella loro rappresentazione in memoria.
BEL (7) - Il codice di controllo che nelle telescriventi azionava il campanello per produrre un sonoro "diiiinnnng". Oggi produce uno stridulo bip emesso dal buzzer piezoelettrico incorporato nei cabinet dei computer. In entrambi i casi serve per attirare l'attenzione dell'operatore su qualche evento inconsueto.
BS (8) - Il back space produceva lo spostamento della
testina di stampa della telescrivente a sinistra di un carattere;
spesso veniva utilizzato per eseguire il grassetto stampando una
lettera, il BS, e quindi di nuovo la stessa lettera sopra la stampata
precedente. Incredibile ma vero, viene usato ancora oggi con lo stesso
significato: prova a dare il comando man ls | cat -vt
:
tutti quei ^H
sono i caratteri BS usati per rendere il
grassetto della man page!
HT (9) - L'horizontal tabulation comandava lo spostamento della testina di stampa all'inizio del successivo campo, esattamente quello che fa oggi sui nostri terminali. La larghezza dei campi è di solito 8 caratteri.
FF (12) - Il form feed produceva lo scorrimento della carta in modulo continuo fino a portare la testina di stampa sulla prima riga del foglio seguente. Oggi produce la cancellazione dello schermo e il posizionamento del cursore in alto a sinistra.
CR (13) - Il carriage return forzava la testina di stampa a scorrere fino al margine sinistro, posizionandosi quindi in corrispondenza del primo carattere della riga. Idem sui videoterminali moderni.
ESC (27) - Il codice di escape ha un pò il ruolo di jolly, e precede tipicamente una sequenza di caratteri che vengono interpretati in modo speciale dalla telescrivente piuttosto che essere stampati. Le sequenze di escape, così come vengono chiamate ancora oggi, sono largamente utilizzate per comandare terminali, stampanti, e come codici generati dalla pressione di certi tasti speciali.
SP (32) - Lo space non è un carattere di controllo, ma semplicemente lo spazio. Si tratta di un carattere "stampabile" come gli altri, con la particolarità che non lascia alcuna traccia sulla carta o sullo schermo, ma ha il solo effetto di spostare la testina di stampa o il cursore.
Per completare questa rapida carrellata sull'ASCII, ricordo le denominazioni più accreditate di alcuni caratteri che si incontrano meno frequentemente ma che appaiono spesso nella documentazione:
#
- cancelletto, diesis, number.
&
- "e" commerciale, ampersand.
'
- accento acuto.
-
- meno, minus, hypen.
/
- barra obliqua, slash.
:
- duepunti, colon.
;
- puntoevirgola, semicolon.
<
- minore di, less than.
>
- maggiore di, greater than.
@
- chiocciola, chiocciolina, at.
[
- parentesi quadra aperta, left square bracket.
]
- parentesi quadra chiusa, right square bracket.
\
- barra obliqua inversa, back slash.
^
- accento circonflesso.
_
- sottolinea, underscore.
`
- accento grave.
{
- parentesi graffa aperta, left curly brace.
}
- parentesi graffa chiusa, right curly brace.
|
- barra verticale, vertical bar.
~
- tilde.
L'UTF-8 usa 7 bit per carattere per codificare l'ASCII, e attiva l'ottavo bit solo quando serve la codifica Unicode. Ogni carattere Unicode viene quindi codificato con un numero variabile di byte che va da 1 a 3. Il vantaggio è che il testo è visualizzabile con un normale text editor, anche se naturalmente i caratteri diversi dall'ASCII potrebbero apparire a casaccio. Per i testi comuni utilizzati in occidente è più compatto perché la maggior parte dei caratteri sono ASCII. Inoltre, l'UTF-8 attraversa indenne come se fosse un normale testo anche i sistemi e i programmi che non supportano Unicode. Per questi motivi l'UTF-8 è molto usato nella posta Internet e nei sistemi Unix.
$ echo ciao > unfile $ ls -l unfile -rw-r--r-- 1 pippo users 5 Jul 24 15:27 unfile $ ln unfile lostesso $ ls -l unfile lostesso -rw-r--r-- 2 pippo users 5 Jul 24 15:27 lostesso -rw-r--r-- 2 pippo users 5 Jul 24 15:27 unfile
Albero dei file. Gli inode sono rappresentati dagli
ovali, mentre i rettangoli rappresentano i file e le directory. Le frecce
indicano che l'entrata di una certa directory contiene il numero di inode
che corrisponde a un certo inode. Si nota che tutte le dir., eccetto la
root, contengono i file "." e ".." che puntano a se stessa e al genitore,
rispettivamente. I file unfile e lostesso
contengono l'inode dello stesso file: si tratta di due hard link.
|
Senza opzioni, il comando ls mostra solo i nomi (la seconda colonna). Con l'opzione -i mostra anche i numeri degli inode. Le altre opzioni del comando ls (v. man ls) fanno stampare tante altre informazioni che vengono estratte dall'inode di ciascun file listato (e quindi ciò comporta un certo lavorio del disco).$ ls -i / 128351 bin 16101 boot 32065 dev 224449 etc 2 home 128354 lib 1 proc 288577 root 288670 sbin 208417 tmp 304609 usr 160321 var $ stat /usr File: "/usr" Size: 4096 Blocks: 8 IO Block: -4611694058606161920 Directory Device: 302h/770d Inode: 304609 Links: 18 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: Wed Jul 24 19:50:23 2002 Modify: Sat Jul 13 11:35:08 2002 Change: Sat Jul 13 11:35:08 2002
Da tutto ciò segue che il nome del file non è una proprietà del file ma è solo un sinonimo del numero di inode e sta scritto nella directory.
Siccome lo stesso inode può avere riferimenti in più dir., ne segue che lo stesso file può assumere nomi diversi.
Non esiste differenza sostanziale tra file e directory: una dir. non è altro che un file di tipo "d" al quale si può accedere in rwx come a ogni altro file. Il significato dei permessi nel caso delle dir. merita un approfondimento:
Proprietà. Si usa il comando chown (change owner). Esempio:
In realtà un utente può solo cambiare il gruppo, non l'user, e può farlo solo scegliendo tra i gruppi cui appartiene (v. /etc/group). Naturalmente l'utente root non ha questa limitazione.$ chown pippo:users unfile
Impostare i bit dei permessi. Si usa il comando chmod (change mode). I bit dei permessi voluti si possono impostare usando la base ottale, oppure, in modo più leggibile, usando le lettere u g o (user, group, other) e le lettere r w x s S t (read, write, execution, suid/user, suid/group, sticky). Supponiamo di voler rendere un file leggibile ma non modificabile, al gruppo di utenti cui apparteniamo:
$ chmod u=rw,g=r,o= bollettino-aggiornato-ottobre
Impostare le date. E' possibile modificare ad arbitrio le date di accesso / modifica inode / modifica file usando il comando touch. L'uso più frequente di questo comando è quello di usare questo comando senza parametri: in questo caso cambia tutte le date del file a quella corrente.
Numero di link. Lo si incrementa creando degli hard link al file con il comando ln (link) (v. esempio precedente). Lo si riduce con rm (remove) o con rmdir, che tolgono l'entrata del file dalla directory: dunque rm cancella di sicuro il nome del file, ma non necessariamente cancella anche il file stesso.
Lunghezza del file. Si modifica solo modificando il file stesso.
Tabella dei blocchi del file. Ovviamente, anche questa non è modificabile, pena corruzione del file system!
Cambiare nome al file/dir. Sappiamo che il nome del file non è una proprietà del file, ma un riferimento "letterario" al suo inode presente nella dir. Per cambiare un nome si usa il comando mv (move), che in generale serve anche per spostare i file e le dir. Esempio:
$ mv brutto.nome bel.nome
Copiare un file. Si usa il comando cp (copy). Esempio:
Ovviamente, il file da copiare deve essere leggibile dall'utente, mentre il file di destinazione assumerà proprietà, permessi e dati corrispondenti all'utente che lo ha copiato. Il comando cp ha una infinità di altre opzioni, forse la più importante è -a che preserva invece tutte queste info.$ cp originale copia
/
: radice
/bin
: eseguibili (binari) di uso generale
/boot
: kernel e roba per il boot
/dev
: device nodes
/etc
: file di configurazione
/home
: home dirs.
/home/pippo
: home dir.
/home/pluto
: home dir.
/home/topolino
: home dir.
/lib
: librerie e moduli a caricamento dinamico
/lost+found
: blocchi e inode persi
/proc
: file system virtuale del kernel
/root
: home dir. di root
/sbin
: programmi di sistema
/tmp
: file temporanei
/usr
: roba di utilità (docs, programmi, ecc.)
/var
: file di sistema a dimensione variabile (spool di stampa, coda email, mailbox, db, lock, ecc.)
Esiste un demone di sistema di nome updatedb, che con una certa periodicità cataloga tutti i file del sistema: il db che esso produce è consultabile con il comando locate.$ locate pass $ which chmod
Il comando which fornisce il pathfile completo del comando indicato seguendo lo stesso algoritmo di bash.
Quali dei seguenti pathfile sono dei file? e quali sono delle directory? a cosa servono?bash cat cd chmod chown cp date exit less ln locate logout ls man man ascii mc more mv rm rmdir stat which
/etc /etc/passwd /etc/shadow /etc/group /home/pippo /root
Umberto Salsi | Commenti | Contatto | Mappa | Home / Indice sezione |
Still no comments to this page. Use the Comments link above to add your contribute.