[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ successivo ]
Per informazioni dettagliate sul prompt del boot, vedere il BootPrompt-HOWTO
dal LDP.
E' possibile fare il boot del sistema ed accedere all'account di root, anche se
non se ne conosce la password, basta avere accesso alla tastiera.  (Premesso
che che non esistono altre password richieste dal BIOS, o dal boot-loader tipo
lilo che possono impedirvi l'accesso al sistema).
Questa procedura non richiede alcun disco di boot, nè cambiamenti al BIOS. In questo contesto, "Linux" è l'etichetta per lanciare il kernel in una installazione Debian standard.
Alla schermata di boot di lilo, non appena appare
boot: (in alcuni sistemi si deve premere il tasto maiuscolo per
prevenire il boot automatico) e se lilo usa il framebuffer dovete
premere TAB per vedere le opzioni che digitate), date:
     boot: Linux init=/bin/sh
Il sistema avvia il kernel ed esegue /bin/sh invece dello standard
init.  A questo punto avete ottenuto i privilegi di root e la
shell di root.  Siccome, però / è montata in sola lettura e molte
altre partizioni non sono state ancora montate, avete bisogno di eseguire
quanto segue per avere un sistema ragionevolmente funzionante.
     init-2.03# mount -n -o remount,rw /
     init-2.03# mount -avt nonfs,noproc,nosmbfs
     init-2.03# cd /etc
     init-2.03# vi passwd
     init-2.03# vi shadow
(Se il secondo campo di dati all'interno di /etc/passwd è
"x" per ogni username, il vostro sistema usa le shadow password, per
cui dovrete modificare /etc/shadow.) Per disabilitare la password
di root, modificate il secondo campo nel file password in maniera che risulti
vuoto.  Ora potete fare il reboot ed il log in come root senza una password.
Quando fa il boot nel runlevel 1, Debian (almeno dopo Potato) richiede una
password, mentre alcune distribuzioni più vecchie no.
E' buona cosa avere un piccolo editor in /bin nel caso in cui
/usr non fosse accessibile (vedere Editor di salvataggio, Sezione 11.2).
Considerate anche l'installazione del pacchetto sash.  Se il
sistema diventa non più avviabile, eseguite:
     boot: Linux init=/bin/sash
sash funziona come sostituto interattivo di sh
persino quando /bin/sh è inutilizzabile.  Ha un collegamento
statico ed include molte utilità di base al suo interno (digitate
"help" al prompt per una lista di riferimento).
Fate il boot da qualunque set di dischi di emergenza boot/root.  Se, per
esempio, /dev/hda3 è la partizione di root originale, i
seguenti comandi permetteranno di aprire il file password facilmente come
sopra.
     # mkdir fixit
     # mount /dev/hda3 fixit
     # cd fixit/etc
     # vi shadow
     # vi passwd
Il vantaggio di questo approccio rispetto al metodo precedente è che non
richiede la conoscenza della password di lilo (se esiste).  Però,
bisogna essere in grado di impostare il BIOS, se non lo è già, in modo che il
boot del sistema sia da floppy o da CD.
Nessun problema, persino se non vi siete presi la briga di fare un dischetto di
boot durante l'installazione.  Se lilo non funziona, usate come
disco di boot il disco di installazione di Debian (il primo) ed eseguite il
boot da questo disco.  Al prompt del boot, assumendo che la partizione di root
del vostro Linux è su /dev/hda12 e che volete il
runlevel 3, digitate:
     boot: rescue root=/dev/hda12 3
A questo punto siete entrati in un sistema pressochè funzionante in toto, basato sul kernel del dischetto. (Potrete avere piccole noie, dovute alla mancanza di alcuni moduli).
Vedere anche Installare un pacchetto su un sistema non bootabile, Sezione 6.3.6 se avete un sistema danneggiato.
Se volete crearvi un vostro boot floppy, leggete il readme.txt sul
rescue disk.
Avere unstable/sid è divertente, ma xdm,
gdm, kdm, e wdm difettosi lanciati
durante il boot possono fare molto male.
Primo, guadagnate la shell di root digitando quanto segue al prompt del boot:
     boot: Linux vga=normal s
Dove Linux è l'etichetta per l'immagine del kernel che andate a
lanciare, "vga=normal" vi assicura che lilo si esegue in
uno schermo normale VGA ed "s" (o "S") è il parametro dato
ad init per invocare la modalità singolo utente.  Al prompt date
la password di root.
Esistono vari modi per disabilitare tutti i demoni che lanciano X:
eseguite update-rc.d ?dm stop 99 1 2 3 4 5 6 .
inserite "exit 0" all'inizio di tutti i file
/etc/init.d/?dm.
rinominate tutti i file /etc/rc2.d/S99?dm
/etc/rc2.d/K99?dm.
rimuovete tutti i file /etc/rc2.d/S99?dm.
eseguite :>/etc/X11/default-display-manager
Qui il numero in rc2.d deve corrispondere al runlevel
specificato in /etc/inittab.  ?dm
significa tutti gli xdm, gdm, kdm, e
wdm.
L'unico, vero modo Debian è il primo della lista.  L'ultimo è semplice, ma
funziona solo sulla Debian e richiede una nuova impostazione in seguito tramite
dpkg-reconfigure.  Gli altri sono metodi generici per disabilitare
i demoni.
Avete sempre la possibilità di lanciare X con il comando startx da
qualsiasi shell.
Potete fare il boot in un particolare runlevel e configurazione tramite il
prompt di lilo.  Dettagli si trovano nel BootPrompt-HOWTO
(LDP).
Se volete fare il boot nel runlevel 4, date il seguente comando al prompt di
lilo.
     boot: Linux 4
Se si vuole il boot in modalità singolo utente, conoscendo la password di root,
potete usare uno dei seguenti esempi al prompt di lilo.
     boot: Linux S
     boot: Linux 1
     boot: Linux -s
