Linux F.A.Q (marzo 2008)

Le risposte alle domande più frequenti.

1.)  Come si installa un pacchetto RPM?
2.)  Come si installa un pacchetto DEB?
3.)  Come si ricompila il kernel?
4.)  Come si installano i pacchetti TGZ per Slackware e le distribuzioni derivate da essa?
5.)  Come si disinstalla GNU/Linux?
6.)  Come si modificano i permessi dei file?
7.)  È possibile avviare Linux utilizzando il boot manager di Windows XP (NT, 2000)?
8.)  Come faccio ad ottenere i privilegi di root senza riavviare la sessione?
9.)  Come si arresta un processo o un'applicazione bloccata?
10.)  È possibile arrestare o riavviare il sistema direttamente dalla riga di comando?
11.)  Come si caricano i moduli del kernel?
12.)  È possibile caricare i moduli automaticamente all'avvio del sistema?
13.)  È necessario deframmentare l'hard disk in GNU/Linux?
14.)  Come si visualizza lo spazio disponibile su disco?
15.)  Come si verifica se ci sono settori danneggiati sul disco?
16.)  Come si visualizza la versione del kernel in uso?
17.)  Come faccio a verificare le risorse occupate dai processi in esecuzione?
18.)  Come si masterizzano le ISO presenti sul DVD?
19.)  Come faccio ad ottenere informazioni sull'hardware del PC
20.)  È possibile conoscere la versione di XOrg utilizzata?
21.)  Come si avviano e arrestano i processi in esecuzione?
22.)  Come si applicano le patch al kernel?
23.)  È possibile cambiare il nome della macchina?
24.)  Cosa contiene la directory /tmp? È possibile cancellarla?
25.)  Permessi predefiniti per file e directory
26.)  Come si configura la rotella del mouse?
27.)  Come si visualizzano gli accessi al sistema?
28.)  Come si sposta un file dalla riga di comando?
29.)  Esiste un comando shell per controllare l'utilizzo della RAM?
30.)  È possibile localizzare la posizione di un programma?
31.)  Posso configurare la scheda di rete dalla shell?
32.)  Esiste un metodo per arrestare o riavviare il PC più rapidamente?
33.)  È possibile montare automaticamente i dischi all'avvio?
34.)  Come faccio a leggere l'output di un comando troppo lungo?
35.)  Quali sono i comandi per creare un file vuoto?
36.)  Qual è il sistema più rapido per cercare un file?
37.)  Perché bisogna inserire ./ prima del nome per eseguire alcuni programmi?
38.)  Posso installare un nuovo modulo senza ricompilare tutto il kernel?
39.)  Come si installano i programmi di tipo .bin e .run?
40.)  A cosa serve il file di dispositivo /dev/null?
41.)  Cos'è il Master Boot Record?
42.)  È possibile visualizzare i messaggi di avvio del sistema?
43.)  A cosa serve il comando history?
44.)  Posso personalizzare il prompt della shell?
45.)  Come si scrivono la tilde e le parentesi graffe?
46.)  Come si usa il comando man?
47.)  Posso assegnare a tutti gli utenti il permesso di montare un dispositivo?
48.)  A cosa servono le directory /dev e /proc? È possibile cancellarle?
49.)  Ho sentito parlare di demone? Di cosa si tratta?
50.)  Cosa contiene il file /etc/shadow?
51.)  Esiste un programma per convertire i pacchetti in altri formati?
52.)  Ho cancellato un utente. Come faccio ad eliminare tutti i suoi file?
53.)  Qual è la differenza tra shell interattiva e non interattiva?
54.)  Come si gestiscono le variabili d'ambiente?
55.)  A cosa serve la directory /etc/skel?
56.)  Nella directory /boot è presente il file initrd-x.x.xx.img. A cosa serve?
57.)  Come faccio a cambiare le password di accesso al sistema?
58.)  Cosa sono e come si creano i collegamenti simbolici?
59.)  Non riesco ad eseguire applicazioni grafiche da root. Perché?
60.)  Come si attiva la richiesta di conferma prima di cancellare o sovrascrivere un file dalla shell?
61.)  È possibile ottene l'IP dal nome di dominio e viceversa?
62.)  Come faccio a cancellare il boot loader da GNU/Linux?


1.)  Come si installa un pacchetto RPM?
Non sempre i pacchetti che utilizzano questo formato sono disponibili tra le repository della distribuzione o nei CD di installazione quindi, in alcuni casi, è necessario installarli manualmente. È possibile farlo sia con strumenti grafici come KPackage, sia da riga di comando utilizzando il comando “rpm” (RedHat Packge Manager). Supponiamo di disporre del pacchetto package.rpm, vediamo come installarlo e cosa possiamo fare con esso. Il comando per installarlo è rpm -i package.rpm. Con rpm -ivh package.rpm, non solo installiamo il software, ma visualizziamo anche informazioni su di esso e una sorta di barra di progressione. È possibile anche forzare l'installazione del software senza verificare eventuali dipendenze, basta usare il comando seguente: rpm -i --nodeps package.rpm. Se è solo necessario aggiornare il programma il comando diventa rpm -Uvh package.rpm oppure rpm -F package.rpm. Disinstallare un pacchetto è altrettanto semplice: è sufficiente eseguire il comando rpm -e nome_pacchetto. A differenza di quanto fatto prima, per la disinstallazione non è necessario specificare il nome dell'archivio RPM ma solo il nome del programma. È anche possibile verificare se un pacchetto è installato o meno utilizzando il comando rpm -V nome_pacchetto. Infine, ricordiamo il comando rpm -qa che serve per visualizzare l'elenco di tutti i pacchetti installati nel sistema.

back to top

2.)  Come si installa un pacchetto DEB?
Dando per scontato che tutti sappiano usare tool grafici come Synaptic o Adept, è bene sapere che sono disponibili anche strumenti a riga di comando per installare pacchetti software con estensione .deb. Tra questi i più importanti sono apt-get e dpkg. Il primo, più evoluto, può essere usato come sostituto dei package manager grafici, mentre il secondo opera a livello più basso ed è indicato anche per l'installazione di pacchetti singoli. Supponiamo, ad esempio, di voler installare il pacchetto package.deb presente sul disco rigido. Il comando da utilizzare è dpkg -i package.deb. Al posto di -i è possibile usare –install. La disinstallazione è altrettanto semplice: dpkg -r nome_pacchetto. Ad esempio dpkg -r scribus. Anche in questo caso è possibile usare –remove al posto di -r. È importante però precisare che il comando precedente elimina il software ma non i suoi file di configurazione, quindi, per la rimozione completa del programma è necessario utilizzare dpkg –purge nome_pacchetto (dpkg --purge kaffeine). Per ottenere informazioni su un pacchetto il comando da eseguire è dpkg -l nome_pacchetto, come nel caso di dpkg -l inkscape. Se non si specifica alcun pacchetto (dpkg -l), il comando precedente mostra l'elenco di tutti quelli installati nel sistema. Per quanto riguarda apt-get, i comandi più utilizzati sono apt-get update, per aggiornare l'elenco dei pacchetti, apt-get upgrade per aggiornare la distribuzione e apt-get install nome_pacchetto per installare un software: ad esempio, apt-get install gimp. Ricordate che apt-get non è adatto per l'installazione di pacchetti singoli presenti sul file system, ma solo per quelli disponibili nelle repository indicate nel suo file di configurazione /etc/apt/sources.list.

back to top

3.)  Come si ricompila il kernel?
Per ricompilare il kernel già presente nel sistema, è necessario verificare che all'interno della directory /usr/src sia presente un collegamento simbolico di nome linux che punti alla directory dei sorgenti del kernel già installato, oppure la directory vera e propria, linux-2.x.x a seconda delle versione. Per ricompilare una nuova versione del kernel bisogna copiare il pacchetto (linux-2.x.xx.tar.bz2 o tar.gz, presente nel CD/DVD allegato o scaricabile dal sito www.kernel.org ) in /usr/src e successivamente si deve scompattarlo mediante:

tar -zxvf linux-2.x.xx.tar.gz

oppure

tar -xvjf linux-2.x.xx.tar.bz2

In questo modo verrà creata una nuova directory chiamata linux-2.x.xx dove sono presenti i sorgenti del nuovo kernel. A questo punto è necessario rinominare la directory

mv linux-2.x.xx linux

o creare un collegamento simbolico simbolico ad essa:

ln -s linux-2.x.xx linux

Dopo essere entrati nella nuova directory bisogna eseguire i comandi seguenti:

make menuconfig

o per avviare il programma di configurazione grafica

make xconfig

Dopo aver scelto tutti i componenti da utilizzare e il supporto per l'hardware del proprio sistema, si salva la configurazione (nel file .config) e si eseguono i comandi seguenti:

make dep

make clean

make bzImage

make modules

make modules_install

make install

Nelle nuove distribuzioni, questo è sufficiente per installare il kernel e aggiornare il boot loader, ma se questo non dovesse funzionare è possibile procedere manualmente. L'immagine del nuovo kernel è posizionata nella directory /usr/src/linux/arch/i386/boot con il nome bzImage. Questa va,. per prima cosa, copiata nella directory /boot/:

cp bzImage /boot

dopodiché, va configurato il boot loader LILO o GRUB per caricare il nuovo kernel.

back to top

4.)  Come si installano i pacchetti TGZ per Slackware e le distribuzioni derivate da essa?
Lo script explodepkg serve per estrarre gli archivi TGZ nella directory corrente.

