Archivi autore: Valerio Guaglianone

Convertire un file di testo DOS/Windows in UNIX e viceversa

I sistemi DOS/Windows utilizzano due caratteri per definire al fine di
una riga: il Line Feed (LF) ed il Carriage Return (CR), ed infatti il
fine riga si indica con LF/CR. Invece, Unix utilizza solo il LF per
definire il termine della riga. Questa disparita` genera spesso dei
problemi, come la presenza dei famosi “^M” dei file editati da
Windows e poi aperti su un sistema Linux, oppure l’ammassarsi di tutte
le linee su una sola quando un file creato sotto Unix viene aperto da
un editor poco evoluto sotto Windows

Per verificare che un file contenga effettivamente questi caratteri si
puo` utilizzare sia vi che cat:

# cat -vte $file_name

(che stampa a video anche la rappresentazione dei caratteri
non-printable) oppure

# vi -b $file_name

che edita il file in formato binario, che consente di vedere anche i
caratteri normalmente non visibili.

Per eliminare quei “^M” e` possibile usare il comando `tr’ che
elimina o traduce dei caratteri da una stringa o da un file; l’opzione
`-d’ consente di eliminare un carattere, ed il codice del Carriage
Return e` 015: dunque, per eliminare il CR dai file si deve eseguire

# tr -d ‘\015′ < file_dos.txt > file_unix.txt

oppure

# tr -d ‘\r’ < file_dos.txt > file_unix.txt (<<– meno sicuro)

Esistono inoltre i programmi `dos2unix’ e `tofromdos’, che eseguono lo
stesso compito; inoltre anche sed consente di eliminare i “^M”:

# sed ‘s/^M//’ $file_to_convert > $output_file

in realta` sarebbe piu` corretto utilizzare questa forma:

# sed ‘s/^M$//’ $file_to_convert > $output_file

in quanto identifica solo i “^M” a fine riga. Per ottenere il “^M”
a riga di comando si deve usare la sequenza di escape Ctrl+V Ctrl+M.

Anche vi/vim consentono di rimuovere il ritorno a capo di windows:

- editare il file con vi/vim
- in modalita` comando, inserire:
:%s/^M/ /g
dove il carattere ^M si ottiene con Ctrl+V + Ctrl+M

Per fare il passaggio inverso, si puo` aprire il file con `Word’ o con
`wordpad’, editor piu` evoluti di `notepad’, in grado di capire la
diversa codifica e di apportarvi “rimedio”.

Differenza tra dominio e gruppo di lavoro

In un gruppo di lavoro:

* Tutti i computer sono peer. Nessuno di essi ha il controllo su un altro.
* In ogni computer è configurato un insieme di account utente. Per utilizzare un computer in un gruppo di lavoro è necessario disporre di un account su tale computer.
* In genere sono presenti al massimo dieci-venti computer.
* Tutti i computer devono trovarsi nella stessa rete locale o subnet.

In un dominio:

* Uno o più computer sono server. Gli amministratori di rete utilizzano i server per controllare la protezione e le autorizzazioni per tutti i computer del dominio. Questo semplifica l’esecuzione di modifiche in quanto le modifiche vengono eseguite automaticamente in tutti i computer.
* Se si dispone di un account utente sul dominio, è possibile accedere a qualsiasi computer nel dominio senza un account specifico per tale computer.
* Possono essere presenti centinaia o migliaia di computer.
* I computer possono trovarsi in reti locali diverse.

Lo Stat (Unix)

stat() è una chiamata di sistema Unix che restituisce dati utili su un file di inode. La semantica della chiamata stat() varia fra i diversi sistemi operativi. Con il comando Unix ls, si può raccogliere informazioni sugli i node i particolare

* mtime: orario di ultima modifica ls -l
* ctime: orario di ultimo cambiamento di stato ls -lc e
* atime: orario dell’ultimo accesso ls -lu

Notate che ctime non è il momento della creazione del file. Infatti la scrittura di un file cambia mtime ctime e atime. Un cambiamento di permessi dei file o dei file cambia ctime e atime. La lettura di un file cambia atime. Un file system montato con l’opzione noatime non aggiorna atime se vengono effettuate chiamate di lettura. Un file system montato con l’opzione relatime prevede aggiornamenti solo se il il valore precedente di atime è piu vecchio rispetto a quello di mtime o ctime. A differenza di atime e mtime ctime non può essere impostato con la funzione utime() l’unico modo per impostare su un valore arbitrario è quindi cambiare l’orologio di sistema.

Crontab e l’esecuzione automatica e programmata dei comandi

