Libertà vo cercando, ch'è sì cara, come sa chi per lei vita rifiuta

Categoria: bash

tips & tricks per Gnu/Linux: Terminale

 


Una raccolta di comandi utili di quelli che “Cavolo fino a ieri ce l’avevo davanti, ora che mi serve non me lo ricordo!”

Formattare e creare FileSystem

sudo fdisk /dev/sdb
sudo mkfs.etx2 /dev/

Dare una bella ripulita ai file di configurazione dei programmi rimossi, nei sistemi Debian based

dpkg –purge `COLUMNS=300 dpkg -l | egrep “^rc” | cut -d’ ‘ -f3`
oppure
dpkg –list |grep “^rc” | cut -d ” ” -f 3 | xargs sudo dpkg –purge

 

Trovare un determinato file

  – per nome

locate -b ‘\nomeesatto’

potrebbe fallire a causa del database non aggiornato, ma allora o aggiorniamo il database con updatedb e ridiamo locate, oppure:

find /percorso/ -name nomefile

più lento (effettua una ricerca vera non in un database) ma a colpo sicuro.

   – per data di creazione 
Trova tutti i file creati nella /home: oggi (0 giorni di vita) o negli ultimi 60 minuti

find /home/ -ctime 0

find . -mmin -60 -ls | less

Cercare un comando dato in passato
Come ho detto all’inizio, mi è  capitato molte volte di dovermi andare a ricercare una guida dove indicava qual’era quel comando esatto che risolveva proprio il mio problema, ma avrei fatto prima così:

cat ~/.bash_history | egrep quelloCheMiRicordo
oppure
history | egrep quellochericordo

 

Aggiunge sudo al comando precedente

sudo !!

[alex@localhost ~]$ pacman -Sy
errore: questa operazione è possibile solo da root.
[alex@localhost ~]$ sudo !!
sudo pacman -Sy..

 

sudo -s

permette di passare a una shell di root, ovvero di poter dare più comandi come amministratore senza dover ogni volta inserire sudo e la password.

Passa come argomento, l’argomento del comando precedente!

comando $_

[alex@localhost ~]$ touch ~/documenti/leggimi
[alex@localhost ~]$ gedit $_ &
[1] 25154

Lanciare processi in background
Quando diamo un comando, è probabile che dopo vogliamo riavere subito il controllo della shell, senza attendere la terminazione di quest’ultimo, allora basterà aggiungere una “e commerciale” & alla fine del comando (vedi sopra).

Salvare e ripristinare tutti i nostri programmi dopo una formattazione
nb: NON ripristinare la lista dei programmi su una versione diversa del sistema!

dpkg --get-selections > /home/$USER/lista_pacchetti

Reinstallare la lista di pacchetti:

sudo dpkg --set-selections < /home/$USER/lista_pacchetti
sudo apt-get dselect-upgrade

Unire più file pdf :

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=fileFinale.pdf file1.pdf file2.pdf

Conoscere la versione precisa del proprio sistema 

