Countdown bash script

 

 

Countdown bash script:

#!/bin/bash
 
if [ "$#" -lt "2" ] ; then
    echo "Incorrect usage ! Example:"
    echo './countdown.sh -d  "Jun 10 2011 16:06"'
    echo 'or'
    echo './countdown.sh -m  90'
    exit 1
fi
 
now=`date +%s`
 
if [ "$1" = "-d" ] ; then
    until=`date -d "$2" +%s`
    sec_rem=`expr $until - $now`
    echo "-d"
    if [ $sec_rem -lt 1 ]; then
        echo "$2 is already history !"
    fi
fi
 
if [ "$1" = "-m" ] ; then
    until=`expr 60 \* $2`
    until=`expr $until + $now`
    sec_rem=`expr $until - $now`
    echo "-m"
    if [ $sec_rem -lt 1 ]; then
        echo "$2 is already history !"
    fi
fi
 
 
while [ $sec_rem -gt 0 ]; do
    clear
    date
    let sec_rem=$sec_rem-1
    interval=$sec_rem
    seconds=`expr $interval % 60`
    interval=`expr $interval - $seconds`
    minutes=`expr $interval % 3600 / 60`
    interval=`expr $interval - $minutes`
    hours=`expr $interval % 86400 / 3600`
    interval=`expr $interval - $hours`
    days=`expr $interval % 604800 / 86400`
    interval=`expr $interval - $hours`
    weeks=`expr $interval / 604800`
    echo "----------------------------"
    echo "Seconds: " $seconds
    echo "Minutes: " $minutes
    echo "Hours:   " $hours
    echo "Days:    " $days
    echo "Weeks:   " $weeks
    sleep 1
done

salviamo il file come bash-countdown.sh:

$ chmod +x bash-countdown.sh

adesso siamo pronti per il conto alla rovescia:

countdown per le ferie:

$ ./bash-countdown.sh -d "AUG 07 2010"

sab 12 giu 2010, 16.49.59, CEST
—————————-
Seconds:  0
Minutes:  10
Hours:    7
Days:     6
Weeks:    7

countdown di 90 minuti:

$ ./bash-countdown.sh -m 90

countdown per Inghilterra-Stati Uniti stasera:

$ ./bash-countdown.sh -d 20:30:00

 

Questo lo script, per chi ha bisogno di un applet, esiste timer-applet.

Xdpyinfo utility per X con ffmpeg

 

 

 

 

 

Xdpyinfo è un utility che serve a visualizzare informazioni sul server X, e quindi si può anche usare per conoscere l'esatta risoluzione del nostro schermo e successivamente abbinarlo con ffmpeg per effettuare uno screencast,argomento questo che mi appassiona ed ho già affrontato nei Top 20 comandi per ffmpeg. Per conoscere la risoluzione:

$ xdpyinfo | grep 'dimensions:'|awk '{print $2}'

per lo screencast:

$ ffmpeg -f x11grab -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -r 30 -i :0.0 -sameq /tmp/screencast.mpg

Recuperare data di nascita di un OS Gnu/Linux

Questo è un semplice comando che serve a determinare la data d'installazione del nostro O.S. Gnu/Linux, a partire dal piu vecchio file di configurazione presente nel nostro sistema.

$ ls -lct /etc | tail -1 | awk '{print $6, $7, $8}'


edmond@debianbox:~$ ls -lct /etc | tail -1 | awk '{print $6, $7, $8}'
10 mar 21.18

Blocco volontario del cdrom

 