Se si vuole il boot con meno memoria di quanta il sistema ne abbia (mettiamo
48M in un sistema con 64M), basta dare il seguente comando al prompt di
lilo:
     boot: Linux mem=48M
Evitate di specificare più memoria di quanta ne abbiate, altrimenti il kernel
si pianterà inevitabilmente.  Se si hanno più di 64M, per esempio 128M, con
vecchi kernel o BIOS bisogna specificare il comando mem=128M al
prompt, od includere una riga simile in /etc/lilo.conf, altrimenti
non verrà utilizzata memoria sopra i 64MB.
GRUB è un nuovo boot manager proveniente dal progetto Hurd, molto più flessibile di Lilo, ma con un modo di maneggiare i parametri di boot lievemente differente.
     grub> find /vmlinuz
     grub> root (hd0,0)
     grub> kernel /vmlinuz root=/dev/hda1
     grub> initrd /initrd
     grub> boot
Dovete conoscere come Hurd nomina i device:
     the Hurd/GRUB       Linux               MSDOS/Windows
      (fd0)               /dev/fd0            A:
      (hd0,0)             /dev/hda1           C: (solitamente)
      (hd0,3)             /dev/hda4           F: (solitamente)
      (hd1,3)             /dev/hdb4           ?
Vedere /usr/share/doc/grub/README.Debian.gz e
/usr/share/doc/grub-doc/html/ per i dettagli.
L'amministrazione di sistema in ambiente Unix richiede dei compiti molto più elaborati che in un ambiente di un normale PC. E' importante conoscere le modalità di configurazione di base, per poter risolvere i problemi del sistema. Le interfacce grafiche di configurazione basate su X sono carine e convenienti, ma comunque limitate, specialmente in casi di emergenza.
In questo contesto, la registrazione degli eventi della shell è una buona pratica, specialmente come root.
Emacs: Usate M-x shell per iniziare la registrazione in un buffer e C-x C-w per scrivere il buffer su un file.
Shell: Usate il comando screen con "^A H" come decritto
in Scambio di console con screen, Sezione
8.6.28 od il comando script.
     $ script
     Script started, file is typescript
      ... fate quello che dovete ...
      Ctrl-D
     $ col -bx <typescript >savefile
     $ vi savefile
Si può usare quanto segue invece di script:
     $ bash -i 2>&1 | tee typescript
Se dovete registrare l'immagine di una applicazione di X, incluso
xterm, usate gimp (GUI).  Può catturare ogni singola
finestra, oppure lo schermo intero.  Alternative sono xwd
(xbase-clients), import (imagemagick), o
scrot (scrot).
Se avete necessità di riarrangiare la struttura dei file, muovete il contenuto, compresi i collegamenti con:
     Metodo standard:
     # cp -a /partenza/directory /destinazione/directory # richiede GNU cp
     # (cd /partenza/directory && tar cf - . ) | \
             (cd /destinazione/directory && tar xvfp - )
     Se è coinvolto un collegamento, è necessario un metodo più "pedante":
     # cd /percorso/alla/vecchia/directory
     # find . -depth -print0 | afio -p -xv -0a /mount/point/della/nuova/directory
     Da remoto:
     # (cd /origine/directory && tar cf - . ) | \
             ssh user@host.dom (cd /destinazione/directory && tar xvfp - )
     Se non ci sono collegamenti:
     # scp -pr user1@host1.dom:/origine/directory \
               user2@host2.dom:/destinazione/directory
Qui scp <==> rcp e ssh <==>
rsh.
Le seguenti informazioni comparative su come copiare una intera sottodirectory sono state presentate da Manoj Srivastava <srivasta@debian.org> nella lista debian-user@lists.debian.org.
cp
Tradizionalmente, cp non è mai stato un gran candidato per tali
scopi, poichè non dereferenzia i collegamenti simbolici, nè preserva i
collegamenti.  Un'altro fattore da considerare è lo spezzettamento dei files
(files con buchi).
GNU cp ha superato questi limiti; comunque su un sistema non GNU,
cp potrebbe avere ancora problemi.  In più, usando cp
non si possono creare archivi che siano piccoli e facilmente trasportabili.
     % cp -a . newdir
tar
Tar è andato oltre alcuni dei problemi che aveva cp con i
collegamentos simbolici.  Comunque sia, sebbene cpio sia in grado
di trattare file speciali,il tradizionale tar no.
Il modo in cui tar tratta collegamenti multipli ad un file è di
porre solo una copia del collegamento sul nastro, ma il nome collegato a quella
copia è il solo utilizzabile per recuperare il file; cpio
invece, mette una copia per ciascun collegamento, ma per recuperare il file
potete usare uno qualsiasi dei nomi.
Nella transizione da Potato a Woody, il comando tar ha cambiato
l'opzione per i file .bz2, per cui usate --bzip2
negli script al posto della forma breve -I (Potato) o
-j (Woody).
pax
E' l'utilità POSIX Portable Archive Interchange (IEEE Std 1003.2-1992, pagine
380–388 (sezione 4.48) e pagine 936–940 (sezione E.4.48)), nuova di
zecca.  pax legge, scrive ed elenca i membri di un file archivio,
e ne copia le directory secondo le gerarchie.  Le operazioni di
pax sono indipendenti dal formato dell'archivio e supportano una
grossa varietà di formati diversi.
Le implementazioni di pax sono ancora molto nuove.
     # apt-get install pax
     $ pax -rw -p e . newdir
      oppure
     $ find . -depth  | pax -rw -p e  newdir
cpio
cpio copia i file dentro o fuori un archivio cpio o
tar.  L'archivio può essere un'altro file sul disco rigido, un
nastro magnetico, oppure una pipe.
     $ find . -depth -print0 | cpio --null --sparse -pvd new-dir
