BASH: bad interpreter: No such file or directory

If you are getting this error message from a linux shell

bad interpreter: No such file or directory

over and over again, may be a “path” variable setting mistake, that is the correct interpreter (e.g. bash) can’t be found and you have to specify the full path. Else the script file has been witten on a win32 machine, so the “end of line” character is ‘\r\n‘ rather than ‘\n‘.

If this last case, you can solve the problem editing the script file with “vim” and digiting:

:set fileformat=unix

and finally to save:

Script per conservare gli n file più recenti in una dir

Mi è capitato di voler tenere traccia di operazioni effettuate da script con dei file di log. Se si chiama il file di log con un nome tipo anno-mese-giorno (es:script1_AAAAMMGG.log) il numero di log cresce continuamente.

Con questo script che lancio periodicamente, vengono conservati i solo gli ultimi n file più nuovi.

Utilizzo:
keepnewestonly.sh [directory to check] [opt:maxnum] [opt:filepattern] [opt:T (testonly)]

dove

  • il primo parametro è la directory in cui effettuare la pulizia
  • il secondo (opzionale, default =20) è il numero di file che si vogliono conservare

Errore: Argument list too long

Può capitare utilizzando comandi come cp, mv, rm di ricevere il seguente messaggio di errore:

/bin/cp: Argument list too long.

Anzichè complicarci la vita, andando a modificare le impostazioni del sistema, possiamo utilizzare il find.

Per esempio se abbiamo un grande numero di file tempranei in una cartella, tutti con estensione ‘.dieg’, li possiamo cancellare (o spostare o copiare o quello che vogliamo) in questo modo:

find ./ -name '*.dieg' -exec rm -r -v {} \;

Maggiori informazioni digitando

comandi utili da terminale

  • elenca tutti i file aperti sul sistema
    lsof
    esempio: lsof | grep access.log

  • crea un link simbolico a [target] chiamato [lnkname]
    ln -s [target] [lnkname]

  • copia via ssh da riga di comando
    scp -r user@server_name:/home/user/* /home/localuser/

  • user e password

    AGGIUNTA (come root)
    useradd [-d home_dir] [-G group[,...]] [-s shell] loginname
    MODIFICA PW
    passwd loginname

Uso del TAR (NON è il tribunale amministrativo regionale!)

Esempi tipici di utilizzo del tar:

comprimere (z=filter with gzip)
tar zcvf /path/pippo.tar.gz /path2/*_200603??.log
Come si vede sono ammessi i caratteri jolly. Attenzione a non invertire gli argomenti! Altrimenti il primo file dell’elenco dei file che si vogliono archiviare viene inesorabilmente PERSO.

testare il contenuto del file
tar ztf /path/pippo.tar.gz

scompattare
tar zxvf /path/pippo.tar.gz [FILTRO]
NB: il secondo argomento (opzionale) non è la destinazione dei file decompressi, ma il pattern dei file all’interno del tarball da estrarre. La dir di destinazione è sempre “./”.

Bash, condizioni: elenco dei parametri

Ecco un esempio per interrompere un batch in mancanza del primo argomento:

#!/bin/bash
if [ -z "$1" ]; then
echo usage: $0 directory
exit
fi

Più in generale i test possibili in un file batch sono (perdonatemi l’inglese, ma la trduzione sarebbe un po’ infelice…):

-a file -> True if file exists
-b file -> True if file exists and is a block special file
-c file -> True if file exists and is a character special file
-d file -> True if file exists and is a directory
-e file -> True if file exists

PHP command line interface

Per poter lanciare script php da terminale è necessario che ci sia installato il PHP CLI.
Su sistemi debian/ubuntu il pacchetto attuale si chiama php4-cli, per cui prima verifichiamo che sia installato.

php -v

Se installato viene visualizzata la versione di PHP installata, in caso contrario generea un errore.

Per installarlo:

apt-get install php4-cli