Bash Shell Commands Collection

On this page I have collected some of the most common commands used in bash scripts.
These references were written following the lessons of Operating Systems held by Prof. Franco Tommasi of the Information Engineering Faculty of Unisalento.

published on December 24th 2012 (Updated on April 22th 2013)

COMANDO

FUNZIONE

datestampa la data
whostampa la lista degli account collegati al server
who | wcstampa il numero di account connessi al server
pwdstampa la CWD (Current Working Directory, ovvero la directory in cui siamo attivi al momento)
clearripulisce lo schermo e porta in cima alla pagina
CTRL-Cforza l'uscita da un comando
cdporta alla propria home
cd ~porta alla propria home
cd /porta alla Root
cd -porta alla directory precedente
cd .porta alla CWD
cd ..porta alla directory superiore rispetto a quella in cui siamo (Parent Directory)
cd ../..porta nella directory due livelli sopra alla corrente
cd /dir1/dir2/dir3porta nella directory dir3 a partire dalla Root (Absolute Path)
cd dir3porta nella directory dir3 a partire dalla CWD (solo se esiste) (Relative Path)
mkdir mydircrea una nuova directory denominta mydir nella CWD
rmdir mydirelimina la directory mydir (la directory deve essere vuota)
touch myfilecrea un nuovo file vuoto denominato myfile
rm myfileelimina (definitivamente) il file myfile
mv myfile1 myfile2rinomina il file o la directory myfile1 in myfile2
mv myfile mydirsposta il file myfile nella directory mydir
mv myfile1 mydir/myfile2sposta il file myfile1 nella directory mydir e lo rinomina in myfile2
lsstampa la lista dei file presenti nella CWD
ls -astampa la lista di tutti i file (compresi quelli che iniziano col punto)
ls -lstampa la lista dei file presenti nella CWD in long format
cat myfilestampa il contenuto del file myfile
catripetere quello che si digita fino a che non si preme CTRL+C
ls myfilerisponde se esiste il file myfile oppure no
cp mydir1/myfile mydir2copia il file myfile dalla directory mydir1 in mydir2
man mycommandstampa il manuale del comando mycommand
q(Quit) esce dal manuale
\(Escape) disabilita il valore di metacarattere al testo che segue immediatamente
(es. per scrivere lo spazio si usa "\ ", escluse le virgolette)
historystampa la lista di comandi dati in precedenza
!numcomandesegue il comando relativo al numero della lista di history
echo txtripete il testo digitato
echo $SHELLstampa il nome dello Shell in uso
bash -vstampa la versione di Bash
which mycommandstampa che tipo di file è il comando mycommand
whoamistampa chi sono io in veste di proprietario di file (User)
nano myfileapre il file myfile con un editor di testo da terminale
chmod g+w myfileaggiunge il privilegio di scrittura (w) al gruppo (g) al file myfile
chmod u+w myfileaggiunge il privilegio di scrittura (w) al proprietario (u) al file myfile
chmod g-rw myfiletoglie il privilegio di lettura (r) e scrittura (w) al file myfile al gruppo (g)
chmod g+r,o-r myfileaggiunge il privilegio di lettura (r) al gruppo (g) e toglie quello di lettura (r) a tutti gli altri (o) al file myfile
echo $PATHstampa le directory dalle quali il sistema prende le utility (comandi)
chmod 700 myfilerende eseguibile il file myfile
./myfileesegue il file myfile precedentemente reso eseguibile
(qualsiasi file non presente nelle PATH, ovvero uno script)
wc myfilestampa in ordine il numero di linee, di parole e di caratteri del file myfile
wc -l myfilestampa solo il numero di linee del file myfile
cut -fn -dchartaglia il campo numero n usando come delimitatore di campi il carattere digitato dopo -d
(es. -d' ' usa lo spazio come delimitatore di campi)
envstampa la lista di tutte le variabili istanziate
MYVAR=myvalueistanzia la nuova variabile MYVAR col valore myvalue
echo $MYVARstampa il valore della variabile MYVAR
echo !!esegue l'ultimo comando eseguito
scp myfile myserver:mydircopia il file myfile nella directory mydir della macchina connessa al server myserver
scp myserver1:myfile myserver2:mydircopia il file myfile dal server myserver1 nella directory mydir del server myserver2
echo $((4+5))(Arithmetic Expansion) esegue il calcolo aritmetico digitato e lo stampa
MYVAR=$(mycommand)(Command Substitution) avvalora la variabile MYVAR con l'output del comando mycommand
read MYVARsalva l'input da tastiera nella variabile MYVAR
# mycommentrende il testo mycomment solo commento
$nin uno script indica la parola n-esima immessa da tastiera subito dopo il richiamo dello script
(es. "./myscript.sh mydir1 mydir2", $1=mydir1 e $2=mydir2)
topstampa l'elenco dinamico dei processi in esecuzione sulla macchina
psstampa l'elenco statico dei processi in esecuzione sulla macchina
mycommand | lesspermette di scorrere l'output del comando mycommand con la tastiera (premere Q per uscire)
idstampa lo user id
ls -la $(which ps)si nota che al posto della r nei permessi ha una s (se c'è la s il proprietario del processo continua a essere il proprietario del file)
$?stampa l'Exit Status dell'ultimo comando eseguito (0=true, 1=false)
mycommand1; mycommand2; ...lista di comandi (l'Exit Status si riferisce sempre all'ultimo)
'text'disabilita tutti i metacaratteri all'interno (Strong Quoting)
"text"disabilita i metacaratteri all'interno tranne alcuni tipo $ (Weak Quoting)
test myconditionrestituisce un Exit Status positivo (0) se la condizione è vera oppure negativo (1) viceversa
(es. "test 11 > 9" restituisce un Exit Status negativo poichè l'operatore ">" opera alfabeticamente,
mentre "test 11 -gt 9" restituisce un Exit Status positivo poichè "-gt", ovvero greater than, opera algebricamente)
test A -eq Bvero se A algebricamente uguale a B (equal)
test A -ne Bvero se A algebricamente non uguale a B (not equal)
test A -gt Bvero se A algebricamente maggiore di B (greater than)
test A -ge Bvero se A algebricamente maggiore o uguale di B (greater or equal)
test A -lt Bvero se A algebricamente minore di B (less than)
test A -le Bvero se A algebricamente minore o uguale di B (less or equal)
[ mycondition ]ha lo stesso effetto di test
stat myfilestampa alcune proprietà del file myfile (solo su Linux)
stat -x myfilestampa alcune proprietà del file myfile (solo su Mac OS)
truerestituisce un Exit Status positivo (0)
falserestituisce un Exit Status negativo (1)
mycommand; sleep ndisabilita l'esecuzione del comando mycommand per n secondi subito dopo il primo avvio
\scritto durante un comando ti permettere di continuare a scrivere il comando alla riga successiva
ls -i myfilestampa l’inode number del file myfile
ttystampa il nome del terminale che stiamo utilizzando
file *stampa le proprietà di tutti i file presenti nella CWD
mycommand 2> myfilereindirizza lo Standard Error al file myfile
mycommand 2> /dev/nullannulla l'output di errore
/dev/random > myfilecrea bit a caso nel file myfile
head myfilestampa le prime 10 righe del file myfile
head –n myfilestampa le prime n righe del file myfile
tail myfilestampa le ultime 10 righe del file myfile
tail -n myfilestampa le ultime n righe del file myfile
head -n myfile | tail -1stampa la n-esima righa del file myfile
cat -n myfilestampa il contenuto del file myfile con il numero di riga
tail -f myfilelascia in sospeso la stampa del contenuto del file myfile e la aggiorna se si salva altro
cat >> myfilepermette di scrivere dati nel file myfile (Append)
grep mychar myfilestampa tutte le righe del file myfile che contengono il carattere mychar
/usr/share/dict/wordsfile che contiene le parole inglesi del sistema
basename myfilestampa l'ultimo ramo della path di myfile
dirname myfilestampa la directory che contiene il file myfile
ls -id mydirstampa l'inode della directory mydir
stat -f%i myfilestampa l'inode del file myfile (qulasiasi) su Mac OS
stat -c%i myfilestampa l'inode del file myfile (qualsiasi) su Linux
stat -f%z myfilestampa la dimensione del file myfile su Mac OS
stat -c%s myfilestampa la dimensione del file myfile su Linux
find mydirlist -name myfile -printcerca i file che si chiamano myfile nelle directory mydirlist e li stampa
find mydirlist -name myfile\* -printcerca i file il cui nome comincia con myfile e li stampa
find mydirlist -name myfile -type d -printcerca il file myfile di tipo directory (d) e lo stampa
find mydirlist -name myfile \( -type d -o -type f \)cerca sia directory che regular file
find mydirlist -name myfile -exec mycommand {} \;cerca ed esegue il comando mycommand sui file trovati
sortordina in ordine alfabetico
sort -nordina in ordine numerico crescente
sort -nrordina in ordine numerico decrescente
tr mychar1 mychar2trasforma tutti i caratteri char1 in char2
\nindica a capo
grep -r mydiresegue il grep ricorsivamente cioè anche all'interno di directory interne a mydir
grep -E mydiresegue il grep nella modalità estesa
grep '[abc]' mydirprende le parole che contengono almeno una lettera tra la a, la b e la c
grep '[abc]..[yz]' mydirprende le parole che contengono almeno una lettera tra abc poi subito a seguire due lettere qualsiasi e poi una tra yz
grep '[^ab]' mydirprende le parole che contengono tutte le lettere tranne ab
grep '^a...z$' mydirprende le parole la cui prima lettera è la a e l'ultima è la z
MYVAR=$MYVAR\mycharaggiorna la variabile MYVAR con il testo digitato dopo il backslash accodandolo al testo già presente nella variabile (se presente)
MYVAR=${n:-myval}istanzia la variabile MYVAR con il valore digitato nel campo $n, se $n è vuoto la istanzia con il valore di default myval
MYVAR=${MYVAR:=myval}istanzia la variabile MYVAR con il valore myval
echo ${MYVAR:n}stampa i caratteri successivi ai primi n (Offset) della variabile MYVAR
echo ${#MYVAR}stampa la lunghezza della variabile MYVAR
echo ${MYVAR/mychar1/mychar2}stampa la variabile MYVAR con il primo match del carattere mychar1 sostituito da mycahr2
date +%myopt1-%myopt2-%myopt3stampa la data nel formato myopt1-myopt2-myopt3
date +%myopt1/%myopt2/%myopt3stampa la data nel formato myopt1/myopt2/myopt3 (Si può usare un carattere qualsiasi per delimitatore al posto dei trattini o dello slash, basta sostituirlo nel codice)
%Yanno
%mmese
%dgiorno
%Hora
%Mminuti
%Ssecondi
%ssecondi dalla EPOCH (1 Gennaio 1970)
cal myyearstampa il calendario dell'anno myyear (es. cal 1991)
mycommand &lascia sospeso il comando in background una volta avviato
jobsstampa la lista di processi in background
CTRL+Zavvia il processo attuale in background
fg %navvia in foreground il processo n
bg %navvia in background il processo n
PS1variabile che contiene il testo del prompt del terminale
PS1='\t ->'così settata stampa un prompt di questo tipo (hh:mm:ss ->)
alias mycommand2=mycommand1sostituisce il nome del comando mycommand1 con il nuovo nome mycommand2
open myfile –a myappapre il file myfile con l'applicazione myapp
md5 myfileapplica un algoritmo al file myfile che restituisce un digest di 32 caratteri (solo su Mac OS)
md5sum myfilestesso effetto su Linux
diff myfile1 myfile2stampa le differenze tra i file (non stampa nulla se non trova differenze)
type mycommandstampa l'alias del comando mycommand
xargsfunziona come il pipe, cioè esegue un comando all'output di un altro comando
localestampa l'encoding utilizzato dal terminale
openssl dgst -sha1 myfilecrea il digest sha1 del file myfile
openssl enc -des3 < myfilecripta il file myfile con il cipher des3
vmmap mypidstampa la gestione della memoria del processo col pid mypid
ps -p mypidmostra le caratteristiche del pid mypid
hexdump myfilestampa i caratteri presenti nel file nel formato ASCII (codice ASCII)
hexdump -c myfilestampa i caratteri presenti nel file nel formato ASCII (carattere ASCII)
iconv -f myenc1 –t myenc2 myfileconverte il file myfile dall'encoding myenc1 a quello myenc2
iconv -f L1 -t UTF8 myfileconverte il file myfile dall'encoding latin iso 1 a utf-8
iconv -lstampa tutti gli encoding disponibili
tr -d ' 'elimina (d) tutti gli spazi (' ')
unset MYVARelimina qualsiasi predefinizione della variabile MYVAR
echo ${#myarray[*]}stampa la lunghezza dell'array myarray (solo se definito)
myarray=(myval1 myval2 ...)avvalora l'array myarray con i valori digitati in seguenza
psstampa i processi legati ai terminali
ps -estampa tutti i processi
ps -efstampa tutti i processi in formato lungo
pstreestampa tutti i processi in un grafico ad albero (solo su Linux)
echo $$stampa il Process id (PID) di Bash
passwdpermette di cambiare la password del proprio sistema
ps -e -ocommstampa solo il campo col nome dei processi
ps -e -opid,commstampa solo i campi pid e nome del processo
ps -e -opid=,comm=stesso effetto ma non stampa la prima linea di intestazione con i titoli
ps -e -opid=mytit1,comm=mytit2da come titoli ai campi pid e comm rispettivamente mytit1 e mytit2
ps -e -opid,ruid,uid,commstampa il pid, il real uid, l'effective uid e il nome del processo
[ $# -ne n ]test che verifica se il numero di tutti gli inserimenti sulla riga dello script è uguale a un valore di default n
[ -z $MYVAR ]test che verifica se la variabile MYVAR è uguale a zero
exec mycommandeseguito in Bash dice a Bash di trasformare lui stesso in quel comando mentre lanciando il comando normalmente, Bash si duplica e il Bash Child si trasforma nel comando lanciato
tr [:punct:] '\n'sostituisce tutti i segni di punteggiatura con un accapo
uniq -cstampa il numero di ripetizioni delle righe uguali
lynx myurlbrowser web a linea di comando
export MYVAResporta la variabile MYVAR in modo da poter essere letta anche all'interno di script
gzip myfilecomprime il file regolare myfile in un file zippato (myfile.gz)
gunzip myfile.gzdecomprime il file myfile.gz
tar myfilecomprime il file myfile (anche directory) in un file tar (myfile.tar)
tar cvfz myfile2.tgz myfile1comprime il file myfile1 in un file tar zippato (myfile2.tgz)
exec mycommand 1>myfileinvia l'output del comando mycommand al file myfile
readlink mylinkstampa il source file del link mylink
SIGINTCTRL+C
SIGTSTPCTRL+Z
SIGQUITCTRL+\
SIGSTOPstoppa il processo
SIGCONTriprende il processo stoppato
SIGKILLtermina il processo (non gestibile)
trap -lstampa la lista di segnali disponibili
trap mycommand mysignalindica a Bash di eseguire il comando mycommand se riceve il segnale mysignal
trap - mysignalreimposta l'azione di default alla ricezione del segnale mysignal
trap '' mysignalindica a Bash di non eseguire niente alla ricezione del segnale mysegnal
trap -p mysignalstampa quale operazione è associata al segnale mysignal
trap -pstampa la lista di attribuzioni comando-segnale
ulimit -astampa la dimensione di memoria disponibile per tutti i file
ulimit -csetta la dimensione del file core
kill -mysignal mypidinvia il segnale mysignal al processo associato al pid mypid
kill -9 mypiduccide il processo associato al pid mypid, stesso effetto di kill -SIGKILL mypid
kill -SIGSTOP mypidstoppa il processo con il pid mypid
kill -SIGCONT mypidriprende il processo con il pid mypid
mdfind mycharcorrispettivo di spotlight a linea di comando, cerca il carattere mychar nel contenuto dei file nel Hardisk
mdfind -0 mycharsepara i risultati con un null
mdls myfilestampa le proprietà del file myfile
strings myfilestampa le stringhe stampabili del file binario myfile
mdfind 'mycriterion1<n && mycriterion2>m'cerca i file con quei criteri
(es. mdfind -0 'mycriterion<n' | xargs -0 mdls -name mycriterion)
tee myfileall'interno di una linea di comando devia lo standard output al file myfile
(es. ps -ef | tee myfile | grep mychar) invia l'output del ps al file myfile e al grep
jot n x ystampa n repliche di numeri da x a y (numeri)
jot -r -c n x ystampa n volte i caratteri (c) casuali (r) da x a y (caratteri)
rs r c(Reshape) stampa lo standard input in r righe e c colonne (r=0 stampa fino alla fine dell'input)
rs -g r cnon separa le colonne con lo spazio
dd ibs=n obs=m count=i skip=j if=myfile1 of=myfile2copia il file myfile1 in myfile2
ibsinput block size
obsoutout block size
countcaratteri da copiare
skipcaratteri tagliati dall'inizio del file
ifinput file
ofoutput file
ls [^az]*stampa l'output di ls di tutte le righe che non cominciano per a e finiscono per z
tr -d -C [:alpha:]elimina (d) tutto ciò che "non è" (C) alfabeto
tr \\064 mycharsostituisce il carattere con codice ottale \064 (4) con mychar
tr -d \\000-\\037elimina tutti i caratteri di controllo da \000 a \037
curl myurlrestituisce il codice dell'url myurl
ping myipmanda un pacchetto icmp echorequest e riceve un pacchetto icmp echorequire all'ip myip
ping -c n myipinvia n pacchetti e poi termina
fuser myfilestampa il pid del processo che sta usando il file myfile
lsof -p mypidstampa la lista dei file che il processo associato al pid mypid ha aperti
diff myfile1 myfile2 > mypatchcrea il file patch con le differenze
patch myfile mypatchaggiorna il file myfile aggiungendo le differenze salvate nel file mypatch
killall mycommandchiude tutte le istanze del comando mycommand (es. killall nano)
mkfifo myfilecrea un file fifo (first input first output) (named pipes)
whois myipstampa informazioni sull'indirizzo ip myip
netstat -f inetstampa le connessioni aperte nella propria rete inet
netstat -f inet -p tcpstampa le connessioni tcp aperte nella propria rete
netstat -b -i en0visualizza i byte scambiati dalle connessioni aperte nella rete en0
ifconfig -avisualizza tutti i driver di rete con i relativi indirizzi
sourcestesso effetto di include in C
gcccompilatore di codice C e C++ (idem cc)
gcc myfile.ccompila il file sorgente myfile.c in un eseguibile nominato a.out
gcc myfile.c -o myexeccompila il file sorgente myfile.c in un eseguibile nominato myexec
/usr/includedirectory contenente le librerie del C (proptotipi)
/usr/lib(implementazioni)
gcc -H myfile.cstampa la lista delle librerie incluse nel file sorgente myfile.c ad albero
gcc -Wall myfile.cstampa tutti (all) i warning (W), precompilazione
wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --domains example.com --no-parent www.example.com/folder1/folder2/scarica l'intero sito www.example.com/folder1/folder2/ nella cwd


Conditional statements and iterative loops sintax

if

if command1; then command2 ; fi
if list1; then list2; fi
if list1; then list2; else list3; fi
if list1; then list2; elif list3; then list4; fi

while

while list1; do list2; done
until list1; do list2; done

for

for var in parameterlist; do list; done
for ((v=p1; v < p2; v++)); do list; done