Visualizzazione post con etichetta unix. Mostra tutti i post
Visualizzazione post con etichetta unix. Mostra tutti i post

mercoledì 6 maggio 2015

Esclusione di directory nel comando tar

Lanciando il comando:
tar cvf dest_file.tar  --exclude dir1/dirB  -exclude dir1/dirA  dir1
ottengo erroneamente un archivio contenente la copia della directory dir1 con l'esclusione del contenuto della sua sottodirectory dir1/dirB.

La sottodirectory dir1/dirB (che io avevo chiesto di escludere) e' stata inserita nella copia.

Per risolvere questa anomalia (presente in diverse relesase del comando tar) bisogna modificare il comando iniziale in:
tar cvf dest_file.tar  dir1 --exclude dir1/dirB  -exclude dir1/dirA[INVIO]
In pratica bisogna tener conto di queste due cose:
  1. La directory principale deve precedere le sottodirectory escluse
  2. Dopo l'ultima sottodirectory da escludere non ci possono essere spazi , quindi premere subito il tasto INVIO


lunedì 26 aprile 2010

Mantenere un programma in esecuzione

Capita che dobbiate utilizzare un programma 24 ore su 24 ma che questo, per qualche motivo, ogni tanto si chiuda. Potete usare supervise, una utility contenuta nei daemontools (vedremo come in un altro post), ma vediamo che e' possibile anche con un semplice script (in questo esempio proccheck.sh) in cui dovete sostituire nome_servizio con il nome del processo da controllare:
progname=nome_servizio
if [ "$(/sbin/pidof $progname)" = "" ]
then
  /etc/init.d/nome_servizio start
else
  echo nome_servizio is running OK
fi
Se il processo e' in esecuzione viene visualizzato un messaggio tranquillizzante, altrimenti viene fatto partire. Per essere veramente efficace, lo script deve essere lanciato da crontab con la seguente linea:
*/15 * * * * /usr/local/bin/proccheck.sh 2>&1 > /dev/null

sabato 5 dicembre 2009

Chmod ricorsivo selettivo: file o directory

Capita di dover sistemare i permessi di un albero di directory, i piu' faciloni vi diranno di lanciare un bel:
chmod -R 777 *

che sistema tutto.
Sarebbe meglio fare un uso piu' attento dei permessi e correggere separatamente quelli delle directory:
find . -type d -exec chmod 755 {} \;

e quelli dei file
find . -type f -exec chmod 644 {} \;

ATTENZIONE!!!
  • La correzione verra' fatta a partira dalla directory da cui lanciate il comando.
  • Aggiustate le permissions (755 e 644 sono solo un esempio) secondo il vostro bisogno.

venerdì 4 settembre 2009

Esempi (utili) di utilizzo del comando find