explodepkg nome_pacchetto.tgz

installpkg gestisce l'installazione dei pacchetti Slackware:

installpkg [opzioni] archivio_slackware nome_pacchetto.tgz

Le opzioni che è possibile passare sono:

-warn, non effettua l' installazione ma mostra i file e le directory che verrebbero creati.

-r, installa i pacchetti contenuti a partire dalla directory corrente

-m, serve per generare un archivio tar.gz ma con estensione .tgz costituito dal contenuto della directory corrente.

Per creare archivi TGZ secondo lo standard dei pacchetti applicativi Slackware si utilizza

makepkg pacchetto_applicativo

Lo script removepkg si occupa della disinstallazione dei pacchetti

removepkg nome_pacchetto.tgz

Il tool di installazione standard utilizzato dalla distribuzione Slackware è

pkgtool

Il comando upgradepkg aggiorna un pacchetto, disinstallando prima il pacchetto già installato e inserendo dopo quello nuovo.

upgradepkg nome_pacchetto_vecchio [%nome_pacchetto_nuovo]

back to top

5.)  Come si disinstalla GNU/Linux?
Per prima cosa è necessario eliminare le partizioni usate dal sistema operativo. Il metodo migliore consiste nell'utilizzare una delle tante distribuzioni “live” (Knoppix, SimplyMEPIS, Kanotix, ecc) ed eseguire i programma di partizionamento grafico QtParted. Dopo aver eliminato le partizioni è necessario eliminare il boot loader LILO o Grub e ripristinare il settore di avvio.

Da un sistema DOS Windows si può eseguire

fdisk /MBR

oppure, da un disco di ripristino di Windows o da una live Linux

fdisk /MBRo ancora sys c:

Direttamente da Linux si può eseguire il comando

lilo -U

È possibile ripristinare l'MBR utilizzando il tool dd e caricare il file di backup creato da LILO al momento dell'installazione

dd if=boot.xx of =/dev/hda bs=446 count=1

/dev/hda è il disco installato come master sul primo canale IDE, mentre boot.xx è il file da ripristinare, con xx che indica la versione di tale file. Da Windows XP in poi la procedura è diversa. Bisogna avviare il PC con il CD/DVD di Windows, premere F8 per accedere alla console di ripristino e poi usare i comandi fixboot o fixmbr. Il primo ripristina il settore di avvio della partizione di Windows XP, mentre il secondo si occupa dell'MBR (Master Boot Record), il settore di avvio del disco, reinstallando il bootloader del sistema Microsoft.

back to top

6.)  Come si modificano i permessi dei file?
chmod a+x file

assegna il permesso di esecuzione del file a tutti gli utenti del sistema;

chmod u+x file

assegna il permesso di esecuzione solo al proprietario del file;

chmod g+x file

assegna il permesso di esecuzione al gruppo;

chmod o+x file

assegna il permesso di esecuzione a tutti gli altri utenti;

Per i permessi di lettura sono valide le stesse indicazioni del permesso di esecuzione, ma in questo caso si sostituisce x con r.

chmod a+r file

permesso di lettura a tutti gli utenti del sistema;

chmod u+r file

permesso di lettura esclusivamente solo al proprietario del file;

chmod g+r file

permesso di lettura al gruppo;

chmod o+r file

permesso di lettura agli altri utenti;

Per il permesso di scrittura si sostituisce x o r con w.

chmod a+w file

permesso di scrittura a tutti gli utenti del sistema;

chmod u+w file

permesso di scrittura solo al proprietario del file;

chmod g+w file

permesso di scrittura al gruppo;

chmod o+w file

permesso di scrittura agli altri utenti.

Ovviamente è sempre possibile combinare i diversi tipi di permessi.

back to top

7.)  È possibile avviare Linux utilizzando il boot manager di Windows XP (NT, 2000)?
Durante l'installazione di Linux è necessario installare il boot loader LILO sulla partizion edi avvio del sistema e non sul MBR, supponiamo per comodità

/dev/hda3). Successivamente è necessario creare il file bootsect.lin che contiene l'immagine del settore di avvio della partizione Linux:

dd if=/dev/hd3 of= /tmp/bootsect.lin bs=512 count=1

Il file bootsect.lin va copiato nella directory C: di Windows XP e va modificato il file boot.ini nel modo seguente:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect

c:\bootsect.lin="Linux"

Per modificare il file clic con il destro su Risorse del computer e successivamente dalla scheda Avanzate selezionate Avvio e ripristino/Impostazioni/Modifica. È anche possibile modificare il file boot.ini direttamente in un qualsiasi editor di testi. Se decidete di modificare la configurazione dI LILO è necessario rigenerare il file immagine bootsect.lin e copiarlo nuovamente nella partizione di Windows.

back to top

8.)  Come faccio ad ottenere i privilegi di root senza riavviare la sessione?
Durante l'installazione del sistema, generalmente viene creato anche un utente comune ed consigliabile utilizzare il sistema sempre effettuando il login con questo utente. Quando è necessario effettuare operazioni che richiedono i privilegi di root, basta avviare la shell ed eseguire il comando su (switch user) seguito dalla password di amministratore. Per caricare la shell con l'ambiente root completo basta aggiungere a su il simbolo -. Alcuni sistemi prevedono un solo utente con privilegi più estesi, ma per accedere alla shell di root vera e propria, è necessario utilizzare il comando sudo -s e inserire la password dello stesso utente comune con cui si effettuato il login.

back to top

9.)  Come si arresta un processo o un'applicazione bloccata?
Quando un'applicazione nonne vuole proprio sapere di sbloccarsi, l'unico rimedio è “ucciderla” o “killarla”. Sono disponibili strumenti sia grafici (Xkill) sia a riga di comando come kill. Il primo è utile per arrestare programmi grafici, basta avviarlo dal menu o da shell e cliccare con il mouse sull'applicazione da arrestare. Per arrestare un'applicazione bloccata o un processo dalla shell, per prima cosa è necessario visualizzare i processi attivi con il comando

ps -ax

dopodiché basta individuare il PID associato all'applicazione bloccata ed eseguire

kill -9 pid_dell'applicazione

l'opzione -9 indica il segnale SIGKILL. Per ottenere l'elenco dei possibili segnali da inviare basta eseguire kill -l. In casi particolari può essere utile il comando fuser, per individuare e arrestare il processo o l'applicazione che blocca una risorsa, ad esempio il lettore CD:

fuser -v /dev/cdrom (individua il processo che occupa il lettore)

fuser -k /dev/cdrom (invia un segnale di kill al processo e lo termina liberando la risorsa)

Il programma killall invia un segnale a tutti i processi che eseguono i comandi specificati. I segnali possono essere indicati per nome o per numero. Ad esempio per arrestare tutti i processi avviati da Apache si può usare il comando

killall httpd.

back to top

10.)  È possibile arrestare o riavviare il sistema direttamente dalla riga di comando?
Per arrestare il sistema dalla shell bisogna usare il comando

shutdown -h now

o in alternativa

init 0

Per riavviare il sistema il comando è

shutdown -r now

o anche i questo caso il comando init

init 6

Il comando serve a cambiare il runlevel o livello di esecuzione del sistema, ce ne sono sei e lo 0 indica l'arresto e il 6 il riavvio. Generalmente per l'utilizzo normale del PC vengono utilizzati i runlevel 3 e 4. Per scoprirlo da root basta utilizzare il comando runlevel senza argomenti.

back to top

11.)  Come si caricano i moduli del kernel?
Per prima cosa è necessario verificare la disponibilità del modulo. Supponendo che vogliamo caricare il modulo per la gestione delle penne USB , usb-storage, possiamo verificarne la presenza utilizzando il comando (da root)

modprobe -l | grep usb

se è presente nell'elenco fornito dal comando, possiamo caricarlo con

modprobe usb-storage

o il nome del modulo che vogliamo caricare. Per ottenere l'elenco dei moduli caricati basta eseguire il comando lsmod.

back to top

12.)  È possibile caricare i moduli automaticamente all'avvio del sistema?
Se ad esempio si intende caricare il modulo irda per il supporto delle periferiche a infrarossi (IrDA) ad ogni avvio del sistema invece eseguire ogni volta:

modprobe irda

è necessario inserire la riga /sbin/modprobe irda

all'interno del file /etc/rc.d/rc.local o nei file corrispondenti a seconda della distribuzione utilizzata.

back to top

13.)  È necessario deframmentare l'hard disk in GNU/Linux?
I programmi ci sono ma non sono quasi mai necessari e addirittura se ne sconsiglia l'uso. Normalmente la frammentazione di un file system Ext2, quello nativo di Linux, si stabilizza tra il 4% e il 5%, e questo valore non viene mai superato.

back to top

14.)  Come si visualizza lo spazio disponibile su disco?
Oltre a numerosi programmi grafici integrati nei desktop KDE e Gnome è disponibile il tool df, eseguibile dalla shell anche senza passare opzioni aggiuntive. Fornisce la dimensione di tutti i file system montati e mostra la quantità di spazio libero e utilizzato. Utilizzando l'opzione -h, lo spazio residuo verrà visualizzato in maniera più chiara (G per Gbyte, M per Mbyte). L'opzione -T mostra anche il tipo di file system utilizzato.

back to top

