Previous Next Contents

2. Basi

2.1 I comandi di base

Prima di scrivere questo paragrafo, proprio in questo punto del programma, devo dire di averci pensato un bel po'.

Il dubbio mi viene dal fatto che non vorrei che si pensasse che Linux, alla fine, si riducesse ad una serie di comandi che servono per compiere alcune operazioni di base, in realtà Linux è molto di più.

Pertanto in questo paragrafo si daranno, sotto la forma di un glossario, alcune infomazioni che vi serviranno per muovervi un po' più agevolmente nel sistema, ma non si farà menzione dei comandi avanzati, di cui parleremo solo più avanti. Considerate questa parte del programma culturale come un punto di partenza e non un punto di arrivo.

Infine un consiglio: il modo migliore per apprendere Linux è quello di usarlo, per cui non fate l'errore di leggere solo e non lavorare sul sistema, usate queste informazioni per far funzionare il vostro Linux, insomma sperimentate il più possibile.


cat [options] nomefile

elenca il contenuto di un file

Il suo output è normalmente stdout, ciò non toglie che possa anche essere rediretto ad esempio in un altro file.

Es: cat pippo.dat > pluto.dat

copia il contenuto del file pippo.dat nel file pluto.dat

Es: cat pippo.dat > /dev/lp1

copia il contenuto del file pippo.dat nel file speciale /dev/lp1 che indica la porta parallela. (A cui per esempio può essere connessa una stampante)

Es: cat pippo pero > new.file

copia il contenuto del file pippo e del file pero, sequenzialmente nel file new.file

cat è dotato anche di alcune interessanti opzioni, che gli consentono ad esempio di numerare le linee in output, di numerare tutte le linee non bianche etc etc.

per maggiori info sulle opzioni del comando cat, vi consiglio vivamente ``man cat''.


cp  [options] nomeorg nomedest

copia un file da una locazione ad un altra

Es: cp /root/doc/info.for.root /home/jaco/doc/

copia il file info.for.root dalla directory /root/doc/ alla directory /home/jaco/doc/

Es: cp /root/doc/info.for.root /home/jaco/doc/info.for.jaco

copia il file info.for.root dalla directory /root/doc/ alla directory /home/jaco/doc/ rinominandolo info.for.jaco

Anche il comando cp, come gli altri è dotato di un grande numero di opzioni

Es: cp -R /root/ /temp/

copia la directory root e tutte le sue sottodirectory nella directory /tmp/

anche in questo caso per le opzioni di cp, leggere attentamente ``man cp''


find  [path] [expression]

cerca un file all'interno del file system

Es: find / -iname pippo.pero

cerca a partire dalla directory radice tutti i file che corrispondono alla descrizione pippo.pero. L'opzione -iname fa sì che la ricerca sia case insensitive, ovvero che non si preoccupi di vedere se il file è Pippo.Pero o piPPo.peRo.

Ricordiamo invece che Linux è case sensitive e che quindi in generale il file pluto è diverso dal file PLUTO, ovvero tutti e due possono convivere nella stessa directory, indicando però file diversi.

Es: find /usr -iname pluto

come prima solo che questa volta la ricerca sarà effettuata nella sola dir /usr e nelle sue sottodirectory.

Es: find . -type f -perm -755 -print

cerca a partire dalla directory . (la directory corrente) tutti i file (non le dir) il cui permesso è 755 e stampa il pathname del file trovato.

Es: find . -type f -perm -755 -print -exec chmod 750 {} ';'

cerca a partire dalla directory corrente tutti file aventi permesso 755 e ne cambia il permesso a 750.

Come vedete, find ha una marea di opzioni, quindi qui occorre uno studio veramente approfondito di ``man find''.


grep  [options] pattern [file]

grep ricerca in un file la stringa specificata in pattern

Es: grep -i linux documentation

ricerca all'interno del file documentation la stringa linux ignorando la distinzione fra maiuscole e minuscole.

Es: grep -i linux *

ricerca all'interno di ogni file la stringa linux

Es: mialista=`grep linux *`

ricerca all'interno di ogni file la stringa linux e crea una variabile di sistema chiamata mialista che contenga l'elenco delle occorrenze trovate da grep


ls [options]  [pathfile]

elenca il contenuto di una directory

total 656
-rw-------   1 root     root        21253 Dec 11 11:28 123gate.txt
-rw-r--r--   1 root     root       168814 Jan 11 08:30 ALLFILES.LST
-rw-rw-r--   1 root     root       185123 Nov 15 04:51 ALLFILES.TXT
-rw-r--r--   1 root     root         7203 Dec 11 23:18 CLS-ED
-rw-------   1 root     root        64039 Jan 12 09:42 allfiles.ziq
-rw-------   1 root     root        56771 Jan 12 09:42 allfiles.zir
drwxr-xr-x   2 root     root         1024 Nov  7 15:52 cucina
-rw-r--r--   1 root     root       140024 Nov  2 00:05 ifmail-h
-rw----rw-   1 root     root        15294 Jan 11 14:33 prg.culturale.1
-rw-r--r--   1 root     root         1170 Jan  9 15:17 mtemp
 


mkdir nomedir

crea una nuova directory


mv nomeorg nomedest

muove un file da una locazione all'altra nell'hd

Es: mv /var/spool/pippero /doc/

muove il file pippero dalla directory /var/spool/ alla directory /doc/

Es: mv pluto pippo