find / -type f -name *.jpg  -exec cp {} . \;
find . -type f -size +10000 -exec ls -al {} \;
find . -atime +1 -type f -exec mv {} TMP \; # mv files older then 1 day to dir TMP
find . -name "-F" -exec rm {} \; # a script error created a file called -F
find . -exec grep -i "vds admin" {} \;
find . \! -name "*.Z" -exec compress -f {} \;
find . -type f \! -name "*.Z" \! -name ".comment" -print | tee -a /tmp/list
find . -name *.ini
find . -exec chmod 775 {} \;
find . -user xuser1 -exec chown -R user2 {} \;
find . -name ebtcom*
find . -name mkbook
find . -exec grep PW0 {} \;
find . -exec grep -i "pw0" {} \;
find . -atime +6
find . -atime +6 -exec ll | more
find . -atime +6 -exec ll | more \;
find . -atime +6 -exec ll \;
find . -atime +6 -exec ls \;
find . -atime +30 -exec ls \;
find . -atime +30 -exec ls \; | wc -l
find . -name auth*
find . -exec grep -i plotme10 {};
find . -exec grep -i plotme10 {} \;
find . -ls -exec grep 'PLOT_FORMAT 22' {} \;
find . -print -exec grep 'PLOT_FORMAT 22' {} \;
find . -print -exec grep 'PLOT_FORMAT' {} \;
find . -print -exec grep 'PLOT_FORMAT' {} \;
find ./machbook -exec chown 184 {} \;
find . \! -name '*.Z' -exec compress {} \;
find . \! -name "*.Z" -exec compress -f {} \;
find /raid/03c/ecn -xdev -type f -print
find /raid/03c/ecn -xdev -path -type f -print
find / -name .ssh* -print | tee -a ssh-stuff
find . -name "*font*"
find . -name hpmcad*
find . -name *fnt*
find . -name hp_mcad* -print
find . -grep Pld {} \;
find . -exec grep Pld {} \;
find . -exec grep Pld {} \;
find . -exec grep PENWIDTH {} \; | more
find . -name config.pro
find . -name config.pro
find /raid -type d ".local_sd_customize" -print
find /raid -type d -name ".local_sd_customize" -print
find /raid -type d -name ".local_sd_customize" -ok cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;
find /raid -type d -name ".local_sd_customize" -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;
find . -name xeroxrelease
find . -exec grep xeroxrelease {} \;
find . -name xeroxrelease
find . -name xeroxrelease* -print 2>/dev/null
find . -name "*release*" 2>/dev/null
find / -name "*xerox*" 2>/dev/null
find . -exec grep -i xeroxrelease {} \;
find . -print -exec grep -i xeroxrelease {} \;
find . -print -exec grep -i xeroxrelease {} \; > xeroxrel.lis
find . -exec grep -i xeroxrel {} \;
find . -print -exec grep -i xeroxrel {} \;
find . -print -exec grep -i xeroxrel {} \; | more
find /raid/03c/inwork -xdev -type f -print >> /raid/04d/user_scripts/prt_list.tmp
find . -exec grep '31.53' {} \;
find . -ls -exec grep "31/.53" {} \; > this.lis
find . -print -exec grep "31/.53" {} \; > this.lis
find . -print -exec grep 31.53 {} \; > this.lis
find . -exec grep -i pen {} /;
find . -exec grep -i pen {} \;
find . -print -exec grep -i pen {} \; | more
find . -exec grep -i pen {} \;
find . -atime +6 -exec ll | more \;
find . -atime +6 -exec ll \;
find . -atime +6 -exec ls \;
find . -atime +30 -exec ls \;
find . -atime +30 -exec ls \; | wc -l
find . \! -name '*.Z' -exec compress -f {} \;
find . -name 'cache*' -depth -exec rm {} \;
find . -name 'cache*' -depth -print | tee -a /tmp/cachefiles
find . -name 'cache[0-9][0-9]*' -depth -print | tee -a /tmp/cachefiles
find . -name 'hp_catfile' 'hp_catlock' -depth -print | tee -a /tmp/hp.cats
find . -name 'hp_catfile' -name 'hp_catlock' -depth -print | tee -a /tmp/hp.cats
find . -name 'hp_cat*' -depth -print | tee -a /tmp/hp.cats
find . -name 'hp_cat[fl]*' -depth -print | tee -a /tmp/hp.cats
find /raid -name 'hp_cat[fl]*' -depth -print
find . \! -name '*.Z' -exec compress -f {} \;
find . -name '*' -exec compress -f {} \;
find . -xdev -name "wshp1*" -print
find . -xdev -name "wagoneer*" -print
find . -name "xcmd" -depth -print
find /usr/contrib/src -name "xcmd" -depth -print
find /raid -type d -name ".local_sd_customize" -exec ls {} \;
find /raid -type d -name ".local_sd_customize" \
-exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;

domenica 8 febbraio 2009

dns bind9: modifica zona con dynamic update

Se state aggiornando dinamicamente il vostro DNS tramite dynamic update (ad esempio, ogni volta che una macchina ottiene un indirizzo IP dal server DHCP della vostra rete), dovete fare attenzione nel caso vogliate modificare manualmente il file di definizione di una zona (ad esempio per inserire i riferimenti a un nuovo server).

I dynamic update infatti utilizzano un file .jnl (journal) in cui tengono traccia delle loro modifiche alla zona. Prima di modificare la zona manualmente dovete disabilitare il file di journal con il comando:
rndc freeze NOME_ZONA

Dopo aver completato le modifiche dovete riattivare il file di journal con il comando:
rndc unfreeze NOME_ZONA

sabato 7 febbraio 2009

Il punto finale nei nomi di dominio

Per la serie "i grandi dilemmi dell'umanita'" puo' capitare di dimenticare le situazioni in cui il nome di dominio (stiamo parlando di DNS) deve essere seguito da un punto (.).

Un piccolo promemoria:

  • Usate il punto finale nei nomi di dominio nei file:

    hosts
    hosts.rev
    named.ca
    named.local

    In questi file un nome valido di dominio potrebbe essere:
    marketing.dominio.com.

  • Non usate il punto finale nei nomi di dominio nei file

    named.boot
    resolv.conf

    In questi file il nome corretto sarebbe:
    marketing.dominio.com

domenica 7 dicembre 2008

Killare processi defunct


Dovrei cominciare a scrivere una FAQ per certe domande fatte cosi' di frequente.

Puo' capitare di trovare qualche programma irrimediabilmente piantato, eseguendo il comando
ps ax

potete trovare alcuni processi indicati come
<defunct>

