Archive for the Linux Category

PHP: Eseguire codice da Shell

| maggio 12th, 2009

Qualche giorno fa dovevo eseguire delle operazioni lato server e per curiosità ho provato a confezionare degli script eseguibili da shell scritti in php e devo dire che  la cosa non è affatto male.

Le operazioni da seguire per lanciare degli script php da shell sono molto semplici, prima di tutto bisogna sapere dove è installato php sul server in maniera da dichiararne il percorso a monte dello script, solitamente il percorso è /usr/bin/php ma se non si è sicuri basta eseguire il comando which php e si saprà dove è installato.
Quindi la prima riga del nostro file deve essere così:

#!/usr/bin/php

Successivamente dobbiamo rendere eseguibile il nostro script settando i permessi sul file:

chmod +x nomescript.php.

A questo punto il nostro file è pronto per essere eseguito da shell:

./nomescript.php.

Se il nostro script fose come questo:

1
2
3
4
#!/usr/bin/php
<?php
echo 'Ciao mondo';
?>

nella finestra del terminale verrà stampato:

Ciao mondo

Se state lanciando un script bash da php e non funziona provate a lanciarlo da shell e se il risultato è l’errore:

bad interpreter: No such file or directory

probabilmente non viene riconosciuto il bash oppure, più semplicemente, il file è stato formattato con i caratteri di a capo in stile Windows e non Unix.

In pratica Windows per andare a capo scrive \r\n, invece un file bash corretto deve utilizzare solamente \n, quindi basta formattare il file in formato Unix e il problema si risolve.

Molte volte mi è capitato di dover lavorare tramite terminale collegato in ssh e cercare parti di stringhe all’interno di files, ma nella maggior parte dei casi l’output del comando grep risulta un po’ disordinato e non si riesce a capire al volo quali files sono interessati.
Allora ho scritto questo comando che risolve i problemi di lettura, mostrando l’elenco dei files “pulito”.

grep -i ‘MyString’ * | cut -f 1 -d:

In pratica dopo il pipe viene eseguito il comando cut e gli viene detto di splittare la stringa con il carattere “:” (-d:) e restituire il primo valore dello split (-f 1).

Il risultato è simile a questo esempio:

1
2
3
4
5
6
grep -i 'MyString' * | cut -f 1  -d:
file_prova1.php
file_prova2.php
file_prova3.php
file_prova4.php
...

Io ho applicato questo sistema al grep ma ovviamente si può splittare qualsiasi stringa.

Con un semplice ls non si riesce ad avere il numero di file che si trovano all’interno di una cartella, ma bisogna eseguire questa istruzione ed il numero totale verrà stampato nelle finestra del vostro terminale.

Comando: find Cartella -type f | wc -l

Anche questo script è una cosa banale ma molte volte non si ricorda e non si sa mai dove trovarlo… ora è qui, a vostra e mia disposizione! :-)

Mi è capitato più volte di aver di fronte un file tgz di alcuni GB e doverlo scompattare per recuperare un solo file, quindi ogni volta ho dovuto “inventarmi” il comando per estrarre il file.

Siccome mi è capitato anche oggi (…) per non dimenticarmelo eccolo qui: zcat archivio | tar -x nome_file

Es: zcat archivio.tgz | tar -x file.php

(Se il file cercato è dentro una cartella allora bisognerà riportare l’intero percorso, cartella/file.php)

Ora so dove trovarlo!