afio
afio è un metodo migliore per trattare con archivi in formato
cpio.  In genere è più veloce di cpio, ha maggiori
opzioni per i nastri e tratta in maniera più gentile con le corruzioni dei dati
in entrata.  Supporta gli archivi multi-volume durante le operazioni in
modalità interattiva.  afio può creare archivi molto più sicuri di
quelli compressi con tar o cpio.  afio è
anche ottimo come "motore per l'archiviazione" negli script di
backup.
     $ find . -depth -print0 | afio -px -0a new-dir
Tutti i miei backup su nastro usano afio.
I backup differenziali e la sincronizzazione dei dati possono essere implementati con vari metodi:
rcs: backup con storico, solo testo
rdiff-backup: backup con storico.  I collegamenti simbolici sono
OK.
pdumpfs: backup con storico all'interno di un filesystem.
Collegamenti simbolici OK.
rsync: sincronizzazione ad 1 via
unison: sincronizzazione a 2 vie
cvs: sincronizzazione multivia con server backup e storico, solo
testo, maturo.  Vedere Concurrent Version System
(CVS), Sezione 12.1.
arch: sincronizzazione multivia con server backup e storico, non
esiste qualcosa come una "working directory".
subversion: sincronizzazione multivia con server backup e storico,
Apache.
La combinazione di uno dei metodi menzionati con uno dei metodi di
archiviazione descritti in Copia ed archiviazione di una
intera sottodirectory, Sezione 8.3 associati ad un job automatico regolare
descritto in Programmare gli eventi (cron,
at), Sezione 8.6.27 creeranno un ottimo sistema per il backup.
Mostrerò tre utilità facili da usare.
rdiff-backup fornisce dei backup semplici e validi con lo storico
differenziale per file di qualsiasi tipo, compresi i collegamenti simbolici.
Per salvare gran parte di ~/ su /mnt/backup:
     $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp  ~/ /mnt/backup
Per recuperare i dati vecchi tre giorni da questo archivio in
~/old:
     $ rdiff-backup -r 3D /mnt/backup ~/old
Vedere rdiff-backup(1).
pdumpfs
pdumpfs è un sistema semplice per il backup giornaliero, simile a
dumpfs di Plan), che conserva ogni snapshot giornaliero.  Potete
accedere in ogni monento agli snapshot passati per recuperare un determinato
file di un tale giorno.  Fate il backup della vostra directory home con
pdumpfs e cron!
pdumpfs produce uno snapshot YYYY/MM/DD nella
directory di destinazione.  Tutti i file sorgenti vengono copiati nella
directory di snapshot per la prima volta.  La seconda volta e le succesive,
pdumpfs copia solo i file aggiornati o nuovi, immagazzinando
quelli immodificati come collegamenti ai file dello snapshot del giorno
precedente per salvare spazio su disco.
     $ pdumpfs src-dir dest-dir [dest-basename]
Vedere pdumpfs(8).
Changetrack registra regolarmente i cambiamenti ai file di testo
di configurazione negli archivi RCS.  Vedere changetrack(1).
     # apt-get install changetrack
     # vi changetrack.conf
Lanciate top per vedere quale processo si comporta in maniera
"sconveniente".  Premete "P" per ordinarli per utilizzo di
cpu, "M" per consumo di memoria e "k" per uccidere il
processo.In alternativa potete usare i comandi in stile BSD ps aux |
less od in stile System V ps -efH | less.  La sintassi del
System V mostra l'ID dei processi padri PPID che può essere usato
per uccidere i figli zombie (defunti).
Usate kill per uccidere (o mandare il segnale a) un processo per
ID del processo, killall per fare lo stesso con il nome del
comando a cui il processo appartiene.  Segnali più frequentemente usati:
      1: HUP,  riavvia il demone
     15: TERM, uccisione normale
      9: KILL, uccisione "dura"
L'assicurazione contro i malfunzionamenti di sistema è un'opzione di compilazione del kernel, denominata "Magic SysRQ key". Premendo ALT-SysRq su un sistema i386, seguito da uno dei tasti r 0 k e i s u b, fa la "magia".
Un'r'aw riavvia la tastiera quando cose tipo X si bloccano.  Cambiare il
loglevel a 0 riduce i messagi di errore.  sa'k' (system attention key) uccide
tutti i processi sulla console virtuale attuale.  t'e'rminate uccide tutti i
processi su terminale corrente tranne init.  k'I'll uccide tutti i processi,
tranne init.
`S'ync, `'u'mount, e re`b'oot sono utili per uscire da situazioni veramente spinose.
I kernel debian standard non sono compilati al momento con questa opzione
attivata.  Ricompilate il kernel per farlo.  Informazioni dettagliate le
trovate in
/usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz
o /usr/src/kernel-version/Documentation/sysrq.txt.gz.
less è il pager (browser del contenuto dei file).  Premete `h' per
aiuto.  Fa molto di più di more.  less può essere
potenziato mediante l'esecuzione di eval $(lesspipe) o eval
$(lessfile) nello script di inizializzazione della shell.  Per ulteriori
notizie guardate in /usr/share/doc/lessf/LESSOPEN.  L'opzione
-R permette l'output di caratteri raw ed abilita le sequenze ANSI
con escape colorate.  Vedere less(1).
w3m può essere un pager alternativo utile per alcuni sistemi di
codifica (EUC).
free e top danno buone informazioni sulle risorse di
memoria.  Non vi preoccupate sulle dimensioni della memoria "used"
nella riga "Mem:", ma leggete quella sotto.  (38792 nell'esempio qui
sotto).
     $ free -k # per una macchina con 256MB
                  total       used       free     shared    buffers cached
     Mem:        257136     230456      26680      45736     116136 75528
     -/+ buffers/cache:      38792     218344
     Swap:       264996          0     264996
