Commands Shell

Run a command once time only

this run the ls -l at 7 once time only

echo "ls -l" | at 07:00

Generate random password

apg

very usefull for generate random password

Archiviazione

zip

zip -j file.zip file1.txt /path/file2.txt

l'opzione -j è utile dato che di solito si vuole mettere file1 e file2 dentro senza conservare il path

Se si vuole copiare una directory però non si può specificare l'opzione -j e si deve usare la -r

zip -r apache-tomcat.zip apache-tomcat-6.0.33

unzip

Fa l'unzip specificando la cartella dove deve essere decompresso, se la cartella non esiste la crea

unzip -d ~/.euca mycreds.zip

tar

Comprimere una cartella in un solo file.

tar czvf nome_archivio.tar.gz nome_cartella_da_archiviare

Se uso cp o scp con le impostazioni di default perdo la data originale di modifica e il proprietario se utilizzo il tar riesco a mantenerla. Se voglio fare in un unico comando posso usare standard input e standard output un vecchio trucco con il tar riesco a mantenerle ho trovato le info qui http://thehackerslinux.wordpress.com/2007/07/24/using-tar-to-copy-files/

cd /from-stuff/
tar cf – . | (cd /to-stuff; tar xvf -)

alternatives

sudo update-alternatives --install "/usr/bin/sublime" "sublime" "/opt/sublime_text/sublime_text" 1

Ricerche

find

find ricerca file e esegue comandi su questi find percorso -name nomedelfile
#per usare i metacaratteri bisogna annullarli con la

find / -name pippo.txt -print    # per cercare il file in tutto l'archivio
find / -name bash -print        # cerca a partire dalla radice
find / -name \*sh -print

Ho trovato questo script che dice che li ordina ricorsivamente per data
This little combination of commands sorts a list of files by descending date reading all the files recursively from the current folder

find . | xargs -i ls -l {} | sort -rk 6 | awk '$1 != "total" {print $0}'

Non l'ho provato

Trova i file modificati entro 3 giorni

find ./ -type f -mtime -3 -print

Elimina tutti i file che finiscono per csv , si usa questo quando ci sono molti file e il comando rm da errore.

find . -name "*.csv" -exec rm {} \;

mv files cin.* in entities directory

find . -name "cin.*" -exec mv {} enteties \;

locate

locate nomefile #è più veloce di find ma bisogna prima aggiornare da root il suo db con il comando updatedb

grep

grep esegue ricerche di testo sul file grep testo file

grep -ir Etichett *

fa ricerche in dove indicato in tutto Etichett è il testo da ricercare
  • dove ricercare in tutte le directory, -r ricorsivo, -i ignorecase
grep -v testo

visualizza tutto quello che non matcha con testo, può essere utile usarlo in pipe con un altro grep

The $ anchor matches the end of a line.

ls -R | grep '\.rar$'

date

Per cambiarla deve essere fatto da root
ecco un esempio

date 06081642

* due cifre del mese corrente;
* due cifre del giorno del mese corrente;
* due cifre dell'ora corrente;
* due cifre dei minuti correnti;
* (opzionale) due o quattro cifre dell'anno in corso;
* (opzionale) un punto seguito dalle due cifre dei secondi.

Per stampare

giuseppe@peppe-laptop-hp:~$ date "+anno%y-mese%m-giorno%d"
anno11-mese04-giorno21

per spazio su hard disk

