Shells and Commands - PowerPoint PPT Presentation

1 / 23
About This Presentation
Title:

Shells and Commands

Description:

Shells and Commands Emanuele Leonardi Le shell Una shell un programma di interfaccia tra lo utente e il sistema operativo. L interazione mediata da comandi ... – PowerPoint PPT presentation

Number of Views:92
Avg rating:3.0/5.0
Slides: 24
Provided by: Emanuele85
Category:

less

Transcript and Presenter's Notes

Title: Shells and Commands


1
Shells and Commands
  • Emanuele Leonardi

2
Le shell
  • Una shell è un programma di interfaccia tra lo
    utente e il sistema operativo.
  • Linterazione è mediata da comandi che possono
    essere dati o in maniera interattiva o
    raggruppati in un file di testo, detto script, ed
    eseguiti come un singolo programma.
  • Esistono molte shell che però si riconducono a 3
    famiglie principali
  • Bourne shell sh, bash
  • C shell csh, tcsh
  • Korn shell ksh, zsh
  • Ogni famiglia è omogenea a livello di script
    (salvo poche eccezioni) ma cambiano le
    possibilità di editing dei comandi interattivi
    (richiamo dei comandi precedenti, completamento
    automatico dei nomi, etc.).

3
man
  • man mostra una pagina di documentazione su un
    comando Unix.
  • In VMS help
  • Uso man comando
  • Esempio gt man man
  • E se non conosco comando ?
  • gt man -k keyword
  • Esempio voglio cambiare la mia password, che
    comando devo usare?
  • gt man -k password
  • chpasswd (8) - update password file in batch
  • passwd (1) - update a users password
  • userpasswd (1) - a graphical tool to change
    password
  • N.B. di solito in fondo alla pagina man esiste la
    sezione SEE ALSO con una lista di comandi
    correlati.

4
ls
  • ls mostra la lista dei file in una directory.
  • In VMS dir
  • Uso ls directory
  • Default directory corrente.
  • Esempio
  • gt ls /usr/local/doc
  • mtv.html mysql uushred
  • xanim.doc
  • Lopzione -l mostra le caratteristiche (tipo,
  • dimensione, data di modifica, ecc.) dei file
  • gt ls -l /usr/local/doc
  • total 64
  • -rwxr-xr-x 1 root root 22629 Aug 30 1997 mtv.html
  • drwxr-xr-x 4 root root 1024 Sep 15 1997 mysql
  • drwxr-xr-x 2 root root 1024 Jul 14 1997 uushred
  • -rw-r--r-- 1 root root 37481 Jan 26 1997
    xanim.doc

5
cd / pwd
  • cd cambia la directory di lavoro.
  • In VMS set def
  • Uso cd directory
  • Default user home directory.
  • Directory particolari
  • User home directory (cd cd)
  • / Root directory del nodo
  • . Directory corrente
  • .. Directory madre della directory corrente
  • Per sapere in che directory ci si trova pwd
  • gt cd
  • gt pwd
  • /mnt/sda6/home/leonardi

6
cat / more / less
  • cat visualizza uno o più file di testo.
  • In VMS type
  • Uso cat file1 file2 file3...
  • I file vengono mostrati sequenzialmente. Utile
    anche per fare il merging di più file.
  • Esempio
  • gt cat list1.dat list2.data gt listona.dat
  • more e less aggiungono a cat funzioni di
    paginazione (stile type /page in VMS ma con più
    possibilità) e ricerca.
  • Tasti utili
  • ltReturngt Avanza di una riga
  • ltSpaziogt Avanza di una pagina
  • lt?gt o lthgt Mostra i comandi disponibili

7
ln
  • ln crea un link (puntatore) a un file
    pre-esistente.
  • Può funzionare in modalità hard (se il file
    originale viene cancellato il link ne conserva
    una copia) o soft (se il file originale viene
    cancellato il link rimane ma dà un errore se si
    prova ad usarlo).
  • Uso ln -s file link
  • Se si usa il parametro -s il link è soft,
    altrimenti è hard.
  • Esempio
  • gt ln -s /opt/lsf /bin/lsf
  • gt ls -l /bin
  • lrwxr-xr-x 1 leonardi ec 28 lsf -gt /opt/lsf

8
who / which / whereis
  • who mostra gli user loggati sulla macchina.
  • In VMS show user
  • Esempio
  • gt who
  • root ttyp1 Nov 1 1739 (0.0)
  • leonardi ttyp6 Nov 1 1753 (echosl)
  • which mostra dove si trova un comando.
  • Esempio
  • gt which gnuchess
  • /usr/bin/gnuchess
  • whereis mostra anche la posizione del file man
    corrispondente.
  • Esempio
  • gt whereis ls
  • ls /bin/ls /usr/man/man1/ls.1

9
uname
  • uname mostra le caratteristiche del computer che
    si sta usando.
  • Opzioni
  • -n nome del nodo
  • -m architettura
  • -s sistema operativo (default)
  • -r release
  • -a tutto
  • Esempi
  • enderleonardigt uname
  • Linux
  • enderleonardigt uname -snrm
  • Linux ender 2.0.34 i586
  • enderleonardigt uname -a
  • Linux ender 2.0.34 i586
  • uname è molto utile negli script!