E' impossibile killare questi processi direttamente, bisogna uccidere il processo genitore (c'e' chi dice padre...ma come possiamo essere sicuri del sesso di un processo?)
Conviene quindi lanciare il comando
ps -ef

che per ogni processo mostra il suo numero e quello del processo genitore,
poi eseguire il comando
kill NUMERO_PROCESSO_GENITORE

Se anche questo non bastasse siete praticamente costretti a riavviare la macchina.

venerdì 28 novembre 2008

Nome file generato da cups-pdf

Per evitare di sovrascrivere documenti gia' generati e' possibile anteporre ad ogni file un prefisso contenente il numero di job di stampa che l'ha generato.

Aprite il file /etc/cups/cups-pdf.conf
Cercate la voce seguente:
### Key: Label
## label all jobs with a unique job-id in order to avoid overwriting old
## files in case new ones with identical names are created; always true for
## untitled documents
## 0: label untitled documents only, 1: label all documents
### Default: 0

Label 0
Modificate
Label 0
in
Label 1
Fate ripartire cupsd
sudo /etc/init.d/cups restart

martedì 20 maggio 2008

SSH: usare nomi non standard per la propria chiave RSA o DSA

Normalmente il vostro client SSH, al momento di connettersi a un server, propone a quest'ultimo la vostra chiave personale. Lo fa cercando di inviargli uno dei seguenti file:

~/.ssh/identity
~/.ssh/id_rsa
~/.ssh/id_dsa

Se volete usare un nome diverso per il vostro file chiave (ad esempio $nomeutente_$data)
dovete aggiungere una linea al file /etc/ssh/ssh_config:

IdentityFile nomefilechiave


Potete aggiungere piu' linee di questo tipo in modo da poter usare tutte le eventuali chiavi del vostro sistema.

Ci sono alcuni caratteri speciali che potete usare per il nomefilechiave:

%d = home directory utente locale
%u = nome utente locale
%l = nome host locale
%h = nome host remoto
%r = nome utente remoto



Per ogni approfondimento vi rimando alla manpage:

man 5 ssh_config

lunedì 14 aprile 2008

Disabilitare X su SCO Openserver

Dopo anni di sani pinguini mi sono ritrovato a installare (per esigenze di lavoro) uno SCO Openserver 6.0.0

Non me ne facevo nulla dell'ambiente grafico (mamma mia...credevo di essere finito nel passato quando l'ho visto) e ho deciso di disabilitarlo.

Ma come si fa? Per fortuna ho trovato un vecchio appunto di tanti anni fa. E' sufficiente lanciare il comando:

scologin disable


Se per caso voleste riattivare l'ambiente grafico, vi bastera' lanciare il comando:

scologin enable

sabato 12 aprile 2008

iwgetid: a che rete wireless siamo collegati?


Comando utile da usare nei vostri script preferiti.

/usr/sbin/iwgetid


Ecco un esempio di output:

eth1 ESSID:"nome_della_mia_rete_wireless"


Un esempio di utilizzo in uno script? Detto fatto:

MIO_ESSID=`iwgetid | cut -d: -f2 | cut -d\" -f2`


In questo esempio la variabile MIO_ESSID viene valorizzata con
il nome (ESSID) della rete wireless a cui siamo collegati.

venerdì 11 aprile 2008

Diff e patch: creare e applicare una patch a un file


Creazione di una patch:

diff -uN file file.new > patch.file

Applicazione della patch per trasformare automaticamente file in file.new:

patch file < patch.file

martedì 19 febbraio 2008

Tip: file nascosti.....fatevi vedere

Se vogliamo elencare il file nascosti (quelli il cui nome inizia con il .) potete usare uno di questi due comandi:

PRIMA VERSIONE

ls -a | grep "^\."


SECONDA VERSIONE

ls -a | awk '$0~/^\./ {print $0}'

lunedì 18 febbraio 2008

Tip: l'ultima domenica del mese

Se volete eseguire un comando l'ultima domenica di ogni mese, potete usare cron e la sintassi seguente:

18 * * * 0 [`date "+%d"` -gt 24] && /path/del/vostro/script


(Il comando deve essere scritto su una unica linea)

Ovvero:

Tutte le domeniche alle 18:00 controlla se il numero del giorno e' maggiore di 24. In caso affermativo esegui lo script.

Se invece di 24 mettete 23, allora lo script verra' eseguito le ultime due domeniche del mese

sabato 8 settembre 2007

Sono tornato

Estate turbolenta, quasi tutta di lavoro a parte una piccola parentesi nella splendida Transilvania.

Frutto principale di tutto questo lavoro e' l'aver fondato una societa' di consulenza informatica: CORIMTEC



Non da meno e' stata la ristrutturazione di quello che sara' il mio ufficio...a presto le prime foto...