GNU/Linux 101 intro to system administration SaLUG! @ Manifatture KNOS 22 Gennaio 2015 This work is licensed under a Creative Commons by-nc-sa 4.0 International License by ALCA Società Cooperativa
About Linux, the Filesystem and the Shell
Shell
Unix ha origine come sistema operativo text-based (dette CLI) e la shell e' stata la sua prima interfaccia utente Una shell e' un'applicazione che accetta ed interpreta comandi testuali
ATTENZIONE La modalita' testuale NON e' una modalita' primitiva o sorpassata soprattutto in ambito server ed embedded dove spesso non sono disponibili interfacce utente di tipo grafico (dette GUI)
Esistono diverse shell, le piu' comuni sono Bash (Bourne Again Shell) Zsh (Z Shell) I sistemi Unix eseguono automaticamente la shell di default dell'utente quanto viene effettuato un login dall'interfaccia testuale
Shell & Shell Scripting Le shell Unix supportano due modalita': Batch o Scripting Interattiva
Read-Eval Loop Nella sua modalita' interattiva, la shell esegue il ciclo: 1. presenta un prompt all'utente (in genere '$' o '#' a seconda del livello di utenza) 2. legge un comando (read) 3. lo esegue (eval) 4. ritorna al passo 1
Radiografia del prompt Il prompt standard presenta alcune informazioni utili sullo stato della shell interattiva in uso:
EX: il prompt e l'inserimento di un comando nella shell bob@lx101:~$ ls... la directory corrente "~" (tilde) rappresenta in modo sintetico la directory home dell'utente (che di default sara' /home/nomeutente)
EX: navigare la shell history La shell interattiva mantiene una lista dei comandi inseriti, e la shell ci consentira': $ history... visualizzare l'intera lista (mediante il comandi history) la navigazione dei comandi della history (mediante i tasti freccia) la ricerca di un comando in history (mediante la combinazione Ctrl-r)
Comandi interni ed esterni I comandi di shell validi si dividono principalmente in: interni I comandi interni sono costituiti da un ridotto set di comandi integrati ed interpretati direttamente dallla shell esterni I comandi esterni sono file eseguibili presenti in uno dei percorsi di ricerca degli eseguibili configurati
Tra i comandi interni troviamo: cd, pwd, echo, source, fg, bg, type,... perche' espongono meccanismi interni alla shell o per questioni di performance.
EX: uso del comando type per verificare se un comando e' interno o esterno $ type...
Environment Un concetto molto importante da conoscere e comprendere e' l'environment: costituito dall'insieme delle variabili d'ambiente Una variabile d'ambiente non e' altro che una stringa a cui viene assegnato un valore.
EX: definire ed esportare una variabile d'ambiente con $ MYVAR=value $ export MYVAR $ echo $MYVAR value export
EX: visualizzare lo stato dell'environment con env Il comando env consente di visualizzare o modificare l'environment $ env...
EX: unset di una variabile d'ambiente Con il comando unset e' possibile rimuovere le variabili d'ambiente $ unset VAR
EX: la variabile d'ambiente PATH La variabile d'ambiente PATH determina quali percorsi (path) saranno utilizzati per la ricerca dei comandi disponibili. $ echo $PATH...
EX: il comando which Mediante il comando which (o anche con type) e' possibile determinare in quale percorso verra' risolto un comando esterno. $ which bash...
EX: ispezionare e manipolare la risoluzione dei comandi esterni Modificare i percorsi di ricerca dei comandi esterni, mediante modifica della variabile d'ambiente PATH e dei comandi echo/which/export per visualizzare e manipolarne lo stato $ echo $PATH... $ which ps /bin/ps $ cp /bin/ps. $ cp /bin/ps myps $ export PATH=$PATH:~ $ which ps /bin/ps $ which myps /home/bob/myps
File di configurazione della shell
Per rendere persistenti le modifiche all'environment e' possibile utilizzare dei file di configurazione. ad esempio per bash (la shell piu' comune): ~/.profilee ~/.bashrc: configurazione utente della shell /etc/profilee /etc/profile.d/*.sh: configurazione globale della shell
Radiografia di un comando Molti comandi accettano un gran numero di opzioni e argomenti Le opzioni spesso possono utilizzare una sintassi breve (un solo carattere) o estesa, e in alcuni casi possono accettare o richiedere un valore
Documentazione dei comandi i comandi man e info danno accesso rispettivamente alle pagine di manuale e di documentazione ipertestuale molti comandi fornisco un output di aiuto con le opzioni -h e/o --help Molti dei pacchetti installati forniscono ulteriore documentazione in /usr/share/doc
Filesystem Hierarchy
I file sono organizzati in una struttura gerarchica ad albero, che ha la sua origine nella directory radice (directory root) determinata dal carattere "/"
ATTENZIONE per separare le directory si utilizza il simbolo "/" e non il backslash ("\") utilizzato dai sistemi Windows
ATTENZIONE al case I filesystem Unix (e Linux non fa eccezione), sono di solito case-sentitive In altre parole: test.txt, TEST.txte Test.txtrappresentano percorsi differenti
File Speciali e File Nascosti "." e ".." sono due file speciali presenti in ogni directory e si riferiscono rispettivamente alla directory corrente (".") e alla directory padre ("..") della directory corrente Inoltre tutti i nomi file che iniziano con "." sono per convenzione considerati file nascosti e non sono visualizzati dal comando ls se non viene specificata l'opzione "-a"
EX: navigare il filesystem con ls, pwd e cd $ pwd... $ ls... $ ls -la... $ cd. $ pwd... $ cd.. $ pwd...
EX: manipolare il filesystem $ mkdir testdir $ cp /etc/profile testdir/ $ cp -rf /etc/profile.d testdir/ $ mv testdir backup $ rmdir backup $ mkdir -p backup/new/empty $ rmdir backup/new/empty $ rm -rf backup rmdir rimuovera' solo le directory vuote l'opzione -rf si traduce come "forzatamente e ricorsivamente" mkdir -p crea le directory parent se non esistono
Path assoluti e relativi
Un path e' la codifica del percorso da seguire per raggiungere un determinato file o directory
i path possono essere assoluti: quando partono dalla directory radice "/" relativi: quando partono dalla directory corrente
Q: il percorso /home/rpl/projects.org e' assoluto o relativo?
Q: il percorso build/run.sh e' assoluto o relativo?
Q: il percorso./build/run.sh e build/run.sh rappresentano lo stesso percorso?
Q: come si interpreta il comando ls../../src/project01/images/
Filename Wildcards
Le shell Unix supportano l'espansione di alcuni caratteri speciali allo scopo di identificare gruppi di file in maniera sintetica:
$ ls *.js '*' verra' espanso con zero o piu' caratteri qualunque
$ ls img-00?.png '?' verra' espanso con un solo carattere qualunque
$ ls img00[1-9].jpg '[1-9]' verra' espanso con i soli caratteri da 1 a 9
Tab Completion
Durante l'uso interattivo le shell Unix supportano l'autocompletamento di comandi e percorsi
EX: completare un nome file mediante Tab $ ls -l /etc/prof<tab>
EX: ricerca di file nel filesystem con find $ find /etc -iname *bash*... $ cp /etc/profile. $ find. -ctime 0 -exec ls -l {} \; l'opzione -iname cerca il pattern seguente in modo case-insensitive l'opzione -exec consente di eseguire un comando su ciascuno dei risultati find supporta molte altre opzioni di ricerca (per utente, per data etc)
EX: archiviare file con tar $ cp -rf /etc/vim./backup-vim-config $ tar czvf backup-vim-config.tar.gz./backup-vim-config... $ tar cjvf backup-vim-config.tar.bz2./backup-vim-config... $ mkdir restore ; cd restore $ tar xvf../backup-vim-config.tar.bz2 mediante il comando tar e' possibile archiviare in un unico file un insieme di file e directory attraverso tool di compressione esterni (come gzip e bzip2) e' possibile ridurre la dimensione del file archivio