cat /etc/*release 
cat /etc/issue 

Impostare degli alias utili
aprire il file .bashrc ( gedit ~/.bashrc ) e inserire le seguenti righe

alias up=’sudo apt-get update’
alias upg=’sudo apt-get upgrade’
alias upup=’up && upg’
alias inst=’sudo apt-get install’

.. e aggiornare il sistema sarà molto più comodo 🙂

Sbloccare il gestore degli aggiornamenti :

Lettura elenco dei pacchetti… ErroreE: Encountered a section with no Package: headerE: Problem with MergeList /var/lib/apt/lists/it.archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_PackagesE: L’elenco dei pacchetti o il file di stato non può essere letto o aperto.

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

Ripristinare file cancellati

potete trovare altri comandi qui qua!

rubrica.sh

Gestione di una semplice rubrica, con menù di modifica e salvataggio in un file esterno.

#! /bin/bash
# ES. 6
# gestione rubrica telefonica e output nel file rubrica
clear
empty(){
echo " ERR: Il file rubrica non esiste o è vuoto! "
return
}

checkNum(){
[[ $1 =~ ^([0-9]+)$ ]] && return 0;
echo " ERR: \"$1\" non è un numero intero!" && return 1;
}

thereIs () {
[[ -z `egrep ":($1)" rubrica` ]] && echo " \"$1 \" non presente! " && continue
return
}

# scelta menu
echo
PS3="inserisci la scelta: "
select scelta in visualizza inserimento eliminazione cerca_Cognome cerca_Nome Help fine
do
case $REPLY in
1) # visualizza
echo
if [ -s rubrica ]
then
more rubrica
else empty
fi
echo
;;
2) # inserisci INSERIRE CONTROLLI
echo
echo " Inserimento nuovo campo : "
printf "\n Nome: "
read nome
printf " Cognome: "
read cognome
err=0
while [ $err -eq 0 ]
do
printf " Numero: "
read num
checkNum $num
[[ $? -eq 0 ]] && err=1
done

echo "$cognome:$nome:$num" >> rubrica
sort rubrica > temp | mv temp rubrica
;;
3) # elimina
echo
echo -e " eliminazione di un record \n"
printf " inserisci nome: "
read nome
printf " inserisci cognome: "
read cognome
if [ -s rubrica ]
then
# cotrollo esistenza campo
[[ -z `egrep "^($cognome):($nome)" rubrica` ]] && echo " campo \"$cognome:$nome\" non presente " && break
egrep -v "^($cognome):($nome)" rubrica > temp
mv temp rubrica
echo " eliminazione eseguita."
else empty
fi
echo
;;
4) # ricerca cognome
echo
if [ -s rubrica ]
then
printf " inserisci il cognome: "
read cognome
thereIs $cognome
echo && egrep "^($cognome)" rubrica && echo
else empty
fi
echo
;;
5) # ricerca nome
echo
if [ -s rubrica ]
then
printf " inserisci il nome: "
read nome
thereIs $nome
echo && egrep ":($nome)" rubrica && echo
else empty
fi
echo
;;
6)
echo " HELP "
echo "1. visualizza il contenuto di rubrica "
echo "2. inserisci un nuovo record "
echo "3. eliminazione di un record "
echo "4. ricerca per cognome"
echo "5. ricerca per nome "
echo "6. questo help"
echo "7. esci"
;;
7) exit 0 ;;
*) echo " Inserisci un valore adeguato!" ;;
esac

done
exit 0

# gio 29 ott 2009 12:19:55 CET
# tux_errante

clock.sh

Semplice script bash che implementa funzioni cronologiche.
Sostituire la riga 71 : “echo ripetizione” con l’operazione che si voglia eseguire.


#! /bin/bash
#clock.sh 1) sveglia: esegue un comando ad un ora inserita
# 2) timer : per un intervallo dà un messaggio ongi x secondi
clear

ora=0000 # le funzioni non possono ritornare un valore > 255 !

check(){
while true
do
read ora
[[ $ora =~ ^(([0-1][0-9])|((2)[0-4]))([0-5][0-9])$ ]] && ora=$ora && return
printf " ERR Formato errato: inserisci un numero da [0 a 24][0 a 59] : "

done
exit 0
}

getInt(){ # controlla che i parametri immessi siano numeri
while true
do
read a
if [[ $a =~ ^([0-9]+)$ ]]
then
return $a
else
printf " devi inserire un numero: "
fi
done
exit -1
}

PS3="inserisci la scelta: "
echo
select scelta in sveglia timer help esci
do
case $REPLY in
1) echo -e "\n Modalità sveglia : ora attuale `date +%H%M` "
printf "\n inserisci ora nel fomato hhmm : "
check

while true
do
[[ $ora -eq `date +%H%M` ]] && echo -e " SVEGLIA !! \n" && exit 0
sleep 1
done
;;
2)
echo -e "\n Impostazione timer \n"
printf " inserisci valore intervallo massimo in secondi "
getInt
i=$?

printf " inserisci valore periodo "
getInt
p=$?

start=`date +%s`
let max="$start + $i" # tempo massimo
k=1
now=`date +%s`
# ho dovuto introdurre la variabile now perchè inserendo il comando date nell'until
# e nell'if dava risultati differenti a seconda dell'istantein cui venivano processati
# così invece ho fregato lo scheduler ;)
until [ $now -gt $max ] # finchè non raggiungo il tempo massimo
do
if [ $now -eq $(($start + $p)) ] # finchè non raggiungo il tempo+periodo
then
start=`date +%s`
echo "ripetizione $k"
let k+=1
fi
now=`date +%s`
done
printf " Intervallo scaduto \n\n"
exit 0
;;
3)
echo -e " \t Help "
echo " 1) SVEGLIA: esegue una determinata azione solo allo scadere dell'ora scelta."
echo " 2) TIMER: esegue una determinata azione allo scadere di ogni intervallo, all'interno di un certo periodo."
echo " 3) Help: spero ti sia d'aiuto."
echo " 4) Esci."
;;
4) break;;
*) echo " Non hai fatto una scelta valida ";;
esac
done
exit 0

#gio 22 ott 2009 19:14:38 CEST
# Alessandro Affinito

Powered by WordPress & Theme by Anders Norén