L'esatto ammontare della memoria fisica può essere confermato da grep '^Memory' /var/log/dmesg, che in questo caso dà "Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)".
     Total         = 262144k = 256M (1k=1024, 1M=1024k)
     Free to dmesg = 256984k = Total - kernel - reserved - data - init
     Free to shell = 257136k = Total - kernel - reserved - data
Circa 5MB non sono utilizzabili dal sistema, perchè a disposizione del kernel.
     # date MMDDhhmmCCYY
     # hwclock --utc --systohc
     # hwclock --show
Questo imposterà l'orologio del sistema e dell'hardware a MM/GG hh:mm, CCYY. Le ore sono allineate al fuso locale, ma l'orologio dell'hardware utilizza lo UTC.
Se l'ora dell'hardware (BIOS) è impostata su GMT, modificate le impostazioni a
UTC=yes in /etc/default/rcS.
Riferimento: Managing
Accurate Date and Time HOWTO.
Impostazione automatica dell'ora esatta tramite un server remoto:
     # ntpdate server
Se avete una connessione permanente, è bene averlo in
/etc/cron.daily.
Usate il pacchetto chrony.
Per disabilitare lo screensaver, usate i comandi seguenti:
In console:
     # setterm -powersave off
Lanciate la console kon2 (kanji) con:
     # kon -SaveTime 0
In X:
     # xset s off
      or
     # xset -dpms
      or
     # xscreensaver-command -prefs
Leggete le pagine di manuale corrispondenti per controllare le altre
funzionalità della console.  Vedere anche stty(1) per modificare e
stampare le impostazioni della riga di comando.
Glibc offre getent(1) per la ricerca di voci inserite nei database
amministrativi, cioè, passwd, group, hosts, services, protocols, o networks.
     getent database [chiave...]
Potete sempre staccare gli altoparlanti del PC ;-) Per la shell Bash:
     echo "set bell-style none">> ~/.inputrc
Per placare i messaggi di errore sullo schermo, il primo posto da vedere è
/etc/init.d/klogd.  Impostate KLOGD="-c
3" in questo script ed eseguite /etc/init.d/klogd
restart.  metodo alternativo è eseguire dmesg
-n3.
I livelli di errore significano:
0: KERN_EMERG, il sistema è inutilizzabile
1: KERN_ALERT, un'azione va presa immediatamente
2: KERN_CRIT, condizioni critiche
3: KERN_ERR, condizioni di errore
4: KERN_WARNING, condizioni di allarme
5: KERN_NOTICE, condizione normale ma significativa
6: KERN_INFO, informazioni
7: KERN_DEBUG, massaggi di debug
Se c'è un particolare ed inutile messaggio di errore che vi perseguita,
considerate l'ipotesi di una banalissima patch per il kernel, tipo
shutup-abit-bp6 (disponibile presso in the examples subdirectory).
Un altro posto da guardare può essere /etc/syslog.conf;
controllate per vedere se qualche messaggio viene inviato alla console.
Agli schermi di console nei sistemi simil-Unix si accede generalmente tramite
librerie (n)curses.  Queste offrono all'utente un metodo indipendente dal
terminale di aggiornamento dei caratteri, con una ottimizzazione ragionevole.
Vedere ncurses(3X) e terminfo(5).
Su un sistema Debian molte sono le voci predefinite:
     $ toe | less                  # tutte le voci
     $ toe /etc/terminfo/ | less   # voci riconfigurabili dall'utente
Esportate la vostra selezione come variabile d'ambiente TERM.
Se la voce terminfo per xterm non funziona con un
xterm non-Debian, cambiate il tipo di terminale da
"xterm" ad una delle versioni con minori opzioni tipo
"xterm-r6", quando accedete da remoto ad un sistema Debian.  Vedere
/usr/share/doc/libncurses5/FAQ per ulteriori informazioni.
"dumb" è il minimo comun denominatore per terminfo.
Quando lo schermo impazzisce dopo $ cat qualsiasi-file-binario (potreste non essere in grado di vedere il comando dato mentre lo state digitando):
     $ reset
Converte file un di testo DOS (fine riga = ^M^J) in un file Unix di testo (end-of-line = ^J).
     # apt-get install sysutils
     $ dos2unix dosfile
recodeQuanto segue converte i file di testo fra gli stili di fine riga DOS, Mac, e Unix:
     $ recode /cl../cr <dos.txt >mac.txt
     $ recode /cr.. <mac.txt >unix.txt
     $ recode ../cl <unix.txt >dos.txt
recode, libero, converte i file tra i vari set di caratteri e
surface con:
     $ recode charset1/surface1..charset2/surface2 \
       <input.txt >output.txt
I set caratteri comunemente usati sono (vedere anche Introduzione ai locale, Sezione 9.7.3) [37] :
us — ASCII (7 bit)
l1 — ISO Latin-1 (ISO-8859-1, Europa occidentale, 8 bit)
EUCJP — EUC-JP per Giapponese (Unix)
SJIS — Shift-JIS per Giapponese (Microsoft)
ISO2022JP — Mail encoding per Giapponese (7 bit)
u2 — UCS-2 (Universal Character Set, 2 byte)
u8 — UTF-8 (Universal Transformation Format, 8 bit)
Surface comuni sono [38] :
/cr — A capo come fine riga (Mac text)
/cl — A capo con nuova riga come fine riga (DOS text)
/ — Nuova riga come fine riga (Unix text)
/d1 — Bytewise decimal dump leggibile
/x1 — Bytewise hexidecimal dump leggibile
/64 — Testo codificato base64
/QP — Testo codificato Quoted-Printable
Per maggiori notizie, leggere la descrizione pertinente in info recode.
Esistono anche degli strumenti di conversione più specializzati:
conversione del set di caratteri:
iconv — locale encoding conversions
konwert — fancy encoding conversions
conversione dei file binari:
uuencode e uudecode — per Unix.
mimencode — per la posta.
Sostituisce tutte le istanze FROM_REGEX con TO_TEXT in tutti i file FILES ...:
     $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' FILES ...