10
ps / kill
  • ps mostra i processi attivi sulla macchina.
  • Di default mostra solo i processi associati alla
    sessione corrente.
  • Per vedere tutti i processi sulla macchina usare
    ps -ef (HP, DEC, Solaris) o ps aux (SunOS,
    Linux, DEC).
  • gt ps -ef
  • UID PID PPID STIME TTY S TIME COMM
  • root 7400 7389 160725 ttyp5 S 000.32 tcsh
  • kill manda un segnale ad un processo.
  • Default manda al processo il segnale TERM(inate)
    invitandolo a terminare.
  • gt kill 7400 (invita 7400 a terminare)
  • Se il processo 7400 è ancora presente provare
    con
  • gt kill -9 7400 (uccidi 7400)

11
Variabili di Ambiente
  • Le Variabili di Ambiente (Environment Variables)
    permettono di accedere ed eventualmente
    modificare alcuni parametri che regolano il
    comportamento di un processo Unix.
  • Alcune variabili utili sono
  • TERM tipo di terminale usato (xterm,vt100,)
  • SHELL tipo di shell in uso (sh,csh,ksh,)
  • USER nome dellaccount in uso
  • HOSTNAME nome dellhost su cui si sta lavorando
  • DISPLAY schermo su cui vengono mandate le
    finestre grafiche
  • PATH lista delle directory in cui cercare i
    comandi da eseguire
  • MANPATH lista delle directory in cui cercare i
    file di documentazione usati da man

12
printenv / setenv
  • printenv mostra una o più delle variabili di
    ambiente definite nel processo corrente.
  • Di default mostra la lista completa delle
    variabili.
  • gt printenv TERM
  • xterm
  • Per cambiare il valore di una variabile di
    ambiente il comando cambia a seconda della shell
    usata.
  • Per csh, tcsh
  • gt setenv DISPLAY myxterm0
  • Per sh, bash, ksh, zsh
  • gt DISPLAYmyxterm0
  • gt export DISPLAY
  • N.B. tutte le variabili di ambiente di un
    processo vengono ereditate dai processi che esso
    genera.

13
alias
  • Un alias è un nuovo comando definito in funzione
    dei comandi di sistema.
  • Viene creato con
  • gt alias llls -l sh, bash, ksh, zsh
  • gt alias ll ls -l csh, tcsh
  • Una volta creato, un alias può essere utilizzato
    come qualsiasi altro comando di sistema.
  • gt ll /usr/local/doc
  • total 64
  • -rwxr-xr-x 1 root root 22629 Aug 30 1997 mtv.html
  • drwxr-xr-x 4 root root 1024 Sep 15 1997 mysql
  • drwxr-xr-x 2 root root 1024 Jul 14 1997 uushred
  • -rw-r--r-- 1 root root 37481 Jan 26 1997
    xanim.doc
  • Per eliminare un alias scomodo esiste il
    comando unalias.
  • gt unalias ll

14
Ridirezione dellI/O
  • Di default linput e loutput di un comando sono
    collegati al terminale su cui gira la shell.
  • gt myMC.exe
  • How many events ? 100
  • 100 events produced. End
  • gt
  • Tutte le shell permettono però di ridirigere
    lI/O su un file usando gt per loutput e lt per
    linput.
  • gt echo 100 gt events.dat
  • gt myMC.exe lt events.dat gt myMC.log
  • gt cat myMC.log
  • How many events ?
  • 100 events produced. End
  • gt
  • LI/O può anche essere ridiretto su una pipe.
  • gt echo 100 myMC.exe gt myMC.log

15
Controllo dei Processi
  • I comandi possono essere eseguiti in background,
    ossia senza tenere bloccata la shell mentre il
    comando viene eseguito. Per fare questo è
    sufficiente aggiungere in fondo alla linea.
  • Il comando jobs mostra una lista dei processi
    posti in background dalla shell corrente.
  • Un job in background può essere riportato in
    foreground (ossia in modalità interattiva) con il
    comando fg.
  • Un job interattivo può essere mandato in
    background sospendendolo e dando il comando bg
    (si veda lesempio).

16
Controllo dei processi esempio
  • gt myMC.exe ltevents.dat gtmyMC.log
  • 1 1834
  • gt
  • (grazie al alla fine il comando viene eseguito
    in background. Il prompt ricompare
    immediatamente)
  • gt jobs
  • 1 Running myMC.exe ltevents.dat gtmyMC.log
  • gt
  • (il comando jobs mostra che il processo sta
    effettivamente girando in background)
  • gt fg 1
  • myMC.exe ltevents.dat gtmyMC.log
  • (con fg il job viene riportato in foreground. Il
    prompt ricomparirà solo alla fine dellesecuzione
    del comando)
  • Z
  • Suspended
  • gt bg
  • 1 myMC.exe ltevents.dat gtmyMC.log
  • (il Z, i.e. CTRL-Z, sospende il job in
    foreground e mostra il prompt. Il comando bg
    mette in background il job sospeso)

