Le Shell
La shell e' l'interfaccia utente dei sistemi unix.
Si tratta di un'interfaccia a comandi testuali, un po' come il DOS,
ma molto piu' potente.
Per gli utenti di un sistema unix e' importante conoscere la shell,
anche se oggi molto lavoro viene svolto utilizzando piu' comode
interfacce grafiche, che a loro volta richiamano i comandi della shell.
Il funzionamento di un sistema UNIX dipende in modo critico
dalla shell, dato che tutte le procedure che il sistema usa al suo interno sono
procedure di shell. La shell e' un po' il "collante" di un sistema Linux,
occorre quindi conoscere la shell, anche se in modo non approfondito,
per utilizzare e gestire un sistema UNIX.
Esistono molte shell, le shell disponibili nel sistema sono elencate
nel file /etc/shells e sono files eseguibili che si trovano in genere in /bin.
All'utente viene assegnata al login la shell
associata al suo username nel file /etc/passwd ; l'utente la puo'
cambiare col comando:
chsh
per passare da una shell all'altra, ad esempio alla c shell,
basta eseguirla, e ci si trovera' in un nuovo processo, con la
nuova shell ad interpretare i comandi dati a terminale.
Ad esempio per passare alla csh si scrivera':
/bin/csh
Le principali shell sono:
- sh : la bash shell, una shell semplice, scritta da Steve Bourne per
UNIX system 7, nel 1979;
- csh : la C shell, sviluppata a Berkeley da Bill Joy, per la versione
Berkeley di UNIX, attorno al 1981; questa shell ha una sintassi
simile al C;
- ksh : la korn shell, sviluppata all' AT&T da David Korn, attorno
al 1986, e' un prodotto commerciale, ma se no trovano anche
versioni in libera distribuzione;
- tcsh : un rifacimento della C shell, che corregge alcuni
difetti della C shell;
- bash : la bash shell, simile alla shell sh, ed alla korn,
e' mantenuta dalla FSF
( free software foundation), nell'ambito del
progetto GNU. E' stata scritta da Brian Fox ed e'
disponibile dal 1988. E' la shell di default per linux.
Esiste anche uno standard, che definisce il comportamento della shell,
ed un po' il comportamento dei vari unix:
lo standard POSIX (Portable Operating System Interface).
Il documento IEEE P1003.1 , pubblicato nel 1988,
copre anche le chiamate a routine di sistema; il documento IEEE P1003.2
copre la shell, programmi di utilita' ed in generale l'interfaccia utente
ed e' del 1992. Questi documenti, prodotti dopo anni ed anni di discussione,
consistono di circa 2000 pagine e sono distribuiti dall'IEEE.
Linux e la bash sono aderenti allo standard.
Nel seguito ci concentreremo sulla bash shell; la bash e' molto simile alla sh ed
alla korn shell, mentre la csh ha parecchie differenze sintattiche.
Caratteristiche principali della shell
La shell e' un interprete, legge ed esegue i comandi uno per uno, da terminale.
In alternativa i files possono essere in un file eseguibile,
dato alla shell come un file di input.
Quando l'utente si collega viene creato un processo in cui la shell legge,
interpreta ed esegue i comandi dell'utente, creando, per ognuno di essi
un sottoprocesso. L'utente che scrive comandi
al terminale sta in pratica parlando con un processo di shell.
Ogni file eseguibile puo' essere usato come fosse un comando della shell.
Ad ogni comando sono associati automaticamente 3 descrittori di files, denominati:
- standard input ( stdin : l'input letto dal comando )
- standard output ( stdout : l'output prodotto dal comando )
- standard error ( stderr : ove il comando scrive i messaggi di errore )
In caso si lavori da terminale questi 3 descrittori di file sono tutti
associati al terminale medesimo. Vedremo poi come si possono usare per
scrivere su files o passare dati da un comando all'altro.
Tutti i comandi hanno sintassi del tipo:
nome_comando opzione opzione opzione .. argomento argomento ...
Le opzioni (flags) sono in genere precedute dal segno - oppure -- ed in
certi casi possono essere raggruppate
Ad esempio per vedere quali sono i files che iniziano con a , in
ordine di creazione si puo' fare:
ls -lt a*
Un file eseguibile, che inizia con:
#!/bin/bash
viene considerato dal sistema una procedura di shell;
eseguendo il file, ad esempio scrivendo il suo nome a terminale,
verra' creato un processo in cui
una shell esegue la procedura contenuta nel file.
La shell stessa puo' essere usata come comando di shell, e chiamandola le si
possono dare opzioni che ne modificano il comportamento.
Quando un processo di shell parte esegue i comandi (di shell)
contenti in alcuni files di inizializzazione , questi files possono essere
utilizzati per personalizzare la shell; vengono eseguiti diversi
files a seconda di come viene chiamata la shell ( di che tipo e' la shell).
questo comportamento puo' essere controllato chiamando la shell con le
opzioni:
--noprofile --norc --rcfile nome_file_di_inizializzazione
La shell puo' essere di 3 tipi: :
- interattiva, cioe' usata da un terminale ;
esegue, nell'ordine, i files (~ indica il direttorio principale dell'utente):
- /etc/profile
- il primo che trova fra: ~/.bash_profile ~/.bash_login, ~/.profile )
- ~/.bash_logout e' eseguito alla fine della shell
- interattiva di login, ad esempio quando ci si collega ad una macchina via rete,
oppure se si chiama con argomenti: - oppure --login )
esegue all'inizio :
- non interattiva ( shell che esegue una procedura )
esegue all'inizio il file definito dalla variabile:
- se la bash viene chiamata con sh fa finta di essere una bourne shell
ed esegue all'inizio:
- /etc/profile
- ~/.profile
- il file definito da: $ENV
- se e' chiamata come sh interattiva esegue solo il file definito
dalla variabile:
Environment:
l'ambiente in cui opera la shell e' definito da
una serie di variabili, (variabili di environment) il simbolo $
sostituisce al nome della variabile il suo valore;
ad esempio $PATH e' la lista di directory in cui vengono cercati
gli eseguibili, $PS1 il prompt della shell.
Con il comando export si rendono le variabili di
environment accessibili ai sottoprocessi.
Elenco dei principali comandi di shell
Elementi generali
- exit : esce dalla shell
- exec comando : esegue il comando al posto della shell
- history : mostri gli ultimi comandi eseguiti
(sono memorizzati nel file: ~/.bash_history)
- Cntrl C : interrompe un comando
- Cntrl D : end of file
- le frecce richiamano i comandi precedenti
- Tab completa un nome di file o un comando
- Cntrl S e Cntrl Q controllano lo scrolling
- Cntrl E porta il cursore a fine linea
- ; separa piu' comandi dati sulla stessa linea
- # indica commento (che va dal carattere # a fine linea)
- \ e' usato come escape caracter
( il carattere che segue non e' interpretato dalla shell)
- . comando : esegue il comando nell'ambito della shell corrente
- comando & : esegue il comando in background
- ` comando ` : e' l'output del comando (command substitution)
- = : assegna una variabile
- $ : valuta una variabile
- ${ } : valuta una variabile facendo sostituzioni
- $(( )) : valuta un'espressione aritmetica
- ( ) : racchiudono comandi eseguiti in una sub-shell
- [[ ]] effettua un test
- [ ] racchiude elementi di un test
- { comando; comando ; } ragguppa comandi
(le parentesi vanno separate dal resto da spazi bianchi)
- Redirection:
- comando > file : lo standard output del comando finisce nel file
- comando >> file: lo standard output del comando viene aggiunto
in coda al file
- comando < file : lo standard input del comando e' il file
- comando | comando : i comandi sono concatenati, lo standard output del
primo e' lo standard input del secondo.
- comando &> file : redirige sia stdin che stdout
- Esecuzione condizionale: i comandi restituiscono un return code,
0 e' vero, !=0 falso ( il contrario del C) .
- comando1 && comando2 : il comando 2 viene eseguito se comando1 riesce
- comando1 || comando2 : comando 2 viene eseguito se comando1 fallisce
- Wild cards :
- ~ e' il direttorio principale dell'utente (home)
- * e' ogni carattere
- ? un carattere qualunque
- [a-d,f] range di caratteri: a,b,c,d,f
Ottenere informazioni
- help :informazioni generali sulla shell
- man: informazioni
- man comando : informazioni sul comando
- man -k keyword :informazioni sui comandi relativi alla keyword
- apropos keyword :informazioni sui comandi relativi alla keyword
- man -t comando > file.ps : produce un postscript con le informazioni
- whereis comando : dove e' l'eseguibile il source ed il man del comando
- locate pattern : dove sono i files relativi al pattern
- which comando : dove e' l'eseguibile
- ascii : tabella codici ascii
Listare i files
- ls a* : mostra i files che iniziano con a
- ls [a-c]* : i files che iniziano con a,b oppure c
- ls a*[a7k] : iniziano con a e finiscono con a,7 oppure k
- ls a?c : file con a, una lettera, poi c
- ls [!a] : files che NON iniziano con a
- ls {a,b,c}d : questo e' : ad,bd,cd
- tree -d : mostra albero delle directory
- stat nomefile : mostra tutte le caratteristiche di un file
o di un link
- lstat , oppure stat -l : fa riferimento al file vero,
non al link
- lsof : mostra tutti i files aperti nel sistema
- fuser nomefile : mostra chi sta usando un file
- :
- :
- :
- :
Spostarsi nel file system
- tree -d : mostra albero delle directory
- cd direttorio : : si va nel direttorio
- cd .. : :al parent directory
- cd ~ : : all'home directory
- cd - : : directory in cui si era in precedenza
- pwd : : mostra direttorio corrente
$PWD e' il direttorio corrente, $OLDPWD il precedente
Guardare i files
- more nomefile : : visualizza files una pagina
per volta, mentre il file viene mostrato si possono dare i comandi:
- spazio: avanti una pagina
- b : indietro una pagina
- q : interrompe la visualizzazione
- :n : va al file successivo
- more * : mostra tutti i files
- less file : analogo a more , ma con piu' opzioni
- cat nomefile : mostra file
- tail nomefile : mostra la fine di un file
- tail -100 nomefile : ultime 100 linee
- tail -f nomefile : la fine del file,
man mano che viene scritto, interromperlo con Cntrl/C.
- head nomefile : mostra l'inizio del file
- wc nomefile :
conta linee, parole, caratteri del file
- file nomefile : cerca di capire cosa e' il file
- od -c nomefile : mostra i singoli bytes del file
(octal dump)
- strings nomefile : mostra le
stringhe di caratteri contenute nel file
- diff file1 file2 : : differenze fra 2 files
- patch : : usando un file di differenze
prodotto da diff, ricrea un file originario
Creare, distruggere, spostare i files
- touch nomefile : : crea file vuoto o gli cambia la data
- rm nomefile : : elimina un file
- mv nomefile nuovonome : : sposta un file
o gli cambia nome
- mv file1 file2 file3 directory : :
sposta una serie di files nella directory
- split file : : spezza un file in
tante parti piccole (si ricompongono con cat)
Links
- ln -s nome_file_vero nome_link : fa un soft link
- ln nome_file_vero nome_link : fa hard link
Permessi di accesso ai files
- chown utente:gruppo file : cambia proprietario di un file
- chmod a+x file : rende il file eseguibile per tutti
- chmod og-r file : solo il proprietario puo' leggere il file
- chmod u-w file : il proprietario non puo' cambiarlo
Find: trovare files
- find /usr -name 'x*' -user 'root' -print :
cerca i files in /usr e sottodirectories,
che appartengono a root ed iniziano
con la lettera x, e li mostra (-print)
- find . \! -name '*.gz' -print :
cerca, nel direttorio corrente e sottodirectories,
files che non finiscono con gz e li mostra
- find /home/carlo -size 0 -ok rm{} \; :
cerca i files vuoti di carlo e li elimina, ma chiede conferma (-ok)
{} indica i files trovati, uno per uno.
- find /home/carlo -empty -exec rm{} \; :
come soppra, ma non chiede conferma
- find . -name '*.f' -o (-mtime -3 -atime -6) exec rm{} \;
: uso or di 2 condizioni
- find /var/log -mtime 2 -print :
files modificati da meno di 2 giorni
- find /var/log -atime +3 -print :
accesso piu' di 3 giorni fa
- find /var/log -ctime +3 -print :
test del creation time
- find /var/log -newer file -print :
piu' nuovo del file
- find /var/log -perm 664 -print :
selezione in base ai permessi di accesso (644=-rw-rw-r--)
- find /dev -type f -print :
selezione regular files, altri tipi sono:
b = block dev, c=char dev, d=dir , p=pipe, l=link, s=socket
- -amin -cmin -mmin access, creation , modification
time in minuti
- -nouser : files di un utente inesistente
- -nogroup :files di un gruppo inesistente
Input ed output
- echo stringa : mostra la stringa
- echo "$variabile" : il contenuto della variabile
- echo '$variabile' : la stringa $variabile
( niente sostituzione)
- echo " \a" : un beep, altri caratteri speciali:
\n=newline , \r=return , \f=form feed, \nnn=codice ascii
- comando > /dev/null :
esegue il comando e butta via l'output
- printf : questo comando stampa con sintassi tipi C
- read -p prompt nomevar : legge variabile da stdin,
prima di leggere produce un prompt su stdout
Piping e redirect
- ls > lista.txt : : stdout ridiretto su lista.txt
- ls >> lista.txt : :si aggiunge in coda a lista.txt
- ls -l | more : l'stdout di ls e' l'stdin di more
- cat :redirige stdin su stdout, ha vari usi:
- cat>nomefile : :
di seguito si scrive il contenuto del file,
si termina con Cntrl D
- 2> : : redirige stderr
- &> : : redirige stdout ed stderr
- 2>&1 : : stderr su stdout
- n>& m : : file descriptor n su m
- << "fine" ... fine : :
questo costrutto si usa nelle procedure,
usa come stdin quello che segue, fino al terminatore "fine"
Compressione files, archivi, copie byte per byte
- tar -cvf archivio.tar file1 file2 dir1 :
creo un archivio contente: file1 file2 ed il direttorio dir1
- tar -tvf archivio.tar :guardo cosa contiene un archivio
- tar -xvf archivio.tar : estraggo i files
- tar -tvzf archivio.tar.gz : estraggo i files
da un archivio compresso
- zcat archivio.tar.gz | tar -tvf - : altro modo per fare la cosa
- gzip archivio.tar : comprimo un file
- gunzip archivio.tar.gz : decomprimo un file
- bzip2, bunzip2, bzcat, tar -xvj file.bz2 :
comandi analoghi per il compressore bzip2
- zip,unzip, zipinfo, zipinfo -h :
comandi analoghi per il compressore zip
-
- dd : copie byte a byte
- dd if=/dev/hda of=backup_master_boot_record bs=512 count=1
copia il master boot record del disco primario master
Agire sul file-system
I nomi dei dischi sono:
- /dev/hda : primary master
( /dev/hda1 , hda2 etc. sono le partizioni )
- /dev/hdb : primary slave
- /dev/hdc : secondary master
- /dev/hdd : secondary slave
- /dev/sda : primo disco scsi
- /dev/sdb : secondo disco scsi (st i tape scsi)
- /dev/fd0 : il floppy
Queste cose sono permesse solo all'utente root.
- fdisk -l /dev/hda : mostra la partition table
- fsck -v -r /dev/hda1 : ripara un file system
- mkfs -t ext2 /deb/hdb2 :
fa file system di tipo ext2 sulla partizione 2 del primary slave:
- mount -o remount,rw /dev/hda1 : rimonta read-write
Operare sui processi ed utenti
- ps : mostra processi
- ps aux : mostra tutti i processi
- du : mostra spazio disco usato
- df : mostra i file systems
- kill -9 numero_processo : manda al processo il segnale 9
- trap : entro una procedura, per reagire ad un segnale
- whoami : mostra chi sono
- groups : a che gruppi appartengo
- passwd : cambia la password
- passwd carlo : cambia la password di carlo
( solo root o carlo possono farlo)
- members audio : membri del gruppo audio
- who : mostra chi e' collegato
- w : chi e' collegato e cosa fa
- last : mostra ultimi accessi alla macchina
- useradd, userdel : aggiungono od eliminano utente
- adduser, addgroup : in certe distribuzioni ci sono
questi comandi, piu' comodi degli analoghi di cui sopra
- date : mostra ora e giorno
- date -s '+1hour' : metto l'orologio avanti di un'ora
(lo fa root)
- uptime : da quanto il sistema e' acceso
- uname -a : nome sistema operativo
- uname -a : informazioni sul sistema operativo
- uname -r : versione del kernel
- lsof : mostra files aperti
- top : mostra chi occupa di piu' il sistema
( si esce con cntrl/C )
- free : mostra la memoria libera
- times : mostra quanto e' occupata la cpu
- time comando : esegue e mostra quanto impiega
- nice comando :esegue a bassa priorita'
Interagire col server X11
- xdpyinfo mostra caratteristiche del server
- xwininfo mostra caratteristiche di una finestra
- cntrl+alt+f1 passa a terminale virtuale 1,
in genere ci sono 6 terminali virtuali, corrispondenti ai tasti f1-f7
- cntrl+alt+f7 passa a terminale virtuale 7 ,
ove in genere c'e' l'X server
- cntrl+alt+backspace ferma il server X11
- cntrl+alt+ tasto-tastierina cambia risoluzione
anche il tasto + lo fa.
- X -probeonly 2>&1 | more : simulo la partenza
del server X11 e guardo i messaggi
- startx : fa partire l'X11
Jobs in batch
- comando1 & : comando che va per conto suo (in background)
- nohup comando1 & : va anche quando si chiude il terminale
- at 8pm may 29 -f/home/user/programma :
il programma viene eseguito alle 8 del 29 maggio
- comando : eseguo comando
- Ctrl z : lo interrompo
- jobs : guardo i comandi che ho in corso
- bg %1 : mando il job 1 in background
- fg %1 : lo riprendo a terminale
Variabili di shell ed alias
- alias lc='ls --color=auto' :
definisce comando lc come un ls con opzione colore
- unalias ls : elimina l'alias lc
- PATH : : ove cerca comandi
- DISPLAY : terminale per l'output X11
- SHELL : shell corrente
- USERNAME : nome dell'utente
- PWD : direttorio corrente
- HOSTNAME : nome host
- HOME :
- PS1 : il prompt
L'utente puo' definire variabili, renderle accessibili ai sottoprocessi
( comando export ) etc.
$ : operatore che effettua le sostituzioni: :
- PS1="io@`hostname`=>" : : ridefinisce il prompt
- echo $PATH : mostra il PATH
- PATH=/usr/games:$PATH : aggiunge al PATH
- export : mostra variabili passate ai sottoprocessi
- export DISPLAY=nomePC:0.0 : display X11
- set | more : controlla l'environment
- unset variabile : elimina la variabile
- type comando : mostra se un comando e' un alias o eseguibile
Sostituzioni di variabili piu' complesse:
( per pattern si intende un insieme di caratteri, eventualmente con wildcards: * ? etc.)
- ${var#pattern} : elimina il pattern dall'inizio di var
- ${var##pattern} : elimina il pattern dall'inizio ( il pattern piu' lungo possibile)
- ${var%pattern} : elimina il pattern alla fine
- ${var/patternold/patternnew} : cambia il pattern col nuovo
- $(( .. )) : valuta espressioni aritmetiche,
analogo a let
- [[ expression ]] : 0 od 1 a seconda che sia vera o falsa
- Entro una procedura:
- $# : numero argomenti di una procedura
- $0 : nome della procedura
- $1 : primo argomento di una procedura
- $2 : secondo argomento
Formato per le condizioni
- true : vero
- false : falso
- Condizioni per le stringhe:
- [ -n stringa ] : vero per stringa non nulla
- [ -z stringa ] : vero per stringa nulla
- [ stringa1 == stringa2 ] :
- [ stringa1 != stringa2 ] :
- Condizioni per i files:
- [ -d file ] : vero se il file e' un direttorio
- [ -e file ] : se esistee
- [ -x file ] : se si puo' eseguire
- [ -r file ] : se si puo' leggere
- [ -w file ] : se si puo' scrivere
- [ -s file ] : esiste e non e' vuoto
- Condizioni per gli interi:
- [ $i -eq $j ] : eguale
- [ $i -ne $j ] : diverso
- gli altri operatori sono: -gt -lt -le -ge :
- -a : and
- -o : or
- Esecuzione di comandi sotto condizione:
- command && command2 : command2 eseguito se
command riesce (ret. code 0)
- command || command2 : command2 eseguito se
command fallisce
Controllare il flusso delle istruzioni, esempi
- esecuzione condizionale:
- if [ $i == $k ] ; then echo "eguali" ; echo $i ; fi
- if [ $i == $j ] ; then echo "i=j" ;
elif [ $i != $k ] ; then echo " i=k" ;
else echo "diverso" ; fi
- esegue con $i = nome dei files, in successione
- for i in file1.ps file2.ps ; do lpr $i ; done ;
- loop finch� la condizione e' vera
- while [ true ] ; do ls ; sleep 3 ; done ;
- loop finch� la condizione e' falsa
- until [ false ] ; do ls ; sleep 3 ; done ;
- loop con indice
- for i in $( seq 1 10 ) ; do echo $i ; done
- istruzione case:
case $i in
*.gif ) xv $i ;;
*.txt ) more $i ;;
esac
Utility per i testi
Sono programmi che manipolano i testi,
molto utili assieme alla shell nelle procedure,
sono filtri, da usare con pipes
tr : translate characters
A questa utility si danno in argomento 2 liste di caratteri, nel file elaborato ogni carattere
della prima lista viene sostituito dal carattere corrispondente della seconda.
- tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXY
: questo converte in maiuscolo
- tr a-z A-Z :
- tr '[:lower:]' '[:upper:]' :
- tr -d '\n' : elimina i new-line
- tr -s '\n' : elimina i new-line doppi successivi
tr: formati delle stringhe per specificare le sostituzioni:
- [a-z] : indica un range di caratteri
- [c*3] : indica 3 volte c : ccc
- [c*] : usato nella seconda stringa indica: tante volte c quante nella prima stringa
- [:ascii] : indica tutti caratteri ascii
cut : seleziona campi (colonne) in un file
- cut -c 10-20 file : estrae caratteri dal 10 al 20 di ogni linea
- cut -d: -f1,5 file : estrae campi da 1 a 5 ,
campi delimitati da :
paste: unisce 2 files
- paste file1 file2 file3 : l'output (stdout) ha una linea del file1 seguita da
una del file2 ed una del file3, poi ancora una del file 1 e cosi' via.
- paste -d: file1 file2 : qui usa come separatore fra le linee dei 2 files :
- paste -s -d"\t\n" file : -s indica che si miscela un file con se stesso,
qui una volta separa con un tab, l'altra con new-line, in modo da unire le righe a 2 a 2
grep :cerca stringhe
- ps aux | grep netscape : cerca il processo netscape nel sistema
- grep -n -v pattern file : stampa le righe di file che non (-v)
contengono il pattern ,
scrive il numero di linea (-n)
sort : ordina le linee
- w | sort : mostra gli utenti in ordine alfabetico
- w | sort -r : reverse order
- sort -n +3n -t: /etc/passwd : file utenti ordinato in base al
campo 4 (+3n) usando come separatore : (-t:)
ed interpretando il campo come un numero (-n)
uniq : elimina linee doppie
- w | uniq -c : mostra gli utenti in ordine alfabetico, senza ripetizioni;
-c scrive il numero di linee eguali trovate
- w | cut -f1 -d" " | uniq -cd : mostra solo gli utenti con connessioni multiple
-d conserva solo linee multiple
sed : stream editor
Questo programma esegue funzioni di "editing" su un file, sostituendo o eliminando
insiemi di caratteri specificati da un "pattern"
- sed s/pattern/nuovo_pattern/g file > outfile :
sostituisce pattern con /nuovo_pattern, tutte le volte che lo trova in una linea (g) in tutto il file
- sed 2,10s/pattern/nuovo_pattern/ : sostituisce dalla riga 2 alla 10
- sed /pattern/d : elimina linee col pattern
- sed 3,4d file : elimina linee 3 e 4
- sed -n /uno/due/p file : non ha file di output(-n)
sostituisce uno con due e mostra le linee cambiate, ma non produce un file di output (-n)
- sed -n -e 's/a/b/gp' -e 's/c/d/gp' file : cambia a in b , c in d
Patterns di sed
I "pattern" riconosciuti dall'utility sed hanno una sintassi particolare:
- [a-d] [abD3] [A-Za-z] [^abc] : indica un range di caratteri
- * : indica zero o piu' volte
- ? : indica zero o una volta
- + : indica una o piu' volte
- . : indica un carattere qualsiasi
- ^ : inizio linea
- $ : fine linea
- X* : X zero o piu' volte
- X\{10\} : X 10 volte
- X\{1,10\} : X da 1 a 10 volte
- X\{2,\} : X almeno 2 volte
wc : conta linee, caratteri e parole
split : separa un file in piu' files di dato numero linee o caratteri
join: unisce files linea per linea in base a campo comune
tac : ribalta ordine linee in un file
fold: spezza linee lunghe
nl : mette i numeri delle linee
fmt , pr : esegue formattazioni particolari (usati per vecchie stampanti)
expand : trasforma caratteri tab in space
unexpand trasforma caratteri space in tabs
Esempi piu' complessi
- cat file | tr -cs 'a-zA-Z0-9' '[\n*]' | more : una riga per parola
- cat file | tr -cs 'a-zA-Z0-9' '[\n*]' | sort | more : in ordine alfabetico
- who | cut -d" " -f1 | sort | uniq :
mostra chi e' collegato
- kill -9 `ps aux | grep netscape | tr -s ' ' | cut -f2 -d ' ' ` : ferma netscape
- for i in *.ps ; do lpr -Plp10 $i ; done stampa tutti i files postscript nella directory
- (for i in *zip ; do zipinfo $i ; done ) | more mostra il contenuto dei files zip
- cat hist.out | sed 's/ */ /g' | cut -d' ' -f3,4 | graph -TX :
fa un grafico con le colonne 3 e 4 del file hist.out
il sed compatta i bianchi, in modo che le colonne siano separate da un solo bianco e
correttamente separate da cut
-TX indica un output a video X11