-i sta per "in-place editing", -p è per "implicit loop over FILES ...". se la sostituzione è complessa, potete recuperare più facilmente gli errori usando il parametro -i.bak al posto di -i; così si mantiene ogni file originale, aggiungendo .bak come estensione.
Lo script seguente rimuove le righe 5–10 e le righe 16–20 "in situ".
     #!/bin/bash
     ed $1 <<EOF
     16,20d
     5,10d
     w
     q
     EOF
Qui i comandi di ed sono gli stessi del modo comando di
vi.  La modifica dei file in questo modo rende facile la creazione
di script.
Seguendo una delle seguenti procedure, si estrarranno le differenze dal file sorgente creando dei file diff unificati file.patch0 o file.patch1 a seconda della localizzazione del file:
     $ diff -u file.vecchio file.nuovo1 > file.patch0
     $ diff -u vecchio/file nuovo1/file > file.patch1
Il file diff (chiamato anche file patch) è usato per inviare gli aggiornamenti di un programma. Chi lo riceve applicherà questo aggiornamento ad un altro file con:
     $ patch -p0 file < file.patch0
     $ patch -p1 file < file.patch1
Se avete tre versioni dello stesso codice sorgente, potete farle confluire più
efficacemente tutte insieme usando diff3:
     $ diff3 -m file.mio file.old file.tuo > file
     $ split -b 650m file   # divide il file in pezzetti di 650 MB
     $ cat x* >largefile    # riunisce i file in un unico file
Consideramo un file di testo chiamato DPL in cui tutti i nomi dei
project leader Debian precedenti e la data di inizio della carica siano
elencati in un formato con separazioni date da spazi.
     Ian     Murdock   August  1993
     Bruce   Perens    April   1996
     Ian     Jackson   January 1998
     Wichert Akkerman  January 1999
     Ben     Collins   April   2001
     Bdale   Garbee    April   2002
     Martin  Michlmayr March   2003
Awk viene usato frequentemente per estrarre i dati da questo tipo di file.
     $ awk '{ print $3 }' <DPL                   # mese di inzio
     August
     April
     January
     January
     April
     April
     March
     $ awk '($1=="Ian") { print }' <DPL          # DPL di nome Ian
     Ian     Murdock   August  1993
     Ian     Jackson   January 1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # Quando Perens ha iniziato
     April 1996
Anche le shell come la Bash possono essere usate per questi file:
     $ while read first last month year; do 
         echo $month
       done <DPL
     ... lo stesso output del primo esempio con Awk
Qui ilcomando interno read usa i caratteri in $IFS (internal field
separators) per dividere le righe in parole.
Se cambiate IFS in ":", potete processare elegantemente
/etc/passwd con la shell:
     $ oldIFS="$IFS"   # salva i vecchi valori
     $ IFS=":"
     $ while read user password uid gid rest_of_line; do
         if [ "$user" = "osamu" ]; then 
           echo "$user's ID is $uid"
         fi
       done < /etc/passwd
     osamu's ID is 1001
     $ IFS="$oldIFS"   # ripristina i vecchi valori
(Se si usa Awk per la stessa cosa, usate FS=":" per impostare il separatore di campo)
IFS viene anche usato dalla shell per dividere i risultati della espansione dei parametri, sostituzione dei comandi ed espansione aritmetica. Questi non sono possibili all'interno di parole tra virgolette, semplici o doppie. il valore predefinito di IFS è <space>, <tab>, e <newline> combinati.
Fate attenzione nell'uso di questi trucchi con IFS. Possono accadere strane cose quando la shell inetrpreta alcune parti degli script come proprio input.
     $ IFS=":,"                        # usa ":" e "," come IFS
     $ echo IFS=$IFS,   IFS="$IFS"     # echo è un Bash built-in
     IFS=  , IFS=:,
     $ date -R                         # solo l'output di un comando
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # sub shell --> input alla shell principale
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # riporta IFS al predefinito
     $ echo $(date -R)
     Sat, 23 Aug 2003 08:30:50 +0200
Gli script seguenti fanno cose utili come parti di una pipe.
     find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
                          # trova tutti i file /usr escludendone alcuni
     xargs -n 1 command   # lancia i comandi per tutti gli oggetti da stdin
     xargs -n 1 echo |     # divide oggetti separati da spazi in righe
     xargs echo      |    # unisce tutte le linee in un'unica riga
     grep -e pattern|     # estrae le righe contenenti pattern
     cut -d: -f3 -|       
             # estrae il terzo campo separato da : (file passwd, ecc.)
     awk '{ print $3 }' | # estrae il terzo campo separato da spazi bianchi
     awk -F'\t' '{ print $3 }' |
            # estrae il terzo campo separato da tabulazione
     col -bx |            # rimuove il backspace ed espande le tabs in spazi
     expand -|            # espande le tabs
     sort -u|             # trova e rimuove i doppioni
     
     tr '\n' ' '|         # concatena le righe in una riga unica
     tr '\r' ''|          # rimuove il CR (carriage return, a capo)
     tr 'A-Z' 'a-z'|      # converte il maiuscolo in minuscolo
     sed 's/^/# /'|       # commenta ogni riga
     sed 's/\.ext//g'|    # rimuove .ext
     sed  -n -e 2p|       # stampa la seconda riga 
     head -n 2 -|         # stampa le prime due righe
     tail -n 2 -|         # stampa le ultime due righe