Crontab si utilizza sotto Linux (Unix in generale) e consente lo scheduling di comandi, ovvero permette di salvarli in un file apposito (che poi vedremo) e fare in modo che il sistema li esegua in automatico ad intervalli regolari. Ora vi spiego più o meno come funziona.Crontab usa un demone chiamato crond, che è costantemente in esecuzione, e ogni minuto recupera le informazioni contenute nel file di crontab. Il file di crontab segue una certa sintassi per l’esecuzione dei processi:

* * * * * comando/da/eseguire
- – - – -
| | | | |
| | | | +—– giorno della settimana (0 – 6) (domenica=0)
| | | +——- mese (1 – 12)
| | +——— giorno del mese (1 – 31)
| +———– ora (0 – 23)
+————- minuti (0 – 59)

30 * * * * comando # viene eseguito al 30 minuto (di ogni ora, di ogni giorno)
30 1,2,3 * * * comando # viene eseguito ogni 30 minuti però solo all’una, alle due e alle tre(di ogni giorno, …)
* 1-5 * * * comando #viene eseguito ogni ora dall’una alle cinque (di ogni giorno, ….)
0,15,30,45 * 1 1 * comando #viene eseguito ogni 15 minuti di ogni ora solo il 1° gennaio
* * * * 0,5 comando > /tmp/comando.log (viene eseguito ogni domenica e venerdi e salva l’output del comando nel file).

Il Bandwidth Stealing ed Apache

Il cosiddetto “Bandwidth Stealing” ovvero “furto di banda” si verifica quando un sito linka ai contenuti di un altro, ad esempio con un link tipo:

<img src=”http://www.altrosito.com/immagine.jpg”>

A tutti gli effetti, così facendo, si sottrae banda e risorse all’altro server che quindi ne riceve un danno sia in termini di prestazioni che di costi se per caso sfora un tetto massimo di Gb trasferiti.

Con Apache + mod_rewrite si può risolvere il problema aggiungendo le seguenti righe nel file di configurazione del virtual host:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?miosito.com(/)?.*$ [NC]
RewriteRule .*\.(gif|GIF|jpg|JPG)$ – [F]

In questo primo caso qualunque richiesta di un file che termina con “gif” o “GIF” o “jpg” o “JPG” non proveniente dal mio stesso sito verrà bloccata.

Una simpatica alternativa a fronte di un tentativo di Bandwidth Stealing, potrebbe essere quella di fornire sempre una stessa immagine, magari con il nostro logo:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?miosito.com(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp)$ http://miosito.com/miologo.jpg [R,NC]

Cambiare l’hostname su MacOSX

Utilizzando un MacBook Pro con Mac OS X 10.8.x mi sono accorto che la gestione dell’hostname è un po’ bizzarra, almeno diversa dalle macchine Linux e UNIX a cui sono abituato; in sintesi, a parte la solita questione del sudo per l’utente “base”, va usato il comando “scutil”.

mac

Ecco la sintassi: sudo scutil –set HostName nuovohostname.nomedominio.com

a questo punto nel prompt di un terminale scompare quel fastidioso MacBook Pro-di-nome-cognome (dell’utente “base”) e si può avere un hostname un po’ più sensato (e sicuramente anche più breve).

Attivare/Disattivare startup servizi in Ubuntu/Debian

Eseguite:

# sysv-rc-conf

Questa piccola utility ci permette di gestire facilmente i demoni, in questo modo eliminando i demoni che non sono utili possiamo alleggerire il nostro sistema.

installazione
aprire il terminale Applicazione->Accessori->Terminale

sudo apt-get install sysv-rc-conf

Avvio del programma come utente generico di sistema (sempre da terminale)

sudo sysv-rc-conf

Eliminare i processi zombie su Linux

L’unica cosa da fare in questi casi è quella di killare il genitore che ha generato il processo.
Per verificare se esistono processi zombie è sufficiente digitare in una shell il comando:

ps aux |grep defu
rao 3599 0.2 3.5 38616 18380 ? S 22:19 0:14 gnome-panel –sm-client-id default1
rao 3605 0.4 4.6 89340 24076 ? S 22:19 0:24 nautilus –no-default-window –sm-client-id default2

Ora siamo a conoscenza dei PID degli zombie (3599 e 3605), a questo punto cerchiamo il processo genitore:

ps -def | grep 3605
rao 3605 3577 0 Jun14 ? 01:00:24 nautilus –no-default-window –sm-client-id default2

Prima di andare a killare il genitore (3577) è necessario verificare chi sia, perchè questo processo potrebbe essere proprio il programma che state usando.

ps aux |grep 3577
rao 3577 0.0 1.7 33636 8968 ? Sl Jun14 01:00 gnome-session.bin

Una volta verificato chi sia il genitore (la sesione di gnome in questo caso), e appurato che non sia un processo che ci serve, è possibile killarlo tramite un semplice kill:

kill -9 3577