# spazio su tutto l'hard disk
df -h
# spazio su una o più cartelle
du -sh /opt/*
#spazio sulla cartella . -h sta per human readable
du -h 

 du -h --max-depth=1 .
#dimensioni per la cartella locale

#guardare l'avanzamento
watch df -h

change password

Per costringere gli utenti a cambiare password al primo accesso è possibile utilizzare il comando chage, un comando che permette di impostare il numero di giorni tra il cambio di password e la data in cui è stata impostata.

chage -d 0 user1

In questo modo l’utente sarà costretto a cambiare password al prossimo accesso.

wget

wget -p -k www.miosito.it

In questo modo scaricherà tutte le risorse della pagina senza p e k come opzioni prenderà solo l'html senza le immagini e i javascript
wget -r --user=myusername --password=mypassword ftp://ww.url.com/cartella

scaricare tramite wget per pagina con ftp con autenticazione

ps

Opzioni di ps
x : visualizza anche i processi che non provengono da terminali
u : formato utente, indica in particolare l’utente a cui appartiene ogni processo
a : visualizza i processi di tutti gli utenti
l : formato esteso, mostra un elenco lungo
r : non mostra i processi in pausa
o : precisa *solo* le colonne da mostrare, elencate di seguito
U nome_utente: mostra i processi di nome_utente
Conviene tenere sempre in conto la prima riga

Visualizzare i processi con ps usando una struttura ad albero

Ecco un esempio

# ps aufx | grep httpd
root     24769  0.0  0.0 103252   840 pts/0    S+   10:30   0:00  |                       \_ grep httpd
root     30501  0.0  0.0 184144   296 ?        Ss    2012   1:21 /usr/sbin/httpd
apache     627  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     628  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     630  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     631  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     632  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     633  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     634  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd
apache     635  0.0  0.0 184280   208 ?        S    Jan06   0:00  \_ /usr/sbin/httpd

Oppure con pstree dove però non si può usare il grep

Trovare i processi zombie

# ps aux | grep Z
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     11203  0.0  0.0   7644  1008 pts/0    S+   16:37   0:00 grep --color=auto Z
root     18575  0.0  0.0      0     0 ?        Z    Jun06   0:00 [apt] <defunct>

Come si vede lo stato è Z che indica zombie

top

top [opzioni]
-d delta : tempo tra un aggiornamento e l’altro
-i : visualizza anche processi inattivi (zombie)
Comandi interattivi:
h | ? : riassunto dei comandi
k : per inviare segnali ai processi
i : visualizza solo i processi inattivi e viceversa
r : renice
n | # : cambia la quantità di processi da visualizzare
q : termina l’esecuzione di top

Conoscere la versione di ubuntu dalla shell

tanino@tanino-laptop:~/Scrivania$ cat /etc/issue
Ubuntu 10.04 LTS

oppure
lsb_release -d

Macchina a 64 bit o 32

user@nomemacchina:~$ uname -m
i686

La macchina sopra è a 32 bit se esce ia64 o x86_64 allora è a 64 bit

Cambiare lo schermo

xrandr 

Screen 0: minimum 320 x 200, current 2944 x 1080, maximum 2944 x 1920
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
   1024x768       59.9*+
   1680x1050      59.9 +
   1400x1050      59.9 +
   1280x1024      59.9 +
   1440x900       59.9 +
   1280x960       59.9 +
   1280x800       59.9 +
   1152x864       59.9 +
   1280x768       59.9 +
   1280x720       59.9 +
   1024x600       59.9 +
   800x600        59.9 +
   800x480        59.9 +
   720x480        59.9 +
   640x480        59.9 +
DFP1 disconnected (normal left inverted right x axis y axis)
DFP2 disconnected (normal left inverted right x axis y axis)
CRT1 connected 1920x1080+1024+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*+
   1680x1050      60.0  
   1400x1050      60.0  
   1280x1024      75.0     60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x800       75.0     60.0  
   1152x864       75.0     60.0  
   1280x768       59.9  
   1280x720       60.0  
   1024x768       75.0     70.1     60.0  
   1024x600       60.0  
   800x600        72.2     75.0     70.0     60.3     56.2  
   800x480        60.0  
   720x480        60.0  
   640x480        75.0     72.8     60.0  
TV disconnected (normal left inverted right x axis y axis)
CV disconnected (normal left inverted right x axis y axis)
root@peppe-laptop-hp:~# 
root@peppe-laptop-hp:~# xrandr --output CRT1 --primary
root@peppe-laptop-hp:~# xrandr --output LVDS --primary

identificare lo schermo con il primo comando e passare da uno all'altro con il secondo

screen

Avviare la sessione con screen
Lasciare la sessione mantenendola attiva con CTRL+A e CTRL+D , se si premo solo CTRL+D si lascia chiudendola
Ripristinare con lo stesso utente eseguendo screen -r

se hai un errore e' perche' la shell non ti appartiene
lanciare prima

script /dev/null
#e poi
screen

controllare la batteria del portatile

cat /proc/acpi/battery/BAT0/state
cat  /proc/acpi/battery/BAT0/info

Da informazioni utilissime sulla batteria
present:                 yes
design capacity:         3276 mAh
last full capacity:      3276 mAh
battery technology:      rechargeable
design voltage:          14400 mV
design capacity warning: 164 mAh
design capacity low:     33 mAh
cycle count:          0
capacity granularity 1:  100 mAh
capacity granularity 2:  100 mAh
model number:            Primary
serial number:           36415 2007/08/16
battery type:            LIon
OEM info:                Hewlett-Packard

present:                 yes
capacity state:          ok
charging state:          charged
present rate:            0 mA
remaining capacity:      3164 mAh
present voltage:         16415 mV

ldd dipendenze da librerie

Stampa le librerie condivise usate da ogni programma specificato dalla command line.
Quello che si vede sotto è un output che indica che non ci sono problemi.

$ ldd iipsrv.fcgi 
        linux-vdso.so.1 =>  (0x00007fff90dff000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x00007f5c5c9d3000)
        libtiff.so.4 => /usr/lib/libtiff.so.4 (0x00007f5c5c771000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x00007f5c5c54c000)
        libz.so.1 => /lib/libz.so.1 (0x00007f5c5c335000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f5c5c021000)
        libm.so.6 => /lib/libm.so.6 (0x00007f5c5bd9d000)
        libc.so.6 => /lib/libc.so.6 (0x00007f5c5ba1a000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f5c5b803000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5c5cbf3000)

Eliminare grandi quantità di file

Il comando rm prima di eliminare i file li cerca tutti e crea una lista. Se si trova ad eliminare grandi quantità di file per esempio su dispositivi di storage di grandi dimensioni può dare errori durante la creazione della lista. L'alternativa è usare il comando find con l'opzione delete che invece di creare la lista trova un file e lo elimina

find . -type f -print -delete

trova e sostituisci

Si può fare con il comando sed
Se si specifica l'opzione -i sostituisce dentro il file altrimenti senza opzione stampa a video le modifiche senza alterare il file.

 sed -i 's/alfio/peppe/g' *

sostituisce la parola alfio con la parola peppe dentro tutti i file della directory. Spazi ignorati
sed -i 's/http:\/\/sitoimportante.com/http:\/\/test2/g'

mettiamo i \ per annullare i metecaratteri e quindi sostituire le url
find ./ -type f -exec sed -i 's/http:\/\/sitoimportante.com/http:\/\/test2/g' '{}' \;

in questo modo si fa ricorsivamente
estrarre righe da un file

Stampa a video dalla linea 2 alla 4

sed -n 2,4p linee.txt
copiati da altro sito

Ho trovato questo blog http://forum.frattocchie.it/viewtopic.php?f=2&t=327 che spiega bene il comando e le sue potenzialità mi riscrivo il pezzo di cose che ho copiato

in pipe (per mostrarlo a schermo o redirigerlo su un file)
cat miofile.txt |sed 's/CANE/GATTO/g'
questo lo mostra a schermo ma non modifica il file.

sed -i -e 's/CANE/GATTO/g' miofile.txt
modifica il file

sed -i.bak -e 's/CANE/GATTO/g' miofile.txt
modifica il file ma ne crea una copia di backup chiamata miofile.txt.bak

nella prima sintassi non è presente il -e perchè è sottointeso; dove vi sono più opzioni, invece, è obbligatorio p.e.:
cat miofile.txt|sed -e 's/CANE/GATTO/g' -e 's/PLUTO/PAPERINO/g'
sostituisce tutti i CANE in GATTO e i PLUTO in PAPERINO.

la 'g' significa 'qualsiasi occorrenza nella riga'
se non si specifica e nella riga ci sono più occorrenze, allora viene modificata solo la prima.

in molti casi, tipo quello in esame, è facoltativo utilizzare gli apici
cat miofile.txt|sed s/CANE/GATTO/g
oppure si possono utilizzare i doppi apici
cat miofile.txt|sed "s/CANE/GATTO/g"
se nella sostituzione ci sono spazi, allora gli apici (singoli o doppi) sono necessari
cat miofile.txt|sed "s/CANE/GATTO e TOPO/g"
per toglierla, una stringa, sostituirla con niente
cat miofile.txt|sed s/CANE//g
se si devono sostituire caratteri speciali, allora questi vanno 'quotati', per esempio per sostituire il .
cat miofile.txt|sed 's/x.y/ciao/g'
in questo caso '.' significa qualsiasi carattere. quindi x.y viene cambiato in ciao, ma viene cambiato anche xxy xay x1y ... per sostituire solo x.y
cat miofile.txt|sed 's/x\.y/ciao/g'
idem per sostituire la \
sed 's/C:\\WINDOWS\\System32\\//g' questo elimina tutti i C:\WINDOWS\System32\
così per sostituire la /
sed 's/\/home\/matteo\/pippo\.txt/\/tmp\/pluto.txt/g'
però è poco leggibile. in questo caso
sed 's|/home/matteo/pippo.txt|/tmp/pluto.txt/g'

quello che viene messo nella parte da sostituire (CANE) è una 'espressione regolare' e su queste ci sono trattati interi

l'* è un carattere speciale, quindi per sostituirlo come carattere va quotato
[a-z] intercetta qualsiasi carattere da a a z minuscoli
[a-zA-Z0-9] intercetta qualsiasi carattere alfanumerico
[^abc] intercetta qualsiasi carattere tranne a b c
* intercetta qualsiasi numero contiguo di quello che c'è scritto prima dell'*:
a* intercetta a aa aaa aaaa o la stringa vuota (per qualsiasi si intende anche 0 occorrenze)
\+ è come * ma almeno una occorrenza
[0-9]\+ intercetta qualsiasi tutti i numeri, e deve esistere
.* intercetta tutto
sed 's/CANE.*GATTO/CANE+GATTO/g' elimina tutto ciò che si trova tra CANE e GATTO con un +
^ indica che il testo deve essere all'inizio della riga
sed 's/^CANE/GATTO/' sostituisce CANE con GATTO a patto che CANE sia all'inizio della riga
$ indica che il testo deve essere alla fine della riga
sed 's/CANE$/GATTO/' sostituisce CANE con GATTO a patto che CANE sia alla fine della riga
^$ intercetta le righe vuote
sed 's/^$/questa riga era vuota/'

Eseguire come altro utente

Ecco come eseguire un comando con un altro utente per esempio quello di apache che ha privilegi bassi

#avvio di tomcat
su -c "cd /opt/apache-tomcat-6.0.33/bin; ./startup.sh" - www-data
su -c "cd /opt/liferay-portal-6.0.6/tomcat-6.0.29/bin; ./startup.sh" - www-data

#stop di tomcat
su -c "cd /opt/apache-tomcat-6.0.33/bin; ./shutdown.sh" - www-data
su -c "cd /opt/liferay-portal-6.0.6/tomcat-6.0.29/bin; ./shutdown.sh" - www-data

nano comandi utili

alt+y disabilita o abilita la sintassi
ctrl+\ fa il find e replace molto funzionale
altre info su http://chxo.com/be2/nano_find_replace.html

lsof risorse di un programma

Per poter analizzare quali file, directory o porte utilizza un determinato programma in esecuzione possiamo usare lsof:

# lsof |grep apache

elenca tutti i file usati da Apache
Fonte http://www.sistemistiindipendenti.org/faq/come-possiamo-elencare-le-risorse-files-directrory-socket-utilizzate-da-uno-specifico-programma

fuser risorse di file e mount

Fonte http://www.linux-magazine.it/Scoprire-chi-o-cosa-utilizza-una-risorsa.htm
Per analizzare risorse del mount

fuser -um /media/disk.

Molto utile quando non si riesce a smontare un disco e si ottiene questo

umount: /media/disk failed:
device is busy

Per un file

fuser -v nome_del_ file

INFORMAZIONI SU UN DEVICE

molto utile in caso di device raid complessi

udisks --show-info /dev/sda1

rdesktop

rdesktop -0 -k it -g 70% 192.168.99.59
rdesktop -0 -k it  -u Administrator -p mysecretpassword 192.168.1.236

Creare un file grosso per test

Crea un file di 5 GB per farlo scaricare, di byte nulli

dd if=/dev/zero of=file.iso count=5000024 bs=1024

Standard input and standard error

http://stackoverflow.com/questions/818255/in-the-shell-what-is-21

1 is stdout. 2 is stderr.

2>&1

redirect the the stderr to stdout

check the number of inode

can happen if you create a large amount of files that you running out of inode number

 sudo tune2fs -l /dev/sda1

tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          280aeac4-b62d-45a2-a6a2-82f448670acd
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              30007296
Block count:              120023552
Reserved block count:     6001177
Free blocks:              109961202
Free inodes:              29429303

last modified file inside a folder

from this link two versions http://stackoverflow.com/questions/5566310/how-to-recursively-find-and-list-the-latest-modified-files-in-a-directory-with-s

slower but work also with spaces in the directory files

find $1 -type f -exec stat --format '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head

faster but without spaces

find $1 -type f | xargs stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head

check a port without telnet with nc

the best from https://superuser.com/questions/621870/test-if-a-port-on-a-remote-system-is-reachable-without-telnet

Nice and verbose! From the man pages.
Single port:

nc -zv 127.0.0.1 80

Multiple ports:
nc -zv 127.0.0.1 22 80 8080

Range of ports:
nc -zv 127.0.0.1 20-30
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License