rinomina il file pluto come file pippo


tail [+/-num][-f] file

stampa l'ultima parte di un file

Per default vengono stampate le ultime 10 righe.

L'opzione -f risulta molto utile perché consente di vedere un file in crescita, ad esempio un file di log è in continua costruzione, con ``tail -f /var/adm/messages'' vedrete in tempo reale i messaggi di sistema che vengono aggiunti al file /var/adm/messages.

2.2 La procedura di bootstrap

Cercheremo qui di semplificare molto il processo di inizializzazione del sistema, ci servirà solo per dare un idea di quali sono i file che vengono eseguiti all'avvio del sistema operativo, e non per sapere tecnicamente quello che avviene a basso livello durante il bootstrap.

Il primo processo che viene considerato dopo il bootstrap è init che va a leggere il file /etc/inittab. (La directory /etc/, tipicamente contiene tutti o quasi tutti i file necessari per la configurazione generale del sistema.)

/etc/inittab è un file di testo che contiene i comandi che il processo init (padre di tutti i processi del sistema) deve eseguire per far partire i processi figli.

tipicamente una riga del file /etc/inittab è così composta

ID:LIVELLODIESECUZIONE:AZIONE:COMANDO

ID

è una stringa di due caratteri, che identifica univocamente un elemento del file. Ciò naturalmente significa che un ID può comparire solo su una riga ovvero non ci possonno essere due ID doppioni in /etc/inittab.

LIVELLODIESECUZIONE

I livelli di esecuzione possono sembrare una cosa molto astratta, in realtà non lo sono affatto. Diciamo che Linux dispone di 7 livelli di esecuzione, ciascuno dei quali potrà essere utilizzato indifferentemente o generato da una chiamata di sistema di un programma. Specificare il livello di esecuzione per un comando nel file /etc/inittab significa dire al sistema operativo che quel comando deve essere eseguito quando si passa da un livello al livello specificato.

Alcuni livelli di esecuzione in generale:

0

si passa al livello 0 quando si esegue lo shutdown del sistema

1

si passa al livello 1 quando si vada da modo multiuser a modo singleuser

2

definisce lo stato multiutente

3,4

si usano spesso in alternativa all'ambiente multiutente, ad esempio in una rete il 3 potrebbe indicare lo stato di rete ed eseguire quindi tutti i compiti dello stato 2 ed inizializzare anche i processi client e server della rete

5

Potrebbe essere usato per eseguire uno shutdown completo della macchina e poi restituire il controllo ad un debbugger

6

il sistema esegue uno shut-down completo poi viene fatto ripartire

C'è da dire che la definizione dei livelli non è standard, ma può essere ridefinita, tanto è vero che spesso cambia anche da distribuzione a distribuzione.

AZIONE

un'azione associata ad un comando. Ad esempio l'azione respawn fa sì che il comando riparta di nuovo ogni volta che esso per un qualunque motivo termina.

COMANDO

un qualsiasi comando della shell.

e vediamo ora un esempio significativo del file /etc/inittab


# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K
# quando passo al livello 1 (single user) viene eseguito lo
# script /etc/rc.d/rc.K

# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
# se qualcuno preme ctrl-alt-del a qualunque livello siamo,
# esegui uno shutdown del sistema

# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0
# se si passa al livello 0 (shutdown + halt system) allora esegui
# lo script /etc/rc.d/rc.0

# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6
# se si passa a livello 6 (shutdown + reboot) allora esegui
# /etc/rc.d/rc.6

c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:5:respawn:/sbin/agetty 38400 tty3 linux
c4:5:respawn:/sbin/agetty 38400 tty4 linux
c5:5:respawn:/sbin/agetty 38400 tty5 linux
c6:45:respawn:/sbin/agetty 38400 tty6 linux
c8:45:respawn:/sbin/agetty 38400 tty8 linux
c9:45:respawn:/sbin/agetty 38400 tty9 linux
z1:45:respawn:/sbin/agetty 38400 tty10 linux
z2:45:respawn:/sbin/agetty 38400 tty11 linux
# inizializza i terminali utenti da 1 a 6 e da 8 a 11 e manda
# il login su ciascuno di questi terminali, respawn fa si che
# quando un terminale viene disconesso, automaticamente viene
# mandato un altro login.

# quando il livello di esecuzione non e' specificato, si assume
# 0123456 ovvero tutti i livelli di esecuzione

# quando il sistema viene inizializzato in modo multiutente,
# in inittab esiste una linea del tipo
# Script to run when going multi user.
rc:123456:wait:/etc/rc.d/rc.M
# per cui praticamente inittab ad ogni bootstrap richiama
# lo script /etc/rc.M che esegue una serie di operazioni,
# tipo richiamare il demone per la posta, fare il mount
# del cd-rom (ultima slakware) e molte altre.

Fra tutte richiama anche il file /etc/rc.d/rc.local che tipicamente contiene tutte le operazioni locali, diciamo una specie di autoexec del dos. Ad esempio un buon rc.local contiene:


#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local setup commands in here:
echo "Running gpm..."
/usr/bin/gpm -t bare &
echo "Sto caricando la tastiera italiana .... "
/usr/bin/loadkeys /usr/lib/kbd/keytables/it.map

che praticamente chiama il programma di controllo del
mouse e carica il driver per la tastiera italiana

/usr/bin/loadkeys /usr/lib/kbd/keytables/it.map


Previous Next Contents