15.)  Come si verifica se ci sono settori danneggiati sul disco?
Di questo compito si occupa il comando fsck e le sue numerose varianti, a seconda del file system utilizzato dalla partizione da controllare. Per controllare una partizione con file system Ext3 bisogna eseguire

fsck.ext3 -c /dev/hdaX

dove hda indica il disco e X il numero della partizione. Per visualizzare i comandi disponibili per gli altri tipi di file system basta digitare fsck e premere i tasto di tabulazione.

back to top

16.)  Come si visualizza la versione del kernel in uso?
Basta eseguire dalla console il comando

uname -r

back to top

17.)  Come faccio a verificare le risorse occupate dai processi in esecuzione?
Avviate una shell ed eseguite il comando top senza argomenti. Questo tool fornisce informazioni in tempo reale sull'utilizzo delle risorse di sistema da parte di un programma. Per la CPU e la RAM il valore è espresso in percentuale. Inoltre, sono fornite informazioni sul proprietario del processo, da quanto tempo è in esecuzione, priorità di esecuzione, ecc., oltre ovviamente al nome del processo stesso.

back to top

18.)  Come si masterizzano le ISO presenti sul DVD?
Per gli utenti che utilizzano Windows e Nero come software di masterizzazione, è sufficiente avviare il programma Nero Burning Rom, chiudere il wizard che parte all'avvio e selezionare la voce del menù principale Masterizzatore, Scrivi immagine.... Dopodiché basta cercare, mediante la finestra di dialogo che appare, l'immagine ISO della distribuzione GNU/Linux che si vuole utilizzare presente all'interno del DVD. Per gli utenti GNU/Linux che utilizzano K3b basta selezionare dal menù Strumenti la voce Scrivi immagine CD..., oppure Scrivi immagine ISO DVD... Dopodiché dalla finestra di dialogo bisogna utilizzare il campo Immagine da scrivere per indicare l'ISO da masterizzare.

back to top

19.)  Come faccio ad ottenere informazioni sull'hardware del PC
In assenza di tool grafici è sempre possibile ricorrere ai comandi shell. Se l'obiettivo è raccogliere, in un colpo solo, più informazioni possibili sulle periferiche installate il comando necessario è lshw. L'output ottenuto è abbastanza prolisso, quindi, per facilitarne la lettura è opportuno “accoppiarlo” al comando more con una pipe (“|”) nel modo seguente: lshw | more. Così facendo è possibile visualizzare gradualmente i dati ottenuti premendo Invio. Nel caso in cui l'obiettivo è ottenere informazioni sulle periferiche PCI (scheda audio, video, scheda di rete, controller USB, ecc.) il comando diventa lspci. Esiste anche un tool specifico per verificare la presenza di eventuali periferiche collegate alle porte USB il cui comando per eseguirlo è proprio lsusb. Nel caso dei computer portatili è anche possibile ottenere informazioni su eventuali schede PCMCIA connesse utilizzando il comando lspcmcia. Per ottenere informazioni dettagliate su hard disk, lettori CD/DVD e masterizzatori bisogna usare il comando hdparm con l'opzione -i. Supponiamo, ad esempio, di voler “analizzare” il lettore DVD identificato dal file di dispositivo /dev/hdd, in questo caso il comando diventa hdparm -i /dev/hdd. Non dimentichiamo poi il comando dmesg (diagnostic message) che visualizza i messaggi inviati dal kernel contenenti dati importanti relativi all'hardware. Infine, ricordiamo l'inesauribile fonte di informazioni offerta dal file system virtuale /proc. Per poter leggere il suo contenuto basta utilizzare il tool cat. Ad esempio per le periferiche PCI il comando è cat /proc/bus/pci/devices. Se, invece, desiderate ottenere informazioni in tempo reale quando collegate una periferica rimovibile al PC è possibile usare il comando tail -f /var/log/messages, eseguendolo prima di connettere il dispositivo al PC.

back to top

20.)  È possibile conoscere la versione di XOrg utilizzata?
Il comando per conoscere quale versione del sistema grafico (X Window System) stiamo utilizzando è molto semplice. È sufficiente eseguire X -version.

back to top

21.)  Come si avviano e arrestano i processi in esecuzione?
Anche in questo caso, è probabile che la distribuzione utilizzata disponga di tool grafici, ad esempio KSyvInit, per gestire l'esecuzione dei programmi, in caso contrario è possibile intervenire dalla shell. Nella maggior parte dei casi, per queste particolari applicazioni, come quelle server (posta, web, FTP, Samba, MySQL, ecc.), è disponibile il relativo script di avvio nella directory /etc/init.d. Ad esempio per gestire l'esecuzione del server di database MySQL è possibile eseguire il comando /etc/init.d/mysql seguito da una delle seguenti opzioni, start, stop, restart, reload, force-reload, status, a seconda di quello che si vuole fare. Ad esempio, /etc/init.d/mysql restart. Il comando precedente serve per riavviare il server MySQL
back to top

22.)  Come si applicano le patch al kernel?
Una patch (letteralmente “pezza”), detta anche file di modifiche o semplicemente aggiornamento, è un frammento di codice che, inserito all'interno del kernel Linux, ma anche di un qualsiasi altro programma, consente di aggiungere a esso nuove funzionalità o correggere eventuali difetti, eliminando allo stesso tempo la necessità di dover reinstallare una nuova versione del software. Nel caso del kernel Linux, ad esempio, evita di dover scaricare e installare nuovamente l'intero sorgente, generalmente di grosse dimensioni. Per quanto riguarda le patch specifiche per il kernel Linux, in genere sono disponibili sotto forma di file compressi con estensione .bz2 o .gz. Per applicarne una al kernel, bisogna innanzitutto copiarla all'interno della directory /usr/src, dopodiché è necessario spostarsi nella stessa cartella mediante il comando cd /usr/src ed eseguire i comandi seguenti a seconda del formato utilizzato:

bzip2 -dc nome_file.bz2 | patch -p1

gzip -dc nomefile.gz | patch -p0

Oltre a questo sistema, è possibile utilizzare lo script patch-kernel presente nella directory /usr/src/linux/scripts. In questo caso è necessario copiare le patch nella directory /usr/src, spostarsi in /usr/src/linux/scripts con cd /usr/src/linux/scripts ed eseguire il comando ./patch-kernel. È importante ricordare che in presenza di più kernel è necessario spostarsi ed eseguire tale comando nella directory corrispondente a quello che si intende patchare. Ad esempio, per il kernel 2.6.20, potrebbe essere qualcosa di simile a /usr/src/linux-2.6.20/scripts. Inoltre, dopo aver applicato la o le patch, prima di poterle sfruttare, è sempre necessario ricompilare il kernel.

back to top

23.)  È possibile cambiare il nome della macchina?
Il nome assegnato al sistema durante la fase di installazione, meglio conosciuto come “hostname”, serve per identificare il nostro PC (detto anche host o end system). Se non diversamente indicato il nome predefinito diventa, in genere, “localhost”. In tutte le distribuzioni GNU/Linux, tale informazione è conservata all'interno di /etc/hostname; è proprio in questo file che viene indicato il nome della macchina. È chiaro che per cambiare l'hostname è sufficiente modificare la stringa presente nel file /etc/hostname. In alternativa è possibile utilizzare il comando “hostname” che, se eseguito senza argomenti mostra a video il nome della macchina, se seguito da un'altra stringa lo modifica utilizzando il contenuto di questa'ultima al suo posto. Ad esempio: hostname linuxpc.

back to top

24.)  Cosa contiene la directory /tmp? È possibile cancellarla?
Molti programmi in esecuzione durante il normale utilizzo del PC usano la directory /tmp per archiviare al suo interno alcuni file, spesso temporanei, necessari alla loro esecuzione. In alcuni casi, il contenuto di tale directory può raggiungere dimensioni spropositate (per verificarlo basta eseguire du -h /tmp), quindi, sarebbe una buona idea ripulirla, ma è possibile farlo solo prima che qualsiasi programma possa scrivere qualcosa al suo interno. Detto ciò, risulta evidente che il momento più opportuno è proprio durante la fase di avvio del sistema. Per farlo è sufficiente creare un semplice script da inserire nella directory contente i servizi da avviare ovvero /etc/init.d. Alcune distribuzioni eseguono in automatico tale procedura, in caso contrario lo script da inserire è composto nel modo seguente:

#!/bin/bash