Il metodo seguente di agire ricorsivamente su ciascun file cercando corrispondenze *.ext assicura la gestione corretta dei nomi bizzarri dei file, tipo quelli con gli spazi, ed esegue il processo equivalente:
Shell loop (E' un input multiriga con PS2="> ") [39]:
     for x in *.ext; do
       if test -f "$x"; then
         command "$x"
       fi
     done
combibnazione di find e xargs:
     find . -type f -maxdepth 1 -name '*.ext' -print0 | \
      xargs -0 -n 1 command
un comando find con l'opzione -exec:
     find . -type f -maxdepth 1 -name '*.ext' \
      -exec command '{}' \;
un breve script di shell con find e l'opzione -exec:
     find . -type f -maxdepth 1 -name '*.ext' \
      -exec sh -c "command '{}' && echo 'successful'" \;
Sebbene tutti gli script Awk possano essere riscritti con Perl usando
a2p(1), gli ad una riga di Awk sono convertiti meglio a script in
perl ad una riga manualmente.  Per esempio
     awk '($2=="1957") { print $3 }' |
può essere scritto in uno dei seguenti modi:
     perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
     perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
     perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
     perl -lane 'print $F[2] if $F[1] eq "1957"' |
Siccome tutti gli spazi tra gli argomenti di perl nelle righe
sopra possono essere rimossi traendo vantaggio dalla conversione automatica tra
numeri e stringhe in Perl:
     perl -lane 'print$F[2]if$F[1]eq+1957' |
Vedere perlrun(1) per le opzioni da riga di comando.  Per altri
pazzi script in Perl, http://perlgolf.sourceforge.net
può essere interessante.
Il seguente comando legge la pagina web e la copia in un file di testo. Molto utile quando si copiano delle configurazioni dalla rete.
     $ lynx -dump http://www.remote-site.com/help-info.html >textfile
Anche links e w3m possono essere usati, con piccole
differenze nel rendering.
Se si tratta di un archivio di una lista di messaggi, usate
munpack per ottenere i contenuti mime dal testo.
Quanto segue stampa una pagina Web in un file o stampante PostScript.
     $ apt-get install html2ps
     $ html2ps URL | lpr
Vedere lpr/lpd,
Sezione 3.6.1.  Controllate anche i pacchetti a2ps e
mpage per la creazione di file PostScript.
Quanto segue stampa una pagina di manuale in un file o stampante PostScript.
     $ man -Tps some-man-page | lpr
     $ man -Tps some-man-page | mpage -2 | lpr
Si possono unire due file Postscript o PDF.
     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
       -sOutputFile=bla.ps -f foo1.ps foo2.ps
     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
       -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
Mostra il tempo utilizzato da un processo.
     # time qualsiasi-comando >/dev/null
     real    0m0.035s       # tempo sull'orologio a muro (tempo realmente passato)
     user    0m0.000s       # tempo in modalità utente
     sys     0m0.020s       # tempo in modalità kernel
nice
Usate nice (dal pacchetto GNU shellutils) per
impostare il valore nice di un comando quando viene lanciato.
renice (bsdutils) o top possono dare il
renice ad un processo.  Un valore di nice di 19 rappresenta il processo più
lento (priorità bassa); valori negativi sono "not-nice", con -20 che
rappresenta un processo molto veloce (alta priorità).  Solo il superuser può
impostare valori di nice negativi.
     # nice  -19 top                                         # molto nice
     # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # molto veloce
Talvolta un valore estremo di nice fa più danni che bene al sistema. Usate questo comando con cautela.
cron, at)
Usate cron e at per programmare i task in Linux.
Vedere at(1), crontab(5), crontab(8).
Eseguite il comando crontab -e per creare o modificare un file crontab per impostare degli eventi regolarmente programmati. Ecco un esempio di file crontab:
     # usa /bin/sh per eseguire i comandi, non importa cosa dice /etc/passwd
     SHELL=/bin/sh
     # invia ogni output a `paul', non importa a chi appartiene crontab
     MAILTO=paul
     # Min Hour DayOfMonth Month DayOfWeek comando 
     # esecuzione alle 00:05, ogni giorno
     5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
     # esecuzione alle 14:15 il primo giorno del mese -- output inviato a paul
     15 14 1  * *   $HOME/bin/monthly
     # esecuzione alle 22:00 i giorni feriali (Lun-Ven) (1-5), annoia Joe. % per una nuova riga, l'ultimo % per cc:
     0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
     23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
     5  4 *   * sun echo "run at 04:05 every sunday"
     # esecuzione alle 03:40 il primo lunedi di ogni mese
     40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
Usate il comando at per programmare gli eventi che accadono una
sola volta:
     $ echo 'command -args'| at 3:40 monday
screen
Il programma screen vi permette di far girare terminali virtuali
multipli ciascuno con la propria shell interattiva, su un singolo terminale
fisico, o su una finestra di emulazione di terminale.  Anche se usate le
console virtuali di Linux o finestre xterm multiple, vale comunque la pena di
esplorare screen per la sua ricchezza di opzioni, che includono
storico per lo scrollback,
copia-incolla
registrazione dell'output,
digraph entry, e
l'abilità di staccare un'intera sessione di
screen dal vostro terminale e di riattacarla in seguito.
Se accedete frequentemente ad una macchina Linux da terminale remoto o tramite
un programma di terminale VT100,, screen renderà la vostra vita
molto più semplice con la funzione detach.
Supponiamo che siate connessi mediante una connessione dialup e che state
conducendo una sessione di screen con editors e altri programmi
aperti su molte finestre.
Improvvisamente dovete abbandonare il terminale, ma non volete perdere tutto il lavoro alla deconnessione.
Basta digitare ^A d per staccare la sessione, poi
deconnettersi.  (Oppure, più veloce ancora, digitate ^A DD per
dire a screen di staccare la sessione e deconnettersi da solo.)
Quando vi riconnettete di nuovo, date il comando screen -r, e
screen magicamente riattaccherà tutte le finestre
che avevate aperto.
screen
Una volta lanciato screen, tutto l'input della tastiera viene
indirizzato alla finestra corrente, tranne il tasto di comando, di default
^A.  Tutti i comandi per screen vengono dati premendo
^A più un tasto singolo [più alcuni parametri].  Comandi utili:
     ^A ?     mostra una schermata di aiuto (mostra i comandi da tastiera)
     ^A c     crea una nuova finestra e passa ad essa
     ^A n     va alla finestra successiva
     ^A p     va alla finestra precedente
     ^A 0     va alla finestra numero 0
     ^A w     mostra una lsta di finestre
     ^A a     manda un Ctrl-A alla finestra corrente come input da tastiera
     ^A h     scrive una copia della finestra corrente su file 
     ^A H     inizia/termina la registrazione della finestra corrente su file
     ^A ^X    blocca il terminale (protetto da password)
     ^A d     stacca la sessione dal terminale
     ^A DD    stacca la sessione ed esce