Questo è un piccolo trucchetto che consiste nel bloccare volontariamente il cdrom. La domanda, per altro legittima che uno può farsi è: " perchè mai dovrei bloccare il cdrom? " Gli scenari possono essere diversi, io mi limito a menzionarne uno: " stai guardando un pornazzo che un amico ti ha regalato, tua moglie/fidanzata vedendoti preso e con la lingua di fuori ti chiede cosa stai vedendo, e tu, subito rispondi che ti hanno regalato un film di Bruce Lee che erano anni che non vedevi, e per questo sei affascinato dalle sue performance che non ricordavi ormai più. La risposta che hai dato sai già che non è proprio convincente, ma comunque vai avanti con la visione. Ad un certo punto sazio del film senti il bisogno di ritirarti per deliberare in bagno, e mentre ti avvii vedi un lampo balenare negli occhi di tua moglie/fidanzata, a quel punto capisci che lei sta aspettando il momento della tua delibera per andare a tirare fuori il cdrom, ma il nerd che c'è in te reagisce e prima della delibera digiti:

$ eject -i on

oppure

$ eject -i 1

che serve per bloccare il cdrom. Successivamente per sbloccare usare:

$ eject -i off

oppure:

$ eject -i 0

nel caso si hanno due cdrom scegliere quale bloccare:

$ eject cdrom0 -i on

$ eject cdrom1 -i on

La storia finisce con il classico, " e tutti vissero felice e contenti " 🙂

Mount ext2fs filesystems da Debian GNU/kFreeBSD

 

 

Oramai è un po di tempo che sto seguendo lo sviluppo di Debian GNU/kFreeBSD, con la speranza che vengano fatti velocemente un po di passi avanti, dato che credo di essere arrivato ad un bivio, e cioè, mi sta succedendo quello che un bel po di anni fa mi ha portato ad abbandonare windows per Linux, e ad innamorarmi. Questa insoddisfazione che mi attanaglia, mi sta portando, forse, dal mondo Linux a quello BSD, ma questo è un discorso che forse… non affronterò mai. Tornando in tema, vediamo come accedere alle partizioni Linux da Debian GNU/kFreeBSD. Diciamo subito che non ci sono magheggi da fare dato che il supporto ext2fs è gia presente nel kernel, quindi, per conoscere tutte le nostre partizioni:

$ ls /dev/|grep ^ad

nel mio caso:

edmond@DebianGNUkFreeBSD:~$ ls /dev/|grep ^ad
ad0
ad0s1
ad0s2
ad0s3
ad0s5
ad0s6
ad0s7
ad0s8
ad0s9
ad3
ad3s1
ad3s2
ad3s5

una volta identificata la partizione che vogliamo montare, basta un:

# mount -t ext2fs /dev/ad0s6 /mnt

Scrittura filesystem UFS con Debian

 

 

Questa guida nasce dopo l'installazione di Debian GNU/kFreeBSD, e quindi dalla necessità di dover scrivere dall'interno della mia Debian Sid il filesystem ufs. Al momento mi trovavo nella situazione solamente di lettura e montavo il filesystem ufs con il comando:

mount -t ufs -o ro,ufstype=ufs2,nodev,nosuid /dev/sdaX /mnt

e quando cercavo di scrivere con il comando:

mount -t ufs -o rw,ufstype=ufs2,nodev,nosuid /dev/sdX /mnt

mi restituiva il seguente errore:

debianbox:/home/edmond# mount -t ufs -o rw,ufstype=ufs2,nodev,nosuid /dev/sda9 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sda9,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog – try
       dmesg | tail  or so

debianbox:/home/edmond# dmesg | tail -n 1
[ 6931.531458] ufs was compiled with read-only support, can't be mounted as read-write

quindi non potevo scrivere il filesystem ufs in quanto il kernel era stato compilato con l'opzione di solo lettura. A questo punto ho deciso di ricompilare il kernel anche se è considerato “dangereous/experimental”:

sudo apt-get install build-essential bin86 kernel-package libncurses5 libncurses5-dev fakeroot module-init-tools

# cd /usr/src

# uname -r

# apt-get install linux-source-2.6.32

# bzip2 -dc linux-source-2.6.32.tar.bz2 |tar xf -

# ln -sf linux-source-2.6.32 linux

# cd linux

# cp /boot/config-2.6.32-trunk-686 .config

