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) automatic booting), date:
boot: Linux init=/bin/sh
Il sistema lancia 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 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).
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 settare 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).
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 la kernel image 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:
/etc/init.d/?dm
.
/etc/rc2.d/S99?dm
/etc/rc2.d/K99?dm
.
/etc/rc2.d/S99?dm
.
Qui 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:
HURD/GRUB Linux MSDOS/Windows (fd0) /dev/fd0 A: (hd0,1) /dev/hda1 C: (solitamente) (hd0,4) /dev/hda4 F: (solitamente) (hd1,4) /dev/hdb4 ?
Vedere /usr/share/doc/grub/README.Debian
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.26 od il comando script
.
$ script Script started, file is typescript ... fate quello che dovete ... Control-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 x-term, 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 hardlink, è 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 /partenza/directory && tar cf - . ) | \ ssh user@host.dom (cd /destinazione/directory && tar xvfp - ) Se non ci sono links: # scp -pr user1@host1.dom:/partenza/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 link simbolici, nè preserva gli hard links.
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 links
simbolici. Comunque sia, sebbene cpio
sia in grado di trattare
files speciali,il tradizionale tar
no.
Il modo in cui tar
tratta hard links multipli ad un file è di
porre solo una copia del link sul nastro, ma il nome collegato a quella copia è
il solo utilizzabile per recuperare il file; cpio
invece,
mette una copia per ciascun link, 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 (section 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 (si può dire che
puzzano ancora di latte...).
# apt-get install pax $ pax -rw -p e . newdir oppure $ find . -depth | pax -rw -p e newdir
cpio
cpio
copia i files 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 link simbolici sono OK.
rsync
: sincronizzazione ad 1-via
unison
: sincronizzazione a 2-vie
cvs
: sincronizzazione multivia con server backup e storico, solo
testo, maturo. Vedere 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.25 creeranno un ottimo sistema per il backup.
Mostrerò due utilità facili da usare.
Rdiff-backup
fornisce dei backup semplici e validi con lo storico
differenziale per file di qualsiasi tipo, compresi i link 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 hard links 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'rm 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 (browse 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 # hwclock --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.
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
.
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 man corrispondenti.
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... ;-) Da 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:
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 (end-of-line = ^M^J) in un file Unix di testo (end-of-line = ^J).
# apt-get install sysutils $ dos2unix dosfile
Sostituisce tutte le istanze FROM_REGEX con TO_REGEX in tutti i file FILES ...:
$ perl -i -p -e 's/FROM_REGEX/TO_REGEX/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, estrarrà 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 files 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
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
Tutti gli script Awk possono essere riscritti con Perl. 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 mailing list, 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 man 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 I 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 I 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 consoles virtuali di Linux o finestre xterm
multiple, vale comunque la pena di esplorare screen
per la sua
ricchezza di opzioni,che includono
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.
screen
con editors ed altri programmi
aperti su molte finestre.
screen
di staccare la sessione e deconnettersi da solo.)
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 coomantatela (cioè, aggiungete "#" come primo carattere).
screen
per X
Vedete 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 rimuovere la posta bloccata dallo spool locale assieme al messaggio di errore nell'invio:
# exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
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 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 sicure 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 # 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://people.debian.org/~blade/install/
.
chroot
Digitare 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.33.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
chroot
Volete 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.33.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 # 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.33.1, Impostare il login per chroot
, Sezione
8.6.33.2, e Impostare X per chroot
,
Sezione 8.6.33.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 hard links 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 Window$:
# mount -t smbfs -o username=mionome,uid=mio_uid,gid=mio_gid \ //server/share /mnt/smb # monta il 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 file system estranei hanno il supporto per il kernel Linux, per cui possono essere raggiunti semplicemente montando i dispositivi che li contengono. Per alcuni filesystems, 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.
La guida Debian
1.06-17, sab gen 31 07:56:05 UTC 2004osamu@debian.org
dsewell@virginia.edu
mc0315@mclink.it