rm -Rf /tmp/*

back to top

25.)  Permessi predefiniti per file e directory
Per poter assegnare permessi predefiniti ai file e alle directory bisogna utilizzare il comando umask, conosciuto anche come maschera dei permessi. Attenzione, tramite questo tool non è possibile modificare i permessi di file già esistenti, ma consente “solo” di stabilire a priori quali saranno i diritti di accesso applicati di default ai file, ma anche alle directory, nel momento in cui vengono creati ma non vengono specificati i permessi. In pratica i permessi indicati con umask non verranno applicati ai nuovi file. Per conoscere il valore corrente della maschera è sufficiente eseguire il comando umask e premere Invio. In genere, il risultato che si ottiene è 0022, il che significa che il permesso di scrittura, indicato proprio dal numero 2 verrà tolto sia agli altri utenti sia al gruppo. Per ottenere un output più leggibile è possibile utilizzare l'opzione -S (umask -S). In questo caso il risultato sarà quello seguente:

u=rwx,g=rx,o=rx

Come vedete l'utente proprietario del file, identificato dalla “u”, dispone di tutti i permessi “r” read (lettura), “w” write (scrittura) e “x” che sta per “execution” o esecuzione. Mentre al gruppo “g” (group) e agli altri utenti “o” (other) il permesso di scrittura (“w”) non è concesso, proprio come stabilito da umask. Questo significa che al momento della creazione di un qualsiasi file o directory, se non espressamente specificato, verranno applicati tali permessi. Per modificare il valore della maschera dei permessi basta eseguire umask seguito dalla nuova direttiva, ad esempio:

umask 0077

In questo caso (limite), su tutti i nuovi file e directory, verranno tolti tutti i permessi (7), cioè lettura, scrittura, ed esecuzione per il gruppo e gli altri utenti. Ricordiamo che in base al sistema di gestione dei permessi il numero 4 indica l'accesso in lettura, il 2 quello in scrittura e l'1 quello di esecuzione. Ecco spiegato il valore 7, cioè 4+2+1. È chiaro che il 4 corrisponde alla r, il 2 alla w e l'1 alla x. Sono solo due metodi diversi di rappresentare i permessi, ma il risultato è uguale.

back to top

26.)  Come si configura la rotella del mouse?
In genere non è più necessario configurare manualmente questo aspetto. Ma se per qualche motivo la nostra distribuzione non riuscisse a farlo automaticamente è necessario intervenire direttamente sul file di configurazione del sistema grafico X (/etc/X11/xorg.conf). Per prima cosa bisogna individuare la sezione relativa al mouse, Section "InputDevice", dopodiché bisogna indicare al server grafico che il mouse in questione ha 5 pulsanti: 3 per la pressione, 4 per la rotella sù e 5 per la rotella giù. Segue un esempio di configurazione corretta:

Section "InputDevice"

Identifier "Configured Mouse"

Driver "mouse"

Option "CorePointer"

Option "Device" "/dev/input/mice"

Option "Protocol" "ImPS/2"

Option "ZAxisMapping" "4 5"

Option "Emulate3Buttons" "off"

EndSection

L'operazione va eseguita come utente root, dopodiché, per applicare le modifiche è necessario riavviare il sistema grafico.

back to top

27.)  Come si visualizzano gli accessi al sistema?
È semplicissimo, basta consultare i log di accesso alla macchina. Per farlo bisogna eseguire last senza argomenti aggiuntivi. Questo comando mostra l'elenco degli ultimi accessi al sistema.

back to top

28.)  Come si sposta un file dalla riga di comando?
Spostare un file utilizzando la shell equivale al Taglia/Incolla in modalità grafica. Il comando per eseguire questo tipo di operazione è mv. La sua sintassi è molto semplice:

mv file_sorgente file_destinazione

Supponendo che il file test.txt si trovi nella home directory dell'utente linux, per spostarlo nella sottodirectory temp è necessario eseguire quanto segue:

mv /home/linux/test.txt /home/linux/temp

Lo stesso comando può anche essere utilizzato per rinominare un file o una directory. La sintassi i questo caso è quella seguente:

mv nome_file nuovo_file

Nel caso del file test.txt, per rinominarlo in nuovo_test.txt, bisogna eseguire

mv test.txt nuovo_test.txt

È importante ricordare che il comando mv, durante le operazioni di spostamento, se trova un file con lo stesso nome si limita a sovrascriverlo senza chiedere conferma. Esiste comunque un modo per evitare questo comportamento. In pratica, è sufficiente utilizzare l'opzione -i nel modo seguente:

mv -i /home/linux/test.txt /home/linux/temp

Se nella directory temp è presente un altro file con nome test.txt, mv chiederà conferma prima di sovrascriverlo. Per confermare basta scrivere y e premere Invio. Per ottenere ulteriori informazioni potete utilizzare il comando man mv.

back to top

29.)  Esiste un comando shell per controllare l'utilizzo della RAM?
Per verificare l'utilizzo della memoria RAM da console è disponibile il comando free. Questo tool mostra sia la quantità complessiva di memoria fisica e di swap libera e usata nel sistema, sia la shared memory e i buffer usati dal kernel. Se eseguito senza opzioni (flag), free visualizza i dati ricavati in Kbyte, altrimenti è possibile scegliere l'unita di misura: Il flag -b mostra la quantità di memoria in byte, -k (impostato di default) in Kbyte e -m in Mbyte.

back to top

30.)  È possibile localizzare la posizione di un programma?
Tra i comandi predefiniti di GNU/Linux è disponibile il tool which, il quale prende come argomento il nome di un programma e mostra a video la sua posizione all'interno delle directory del file system; in pratica il percorso completo, meglio noto come pathname. Which fa questo utilizzando la variabile d’ambiente $PATH (echo $PATH per visualizzare il suo valore). Ecco un esempio di utilizzo di which:

which bash

Il risultato del comando precedente è /bin/bash, che indica la posizione dell'eseguibile della shell Bash.

back to top

31.)  Posso configurare la scheda di rete dalla shell?
Configurare la scheda di rete graficamente forse è più facile ma certamente non più pratico e veloce che farlo dalla shell. Per prima cosa bisogna loggarsi come root con su o sudo -s e subito dopo eseguire il comando ifconfig per verificare quali sono le interfacce di rete disponibili. In genere le schede di rete vengono identificate da eth0, eth1, eth2 e così via a seconda di quante periferiche sono installate nel PC. Supponiamo di dover configurare la scheda eth0 per la connessione ad una rete locale che usa gli indirizzi IP 192.168.0.1/24, maschera di rete (netmask) 255.255.255.0 e gateway 192.168.0.1. In questo caso, per collegare un PC alla rete, assegnandogli l'IP 192.168.0.3, bisogna eseguire quanto segue:

ifconfig eth0 192.168.0.3 netmask 255.255.255.0

route add default gateway 192.168.0.1

A questo punto, è ancora necessario indicare gli indirizzi dei server DNS prima di poter accedere a Internet. Per farlo, bisogna modificare il file /etc/resolv.conf inserendo la parola nameserver seguita dall'IP del DNS, tante volte quanti sono quelli che vogliamo aggiungere. Ad esempio per aggiungere due DNS il comando è quello seguente:

nameserver 87.167.220.2

nameserver 87.167.110.2

Ovviamente, per modificare tale file dalla shell è possibile usare, da root, gli editor nano o vi:

vi /etc/resolv.conf

nano -w /etc/resolv.conf

Oppure il comando echo in questo modo:

echo " nameserver 87.167.220.2" > /etc/resolv.conf

echo " nameserver 87.167.110.2" >> /etc/resolv.conf

Il comando echo serve per scrivere la stringa di testo (in condizioni normali la stamperebbe semplicemente a video) e il simbolo > serve per indirizzare il suo output nel file di destinazione, questa volta /etc/resolv.conf, sovrascrivendone il contenuto. Anche il simbolo >>, serve per redirige l'output di echo su tale file file ma, al contrario del primo lo inserisce alla fine, senza sovrascrivere il contenuto originale.

back to top

32.)  Esiste un metodo per arrestare o riavviare il PC più rapidamente?
Nei sistemi GNU/Linux e Unix più in generale, l'arresto e il riavvio della macchina sono gestiti mediante l'uso del comando shutdown. Questo permette di eseguire l'intera procedura in modo sicuro, immediatamente o dopo un certo ritardo espresso in secondi. In pratica, shutdown non fa altro che comunicare al processo principale init (man init) di cambiare runlevel (livello di esecuzione). Più precisamente il runlevel 0 è usato per arrestare il sistema (halt), mentre il 6 per il riavvio, noto anche come reboot. Così facendo si ottiene un arresto/riavvio pulito, in quanto i processi in esecuzione ricevono un sorta di avviso, che permette loro di salvare le operazioni in corso. Come accade per molti altri comandi, anche il funzionamento di shutdown può essere influenzato mediante l'uso di opportuni switch (opzioni). In particolare, il comando shutdown -n arresta la macchina in modo più veloce, ma lo fa senza servirsi di init, quindi, si tratta di un metodo decisamente più pericoloso e per questo sconsigliato nelle stesse pagine di manuale del comando shutdown (man shutdown). Utilizzando, invece, shutdown -f, si ottiene un reboot veloce (fast) della macchina. In quest'ultimo caso non esistono particolari controindicazioni.

back to top

33.)  È possibile montare automaticamente i dischi all'avvio?
Montare un disco, una partizione o qualsiasi altro supporto di memorizzazione, significa renderne accessibile il contenuto all'interno di una determinata directory, detta anche punto di mount o punto di innesto. Questa operazione può essere svolta sia manualmente, mediante l'uso del comando mount (man mount), sia automaticamente all'avvio del computer. In quest'ultimo caso, il sistema si serve delle indicazioni presenti nel file di configurazione /etc/fstab. Tale file è costituito da diverse righe, ognuna delle quali è divisa in campi che indicano il dispositivo da montare, dove deve essere agganciato al file system principale (punto di mount), il tipo di file system (VFAT, Ext2, ISO9660, NTFS, EXT3, ecc.), più altre opzioni, tra le quali c'è anche auto. Quando su una riga è presente questa voce, significa che il dispositivo corrispondente verrà montato automaticamente all'avvio del sistema, senza bisogno di eseguire altri comandi. Al contrario, tutti i dispositivi che non devono essere montati presentano l'opzione noauto (tipicamente CD, DVD e Floppy). Abbiamo detto che per montare un dispositivo manualmente è necessario il comando mount. Se questo è presente in /etc/fstab, per farlo è sufficiente eseguire mount dispositivo oppure mount punto_di_montaggio. Ad esempio, per montare la prima partizione del secondo hard disk, in genere /dev/hdc1, nella directory /mnt/disco2, il comando precedente diventa mount /dev/hdc1 oppure mount /mnt/disco2. Nel caso in cui, in /etc/fstab non è presente una voce relativa al dispositivo da montare, bisogna indicare il tipo di file system (ad esempio ext3), il dispositivo e il punto di mount, come nell'esempio seguente:

mount -t ext3 /dev/hdc1 /mnt/disco2

Per smontare un dispositivo e liberare nuovamente le risorse occupate bisogna, invece, utilizzare il comando umount. Proseguendo con l'esempio precedente, dovremo eseguire umount /dev/hdc1 oppure umount /mnt/disco2. Infine, per conoscere quali sono i dispositivi attualmente montati basta utilizzare il comando mount senza argomenti o visualizzare il contenuto del file /etc/mtab con cat /etc/mtab.

back to top

34.)  Come faccio a leggere l'output di un comando troppo lungo?
Quando capita di eseguire un comando che fornisce un risultato troppo lungo per essere visualizzato all'interno di una sola schermata, questo viene fatto scorrere velocemente fino alla fine, impedendoci di consultare le parti che ci interessano. Pensiamo ad esempio alla visualizzazione dei messaggi del kernel tramite dmesg, o ancora, all'esecuzione del comando ls all'interno di una directory stracolma di file. L'unico modo per risolvere il problema è reindirizzare l'output su more o less utilizzando una pipe (simbolo |):

dmesg | less

dmesg | more

Le funzionalità dei due programmi sono simili, infatti, entrambi consento di scorrere il testo poco alla volta utilizzando appositi pulsanti della tastiera. La differenza fondamentale è che, mentre more permette di farlo solo in avanti premendo Invio, con less è possibile utilizzare i tasti freccia e di pagina per scorrere il testo avanti e indietro, un rigo o una pagina alla volta.

back to top

35.)  Quali sono i comandi per creare un file vuoto?
I sistemi Unix, comprese tutte le distribuzioni GNU/Linux, includono di default il comando touch. Quest'ultimo serve a creare un file vuoto. In pratica, è sufficiente eseguire dalla shell il comando seguente:

touch nome_file

Successivamente è possibile aprire il file appena creato con un qualsiasi editor e scrivere al suo interno. Nel momento in cui, invece, oltre a creare il file si decidesse di iniziare a scriverne subito il contenuto, il comando da eseguire è:

cat > nome_file

Così facendo, non solo si crea il file, ma è anche possibile scrivere il suo contenuto fino a quando non si preme la combinazione di tasti Ctrl+D.

back to top

36.)  Qual è il sistema più rapido per cercare un file?
I moderni motori di ricerca per il desktop o Desktop Search Engine come Google Desktop Linux, Tracker o Recoll, non sono gli unici programmi in grado di cercare rapidamente un file all'interno del file system. GNU/Linux, infatti, dispone di alcuni tool predefiniti per effettuare questo tipo di operazioni anche dalla riga di comando. Uno di questi è find. Ad esempio, supponiamo di voler cercare il file test.txt all'interno della directory root (/). In questo caso, il comando find va usato nel modo seguente:

find / -name text.txt -print

Ovviamente è possibile sostituire la directory root con qualsiasi altra per indicare un punto specifico del file system dove eseguire la ricerca. Un altro comando ancora più semplice da utilizzare è locate:

locate test.txt

Quest'ultimo è molto più veloce di find, ma prima di usarlo bisogna aggiornare il suo archivio eseguendo, da utente root, il comando updatedb. Tale comando non va eseguito ogni volta che si usa locate, ma solo quando si vuole effettuare una nuova indicizzazione del contenuto del disco. Questa, in genere, è necessaria solo quando si effettua qualche cambiamento nel file system. Ad esempio, creazione di file e directory, installazioni di nuovi programmi, ecc. Insomma, si modifica il contenuto del disco aggiungendo nuovi file.

back to top

37.)  Perché bisogna inserire ./ prima del nome per eseguire alcuni programmi?
Ogni volta che si esegue un comando dalla shell, a meno che non si indichi il percorso completo dove questo è posizionato all'interno del file system, il sistema effettua una veloce ricerca per individuarlo. Tale ricerca prende in considerazione tutte le directory contenute nella variabile di ambiente PATH (per visualizzarne il contenuto basta eseguire il comando echo $PATH). È ovvio che, nel momento in cui l'eseguibile non è presente in nessuna delle directory contenute in PATH, il comando non può essere avviato. In questo caso, per eseguire il programma i metodi sono due. Il primo, come abbiamo detto, consiste nell'indicare il percorso completo, ad esempio per eseguire il programma prova, presente, ad esempio, nella nostra home, il comando diventa /home/nome_utente/prova. Il secondo metodo consiste nell'accedere alla directory che contiene il programma (in questo caso cd /home/nome_utente) ed eseguirlo con ./prova. In pratica, in quest'ultimo caso, non essendo il programma contenuto nei percorsi contenuti nella variabile PATH, è stato necessario indicare che si trova nella directory corrente, cioè quella in cui ci troviamo. Infatti, il . (punto) serve per indicare al sistema di cercare l'eseguibile nella directory corrente il simbolo / completa il percorso. È comunque possibile evitare di inserire ogni volta i caratteri ./, indicando la direcory corrente nella variabile PATH:

PATH=.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

export PATH

In questo modo abbiamo aggiunto anche la directory corrente tra i percorsi degli eseguibili, quindi possiamo avviare qualsiasi programma, da qualunque posizione senza inserire ./ prima del nome, ma solo se questo è presente nella directory in cui ci troviamo.

back to top

38.)  Posso installare un nuovo modulo senza ricompilare tutto il kernel?
Tutte le distribuzioni GNU/Linux installano di default alcuni kernel “precompilati”, che possiamo definire generici, allo scopo di garantire la massima compatibilità con le configurazioni hardware più diffuse. Ovviamente, tali kernel vengono installati con un numero limitato di componenti (driver hardware o altro), alcuni dei quali compilati staticamente, cioè inseriti direttamente nel kernel, quindi sempre disponibili, mentre altri compilati dinamicamente, cioè sotto forma di moduli, da caricare manualmente all'occorrenza. Questo sistema consente di ottenere, almeno in teoria, kernel più leggeri, senza troppe parti in eccesso. Purtroppo, però, quando si tratta di componenti hardware particolari o del supporto per protocolli poco utilizzati, tali moduli possono non essere presenti, quindi, prima di poterli utilizzare è necessario compilarli e installarli separatamente. A questo punto le strategie sono due: inserirli direttamente nel kernel o installarli come moduli separati. Nel primo caso, ovviamente, bisogna ricompilare nuovamente l'intero kernel, nel secondo è necessario solo eseguire i comandi previsti per la compilazione dei moduli, procedendo nel modo seguente. Per prima cosa, se non presenti, bisogna installare i sorgenti del kernel in uso. Per scoprire la versione esatta basta eseguire il comando uname -r. I sorgenti possono essere installati utilizzando i pacchetti precompilati per la propria distribuzione, oppure il file dei sorgenti. In quest'ultimo caso, è necessario scaricare il relativo pacchetto dal sito www.kernel.org e scompattarlo in /usr/src/linux, per comodità supponiamo /usr/src/linux-source-2.6.20. A questo punto, entriamo nella nuova directory (cd /usr/src/linux-source-2.6.20) ed eseguiamo il comando make xconfig per effettuare la nuova configurazione. Per evitare di escludere i moduli utili già in uso e ritrovarci solo con quelli nuovi, ottenendo un sistema non utilizzabile, utilizziamo una configurazione funzionante. Basta accedere al menu File/Load e caricare il file di configurazione presente in /boot: in genere si tratta di un file del tipo config-2.6.XX.X-generic o qualcosa di simile. Dopo averlo caricato, sempre dall'interfaccia grafica individuiamo i componenti da compilare come moduli (indicati dal simbolo a forma di punto) e salviamo il nuovo file da File/Save. A questo punto, possiamo compilarli e installarli:

make modules

make modules_install

depmod -a

Infine, possiamo caricarli nel sistema con modprobe nome_modulo.

back to top

39.)  Come si installano i programmi di tipo .bin e .run?
Il software disponibile per GNU/Linux è distribuito in formati differenti, ognuno dei quali necessita di un'installazione particolare. Oltre a quelli più diffusi, sorgenti, .deb, .rmp, .tgz e alcuni specifici per distribuzioni minori, spesso i programmi vengono forniti sotto forma di pacchetti .run o .bin. In questo caso si tratta di software precompilati, con integrate staticamente (cioè già presenti nel pacchetto stesso) le librerie di cui necessitano. In questi casi, non è necessario alcuna compilazione, tanto meno utilizzare i gestori di pacchetti come Yum, Adept, Synaptic o altro, è sufficiente eseguirli direttamente dalla shell o in alcuni casi tramite un semplice doppio clic sul file. La parte restante della procedura, in genere, avviene mediante procedure guidate grafiche o testuali. Supponiamo di disporre del file software.bin o software.run (la procedura è identica in entrambi i casi). Per prima cosa, anche se non sempre, bisogna rendere il file eseguibile:

chmod u+x software.run

A questo punto è sufficiente avviare l'installazione con il comando ./software.run e seguire le istruzioni mostrate a video. Lo stesso discorso vale per alcuni pacchetti .sh e il nuovo formato .package. In quest'ultimo caso, la procedura si differenzia solo per il fatto che, una volta avviata l'installazione, lo script verifica il contenuto del pacchetto e la presenza nel sistema di alcuni software indispensabili (le cosiddette dipendenze) prima di procedere con l'installazione del programma. In caso contrario, scarica da Internet e installa automaticamente tutti quelli mancanti (è solo necessario essere connessi alla rete). Oltre a questi formati esistono altri sitemi di distribuzione del software, sempre tramite pacchetti precompilati. Ad esempio, software come Opera, Firefox, Thunderbird, SeaMonkey e molti altri, sono disponibili sotto forma di archivi compressi contenenti il software già compilato. Basta scompattarli ed eseguire un file, nel cado di Thunderbird, si tratta dello script thunderbird: in alcuni casi non è neppure necessaria una vera e propria installazione.

back to top

40.)  A cosa serve il file di dispositivo /dev/null?
Il file di dispositivo /dev/null se aperto in lettura corrisponde ad un file vuoto, mentre in scrittura può essere paragonato ad una sorta di buco senza fondo. In pratica tutto quello che viene inviato al suo interno è perduto per sempre. Qual è allora la sua utilità. Questa caratteristica particolare lo render molto utile all'interno di alcuni script, nei quali non è necessario che i comandi eseguiti producano output da inviare agli utenti. Eseguendo, ad esempio, il comando seguente

ls /bin > /dev/null

non otterremo nulla come risultato, perché il risultato è stato rediretto (simbolo >) /dev/null e quindi perso. Attenzione: in questo caso non si perdono i file ma solo l'output del comando. È possibile verificare il contenuto vuoto del file utilizzando il comando seguente:

cat /dev/null

Come non verrà mostrato nulla a schermo.

back to top

41.)  Cos'è il Master Boot Record?
Il Master Boot Record (MBR), in italiano settore di avvio, è costituito dai primi 512 byte (mezzo Kbyte) dell'hard disk. È all'interno di questo fondamentale settore del disco che vengono conservati tutti i comandi e le informazioni necessarie al PC per poter avviare il sistema operativo. In pratica, il software di avvio (meglio noto come firmware) contenuto nella ROM del BIOS carica ed esegue il contenuto del Master Boot Record che a sua volta dispone del necessario per caricare il sistema operativo. All'interno dell'MBR, infatti, è presente la tabella delle partizioni, utilizzata dal sistema per conoscere la struttura del disco (indispensabile per caricare ed avviare il settore di avvio della partizione segnata come attiva) e il boot loader (per GNU/Linux LiLo o Grub) che si occupa, successivamente, di caricare il kernel del sistema operativo.

back to top

42.)  È possibile visualizzare i messaggi di avvio del sistema?
Durante l'avvio (boot), i sistemi GNU/Linux mostrano a video una serie di messaggi (in alcuni casi, vengono sostituiti da un'immagine e una barra di progressione ma, in genere, per visualizzarli è sufficiente premere Esc). Tali messaggi non sono altro che dati prodotti dal kernel e dagli script di inizializzazione per fornire informazioni riguarda la procedura di caricamento del sistema: riconoscimento e configurazione dell'hardware, esecuzione di servizi fondamentali, avvio automatico di programmi ecc. Si tratta, in pratica, di dati molto utili per eseguire una diagnosi veloce del sistema, per cui è importante poterli consultare all'occorrenza. Per farlo sono disponibili diversi comandi. Uno di questi è dmesg che, eseguito senza argomenti, scorre velocemente le informazioni di boot dall'inizio alla fine. Per cercare una parola in particolare, ad esempio per recuperare informazioni a proposito delle periferiche USB, tale comando può essere associato a grep mediante l'utilizzo di una pipe (simbolo “|”): dmesg | grep usb. Inoltre è possibile visualizzare solo i messaggi del kernel con less /var/log/kern.log, oppure quelli relativi al funzionamento del sistema con less /var/log/syslog. Al posto di less, è possibile utilizzare il comando more.

back to top

43.)  A cosa serve il comando history?
L'utility history si occupa di mantenere la cronologia (in pratica un elenco organizzato in ordine temporale) dei comandi shell eseguiti dall'utente. In questo modo, nel momento in cui bisogna usare nuovamente lo stesso comando, non è necessario riscriverlo da zero ma basta eseguire history. Immediatamente verrà visualizzato l'elenco dei comandi eseguiti dall'utente fino a quel momento e ad ognuno di essi sarà associato un numero. A questo punto per eseguirne nuovamente uno bisogna utilizzare il punto esclamativo (!) seguito dal numero che lo identifica, ad esempio: !154. Ovviamente, dipende da quanti comandi sono stati eseguiti, la lista fornita da history può essere anche molto lunga e, poiché il programma si limita a scorrerla dall'inizio alla fine senza pause, è bene associarlo a more o less nel modo seguente: history | more o history | less. Ma esistono ancora altri sistemi per evitare di dover riscrivere comandi già utilizzati. Ad esempio, basta digitare il punto esclamativo seguito dalla stringa iniziale di uno di essi per ripeterlo senza doverlo riscrivere. Supponiamo di aver eseguito mount -t iso9660 linux.iso /mnt per montare un'immagine ISO. Per ripetere il comando basta eseguire !mount. Infine, ricordiamo che è sempre possibile scorrere lo storico dei comandi utilizzando i pulsanti Freccia-Sù e Freccia-Giù della tastiera: dopo averli individuati basta premere Invio.

back to top

44.)  Posso personalizzare il prompt della shell?
La configurazione del prompt shell è definita all'interno della variabile di ambiente PS1, quindi per personalizzarne l'aspetto, è necessario modificare il contenuto di questa (ricordiamo che è sempre possibile visualizzare la configurazione corrente eseguendo il comando echo $PS1). Per cambiare aspetto al prompt è necessario utilizzare alcuni caratteri particolari, ognuno dei quali assume un valore preciso: \t rappresenta l'orario attuale nel formato hh:mm:ss (ore, minuti, secondi); \d è la data attuale; \n l'interruzione di riga; \s il nome della shell; \w la directory corrente (quella in cui ci troviamo); \W il percorso che porta alla directory corrente; \u il nome dell'utente; \h il nome della macchina (hostname); \# il numero del comando attuale; \! il numero del comando nella cronologia della shell; \$ serve per inserire il simbolo # per root e $ per gli utenti comuni; \nnn è la notazione ottale del carattere che si vuole visualizzare; \\ aggiunge una barra obliqua inversa (backslash) singola; \[ segna l'inizio di una sequenza di controllo; \] segna la fine di una sequenza di controllo. Capito il significato dei simboli è possibile passare alla personalizzazione del prompt. Ad esempio, il comando seguente:

export PS1='\u@\h:\w\$'

fornisce un prompt di questo tipo (quello più comune):

nome_utente@nome_host:~$

Ovviamente, è possibile utilizzare combinazioni diverse dei simboli in modo da ottenere il risultato desiderato.

back to top

45.)  Come si scrivono la tilde e le parentesi graffe?
Per la tilde (carattere ~) bisogna utilizzare la combinazione di tasti Alt Gr+ì, mentre per le parentesi graffe Alt Gr+7 per quella aperta (simbolo {) e Alt Gr+9 per quella chiusa (simbolo }). Caratteri speciali aggiuntivi si possono ottenere con Alt Gr in combinazione con altri tasti, oppure con Alt Gr+Shift+altri tasti. Ad esempio: Alt Gr+Shift+c stampa il carattere ©, Alt Gr+Shift+r visualizza il simbolo ®, Alt Gr+Shift+9 serve per scrivere ±, Alt Gr+Shift+o stampa a video Ø e così via. Inoltre, è possibile modificare la configurazione dei pulsanti della tastiera utilizzando i comandi xmodmap in ambiente grafico e loadkeys per la shell, oltre che attraverso gli strumenti grafici a corredo di KDE e Gnome.

back to top

46.)  Come si usa il comando man?
L'utility man serve per poter visualizzare e consultare le pagine di manuale o man page, cioè la documentazione a corredo dei programmi che ne spiega dettagliatamente sintassi e funzionamento (secondo la filosofia GNU/Linux e Unix in generale, ogni comando dovrebbe essere accompagnato da questo tipo di documentazione). In pratica, se non si conosce il funzionamento di un determinato programma, questo vale in particolare per i comandi di base, il primo posto dove cercare informazioni a riguardo è proprio questo. Tra l'altro, molte pagine di manuale, prima disponibili solo in lingua inglese, sono state tradotte in italiano. Accedere alla documentazione è semplicissimo: basta eseguire man seguito dal nome del comando. Ad esempio, per mount la riga di comando è: man mount. Per cercare all'interno di tutta la documentazione solo le pagine contenenti una stringa particolare, il comando diventa: man -k parola_da_cercare, nel caso specifico man -k mount. Addirittura, il comando man può essere utilizzato per convertire le pagine di manuale in formato PostScript (.ps), bisogna solo utilizzare l'opzione -t e redirigere l'ouput su un file: man -t mount > file.ps. Oltre a man sono disponibili i comandi whatis e apropos che servono allo stesso scopo.

back to top

47.)  Posso assegnare a tutti gli utenti il permesso di montare un dispositivo?
Gli hard disk, le singole partizioni e altri dispositivi di memorizzazione come lettori CD e DVD possono essere montati e smontati, cioè resi accessibili, anche all'avvio, tenendo conto delle impostazioni presenti nel file di configurazione /etc/fstab. È qui, infatti, che si stabilisce l'associazione tra dispositivo (ad esempio /dev/hda1, /dev/hdb2, /dev/hdc1, ecc.) e punto di mount all'interno del file system, cioè la directory dove il contenuto di un hard disk o di una partizione diventerà disponibile. Inoltre, sempre attraverso /etc/fstab è possibile stabilisce il tipo di file system utilizzato per la formattazione del supporto (Ext3, ReiserFS, Xfs, ISO9660...) e i permessi di accesso: possibilità di montare e smontare il disco, anche in automatico, accesso in lettura e scrittura e molte altre opzioni. È chiaro, quindi, che per garantire a tutti gli utenti la possibilità di montare e smontare un supporto è necessario intervenire su questo file. In particolare per questo tipo di operazioni bisogna utilizzare le opzioni user e users. Nel primo caso, si concede a tutti il permesso di montare il supporto ma non di smontarlo, mentre la seconda direttiva attiva entrambi i permessi. Supponiamo di voler montare all'avvio la terza partizione del primo disco, identificata dal file di dispositivo /dev/hda3, e permettere a tutti gli utenti di montarla e smontarla successivamente. In questo caso, il file /etc/fstab, con riferimento alla riga relativa a dev/hda3, va modificato nel modo seguente:

/dev/hda3 /mnt/backup ext3 ro,users,oauto 0 0

In dettaglio, /dev/hda3 indica la partizione, /mnt/backup il punto di mount, ext3 il tipo di file system utilizzato in questo caso, ro (read only) l'accesso in lettura, users la possibilità per tutti gli utenti di montare e smontare la partizione e auto il montaggio automatico all'avvio. I due zeri alla fine indicano che non si tratta di una partizione di avvio e di non effettuare il controllo durante il boot. La presenza di un numero 1 indica che si tratta di una partizione di avvio e che bisogna eseguire il controllo. In quest'ultimo caso, un 2 al posto dell'1 fa in modo che questo file system venga controllato solo dopo quello principale. Altre opzioni di mount importanti sono nouser, che vieta agli utenti la possibilità di montare e smontare i dispositivi, noauto, per impedire il montaggio al boot. I comandi per montare e smontare una partizione o un altro dispositivo sono mount e umount, ma se /etc/fstab è configurato correttamente, è possibile farlo direttamente dal file manager o da altri programmi. Il loro uso è comunque molto semplice:

mount -t ext3 /dev/hda3 /mnt/backup

umount /mnt/backup

Il comando mount eseguito senza argomenti mostra tutti i file system montati in quel momento, elencati anche nel file /etc/mtab.

back to top

48.)  A cosa servono le directory /dev e /proc? È possibile cancellarle?
Assolutamente no! La directory /dev contiene i file, meglio noti come file di dispositivo, che consentono ai programmi, quindi a noi, di interagire con l'hardware: in pratica, una vera e propria interfaccia tra il kernel, le applicazioni e i componenti del PC. La directory /proc è il punto di mount per il file system virtuale omonimo, al cui interno sono presenti file creati direttamente dal kernel. Tali file e directory sono necessari ai programmi che hanno bisogno di accedere alle informazioni sul sistema.

back to top

49.)  Ho sentito parlare di demone? Di cosa si tratta?
Il termine daemon, italianizzato in demone, è utilizzato per indicare i processi (spesso si tratta di software server) eseguiti automaticamente all'avvio del computer (boot). Questi programmi restano attivi in background durante il normale utilizzo del PC in attesa di svolgere determinate funzioni a seguito di una richiesta. Ad esempio, sono demoni smbd (il server Samba), httpd (Apache), mysqld (MySQL) e syslogd (il sistema di logging). Spesso per indicare i demoni è utilizzato il termine servizio, proprio per sottolineare la loro caratteristica di software server.

back to top

50.)  Cosa contiene il file /etc/shadow?
Se presente, il file /etc/shadow indica che la distribuzione utilizza il sistema delle shadow password: una tecnica utilizzata per proteggere le password degli utenti. In pratica, tutte le parole chiave cifrate vengono tolte dal file /etc/passwd (responsabile della gestione degli utenti e, quindi, dei loro dati di accesso) e sostituite da una x, dopodiché vengono scritte in /etc/shadow sempre in modo cifrato (ecco perché shadow, termine che significa oscurare). Oltre alle password, questo file, nei campi separati dal simbolo : (due punti), contiene il nome utente e informazioni sulla durata delle parole chiave:scadenza della password, l'ultima volta in cui è stata modificata, giorni di avviso prima della scadenza, ecc. Ma perché è necessario questo file? Poiché il file /etc/passwd fornisce numerose informazioni indispensabili al funzionamento del sistema, non è possibile limitare oltre un certo “livello” gli accessi in lettura, cosa che rappresenta un pericolo per la sicurezza delle password. Al contrario, “isolando” le parole chiave in un file separato è possibile assegnare a questo permessi di accesso molto più restrittivi ottenendo maggiore sicurezza. Inoltre, se il campo password di /etc/passwd contiene una x, significa che la password è presente in /etc/shadow, se contiene un simbolo * (asterisco), la password è nulla e l'utente disabilitato.

back to top

51.)  Esiste un programma per convertire i pacchetti in altri formati?
Certo che esiste, si chiama alien ed è scaricabile all'indirizzo http://kitenet.net/~joey/code/alien. Questo programma consente di convertire tra loro pacchetti software disponibili nei formati .rpm, .deb. .tgz (Slackware) e, l'oramai inutilizzato, .slp (Stampede). L'uso di alien è semplicissimo. Ad esempio per convertire un pacchetto .rpm in .deb il comando da eseguire è:

alien --to-deb pacchetto.rpm

Mentre per quanto riguarda la conversione da .rpm a .deb, bisogna eseguire quanto segue:

alien --to-rpm pacchetto.deb

Purtroppo, questo non significa che il pacchetto convertito sia sicuramente installabile. Molto, infatti, dipende dalla configurazione richiesta dal sistema sul quale si cerca di installarlo: spesso le distribuzioni coinvolte possono essere alquanto differenti. Pensate, ad esempio a Ubuntu (.deb) e Fedora (.rpm). Per ulteriori informazioni su questo particolare software è possibile consultare le relative pagine di manuale con man alien.

back to top

52.)  Ho cancellato un utente. Come faccio ad eliminare tutti i suoi file?
Cancellare un utente dal sistema, purtroppo, non significa eliminare anche tutti i file a lui appartenenti. Comandi come userdel nomeutente o deluser nomeutente, non eliminano proprio tutto. Lo stesso effetto si ottiene utilizzando applicazioni grafiche come KUser, oppure, ancora, cancellando manualmente la cartella /home/nomeutente e le voci presenti nei file /etc/passwd, /etc/shadow e /etc/group. Ma, anche in questo caso, qualche cosa resta sempre. Fortunatamente esiste un rimedio. Per prima cosa controlliamo quali sono i file appartenenti all'utente che abbiamo eliminato e che, quindi, saranno cancellati, utilizando il comando seguente:

find / -user uid | less

Questo serve per verificare che non si elimino per errore file importanti per il funzionamento del sistema o di qualche applicazione in particolare. A questo punto, possiamo cancellarli con

find / -user nomeutente -exec rm {} \;

o, in alternativa

find / -uid `id -u nomeutente` | xargs rm -f

Per scrivere il simbolo “ ` “ presente in quest'ultimo comando, bisogna utilizzare la combinazione di tasti Alt Gr + ' (apice).

back to top

53.)  Qual è la differenza tra shell interattiva e non interattiva?
In tutti i sistemi Unix, GNU/Linux compreso, esistono due tipi di shell: interattiva e non interattiva. Nel primo caso si tratta di una shell in cui l'utente interagisce con essa: questo è quello che accade, ad esempio, quando eseguiamo qualche comando. Al contrario, quella non interattiva non richiede interventi da parte dell'utente: questo è il caso, ad esempio, dell'esecuzione di uno script. Ma non finisce qui. Infatti, la shell interattiva si divide a sua volta in shell di login e shell normale. La prima è quella che si ottiene quando si effettua il login, mentre l'altra è quella che, ad esempio, avviamo in un secondo momento per eseguire qualche programma. Ad esempio, premendo le combinazioni di tasti da Ctrl+Alt+ F1... Ctrl+Alt+F6 si accede ad altrettante shell di login, ovviamente, solo dopo essersi autenticati con nome utente e password.

back to top

54.)  Come si gestiscono le variabili d'ambiente?
Le variabili d'ambiente (environment variable), dette anche variabili di sistema, sono delle stringhe di testo contenenti indicazioni sulla configurazione del sistema, alle quali i programmi, ma anche lo stesso sistema operativo, si appoggiano per svolgere le loro funzioni. All'interno dell'ambiente Unix, quindi GNU/Linux, sono identificate da un nome, preceduto dal simbolo $. Un esempio di variabile di ambiente è $PATH, la quale contiene i percorsi (cioè le directory a partire da quella radice) dove sono posizionati gli eseguibili presenti nel sistema. Il sistema operativo contiene diverse variabili d'ambiente predefinite, ma è sempre possibile modificarle o crearne altre. Per visualizzare tutte le variabili d'ambiente presenti nel sistema bisogna utilizzare il comando printenv oppure set. Per ottenere il valore di una variabile in particolare basta eseguire il comando echo seguito dal nome della variabile, ad esempio: echo $PATH. Nel caso in cui, invece, è necessario crearne una nuova, il comando diventa export NOME_VARIABILE=valore. Ecco un esempio di utilizzo di export: export HOSTNAME="`cat /etc/hostname`". In questo caso, la variabile d'ambiente $HOSTNAME sarà uguale al nome della macchina (hostname), valore ottenuto, nell'esempio, dal comando cat /etc/hostname. Ovviamente, il valore può essere espresso mediante un comando, come in questo caso (ricordate però, di racchiuderlo sempre tra due simboli `), da nomi, percorsi di directory, ecc.

back to top

55.)  A cosa serve la directory /etc/skel?
Ogni volta che si crea un nuovo utente, automaticamente viene creata, tra le altre cose, la sua directory personale, la quale può contenere cartelle e file predefiniti. La directory /etc/skel serve proprio a stabilire questo contenuto “extra” aggiunto di default. In pratica basta sistemare in questa particolare cartella tutto quello che si vuole aggiungere alla directory di ogni nuovo utente creato.

back to top

56.)  Nella directory /boot è presente il file initrd-x.x.xx.img. A cosa serve?
Il file initrd, o initial ramdisk (in italiano disco RAM iniziale) è un particolare tipo di file system, in genere contenuto all'interno di un file immagine .img, montato dal kernel Linux in RAM come RAM disk (ecco perché initial ramdisk). Tale file viene fornito al kernel dal bootloader come sistema minimale per svolgere alcune funzioni fondamentali prima del caricamento del file system vero e proprio. Sostanzialmente, il file initrd contiene al suo interno i moduli necessari al supporto e all'attivazione del file system radice, più gli script necessari per caricarli. Concluse queste operazioni di base, il disco RAM iniziale passa il controllo al file system principale. Ovviamente, è anche possibile fare a meno del file initrd, purché i moduli necessari al caricamento iniziale del sistema siano stati compilati direttamente nel kernel. Il vantaggio che ne consegue è ovvio. La presenza del file initrd permette alle distribuzioni GNU/Linux di usare un kernel precompilato con tutte le funzionalità attive come moduli, quindi molto più leggero. È anche possibile creare un file initrd utilizzando il comando mkinitrd integrato nel pacchetto initrd-tools. Nelle nuove distribuzioni questi tool sono stati sostituiti da initramfs e iniramfs-tools. Infine, nelle distribuzioni Debian GNU/Linux e derivate è presente il comando mkinitramfs-kpkg che automatizza la creazione di file initrd.

back to top

57.)  Come faccio a cambiare le password di accesso al sistema?
Le nuove distribuzioni GNU/Linux includono di default strumenti grafici per la gestione degli utenti e delle relative password. Ma il modo più semplice per modificarle resta sempre il tool a riga di comando passwd. Ovviamente, ogni utente può cambiare la propria password, mentre solo root è in grado di modificare oltre alla propria quelle di tutti gli altri. In particolare, per cambiare la propria parola chiave come utente comune, basta aprire una shell ed eseguire il comando passwd, dopodiché è necessario inserire la vecchia password e poi per due volte quella nuova. Per modificare la password di amministratore, invece, bisogna aprire la shell, loggarsi come root (su o sudo -s) ed eseguire il comando passwd. Anche in questo caso è necessario indicare prima la password attualmente in uso e subito dopo quella nuova per due volte. Infine, per modificare, da root la password di un qualsiasi utente, bisogna eseguire sempre passwd ma questa volta seguito dal nome utente: ad esempio, passwd giovanni.

back to top

58.)  Cosa sono e come si creano i collegamenti simbolici?
Un collegamento simbolico, detto anche symbolic link, spesso abbreviato in symlink, può essere paragonato alla copia di un file (può trattarsi anche di una directory o di un altro collegamento simbolico) in una diversa posizione, con la differenza che invece di copiarne il contenuto si crea un “semplice” riferimento ad esso che si comporta allo stesso modo di quello originale. Il comando utilizzato per creare collegamenti simbolici è ln. Ad esempio, supponiamo di avere un file di nome test. Eseguendo il comando ln-s test testlink, creiamo il collegamento simbolico testlink che fa riferimento al file test. D'ora in poi è possibile fare riferimento al file test riferendoci a testlink. In questo caso, abbiamo supposto che entrambi i file, sia l'originale sia il link simbolico, fossero presenti nella stessa directory, ma è possibile eseguire la stessa operazione anche con riferimento a cartelle differenti, bisogna solo ricordare di specificare i percorsi completi quando si esegue il comando ln. Ad esempio, per creare nella nostra home il collegamento simbolico testlink che fa riferimento a test presente in /usr/local, il comando diventa: ln -s /usr/local/test /home/nome_utente/testlink. È facile verificare se un file è un collegamento simbolico o meno, indipendentemente dal fatto che spesso la console li visualizza con colori differenti: basta utilizzare il comando ls -l all'interno di una directory che ne contiene qualcuno. Infatti, questi ultimi si distinguono per una lettera “l” posta all'inizio della relativa riga (per i file è presente un trattino “-”, mentre per le directory una “d”). Inoltre, alla fine della stessa riga è presente il nome del collegamento e il file a cui fa riferimento rappresentati nel modo seguente (sempre in riferimento all'esempio precedente): testlink -> test nel primo caso, testlink /usr/local/test nel secondo.

back to top

59.)  Non riesco ad eseguire applicazioni grafiche da root. Perché?
Anche se si tratta di una forma di controllo non più utilizzata dalla maggior parte delle distribuzioni GNU/Linux, può ancora succedere che mentre si utilizza il PC come utente comune non risulti possibile avviare applicazioni grafiche da root. Questo comportamento è dovuto al fatto che sui sistemi GNU/Linux, per motivi di sicurezza, è possibile abilitare o disabilitare l'accesso al server X (l'ambiente grafico), da parte di determinati utenti o, addirittura, macchine (host) connesse in rete. È possibile, però, gestire tali permessi utilizzando il programma xhost. Ad esempio, eseguendo xhost +, tutte gli utenti e tutte le macchine sono abilitati ad accedere al server X, quindi ad avviare applicazioni grafiche. Al contrario, xhost – disabilita tali permessi. Inoltre, è possibile specificare singolarmente gli utenti e gli host abilitati o meno eseguendo rispettivamente xhost + nome e xhost – nome, dove nome può essere un nome utente o quello di una macchina (hostname).

back to top

60.)  Come si attiva la richiesta di conferma prima di cancellare o sovrascrivere un file dalla shell?
Così come accade per i file manager grafici, anche la shell offre un sistema di controllo che consente di visualizzare un avviso per chiedere conferma prima di cancellare o sovrascrivere effettivamente un file o una directory. I comandi per eseguire questo genere di operazioni sono rm (rimozione), cp (copia) e mv (spostamento). In genere, eseguendo questi comandi su un file o su una cartella, questi vengono immediatamente cancellati o copiati nella nuova posizione, purtroppo senza prima chiedere conferma. Così facendo, però, spesso si eliminano o si sovrascrivono, senza volerlo, file o directory importanti. Per fortuna la soluzione c'è ed è possibile applicarla utilizzando due tecniche differenti. La prima consiste nel passare l'opzione -i sulla riga di comando: ad esempio, supponendo di voler cancellare il file test.txt presente nella directory corrente, il comando diventa rm -i test.txt. La stessa cosa accade con mv e cp, basta semplicemente utilizzare l'opzione -i. In alternativa, per evitare di dover scriverla ogni volta, è possibile creare un alias per ognuno dei tre comandi nel modo seguente:

alias cp="cp -i"

alias mv="mv -i"

alias rm="rm -i"

Per fare in modo che la modifica sia disponibile per tutti gli utenti (globale), bisogna aggiungere le tre righe precedenti alla fine del file /etc/profile, mentre aggiungendole nel file .bash_profile la nuova configurazione riguarderà solo il nostro utente (si tratta di un file nascosto, notate il punto prima del nome, presente nella directory home di ogni utente).

back to top

61.)  È possibile ottene l'IP dal nome di dominio e viceversa?
Supponiamo, ad esempio, di voler conoscere l'indirizzo IP associato al nome di dominio www.prova.it. Per ottenere questa informazione è sufficiente eseguire il comando nslookup www.prova.it. Lo stesso risultato si ottiene con host www.prova.it. Al contrario, è possibile risalire al nome di dominio conoscendo l'indirizzo IP sostituendo, sempre negli stessi comandi, l'IP al nome dominio, ad esempio: nslookup 159.82.122.9 oppure host 159.82.122.9.

back to top

62.)  Come faccio a cancellare il boot loader da GNU/Linux?
Per prima cosa, diciamo subito che la procedura è identica sia per Grub che per LiLo e si limita ad singolo comando da eseguire da root: dd if=/dev/null of=/dev/hda bs=512 count=1. L'unico inconveniente è che in questo modo si cancella anche la tabella delle partizioni. Se è nostra intenzione evitare che ciò accada, è sufficiente modificare il comando precedente nel modo seguente: dd if=/dev/null of=/dev/hda bs=446 count=1. Nel caso di dischi SCSI o SATA bisogna sostituire /dev/hda con /dev/sda.

back to top