Questo è solo un piccolo assaggio dei comandi e caratteristiche di
screen.  Se c'è qualcosa che volete che screen
faccia, è probabile che lo sappia fare!  Vedere screen(1) per i
dettagli.
screen
Se notate che il backspace e/o Ctrl-H non funzionano appropriatamente mentre
state facendo girare screen, aprite /etc/screenrc,
trovate la riga
     bindkey -k kb stuff "\177"
e commentatela (cioè, aggiungete "#" come primo carattere).
screen per X
Vedetevi xmove.  Vedere xmove(1).
Installate i pacchetti netkit-ping, traceroute,
dnsutils, ipchains (per Kernel 2.2),
iptables (per Kernel 2.4), e net-tools e:
     $ ping yahoo.com            # prova la connessione internet
     $ traceroute yahoo.com      # traccia i pacchetti IP
     $ ifconfig                  # prova la configurazione dell'host
     $ route -n                  # prova la configurazione di routing
     $ dig [@dns-server.com] host.dom [{a|mx|any}] |less
           # controlla i record DNS di host.dom tramite dns-server.com 
           # per {mx|any} record
     $ ipchains  -L -n |less     # controlla il packet filter (kernel 2.2)
     $ iptables -L -n |less      # controlla il packet filter (kernel 2.4)
     $ netstat -a                # scopre tutte le porte aperte
     $ netstat -l --inet         # trova le porte in ascolto
     $ netstat -ln --tcp         # trova le porte tcp in ascolto (numerico)
Per eliminare la posta:
     # exim -q    # elimina la posta in attesa
     # exim -qf   # elimina tutta la posta
     # exim -qff  # elimina persino la posta "congelata"
-qff può essere migliore come opzione per lo script
/etc/ppp/ip-up.d/exim.  Per Sarge, sostituite exim
con exim4.
Per rimuovere la posta bloccata dallo spool locale assieme al messaggio di errore nell'invio:
     # exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
Per Sarge, sostituite exim con exim4.
Se la vostra directory home è piena e procmail non è riuscito ad
inviare la posta, dovete inviarla a mano alle varie caselle di posta della
directory home, da /var/mail/username.  Dopo aver fatto
spazio nella vostra directory home, lanciate:
     # /etc/init.d/exim stop
     # formail -s procmail </var/mail/username
     # /etc/init.d/exim start
Per Sarge, sostituite exim con exim4.
Per ripulire un file dal suo contenuto, come ad esempio un file di log, non usate rm per cancellarlo, e poi crearne un nuovo vuoto, poichè ci potrebbero essere ancora degli accessi al file nell'intervallo fra i comandi. Quanto segue è il modo sicura di ripulire un file dal suo contenuto.
     $ :>file-da-essere-ripulito
I comandi seguenti creano dei file fantoccio o vuoti:
     $ dd if=/dev/zero    of=nomefile bs=1k count=5 # 5KB di zeri 
     $ dd if=/dev/urandom of=nomefile bs=1M count=7 # 7MB di contenuto casuale 
     $ touch nomefile # crea un file di 0B (se il file esiste, aggiorna mtime)
Per esempio, i seguenti comandi eseguiti dalla shell del boot floppy Debian
cancelleranno tutto il contenuto del disco rigido /dev/hda.
     # dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda
chroot
Il programma chroot, chroot(8), ci permette di far
girare istanze diverse dell'ambiente GNU/Linux su un sistema singolo e
simultaneamente senza dover fare il reboot.
Si può far girare un programma che utilizza molta memoria come
apt-get o dselect su una macchina host mentre si
monta via NFS una macchina satellite sull'host in lettura/scrittura e con il
chroot point che agisce come punto di montaggio della macchina satellite.
chroot
Si può creare facilmente un ambiente chroot Debian tramite il comando
debootstrap in Woody.  Per esempio, per creare Sid sotto chroot in
/sid-root mentre si ha a disposizione un accesso veloce ad Internet:
     main # cd / ; mkdir /sid-root
     main # debootstrap sid /sid-root http://ftp.debian.org/debian/
     ... guardatelo mentre si scarica l'intero sistema
     main # echo "proc-sid /sid-root/proc proc none 0 0" >> /etc/fstab
     main # mount proc-sid /sid-root/proc -t proc
     main # cp /etc/hosts /sid-root/etc/hosts
     main # chroot /sid-root /bin/bash
     chroot # cd /dev; /sbin/MAKEDEV generic ; cd -
     chroot # apt-setup # set-up /etc/apt/sources.list
     chroot # vi /etc/apt/sources.list # punta su unstable
     chroot # dselect  # potete usare aptitude, installate mc e vim :-)
