FAQ - Frequently Asked Questions (Unix)

  
PAGINA IN PREPARAZIONE

 

Autore: Alessandra Seghini

  1. Come faccio a sapere come si usa un comando in UNIX? (comando man)
  2. Come faccio a cambiare la mia password? (comando passwd)
  3. Che cosa indicano i caratteri ~, . e ..?
  4. Che cos'è la shell?
  5. Che cosa sono le variabili d'ambiente?
  6. Che cosa sono gli script di login?
  7. Quali sono i comandi base per la gestione di file e directory?
  8. Come faccio a lanciare un comando, ad eseguire un programma? (la variabile PATH)
  9. Quali sono le aree disco a disposizione degli utenti?
  10. Come faccio a sapere quanto spazio disco sto occupando e qual'è la mia quota disco? (comandi du e quota)
  11. Come faccio a comprimere un file, in modo che occupi meno spazio su disco? (comandi gzip, zip e compress)
  12. Come faccio ad archiviare un intero albero di directory in un unico file? (comandi tar e zip)   
    ANCORA DA FARE
  13. Come si invia un file alla stampante? (comandi lpr, lpq, lprm)
  14. Che cos'è un processo? (comando ps)
  15. Come faccio a sapere quanto tempo il processore ha dedicato a un mio programma? (comando time)
  16.  utilizzo code batch
  17.  monitoraggio del sistema (quante risorse - CPU e RAM - sta usando il mio programma?  
    ...... e altro ancora ....

Qualche altra informazione relativa all'utilizzo dei sistemi unix/linux si può trovare nelle Note del corso di Abilità Informatiche: Introduzione a Unix"


Risposte

  1. Come faccio a sapere come si usa un comando in UNIX?  (comando man)
    Per utilizzare un comando UNIX è necessario conoscerne la sintassi: bisogna sapere esattamente come il comando deve essere digitato, quali sono le eventuali opzioni per modificare o estendere le sue funzionalità, quali sono gli eventuali argomenti.
    Il formato generale di una riga di comando è il seguente:

          comando   [-opzioni]    [argomenti]

    Per avere informazioni complete su un qualsiasi comando UNIX si deve utilizzare il manuale in linea, richiamabile con il comando man. Imparare ad utilizzare il manuale in linea è un prerequisito indispensabile per poter utilizzare in maniera avanzata gli altri comandi disponibili sul sistema.
    man richiede come parametro il nome del comando di cui si vuole conoscere l'uso. Ad esempio:

          man ls

    fornisce informazioni sul comando ls che si usa per visualizzare l'elenco dei file contenuti in una directory. Il comando man manda a schermo la prima pagina di manuale del comando specificato. Per scorrere all'interno del documento utilizzare i tasti:

          [INVIO]                       - avanza di una riga
          barra spaziatrice     - avanza di una pagina
          b                                 - torna indietro di una pagina
          /stringa                      - cerca stringa in avanti
          q                                 - esce

    Per avere informazioni dettagliate sull'utilizzo del comando man digitare

          man man

  2. Come faccio a cambiare la mia password? (comando passwd)
    Il comando da utilizzare per cambiare la propria password è passwd. Il sistema chiederà all'utente di digitare la vecchia password e poi di digitare per due volte la nuova password, come nel seguente esempio:

          passwd
          passwd: Changing password for rossi
          Enter existing login password:         <==  digitare la vecchia password
          New Password:                                   <==  digitare la nuova password
          Re-enter new Password:                   <==  digitare la nuova password
          passwd: password successfully changed for rossi

    Generalmente il sistema non accetta una nuova password se non è abbastanza lunga, e se non rispetta certi requisiti minimi di complessità. Sarebbe opportuno evitare l'uso di password troppo banali ed impostare come propria password una stringa contenente caratteri alfabetici sia minuscoli che maiuscoli, cifre ed almeno un carattere speciale (#, *, !, :, etc.).

  3. Che cosa indicano i caratteri ~, . e ..?
    Su un sistema unix, è possibile indicare la home directory di un utente con ~username, ad esempio la home directory dell'utente rossi può essere indicata con ~rossi. Ogni utente può inoltre riferirsi alla propria home directory semplicemente con il carattere ~, senza specificare lo username.
    Il carattere "." indica la directory corrente, ovvero la directory sulla quale si è posizionati. La directory genitore della directory corrente è invece indicata con "..".

  4. Che cos'è la shell?
    La shell - guscio - costituisce l'interfaccia fra l'utente ed il sistema operativo: è il programma che interpreta e manda in esecuzione i comandi inviati dall'utente al sistema. Diversamente da altri sistemi operativi, UNIX e Linux permettono all'utente di scegliere fra diverse shell, a seconda del proprio gusto e delle proprie esigenze. Alcune fra le shell più diffuse sono:
          Bourne shell                   sh
          Bourne again shell        bash
          C shell                              csh
          Teach C shell                  tcsh (C shell avanzata)
          Korn shell                        ksh
    Ogni utente ha una sua shell di default, che parte automaticamente al login. Questa shell è definita dall'amministratore di sistema al momento della configurazione dell'account per l'utente e, come tutte le altre informazioni relative alle utenze, è memorizzata nel file /etc/passwd. La shell normalmente utilizzata sui sistemi Linux è la bash. Una delle maniere più semplici per conoscere il nome della shell in uso è inviare il comando:

          printenv SHELL

    La shell, oltre a fornire il tramite fra l'utente ed il sistema operativo è anche un linguaggio di programmazione e, come tutti i linguaggi di programmazione, dispone di variabili, di operatori e di strutture logiche. Un programma scritto utilizzando i comandi della shell viene chiamato shell script. Questi script possono essere comodi per eseguire sequenze di comandi ripetitivi o per effettuare operazioni complesse.

  5. Che cosa sono le variabili d'ambiente?
    La shell, oltre a fornire il tramite fra l'utente ed il sistema operativo è anche un linguaggio di programmazione e, come tutti i linguaggi di programmazione, dispone di variabili, di operatori e di strutture logiche. Fra le variabili utilizzate dalla shell, particolarmente importanti sono le variabili d'ambiente. Queste variabili determinano molte caratteristiche della sessione di lavoro e possono essere personalizzate dall'utente. Vengono inizializzate dagli script di login, programmi eseguiti automaticamente quando un utente si collega al sistema. Le variabili d'ambiente hanno nomi standard, scritti interamente in maiuscolo, come ad esempio:

          HOME              nome della home directory
          LOGNAME      login name
          SHELL             nome della shell attiva
          PATH                elenco delle directory nelle quali il sistema cerca i comandi
                                    da eseguire
    Alcuni comandi che permettono di visualizzare e di impostare il valore delle variabili d'ambiente sono:

          printenv                                  visualizza le variabili d'ambiente
          printenv NOME_VAR           visualizza la variabile d'ambiente NOME_VAR
          export NOME-VAR=valore  imposta il valore della variabile NOME_VAR (con la bash)
          setenv NOME-VAR valore   imposta il valore della variabile NOME_VAR (con la tcsh)

  6. Che cosa sono gli script di login?
    Ogni volta che un utente si collega al sistema, devono essere eseguite alcune operazioni, come ad esempio l'impostazione delle variabili d'ambiente. Queste operazioni vengono effettuate tramite gli script di login. Vengono prima eseguiti gli script di login di sistema che definiscono alcune caratteristiche della sessione di lavoro comuni a tutti gli utenti. Questi script si trovano nella directory /etc e vengono mantenuti dal system manager. Successivamente, se esistono, vengono eseguiti gli script di login personali dell'utente, che consentono a ciascuno di personalizzare la propria sessione di lavoro (ridefinire il prompt, definire alias personali, impostare nuove variabili d'ambiente, etc.). Il nome degli script di login personali cambia a seconda della shell in uso: ~/.cshrc e ~/.login per la tcsh, ~/.profile e ~/.bashrc per la bash, etc.

  7. Quali sono i comandi base per la gestione di file e directory?
    Riportiamo di seguito alcuni dei principali comandi UNIX che consentono di operare con file e directory. Si consiglia di utilizzare il manuale in linea (man nome-comando) per avere informazioni dettagliate su ciascun comando.
          cat           - concatena e visualizza file
          cd            - cambia la directory corrente
          chmod    - modifica i permessi di accesso ad un file
          cp            - copia file e directory
          diff           - trova differenze tra due file
          file           - riporta il tipo di file
          find          - cerca file in una gerarchia di directory
          grep        - seleziona e visualizza le righe di un file contenenti una stringa specificata
          head       - visualizza le prime righe di un file
          ln             - crea un collegamento tra file
          ls             - elenca i file contenuti in una directory
          mkdir      - crea una directory
          more       - visualizza il contenuto di un file
          mv           - sposta/rinomina file e directory
          rm            - cancella file o directory
          rmdir       - cancella una directory (vuota)
          sort          - ordina le linee di un file di testo
          split         - spezza un file in blocchi
          tail           - visualizza la parte finale di un file
          touch      - cambia la data di un file; crea un file vuoto
          wc           - riporta il numero di caratteri, parole e righe di un file

  8. Come faccio a lanciare un comando, ad eseguire un programma? (la variabile PATH)
    Per chiedere al sistema di eseguire un comando/programma è generalmente sufficiente digitarne il nome. Il sistema però, per poter eseguire il comando, deve conoscere esattamente in quale directory si trova il file eseguibile corrispondente. Per evitare che l'utente debba digitare il nome di ciascun comando completo del percorso (path), il sistema utilizza la variabile d'ambiente PATH contenente l'elenco delle directory nelle quali si trovano la maggior parte dei comandi. Questa variabile viene impostata dall'amministratore di sistema e contiene l'elenco dei percorsi di ricerca comuni a tutti gli utenti. Il valore della variabile PATH può essere visualizzato con il comando:

          printenv PATH

    Generalmente nell'elenco dei percorsi di ricerca sono sempre comprese alcune directory standard, quali:

          /usr/local/bin:/bin:/usr/bin:.

    Le directory sono separate dal carratere ":"; il carattere "." indica la la directory corrente, ovvero quella sulla quale ci si trova posizionati.
    Quando l'utente digita il nome di un comando senza specificarne il percorso, il sistema cerca il comando nelle directory indicate dalla variabile PATH. Nel caso dell'esempio precedente, cercherà nelle directory /usr/local/bin, /bin, /usr/bin e nella directory corrente. Se il file da eseguire si trova in una di queste directory, il comando verrà eseguito, altrimenti il sistema risponderà con un messaggio del tipo "comando non trovato". Questo non significa necessariamente che il comando/programma non sia presente sul sistema, ma solamente che non si trova in nessuno dei percorsi di ricerca indicati dal PATH.
    L'utente può modificare il valore della variabile PATH; di regola dovrebbe limitarsi ad aggiungere nuovi percorsi a quelli già impostati dall'amministratore. Se ad esempio l'utente vuole accedere ai comandi contenuti nella directory ~/myadir digitandone solo il nome senza percorso , dovrà aggiungere la directory ~/myadir al PATH. Per fare ciò, potrà utilizzare i comandi:

          setenv PATH "${PATH}:~/mydir"        (con la shell tcsh)
          export PATH="${PATH}:~/mydir"       (con la shell bash)

    I comandi hanno validità soltanto nella sessione di lavoro, o più precisamente nella shell nella quale sono stati digitati. Per renderli definitivi è sufficiente aggiungerli in fondo al proprio script di login: file ~/.cshrc o ~/.login per la shell tcsh, file ~/.profile per la shell bash. Questi script vengono eseguiti ad ogni login e le impostazioni in essi contenute restano valide per tutta la sessione di lavoro.

  9. Quali sono le aree disco a disposizione degli utenti?
    Ogni utente dei server unix dipartimentali dispone dei seguenti spazi su disco:

    • la home-directory, ovvero la directory personale sulla quale l'utente si trova automaticamente posizionato al login;
    • la directory /tmp, uno spazio aperto in scrittura a tutti gli utenti, utile per poggiare temporaneamente dati ingombranti. Questa area disco viene automaticamente cancellata ad ogni reboot di sistema;
    • un'area ftp, utilizzabile per rendere disponibili file personali sull'anonymous FTP server dipartimentale (vedere in proposito "Anonymous FTP"):
    • i docenti del dipartimento possono inoltre disporre di un'area web personale, da utilizzare per file e dati da pubblicare sul web server dipartimentale (vedere in proposito "Attivazione di una pagina web personale").

    Vedi anche le informazioni alla pagina "Spazio disco a disposizione degli utenti dei server dipartimentali"

  10. Come faccio a sapere quanto spazio disco sto occupando e qual'è la mia quota disco? (comandi du e quota)
    Innanzitutto è utile premettere che su un sistema multitasking e multiutente, le risorse sono condivise ed è quindi molto importante utilizzarle in maniera oculata, evitando inutili sprechi di spazio disco, di tempo di CPU, di utilizzo dei servizi di stampa, etc.
    Sui sistemi sono generalmente disponibili diversi comandi ed utility che consentono di controllare lo spazio disco occupato, di comprimere file e di archiviare in un unico file una serie di file o di directory.
    I comandi che permettono di controllare lo spazio disco occupato da una directory ed i limiti di quota disco definiti dall'amministratore di sistema per un'utenza sono du (disk usage) e quota.

    du -k nome-dir
    consente di sapere quanto spazio su disco è occupato dai file contenuti nella directory nome-dir e nelle sue sottodirectory. Con l'opzione -k lo spazio disco è misurato in Kbyte, ovvero in blocchi da 1024 byte. Con l'opzione -s (summarize) du riporta solo il totale dello spazio occupato dalla directory nome-dir e dalle sue sottodirectory, senza indicare lo spazio occupato da ciascuna sottodirectory. Utilizzato senza argomenti du riporta lo spazio disco occupato dalla directory corrente.
     
    quota
    permette ad un utente di conoscere la propria quota disco (spazio massimo disponibile e spazio effettivamente utilizzato). Lo spazio disco è misurato in Kbyte. L'output del comando, appare come nel seguente esempio:

    Disk quotas for user rossi (uid 111):
    Filesystem    blocks      quota        limit         grace    files    quota    limit    grace
    /dev/sda1     20590     150000     160000                 635     2500    2600

    Nell'esempio, l'utente rossi sta occupando 20590 Kb di spazio disco sul filesystem /dev/sda1, contenente le home-dir degli utenti. L'amministratore del sistema ha definito un soft limit, pari a circa 150 Mbyte, ed una hard limit, pari a circa 160 Mbyte, per la quota disco di rossirossi   ha 635 file. Per il numero di file, il soft limit assegnato è pari a 2500, l'hard limit è pari a 2600. Ogni utente può superare il proprio soft limit per un periodo di 7 giorni (grace time - tempo di "cortesia"-). Se il soft limit è stato superato, nel campo grace viene indicato il numero di giorni per i quali è ancora consentito lo "sforamento" di quota. Allo scadere del grace time, l'utente, se ancora non è rientrato "in quota", non potrà fare altro che liberare spazio disco cancellando file, ogni altra operazione gli sarà inibita.
    Gli utenti che per il proprio lavoro di ricerca/studio necessitano di una quota disco maggiore di quella assegnata, possono chiedere un aumento inviando un mail a root@mat.uniroma1.it

  11. Come faccio a comprimere un file, in modo che occupi meno spazio su disco? (comandi gzip, zip e compress)
    Su un sistema Unix/Linux sono generalmente disponibili vari comandi per la compressione. I più comuni sono: gzip/gunzip, zip/unzip compress/uncompress. Il loro utilizzo è molto semplice. Ad esempio, per comprimere il file miofile.exe utilizzando l'utility gzip, si dovrà digitare il comando:

          gzip miofile.exe

    Nell'esempio, il file originale miofile.exe verrà sostituito dal file compresso miofile.exe.gz con lo stesso nome del file originale, ma con il suffisso .gz. Viceversa il comando:

          gunzip miofile.exe.gz

    sostituirà il file compresso miofile.exe.gz con il file originale non compresso miofile.exe.
    I comandi compress/uncompress e zip/unzip funzionano nello stesso modo, ma invece del suffisso .gz, utilizzano rispettivamente i suffissi .Z e .zip.

  12. Come faccio ad archiviare un intero albero di directory in un unico file? (comandi tar e zip)
    Le utility di archiviazione consentono di "impacchettare" in un unico file, che eventualmente può essere compresso, più file e directory, conservando tutte le informazioni (proprietario, permessi, data) e la struttura delle directory. Da notare che i files e le directory archiviati non vengono rimossi automaticamente dalle utility di archiviazione, ma andranno eventualmente cancellati utilizzando gli appositi comandi rm e/o rmdir.
    L'utility di archiviazione più utilizzata in ambiente unix è tar (Tape ARchiver). Nella forma più semplice, la sintassi è la seguente:

          per generare un archivio compresso:
          tar  czvf  archivio.tgz   file1 file2 ... fileN dir1 dir2 dirM

          per vedere l'elenco dei file contenuti nell'archivio compresso archivio.tgz:
          tar  tzvf  archvio.tgz

          per estrarre i file archiviati e ripristinarli nella directory corrente:
          tar  xzvf  archvio.tgz

    dove archivio.tgz è il nome del file archivio (tarfile) compresso che conterrà tutti i file e le directory indicati da file1, file2 ...., dir1, dir2 ...., mentre le chiavi c, z, v, f, t, x hanno il seguente significato:
          c    crea l'archivio
          z    filtra l'archivio con gzip
          v    verbose
          f     per specificare il nome del file archivio
          t     type
          x    extract

    Un archvio compresso ha generalmente estensione .tgz. Un archivio non compresso (generato senza l'opzione z) ha generalmente estensione .tar., in questo caso il file archivio potrà essere compresso successivamente utilizzando, ad esempio, il comando gzip. Nel seguente esempio la directory miadir, con le sue sottodirectory, viene "impacchettata" nell'archivio compresso miadir.tgz:

          tar  czvf  miadir.tgz  miadir

    A questo punto, si potrà cancellare l'intera directory miadir, utilizzando ad esempio il comando "rm -r miadir". La directory potrà essere ripristinata, quando necessario, con il comando:

          tar  xzvf  miadir.tgz

    Un altro comando per la compressione e l'archiviazione di file, generalmente disponibile sui sistemi unix, è zip, compatibile con le utility WINZIP e PKZIP utilizzate sui sistemi MS-Windows.
    Per "impacchettare" la directory miadir dell'esempio precedente, e tutte le sue sottodirectory, nell'archivio compresso miadir.zip, si dovrà usare il comando:

          zip  -r  miadir.zip  miadir

    Anche in questo caso, i file e le directory archiviate non vengono rimosse dal comando di archiviazione, ma dovranno essere cancellate con i comandi rm e/o rmdir. Il comando che consente di "spacchettare" l'archivio compresso miadir.zip e ripristinare i file in esso contenuti, è

          unzip  miadir.zip

© Università degli Studi di Roma "La Sapienza" - Piazzale Aldo Moro 5, 00185 Roma