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