# make menuconfig

spostari nelle sezioni File systems  —> Miscellaneous filesystems  scegliere UFS file system write support (DANGEROUS) e poi salvare. A questo punto siamo pronti per compilare:

io ho due cpu, quindi:

# CONCURRENCY_LEVEL=2 make-kpkg --initrd --append-to-version=-ufs kernel-image kernel-headers

al completamento siamo pronti ad installare il kernel-header ed il kernel-image creati con:

# dpkg -i tutti_e_due_i_kernel

riavviamo e proviamo il nuovo kernel, se nel caso ci troviamo di fronte ad un kernel panic, il motivo è legato al fatto che non trova l'initrd, quindi risolviamo con:

# cd /usr/src

#  update-initramfs -c -k nome_kernel -t

 

Conclusioni:

Devo dire che sono due giorni che provo a scrivere nella partizione freebsd ed al momento non ho riscontrato nessun problema 🙂

Rimuovere i pacchetti del giorno

 

 

A volte ci si spaventa accorgendosi di avere fatto una cazzata, facendo un aggiornamento di cui non si è sicuri, oppure molto semplicemente dopo aver installato un po di pacchetti, per prova o esperimenti vari, si vorrebbe tornare indietro ripulendo il tutto. Ma se i pacchetti installati sono tanti è difficile ricordarsi di tutti. A questo proposito viene in aiuto questo comando che legge i pacchetti del giorno e li rimuove.

grep -e `date +%Y-%m-%d` /var/log/dpkg.log | awk '/install / {print $4}' | uniq | xargs apt-get -y remove

Grub2 menu personalizzato

 

Per chi ha diversi O.S installati risulta comodo mettere ordine al menu di Grub2. I passi a proprio rischio e pericolo 🙂 sono i seguenti:

sudo update-grub

editare grub.cfg:

sudo gedit /boot/grub/grub.cfg

a questo punto individuare e copiare solamente i menu che si desidera vedere al boot di Grub2:

Esempio: ( partendo da menuentry e finendo con } )

menuentry "Ubuntu, Linux 2.6.31-17-generic" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    set quiet=1
    insmod ext2
    set root=(hd0,9)
    search –no-floppy –fs-uuid –set eb27469e-03f8-4aa2-9a13-faa3f7689a2e
    linux    /boot/vmlinuz-2.6.31-17-generic root=UUID=eb27469e-03f8-4aa2-9a13-faa3f7689a2e ro   quiet splash
    initrd    /boot/initrd.img-2.6.31-17-generic
}

menuentry "Debian GNU/Linux, con Linux 2.6.32-trunk-686 (on /dev/sda5)" {
    insmod ext2
    set root=(hd0,5)
    search –no-floppy –fs-uuid –set 7bae8193-a97e-44df-86f2-2e9a1c59ff4d
    linux /boot/vmlinuz-2.6.32-trunk-686 root=UUID=7bae8193-a97e-44df-86f2-2e9a1c59ff4d ro quiet
    initrd /boot/initrd.img-2.6.32-trunk-686
}
menuentry "BackTrack 4, kernel 2.6.29.4 (on /dev/sda8)" {
    insmod ext2
    set root=(hd0,8)
    search –no-floppy –fs-uuid –set 2eb5129f-6bca-4e65-a667-52a1e16a44f4
    linux /boot/vmlinuz-2.6.29.4 root=UUID=2eb5129f-6bca-4e65-a667-52a1e16a44f4 ro quiet splash
    initrd /boot/initrd.img-2.6.29.4
}

poi:

sudo chmod -x /etc/grub.d/10_linux /etc/grub.d/20_memtest86+ /etc/grub.d/30_os-prober

a questo punto:

sudo nano /etc/grub.d/40_custom

ed incollare dentro i menu degli O.S preparati precedentemente.

OBBLIGATORIAMENTE

sudo update-grub

Io personalmente ho eliminato tutti e tre i file in

