SHELL GNU/Linux Bash Obiettivi : Gestire i permessi sui file Conoscere e configurare il proprio ambiente bash Editare testi Capire ed utilizzare i redirezionamenti Kernel speaks: dmesg Init e Runlevels
Attributi e permessi sui file Linux è un sistema multiutente che offre la possibilità di associare permessi di azioni (lettura, scrittura, esecuzione) a singoli file e/o directory. Quando vengono applicati questi permessi ad un file o ad una directory, vengono applicati su tre livelli distinti: utente proprietario gruppo proprietario il resto degli utenti
Attributi e permessi sui file I permessi di azione vengono identificati nel seguente modo: lettura: definito dal flag r che tradotto in numero assume il valore 4 scrittura: definito dal flag w che tradotto in numero assume il valore 2 esecuzione: definito dal flag x che tradotto in numero assume il valore 1 Output di ls l /etc/passwd : rw r r 1 root root 77266 Dec 13 17:18 /etc/passwd
Generazione di file e directory: nuovi file rw rw rw forma ottale 666 nuove dir rwxrwxrwx forma ottale 777... e la sicurezza?: umask! umask specifica una 'maschera' di sottrazione di permessi: per default 0022 $ umask[invio] 0022 Attributi e permessi sui file: umask $ umask S[Invio] u=rwx,g=rx,o=rx
dopo la definizione della 'maschera': $ mkdir prova $ ls l... Attributi e permessi sui file: umask per le DIR drwxr xr x 2 fulvio fulvio 18 2007 04 26 16:30 prova
dopo la definizione della 'maschera': $ touch prova $ ls l Attributi e permessi sui file: umask per i FILE rw r r 1 fulvio fulvio 0 2007 04 26 16:30 prova
La maschera di default riguarda: utente proprietario gruppo proprietario other Attributi e permessi sui file: ACL Per mezzo delle ACL possiamo definire una ulteriore articolazione per: utenti particolari gruppi particolari
Attributi e permessi sui file: ACL rw rw r + 1 tizio tizio 0 2007 03 18 15:36 primo leggere la struttura ACL con getfacl modificare la struttura ACL con setfacl
Attributi e permessi sui file: variazioni Permessi sui file chown [ R][utente]:[gruppo] file Assegna un nuovo utente proprietario chgrp [ R][gruppo] file Assegna un nuovo gruppo proprietario chmod [ R] [modo] file Modifica i permessi sul file. chmod ugo+/ rwx file chmod 652 file (u=rw g=r x o= w )
Bash è un interprete di linguaggio di comandi sh compatibile che esegue comandi letti dallo standard input o da un file; Manual page bash(1) line 2973/2997 (END) Principali file di configurazione: /etc/bashrc contiene gli alias e le funzioni valide per l'intero sistema; /etc/profile contiene le variabili d'ambiente per l'intero sistema e i programmi di avvio; $HOME/.bashrc contiene gli alias e le funzioni dell'utente; $HOME/.bash_profile contiene le variabili d'ambiente e i programmi di avvio dell'utente L'ambiente bash
... PICCOLI SUGGERIMENTI... Il tasto TAB che viene utilizzato per il completamento di comandi è infatti chiamato 'tabcomplete' Ogni comando lanciato viene memorizzato in una sequenza storica: digitanto il comando history vengono visualizzati tutti i comandi E' possibile creare alias per comandi che vengono usati spesso (alias "alias"= "comando"); per farlo basta editare il file $HOME/.bashrc L'ambiente bash Al prompt è possibile risalire ai comandi inseriti precedentemente usando la freccia direzionale sù
Editare testi Per GNU/Linux TUTTO é FILE TUTTI (o quasi) i file sono 'SEMPLICE' TESTO Nani e giganti per l'editing dei file con graduazioni intermedie... per tutti i gusti. DA RIGA DI COMANDO: nano, joe...vi... emacs IN MODALITÀ GRAFICA: gedit, kedit... xemacs
Ridirezione e Piping un programma può ricevere dati da qualcosa di diverso dalla tastiera o inviare un output a qualcosa di diverso dal video
3 file descrittori STDIN STanDard INput STDOUT STanDard OUTput STDERR STanDard ERRor
Operatori di Ridirezionamento e Pipe com > file ridirige l'output (STDOUT) di com su file, cancellandone il precedente contenuto com >> file com 2> file appende l'output (STDOUT) di com in coda a file (conserva il precedente contenuto) ridirige su file i messaggi di errore. com < file utilizza il contenuto di file come input (STDIN) per com com com2 l'operatore (PIPE) permette di utilizzare l'output di com come input di com2
Ridirezione $ echo ciao mondo >messaggio.txt $ echo che tempi >messaggio.txt $ cat messaggio.txt che tempi $ echo ciao mondo >messaggio.txt $ echo che tempi >>messaggio.txt $ cat messaggio.txt ciao mondo che tempi
Ridirezione il risultato di ls puo' essere reindirizzato nel testo di un file $ ls >pippo il risultato di ls puo' essere reindirizzato al device che rappresenta la stampante $ ls >/dev/printer un metodo equivalente ma piu' corretto e senza particolari problemi di permessi usa l'operatore PIPE $ ls lp
Pipe PIPE pipeline tubo condotto tubatura $ ls -al I more l'output del comando ls viene inviato non direttamente allo schermo ma invece viene inviato ad esso 'attraverso' il comando more che lo visualizza una schermata alla volta, offre la possibilità di scorrerlo all'indietro, etc.
I messaggi del kernel Quando il kernel entra in azione e inizia a caricarsi procede con il riconoscimento e l'inizializzazione dell'hardware presente. Durante il caricamento presenta a video una serie di informazioni, a volte fin troppo dettagliate, sull'hardware trovato. Per vedere i messaggi del kernel basta digitare il comando dmesg, che visualizza esattamente quanto viene visualizzato dal kernel durante il boot Può essere opportuno... dmesg grep /dev/...
dmesg > log_boot Redireziona l'output del comando dmesg nel file log_boot per una maggior facilità di letture e debugging di un'eventuale problema ls -l /var/log/ Lista dei log I messaggi del kernel cat /var/log/messages Visualizza il contenuto del log messages lspci (lsusb) Visualizza l'elenco di tutte le periferiche e i BUS pci (usb)
I messaggi del kernel E sempre a proposito di informazioni sull'hw: # cat /proc/cpuinfo Informazioni sulla CPU # cat /proc/partitions Informazioni su dischi e partizioni...
Init e Runlevels Init è il padre di tutti i processi, il suo ruolo principale consiste nel gestire il lancio di tutti i programmi necessari per rendere il sistema attivo creare i processi a partire da uno script in /etc/inittab. Nell'inittab vengono definite le directory con gli script di avvio per i diversi runlevel (stati del sistema, in cui possono girare determinati programmi) e il runlevel di default.
Init e Runlevels Il primo script lanciato da inittab esegue varie operazioni tra cui: Impostazioni di alcuni path generali nella variabile $PATH; Configurazione dell'ambiente di rete; Avvio swap per la memoria virtuale; Impostazione del nome dell'host; Check del filesystem root; Check delle quote di spazio assegnate agli utenti, se previste; Mount del filesystem root in modalità scrittura/lettura; Preparazione del sistema per caricamento dei moduli; Check delle dipendenze dei moduli; Check di tutti i filesystem ed eventuali riparazioni; Mount di tutti i filesystem; Caricamento Moduli; Attivazione dei servizi del runlevel.
Init e Runlevels Linux utilizza il metodo Unix System V, che si basa su differenti runlevel, astrazioni software per indicare diversi stati della macchina in cui possono girare diversi programmi. In genere su Linux sono utilizzati i seguenti livelli: Runlevel0 Runlevel1 Runlevel2 Runlevel3 Runlevel4 Runlevel5 Runlevel6
Init e Runlevels Runlevel 0 : /etc/rc0.d avvia la sequenza di arresto del sistema (shutdown) Runlevel 1: /etc/rc1.d rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato. Runlevel 2: /etc/rc2.d rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing (client-server o peer-topeer).
Init e Runlevels Runlevel 4: /etc/rc4.d dedicato ad usi personali Inutilizzato. Può essere Runlevel 5: /etc/rc5.d E' il runlevel predefinito quando si vuole avviare Linux in modalità grafica Runlevel 6: /etc/rc6.d reboot. Il runlevel 6 è quello di
Init e Runlevels debian gestisce quali processi far partire a seconda del runlevel, andando ad analizzare le singole directory /etc/rc#.d. In queste directory esistono una serie di symlink con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo /etc/init.d/syslog o /etc/init.d/identd. A seconda della directory /etc/rc#.d/ corrispondente al runlevel da caricare fa partire tutti gli script che iniziano con S e fa chiudere tutti quelli che iniziano con K, eseguendoli nell'ordine indicato dal numero presente nei nomi dei file.
Init e Runlevels
Init e Runlevels Gli script che di fatto permettono di gestire l'avvio o lo stop di un servizio sono quindi nella directory /etc/init.d/ e possono essere utilizzati direttamente dall'utente per gestire i singoli processi. Per esempio: /etc/init.d/httpd start fa partire il server Web e /etc/init.d/httpd stop lo fa stoppare. Nel fare queste operazioni va sempre considerato il numero dopo la prima lettera, che determina l'ordine di esecuzione degli script.