17
Script di login
  • Quando si apre una nuova sessione vengono
    eseguiti degli script standard che servono per
    configurare il proprio ambiente di lavoro. Questi
    script si trovano nella propria home directory e
    contengono di solito
  • Settaggi di variabili di ambiente
  • Definizioni di alias
  • Configurazione del comportamento della shell
  • Al momento del login viene eseguito
  • .profile sh, ksh, bash
  • .zprofile zsh
  • .login csh, tcsh
  • Quando parte una shell (anche non di login)
  • .bashrc bash
  • .zshrc zsh
  • .cshrc csh (e tcsh se non esiste .tcshrc)
  • .tcshrc tcsh
  • N.B. al login viene prima eseguito il file rc e
    poi quello di login. P.es. prima .cshrc e poi
    .login

18
Esempio .login
  • Esempio di file .login
  • Le righe che iniziano con sono commenti
  • Configura le variabili di ambiente
  • setenv PATH ./bin/usr/bin/cern/bin
  • setenv MANPATH /usr/man/usr/local/man
  • setenv EDITOR emacs
  • Scegli la stampante da usare in funzione
  • della macchina su cui ci troviamo
  • switch (uname -n)
  • case hpl3rom1
  • setenv PRINTER lwl3ps
  • breaksw
  • case trantor
  • setenv PRINTER babarlj
  • breaksw
  • default
  • setenv PRINTER siclas

19
Esempio .cshrc
  • Esempio di file .cshrc
  • Configura il comportamento della shell
  • set history20
  • set savehist20
  • set promptEmanuelegt
  • Definisci gli alias utili (e nostalgici! -)
  • alias dir ls -Al
  • alias up cd .. pwd
  • alias down cd \! pwd
  • Esegui altri script di inizializzazione
  • switch (uname -n)
  • case hpl3rom1
  • source /l3/script/l3init.csh
  • breaksw
  • case trantor
  • source \

20
Shell Script un Esempio (1)
Problema rinominare tutti gli eseguibili della
directory corrente.Soluzione uso del costrutto
di iterazione.
!/bin/tcsh this is a comment foreach i ()
if( -x i ) then echo "moving i" mv i
i.old endif end
!/bin/sh this too for i in do if -x i
then echo "moving i" mv i i.old
fi done
  • nelle shell moderne alcuni comandi sono built-in
    command (if,foreach,echo), altri sono eseguibili
    esterni (mv)
  • i built-in command e le sintassi sono molto
    simili tra le varie shell
  • si possono usare potenti costrutti di iterazione
  • attenzione alla differenza tra ' e " riguardo
    all'espansione delle variabili di shell

21
Shell Script un Esempio (2)
Problema esecuzione condizionata
multipla.Soluzione uso del costrutto
switch/case.
!/bin/csh ... switch ("1") case start echo
"let's do it." breaksw case stop echo
stop it!" breaksw default echo "bad
syntax!!" breaksw endsw ...
!/bin/sh ... case "1" in start) echo
"let's do it. stop) echo stop
it!" ) echo "bad syntax!!" esac ...
Esempio gt myscript start lets do it. gt myscript
stop stop it! gt myscript pippo bad syntax!!
22
find
find permette la cercare file in un file system
in base alle loro proprietà (nome, tipo,
attributi, ownership, ...). Cerca nella
directory corrente (.) e in tutte le sue
sottodirectory un file di nome simula.dat. gt
find . -name simula.dat -print ./montecarlo/data/s
imula.dat ./olddata/simula.dat Cerca nellalbero
di directory /usr tutti i file con estensione
.dat. gt find /usr -name \.dat -print /usr/games/d
oom.dat /usr/lib/netscape/mime.dat Il backslash
(\) è necessarioper impedire che la shell
interpreti i caratteri spaciali (in questo caso
). N.B. Il flag -print in alcuni sistemi è il
default ma in altri è necessario.
23
Shell Script un Esempio (3)
Problema rinominare tutti gli eseguibili di un
albero di directory. Soluzione uso del comando
find
  • Mettendo insieme i precedenti esempi
  • !/bin/sh
  • BINLISTfind 1 -perm 0111 -and ! -type d
  • for i in BINLIST do
  • mv i i.old
  • done
  • dove la condizione di ricerca e l'AND (-and) tra
    la presenza dell' execute bit (-perm 0111) e dal
    fatto di non essere una directory (! -type d).
  • In alternativa si può usare il flag -exec che
    permette a find di eseguire un comando sui file
    trovati
  • gt cd somewhere
  • gt find . -perm 0111 -and ! -type d -exec mv
    "".old \
  • il sarà sostituito con ciascuno dei file
    individuati da find.
  • il \ identifica la fine del comando introdotto
    da -exec.
  • attenzione alle che proteggono nel nome
    composto
Write a Comment
User Comments (0)
About PowerShow.com