/etc/grub.d/10_linux /etc/grub.d/20_memtest86+ /etc/grub.d/30_os-prober

ma questa è una scelta mia personale che porta ad inserire a manina di volta in volta i nuovi kernel. Magari mi pentirò di questa scelta, ma lo scoprirò solo vivendola.

Top 20 comandi per ffmpeg

 

 

Per correttezza preciso che sono i miei Top 20 comandi 🙂 Io sono un utilizzatore assiduo di ffmpeg ed ho pensato di mettere nero su bianco i comandi che uso frequentemente, del resto credo di non essere il solo a cui piace usare prevalentemente la shell. Inizio con il menzionare alcuni comandi semplicissimi per poi successivamente passare ad alcuni più complessi, come al solito il punto di partenza da consultare è sempre il man o il web 🙂 La base da cui partire, anche se sembra banale è la conoscenza dei formati e dei codec, quindi:

Base:

ffmpeg -formats

ffmpeg -codecs

Video:

per ottenere info su un video:

ffmpeg -i video.avi

convertire da .avi a .mpg e viceversa:

ffmpeg -i input.avi output.mpg

convertire da .avi a .flv:

ffmpeg -i input.avi -sameq -ar 44100 output.flv

convertire da .flv a .mpg:

ffmpeg -i input.flv -sameq -ab 56k -ar 22050 -b 500 -s 640x480 output.mpg

convertire da .avi a .mpeg per lettori dvd:

ffmpeg -i input.avi -target pal-dvd -ps 2000000000 -aspect 16:9 output.mpeg

tagliare una sequenza video, dove -ss rappresenta il tempo d'inizio e t la fine:

ffmpeg -vcodec copy -acodec copy -i input.avi -ss 00:00:30 -t 0:0:15 output.avi

convertire video per ipod/iphone:

ffmpeg -i input.flv -acodec libfaac -ab 96k -ac 2 -vcodec libx264 -vpre hq -vpre ipod320 -threads 0 -crf 22 output.mp4

Audio:

estrarre suono da un video e convertirlo in mp3:

ffmpeg -i input.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 output.mp3

cancellare suono da un video:

ffmpeg -i input.avi -an -b 1200 output.avi

aggiungere suono ad un video:

ffmpeg -i input.wav -i input.avi output.mpg

convertire da wav a mp3:

ffmpeg -i input.wav -ab 128 output.mp3

Immagini:

convertire un video in una sequenza di immagini:

ffmpeg -i input.flv -an -r 1 -y -s 320x240 video%d.jpg

estrarre immagine da una sequenza prestabilita:

ffmpeg -i input.flv -an -ss 00:00:25 -t 00:00:01 -r 1 -y video%d.jpg

Screencast:

ffmpeg -f x11grab -s 1280x1024 -r 30 -i :0.0 /tmp/screencast.mpg

oppure:

ffmpeg -y -t 60 -r 25 -s 1280x1024 -f x11grab -i :0.0 screencast.avi

screencast utilizzando un microfono + oss:

ffmpeg -s 1280x1024 -r 25 -f x11grab -i :0.0 -f oss -i /dev/dsp screen.avi

screencast utilizzando un microfono + arecord:

arecord -D default -t raw -c 1 -f S16_LE -r 48000 - | ffmpeg -f s16le -ab 128k -ar 48000 -ac 1 -i --acodec mp2 -f x11grab -r 2 -s 1280x1024 -i :0.0 -vcodec mpeg4 screen.avi

screencast prendendo il suono direttamente da  un file mp3:

ffmpeg -f x11grab -s 1280x1024 -r 30 -i :0.0 -i percorso_del_file.mp3 -ar 22050 -ac 1 -acodec mp2 -ab 128k screen.avi

Questi sono i miei Top 20 comandi per ffmpeg, messi nero su bianco sperando di fare contento qualcun'altro 😉 e sopratutto spero che qualcuno ne posti di altri, poichè sono molto interessato 🙂