====== Promemoria bash ======
===== Generali =====
==== File system ====
|.|directory corrente|
|..|directory padre|
|~username|home directory dell'utente //username//|
|~|home directory dell'utente corrente|
==== Ridirezioni ====
|[0]<, <|ridirige lo standard input|
|[1]>, >|ridirige lo standard output|
|[2]>, &>|ridirige lo standard error|
|[n]''>>''|redirezione dell'output in append (n filedes) FIXME|
==== Wildcards ====
|*|qualsiasi stringa: ad esempio *.c puo' essere espanso con "ff.c g.c prova.c"|
|?|qualsiasi carattere: ad esempio ?.c puo' essere espanso con "f.c g.c p.c"|
|[..]|qualsiasi carattere dell'insieme: ad esempio [fg].c e' espanso con "f.c g.c"|
==== Combinare comandi ====
|c1 ; c2|esecuzione in sequenza|
|c1 ''|'' c2|esecuzione in pipe (lo stdout di c1 viene inviato sullo stdin di c2)|
===== Comandi =====
==== Miscellanea ====
^Comando^Descrizione^Esempio^
^date|fornisce la data corrente|$ date
Tue Feb 14 18:21:00 CET 2006
|
^clear|pulisce la finestra| |
^man //comando//|permette di accedere alle pagine di manuale in linea per il comando //comando//|$ man man
man(1) man(1)
NAME
man - format and display the on-line manual pages
manpath - determine user's search path for man pages
SYNOPSIS
man [-acdfFhkKtwW] [-m system] [-p string] [-C con-
fig_file] [-M path] [-P pager] [-S section_list] [section]
name ...
...
|
^pwd|stampa il path assoluto della Working Directory corrente|$ pwd
/.automount/homeserver/local/disc2/home/s/susanna/ESERCITAZIONI
|
^cd //directory//|cambia la Working Directory corrente con //directory//, se non viene specificato nulla si va nella home|$ cd
$ pwd
/home/d/dangelo
$ cd Desktop
$ pwd
/home/d/dangelo/Desktop
$ cd ..
$ pwd
/home/d/dangelo
|
^ls //XX//|lista il contenuto della directory //XX// o il file //XX//. Senza argomenti, visualizza il cotnenuto della directory corrente. |$ ls
Canceled.mail HTTPlocation TMP-ESE jkjk
ESERCITAZIONI OLD-Lab a.out ese.tar
|
|ls -l //XX//|lista anche gli attributi dei file e delle directory|$ ls -l ESERCITAZIONI Canceled.mail a.out
-rw------- 1 susanna docenti 3128 Oct 1 1997 Canceled.mail
-rwxr-xr-x 1 susanna docenti 13955 Nov 3 1998 a.out
ESERCITAZIONI:
total 16
-rw-r--r-- 1 susanna docenti 693 Oct 22 1998 ese13-10.c
-rw-r--r-- 1 susanna docenti 1238 Oct 22 1998 ese22-10sizeof.c
-rw-r--r-- 1 susanna docenti 724 Oct 22 1998 eseD13-10.c
-rw-r--r-- 1 susanna docenti 4754 Oct 22 1998 esebit15-10.c
-rw-r--r-- 1 susanna docenti 465 Oct 26 1998 min_maiu22-10.c
-rw-r--r-- 1 susanna docenti 831 Oct 26 1998 poly22-10.c
-rw-r--r-- 1 susanna docenti 3073 Oct 29 1998 sol27-10.c
-rw-r--r-- 1 susanna docenti 357 Oct 26 1998 stampa_ascii22-10.c
|
|ls -d //XX//|lista le informazione relative alla directory indicata|$ ls -ld ESERCITAZIONI
drwxr-xr-x 2 susanna docenti 512 Nov 5 1998 ESERCITAZIONI/
|
|ls -a //XX//|lista anche i file il cui nome comincia per punto (.)||
^less //fileditesto//|pager per file di testo lunghi: mostra //fileditesto// una schermata alla volta, con le frecce e spazio ci si sposta e con q si esce||
^od|visionare i file binari (non ASCII)|$ od -s mpack
0000364 /lib/ld-linux.so.2
0000424 GNU
0003211 __gmon_start__
0003230 libc.so.6
0003242 strcpy
0003251 stdout
0003260 __ctype_b
0003272 getenv
0003301 getpid
0003310 fgets
0003316 memcpy
0003325 execl
0003333 perror
0003342 dup2
0003347 feof
0003354 malloc
0003363 optarg
......
|
^file //filename//|mostra il tipo del file //filename//|$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
$ file Canceled.mail
Canceled.mail: mail text
|
^touch //nomefile//|crea un file "nomefile" se questo non esiste, altrimenti cambia il timestamp dell'ultimo accesso|$ ls pippo
ls: pippo: No such file or directory
$ touch pippo
$ ls -l pippo
-rw-r--r-- 1 susanna users 0 2005-02-14 09:53 pippo
|
^cat //file1// //file2// ...| concatena il contenuto dei file //file1// //file2// ecc. e lo invia sullo standard output. Senza parametri legge lo standard input e lo invia sullo standard output ||
|cat > nomefile|permette di creare velocemente file di testo. Usate control+d per segnalare la fine del testo (End Of File)|$ cat > tt
hkjhkhal
kshlhlhla
^D
$ ls tt
1 tt
$ cat tt
hkjhkhal
kshlhlhla
|
^sort|ordina lessicograficamente le linee sullo standard input e le invia sullo standard output|$ sort
g
f
e
^D <-- fine stdin
e
f
g
|
==== Creazione / Distruzione / Copia di file e directory ====
* La **creazione dei file** avviene con un editor (emacs, vi, ecc.), o utilizzando il comando touch o la redirezione della shell (per esempio usando cat > file).
* La **creazione di directory** avviene con il comando mkdir.
^Comando^Descrizione^Esempio^
^mkdir //directory//|crea la directory di nome //directory//|$ mkdir MAN
$ ls -ld MAN
drwxr-xr-x 2 susanna docenti 512 Sep 21 13:55 MAN/
|
^cp|serve per COPIARE file/directory||
|cp //source// //dest//|copia il file o la directory source in dest||
|cp //file1// ... //fileN// //dir//|copia //file1// ... //fileN// nella directory //dir//||
|cp -r //dir1// //dir2//|copia ricorsivamente tutto il sottoalbero radicato in //dir1// in //dir2//||
^rmdir //nomedir//|rimuove una directory vuota||
^rm //XX//|rimuove il file //XX//||
|rm [-i] //f1// ... //fN//|rimuove i file //f1// ... //fN//. L'opzione -i serve per chiedere conferma (meglio specificarla, o impostare rm come alias di rm -i)||
|rm -r //XX//|rimuove il file //XX// o una directory insieme a tutto il suo contenuto, ricorsivamente. **Pericoloso**||
^mv //source// //dest//|sposta //source// in //dest// e rimuove source: serve per **spostare**/**rinominare** file e directory||
|mv //dir1// //dir2//|sposta //dir1// nella directory //dir2// (se //dir2// esiste) oppure rinomina //dir1// con il nome //dir2// (se //dir2// non esiste)||
|mv //file1// ... //fileN// //dir//|sposta //file1//... //fileN// in //dir//||
==== Cambio diritti ====
^Comando^Descrizione^Esempio^
^chmod [-R] //mode// //file1// ... //fileN//|cambia i diritti di //file1// ... //fileN// come specificato da //mode//. Se viene usato con -R, cambia i permessi ricorsivamente nelle directory specificate. //mode// specifica i nuovi permessi, in notazione simbolica [u g o a][+ - =][r w x] oppure 4 cifre ottali.|$ ls -l Canceled.mail
-rw------- 1 susanna docenti 3128 Oct 1 1997 Canceled.mail
$ chmod ugo+r Canceled.mail
$ ls -l Canceled.mail
-rw-r--r-- 1 susanna docenti 3128 Oct 1 1997 Canceled.mail
$ chmod 755 Canceled.mail
$ ls -l Canceled.mail
-rwxr-xr-x 1 susanna docenti 3128 Oct 1 1997 Canceled.mail*
|
==== Alias ====
FIXME
Lista delle ridenominazioni predefinite (alias) in ~/.bash_aliases
NB: in bash sono superati dalle funzioni!!!!
alias nome
mostra l'alias per nome
---------------------------------------------------------------------
% alias rm
alias rm='rm -i'
-------------------------------------------------------------------
alias nome definizione
permette di creare nuovi alias
-------------------------------------------------------------------
% alias pippo='rm -i'
% alias pippo
alias pippo='rm -i'
-------------------------------------------------------------------
unalias nome
permette di eliminare ridenominazioni
-------------------------------------------------------------------
% unalias pippo
% pippo
pippo: Command not found.
-------------------------------------------------------------------
2.5 Processi
^^^^^^^^^^^^
& esecuzione in background
sleep n_sec non fa niente per n_sec
---------------------------------------------
% sleep 40 &
%
-----------------------------------------------
ho attivato un processo in background che non fa niente per 40 secondi
ps mostra i processi in esecuzione
--------------------------------------------
% ps
PID TTY TIME CMD
1157 pts/0 00:00:00 csh
1328 pts/0 00:00:00 sleep
1329 pts/0 00:00:00 ps
--------------------------------------------
ps -l fornisce informazioni dettagliate su ogni processo
---------------------------------------------------------------------
% ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
100 S 16325 1157 1156 0 67 0 - 563 rt_sig pts/0 00:00:00 csh
000 S 16325 1328 1157 0 64 0 - 262 nanosl pts/0 00:00:00 sleep
000 R 16325 1330 1157 0 70 0 - 669 - pts/0 00:00:00 ps
---------------------------------------------------------------------
La colonna S specifica lo stato:
R: running, in esecuzione al momento o in attesa del processore
S: sleeping, in attesa di un evento, ad esempio un carattere
dalla tastiera
T: stopped, congelato, in attesa di essere riattivato
N: nice, processo running con priorita' bassa
Z: zombie, processo morto ma in attesa di comunicare il suo
codice di errore al padre
jobs fornisce i job attivati dalla shell corrente
----------------------------------------------------
% jobs
[1] + Running sleep 40
%
----------------------------------------------------
kill [opt] pid
kill [opt] %N_job
UCCIDE il processo con process identifier PID e con
numero di job N_job
----------------------------------------------------
% ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
100 S 16325 1157 1156 0 67 0 - 564 rt_sig pts/0 00:00:00 csh
000 S 16325 1334 1157 0 62 0 - 262 nanosl pts/0 00:00:00 sleep
000 R 16325 1336 1157 0 70 0 - 669 - pts/0 00:00:00 ps
% kill %2
[2] Terminated sleep 40
% ps
PID TTY TIME CMD
1157 pts/0 00:00:00 csh
1337 pts/0 00:00:00 ps
%
----------------------------------------------------
le opzioni indicano il tipo di segnale inviato per la terminazione, il
piu' letale e' -KILL (es: kill -KILL 1157)
^C ammazza i processi che girano in foreground
^Z mette in stato di stopped (T) u nprocesso in foreground
bg [%N_job] riprende l'esecuzione in background
fg [%N_job] riprende l'esecuzione in background
2.6 History
^^^^^^^^^^^
history k lista gli ultimi k comandi eseguiti
-------------------------------
% history 4
111 14:42 ps -l
112 14:42 fg
113 14:46 sort
114 14:52 history 4
%
-------------------------------
!! ripete l'ultimo comando eseguito
!so ripete l'ultimo comando seguito che inizi per `so'
!113 ripete il comando numero 113 (sort)
--------------------------------
% !!
history 4
112 14:42 fg
113 14:46 sort
114 14:52 history 4
115 14:54 history 4
%
------------------------------------
stty permette di listare i Metacaratteri (--all)
e cambiare i setting del terminale
-----------------------------------------------------
% stty --all
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
-----------------------------------------------------
Alcuni metacaratteri (CONTROL = ^)
^D end of file
^C abortisce l'esecuzione del comando in corso
^H cancella un carattere
^S blocca l'uscita del video
^Q sblocca l'uscita del video
^Z mette un processo in attesa
-------------------------------------