A questo punto dovreste avere un sistema Debian completo e funzionante, dove giocare senza paura di danneggiare la vostra installazione Debian principale.
Il trucco di debootstrap può anche essere usato per installare la
Debian su un sistema senza usare il disco di installazione Debian ma uno di una
qualsiasi altra distribuzione GNU/Linux.  Vedere http://www.debian.org/releases/stable/i386/apcs04.
chrootDigitare chroot /sid-root /bin/bash è semplice, ma tiene in giro ogni sorta di variabile d'ambiente che magari non vorreste, inoltre ha altri problemi. Un approccio sicuramente migliore è di lanciare un altro processo di login su un terminale virtuale separato, da dove fare direttamente il login in chroot.
Dato che su un sistema Debian standard da tty1 a tty6
girano le consoles Linux e su tty7 ci gira il X Window System,
impostiamo per esempio tty8 per una console "chrooted".
Dopo aver creato il sistema chroot come descritto in Far girare versioni diverse di Debian con
chroot, Sezione 8.6.35.1, digitate dalla shell di root del
sistema principale:
     main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\
            "/sbin/getty 38400 tty8"  >> /etc/inittab
     main # init q    # ricarica init
chrootVolete far girare gli ultimissimi X e GNOME con sicurezza nel vostro chroot? Ciò è interamente possibile! Il seguente esempio farà girare GDM sul terminale virtuale vt9.
Per prima cosa installate un sistema chroot usando il metodo descritto in Far girare versioni diverse di Debian con
chroot, Sezione 8.6.35.1.  Da root del sistema principale,
copiate i file chiave di configurazione nel sistema chroot.
     main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4
     main # chroot /sid-root # od usate la console di chroot
     chroot # cd /dev; /sbin/MAKEDEV generic ; cd -
     chroot # apt-get install gdm gnome x-window-system
     chroot # vi /etc/gdm/gdm.conf # date s/vt7/vt9/ nella sezione [servers]
     chroot # /etc/init.d/gdm start
Qui /etc/gdm/gdm.conf è stato modificato per lanciare la console
virtuale da vt7 a vt9.
A questo punto potete andare facilmente avanti e indietro tra gli ambienti X completi del vostro sistema chroot e principale semplicemente saltando fra i terminali virtuali; p.es. usando Ctrl-Alt-F7 e Ctrl-Alt-F9. Buon divertimento!
[FIXME] Add a comment and link to the init script of the chrooted gdm.
chroot
Si può creare facilmente un ambiente chroot con un'altra distribuzione.
Installate un sistema in una o più partizioni separate mediante l'installer
dell'altra distribuzione.  Se la sua partizione di root è in
/dev/hda9.
     main # cd / ; mkdir /altra-dist
     main # mount -t ext3 /dev/hda9 /altra-dist
     main # chroot /altra-dist /bin/bash
Il resto è simile a Far girare versioni diverse di
Debian con chroot, Sezione 8.6.35.1, Impostare il login per chroot, Sezione
8.6.35.2, e Impostare X per chroot,
Sezione 8.6.35.3.
chroot
Esiste un pacchetto chroot più specializzato, pbuilder, che
costruisce un sistema chroot e compila un pacchetto al suo interno.  E' un
sistema ideale per controllare se le dipendenze di compilazione di un pacchetto
sono corrette e per essere certi che dipendenze non necessarie o sbagliate non
esistano nel pacchetto risultante.
potete controllare se due file sono lo stesso file con due collegamenti tramite:
     $ ls -li file1 file2
mount il file immagine del disco rigido
Se file.img contiene l'immagine del contenuto di un
disco rigido ed il disco originale aveva una configurazione che dà
xxxx = (bytes/settore) * (settori/cilindro), allora quanto segue lo
monterà in /mnt:
     # mount -o loop,offset=xxxx file.img /mnt
Notate cha molti dischi rigidi hanno 512 bytes/settore.
Le basi per ottenere un file da Windows:
     # mount -t smbfs -o username=mionome,uid=mio_uid,gid=mio_gid \
             //server/share /mnt/smb  # monta i file Windows su Linux
     # smbmount //server/share /mnt/smb \
             -o "username=mionome,uid=mio_uid,gid=mio_gid"
     # smbclient -L 192.168.1.2 # elenca le condivisioni su un computer
I PC collegati tramite Samba possono essere controllati sotto Linux tramite:
     # smbclient -N -L ip_address_del_vostro_PC | less
     # nmblookup -T "*"
Molti filesystem estranei hanno il supporto per il kernel Linux, per cui possono essere raggiunti semplicemente montando i dispositivi che li contengono. Per alcuni filesystem, esistono anche degli strumenti specializzati per accedervi senza montarne i dispositivi. Ciò si ottiene con programmi che girano nello user space, per cui il supporto specifico nel kernel per i filesystem non è necessario.
mtools: per filesystem MSDOS filesystem (MS-DOS, Windows)
cpmtools: per CP/M
hfsutils: per HFS (Macintosh nativo)
hfsplus: per HFS+ (moderno Macintosh)
Per creare e controllare filesystem MS-DOS FAT, dosfstools è
utile.
Ecco alcuni esempi di azioni pericolose. Il loro impatto negativo negativo verrà potenziato se state usando un account privilegiato: root.
In "rm -rf .*", ".*" si espande ad includere "." e "..", e se vi capita di avere i privilegi in scrittura sulla directory superiore, finirete col rimuovere anche tutte le directory vicine alla directory corrente.
"rm -rf ." : rimuove tutto nella directory corrente e la directory stessa.
"rm -rf *" : rimuove tutti i file non-punto e le directory non-punto nella directory corrente
"rm -rf .[^.]*" : rimuove tutti i file punto e directory punto nella directory corrente.
"rm -rf .*" : rimuove tutto nella directory superiore e la directory stessa.
Perdere dei file importanti come /etc/passwd a causa della propria
stupidità è pesante.  Il sistema Debian ne effettua dei backup regolari in
/var/backups/.  Quando recuperate questi file, potreste impostare
manualmente i giusti permessi.
     # cp /var/backups/passwd /etc/passwd
     # chmod 644 /etc/passwd
Vedere anche Recuperare i dati sulla selezione dei pacchetti, Sezione 6.3.4.
[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ successivo ]
La guida Debian
CVS, gio gen 18 11:52:32 UTC 2007osamu#at#debian.orgmc0315#at#mclink.it