Pour les scripts : c'est ici

Petit script trouvé ici [0] , pour lancer n’importe quelle commande, et qu’elle soit listée en premier les prochaines fois.
Terminer une commande par “;” permet de la lancer dans un terminal

[code]#!/bin/sh

end a command with ; to run in a terminal

. ~/.dmenurc

DMENU=“dmenu -i $OPTIONS"
TERMI=“st -e"
CACHE=”$HOME/.dmenu_cache_recent”

touch $CACHE
MOST_USED=sort $CACHE | uniq -c | sort -r | colrm 1 8
RUN=(echo "$MOST_USED"; dmenu_path | grep -vxF "$MOST_USED") | $DMENU $@ &&
(echo $RUN; head -n 99 $CACHE) > $CACHE.$$ &&
mv $CACHE.$$ $CACHE

case $RUN in
*:wink: exec echo $TERMI $RUN | sed -e 's/;$//';;
*) exec $RUN;;
esac
[/code]

[0] : bbs.archlinux.org/viewtopic.php?id=56646&p=12

fonction à mettre dans son .bashrc pour facilement uploader des captures d’écran sur son serveur (scp), et coller le résultat sur un forum :
Remplacez :

  • pi:/ par utilisateur@votredomaine.net:confused: si vous n’avez pas de clés ssh et devez mettre votre mot de passe
  • /home/pi/site/scrot par le dossier où sont stockés les screenshots sut votre serveur
  • 2222 par votre port ssh
  • yeuxdelibad.net/scrot par l’adresse de votre site amenant jusqu’aux screenshots.

Preuve que ça marche :

sscrot() {
    D="$(date +%Y-%m-%d)"
    mkdir -p /tmp/scrot
    cd /tmp/scrot
    scrot -t 25 $D-scrot.png
    optipng $D-scrot.png
    optipng $D-scrot-thumb.png
    scp -P 2222 $D-scrot.png pi:/home/pi/site/scrot/
    scp -P 2222 $D-scrot-thumb.png pi:/home/pi/site/scrot/
    URL="[url=http://yeuxdelibad.net/scrot/$D-scrot.png][img]http://yeuxdelibad.net/scrot/$D-scrot-thumb.png[/img][/url]"
    echo $URL
    echo $URL |xclip
    rm /tmp/scrot/$D*.png
}

Et un autre pour la route. Le script permet de chercher et replacer du texte dans les fichiers :

[code]#! /bin/sh

sere: SEarch & REplace :: nibble at develsec.org

if [ $# -ne 3 ]; then
echo "usage: sere ";
exit 1;
fi;
for file in find $1; do
[ ! -d $file ] && sed -i “s/$2/$3/g” $file;
echo “-> $file”;
done;
echo “DONE”;
exit 0;
[/code]
nibble.develsec.org/hg/toys/file … 59fc7/sere

[quote=“thuban”]Et un autre pour la route. Le script permet de chercher et replacer du texte dans les fichiers :

[code]#! /bin/sh

sere: SEarch & REplace :: nibble at develsec.org

if [ $# -ne 3 ]; then
echo "usage: sere ";
exit 1;
fi;
find “$1” -type f -exec sed -i “s/$2/$3/g” {} +
echo “DONE”;
[/code]
nibble.develsec.org/hg/toys/file … 59fc7/sere[/quote]

[quote=“MisterFreez”][quote=“thuban”]Et un autre pour la route. Le script permet de chercher et replacer du texte dans les fichiers :

[code]#! /bin/sh

sere: SEarch & REplace :: nibble at develsec.org

if [ $# -ne 3 ]; then
echo "usage: sere ";
exit 1;
fi;
find “$1” -type f -exec sed -i “s/$2/$3/g” {} +
echo “DONE”;
[/code]
nibble.develsec.org/hg/toys/file … 59fc7/sere[/quote][/quote]

Oubli du commentaire Mr non?

Merci pour la correction :slightly_smiling:

J’ai subit une anesthésie je suis dans le coltar. Ma solution est plus simple (une seule ligne de commande) et plus rapide (on utilise moins le shell, on lance sed moins souvent), mais on a pas l’affichage au fur et à mesure.

Je suis entrain de me dire que je préfère généralement faire :

L’avantage c’est que tu ne modifie que les fichiers qui ont a être modifié (sed modifie les fichiers même s’il n’a rien à modifier dans le contenu). C’est utile avec make.

J’ai subit une anesthésie je suis dans le coltar. Ma solution est plus simple (une seule ligne de commande) et plus rapide (on utilise moins le shell, on lance sed moins souvent), mais on a pas l’affichage au fur et à mesure.[/quote]
Bah alors mon grand! Tu ferais mieux de te reposer :slightly_smiling:

Lorsque j’ai vu ta première correction, je me suis dit “bah oui, c’est comme ça que t’avais fait le dernier coup imbécile!”.

Par contre la deuxième solution, je n’y aurais pas pensé! Chouette! Elle n’a cependant pas le même effet. Elle ne change qu’une seule occurence, et ne modifie pas les fichiers “en place”

s****d ! Tu joue sur les mots^W options !

[quote=“MisterFreez”]
s****d ! Tu joue sur les mots^W options ![/quote] :angelic-green:

Au moins avec cette solution, ça ne va pas chercher dans les fichiers qui ne sont pas du texte, c’est ça?

Dans la série “couic & dirty”, voici un petit scriptounet pour télécharger vos clips favoris sur Youtube et les convertir en MP3 dans la foulée (le tout en mode batch) :stuck_out_tongue:

Pour l’utiliser, copier vos URLs youtube dans un fichier url.txt (une par ligne) puis lancer le script.

à vous l’intégrale de Michel Sardouille et de Cornouille :033

#!/bin/bash
#
# youtube2mp3.sh : download video clips from youtube and convert them to mp3
#
# requirements : clive, avconv (ffmpeg)
#
# 1. create URL list in a "url.txt" file (one URL per line)
# 2. run this script
# 3. get a coffee
#

while read URL
do
 echo "Downloading : $URL"; clive -q -f best "$URL" && echo "OK"
done < url.txt

# convert all video files to mp3 (change bitrate if needed)
for f in *.{mp4,flv,webm}; do avconv -y -i "$f" -ab 160000 -ar 44100 "$f.mp3"; done

exit 0

Ma petite contribution : voici une lib de logging que j’ai écrite et que j’utilise dans mes scripts.

Ce serait à parfaire : il faudrait rajouter deux niveaux de log-level : TRACE et DO_NOT_LOG.
Il faudrait rajouter aussi un niveau d’output.

[code]CONF_DIR=~/.config/mon_script
MAIN_CONF=mon_script.conf
LOG_DIR=$CONF_DIR/log
LOG_FILE=$LOG_DIR/mon_script.log

LOGLEVEL=debug # debug, info, warn, error, critical

Default values for MON_SCRIPT

NAME=mon_script
VERSION=1.0
DESC=“Description de mon script”

########################################

Logging

########################################

Include other functions

#DIRNAME=dirname $0
#. $DIRNAME/lib-logging.sh || { echo “Include problem. Exiting.”; exit 2; }

These functions assume the following vars are declared :

LOG_FILE, and eventually LOGLEVEL.

__LIB_LOGGING_DEFAULT_LOGLEVEL=warn

__lib_logging_get_message() {
echo “[date +'%y-%m-%d %H:%M:%S'] $*”
}

logdebug() {
case “$LOGLEVEL” in
debug)
__lib_logging_get_message “[debug] $*” >> $LOG_FILE
;;
*)
# Do nothing
exit 0
;;
esac
}

loginfo() {
case “$LOGLEVEL” in
debug|info)
__lib_logging_get_message “[info] $*” >> $LOG_FILE
echo “$@”
;;
*)
# Do nothing
exit 0
;;
esac
}

logwarn() {
case “$LOGLEVEL” in
debug|info|warn|"")
__lib_logging_get_message “[warning] $*” >> $LOG_FILE
echo “Warning: $@”
;;
*)
# Do nothing
exit 0
;;
esac
}

logerr() {
case “$LOGLEVEL” in
debug|info|warn|error)
__lib_logging_get_message “[error] $*” >> $LOG_FILE
echo “Error: $@” 1>&2
;;
*)
# Do nothing
exit 0
;;
esac
}
logerror() {
logerr $@
}

logcrit() {
# Always log that !
__lib_logging_get_message “[critical] $@” >> $LOG_FILE
echo “[CRIT] $@” 1>&2
}

Function Log : first argument must be the

logging level

log() {
# Get the logging level
if [ ! -z “$1” ]; then
case “$1” in
debug)
shift && logdebug $*
;;
info)
shift && loginfo $*
;;
warn|warning)
shift && logwarn $*
;;
error|err)
shift && logerr $*
;;
critical|crit)
shift && logcrit $*
;;
)
logdebug "No loglevel $1 found. Printing to STDOUT."
echo "$
"
;;
esac
else
if [ -z “$LOGLEVEL” ]; then
LOGLEVEL=$DEFAULT_LOGLEVEL
logwarn "LOGLEVEL undefined. Assuming $__LIB_LOGGING_DEFAULT_LOGLEVEL as the default loglevel."
fi
logwarn "log: Missing arguments."
fi
exit 0
}

########################################

/end logging

########################################
[/code]

On dit que c’est très mal de faire du développement applicatif en shell… je me rends compte que j’ai fait un vrai travail de développement directement comme ça, et ça marche plutôt bien !

Script qui installe [strike]une backdoor[/strike] une clef SSH et un pont autossh sur la machine.

À n’utiliser que pour la maintenance ! Ce genre de pont serait très facilement repérable, de toute façon. Je l’utilise pour mes amis chez qui j’installe des linuxboxes.

[code]#!/bin/sh

SM (SSH Maintenance) v 1.0

Script d’installation d’une clef ssh

Configuration pour créer un pont ssh (-R) automatiquement

afin de permettre un accès root sur la machine cible.

Réalisé par Adrien Poupin (contact@adrien-poupin.fr)

VERSION=1.0

Define your own default vars

DEFAULT_HOST=mon-hote-par-defaut.com
DEFAULT_USER=user-maintenance # Mon user par défaut
DEFAULT_PORT=65500 # Ce que vous voulez

Error codes

SSH_ERROR=10
BAD_PARAMS=11

print_title()
{
sleep 0.5
echo “\033[1;31m* $1\033[0m”
}

usage()
{
cat <<_USAGE
Usage : basename $0 [-i]
-h Afficher cette aide.
-t, --test-only
Teste uniquement les connexions et affiche les comman-
des à effectuer pour la mise en place d’un tunnel
SSH.
-i, --install
Installation. Modification de ~/.ssh/config en local,
de ~/.ssh/authorized_keys sur le serveur distnat, et
ajout du script init.
_USAGE
}

get_info()
{
print_title “Installation d’un pont SSH vers un serveur distant”

echo -n "Hôte cible ($DEFAULT_HOST) : "
read HOST
[ -z "$HOST" ] && HOST=$DEFAULT_HOST

echo -n "Utilisateur ($DEFAULT_USER) : "
read USER
[ -z "$USER" ] && USER=$DEFAULT_USER

echo -n "Commentaire (Défaut : 'hostname') : "
read COMMENT
[ -z "$COMMENT" ] && COMMENT=`hostname`

echo -n "Port à ouvrir sur l'hôte distant ($DEFAULT_PORT) : "
read REMOTE_PORT
[ -z "$REMOTE_PORT" ] && REMOTE_PORT=$DEFAULT_PORT

}

gen_key()
{
print_title “Création de la clef SSH"
ssh-keygen -t rsa -q -C “$COMMENT - port ouvert : $REMOTE_PORT” -f rsa_id
KEY=”$USER_$HOST.key"
PUBKEY="$KEY.pub"
mv -v rsa_id ~/.ssh/$KEY
mv -v rsa_id.pub ~/.ssh/$PUBKEY
}

configure_localhost()
{
print_title "Configuration de la machine locale"
if [ -z $BOOL_INSTALL ]; then
{
echo -n "Configuration automatique de $HOME/.ssh/config (o/N) ? "
read BOOL
}
else
{
BOOL=Y
}
fi

if [ "$BOOL" = "Y" -o "$BOOL" = "y" -o "$BOOL" = "O" -o "$BOOL" = "o" ]; then
{
    echo "Modification du fichier ~/.ssh/config"
    cat >> ~/.ssh/config <<EOF

Host $HOST
Hostname $HOST
Port 22
User $USER
IdentityFile ~/.ssh/$KEY
EOF
}
fi

echo "TODO : rajouter un script ssh -R $REMOTE_PORT:localhost:$HOST $USER@$HOST"

}

install_remote_key()
{
print_title "Installation de la clef sur le serveur distant"
if [ -z $BOOL_INSTALL ]; then
{
echo -n "Se connecter au serveur distant pour copier la clef (o/N) ? "
unset BOOL
read BOOL
}
else
{
BOOL=Y
}
fi

if [ "$BOOL" = "Y" -o "$BOOL" = "y" -o "$BOOL" = "O" -o "$BOOL" = "o" ]; then
{
    echo "Clef publique exportée : $(cat ~/.ssh/$PUBKEY)"
    echo "ssh $USER@$HOST ..."
    
    ssh $USER@$HOST "echo \"$(cat ~/.ssh/$PUBKEY)\" >> ~/.ssh/authorized_keys"
    
    [ $? -ne 0 ] && print_title "Erreur SSH. Abandon." && exit $SSH_ERROR
    echo "... Installation réussie !"
}
fi

}

connection_test()
{
print_title "Test de la connexion : Vous ne devriez pas avoir à taper de mot de passe."
ssh $USER@$HOST “test 1”

[ $? -ne 0 ] && echo "Erreur SSH. Abandon." && exit $SSH_ERROR
echo "Test OK !"

}

test_only()
{
print_title "Simulation."
cat <<SIMULATION
Pour mettre en place le tunnel SSH vers le serveur distant :

  1. Créer des clefs SSH avec
    ~$ ssh-keygen -t rsa -q -C “$COMMENT - port ouvert : $REMOTE_PORT” -f rsa_id
  2. Déplacer les clefs (et les renommer sous un nom parlant, ex. ~/.ssh/$HOST_$USER) vers le répertoire ~/.ssh/
  3. Ajouter la configuration sur localhost (~/.ssh/config) :
    Host $HOST
    Hostname $HOST
    Port 22
    User $USER
    IdentityFile ~/.ssh/MA_CLEF_PRIVÉE
  4. Ajouter la clef publique (~/.ssh/MA_CLEF_PRIVÉE.pub) sur l’hôte distant dans ~/.ssh/authorized_keys
  5. Tester que le pont fonctionne bien :
    ~$ ssh -R $REMOTE_PORT:localhost:22 $USER@$HOST
  6. Ajouter un script de démarrage ou un cron (nécessite autossh) :
    ~$ screen -dmS autossh autossh -R $REMOTE_PORT:localhost:22 $USER@$HOST
    SIMULATION
    exit 0;
    }

main()

if [ $# -ge “1” ]; then
{
for i in seq 1 $#; do
{
case $1 in
-i | --install) BOOL_INSTALL=“1”;;
-t | --test-only) DO_NOTHING=“1”;;
-h | --help) usage;;
*) echo “$1 : Mauvais argument”; usage; exit $BAD_PARAMS ;;
esac

    shift
}
done

}
fi

sleep 0.5
echo “\033[1;32mSSH Maintenance version $VERSION\033[0m”

Test-only case : tells the user.

[ ! -z $DO_NOTHING ] && echo “Test-only : Mode de simulation seule.”

Get the vars : HOST, USER and COMMENT

get_info

Test only

[ ! -z $DO_NOTHING ] && test_only

Generate the RSA keys to install on localhost and remote host.

gen_key

Configure the local machine to automatically make a bridge.

configure_localhost

Install the RSA key on remote host

install_remote_key

Testing the connection

connection_test

exit 0;[/code]

Vous remarquerez que ce n’est pas fini. En réalité lorsque je dois faire une install’, je télécharge le script depuis le client, je lance l’install’ et à la fin on me dit quoi rajouter, ce que je fais en root pour le screen autossh.

abt : Another Backup Tool

J’ai développé ça il y a quelque temps, ça me permet de faire la sauvegarde de mon serveur.

Tout est là : https://github.com/lebarde/abt

La sauvegarde implique de faire des actions différentes selon ce qu’on sauvegarde (un dépôt, un répertoire, une base de données).
Du coup, selon le type de chose à sauvegarder, j’ai défini des actions différentes.

Si vous avez des contributions, n’hésitez pas !

Une astuce piochée ici, et contre les spammeurs http://korben.info/flooder-spammeurs.html

Qu’en pensez vous??

Une petite variante du script youtube2mp3.sh présenté un peu plus haut.

Cette version est prévue pour télécharger des albums entiers (1 album entier = 1 vidéo youtube) et séparer automatiquement les pistes de l’album concerné (merci mp3splt. Il faudra toutefois choisir manuellement l’album concerné dans la base CDDB)

#!/bin/bash
#
# youtube-full2mp3.sh : download videos from youtube, convert them to mp3 and split tracks
#
# This version will automatically split audio tracks
# but you must enter the album name for the CDDB query
#
# requirements : clive, avconv (ffmpeg), mp3splt
# (all available in Debian 7.0+)
#
# 1. create URL list in a "url.txt" file (one youtube URL per line)
# 2. run this script
# 3. when asked, enter keywords for the CDDB query (artist name, album name...)
# 4. individual tracks will be put in the "tracks" sub-directory

while read URL; do
  echo "Downloading : $URL"; clive -q -f best "$URL" && echo "OK"
done < url.txt

for f in *.mp4 *.flv *.webm; do
  if [[ -f "$f" ]];then
    echo "--> Converting video file [$f] to mp3..."
    avconv -y -v info -i "$f" -ab 160000 -ar 44100 "$f.mp3"
    echo "--> Splitting audio tracks for [$f.mp3]..."
    mp3splt -a -c query[get=cddb_protocol://freedb.org:8880] -d tracks "$f.mp3"
  fi
done

echo "*** All done! ***"
exit 0

Capture audio/vidéo depuis une webcam

optimisé pour produire une vidéo au format mkv, avec le flux vidéo sans perte (preset “lossless”), le but du jeu étant d’obtenir une vidéo de qualité acceptable sans trop de perte de trames (dépend surtout de votre machine), que vous pourrez réencoder avant upload sur un site (avec ffmpeg2theora par exemple).

Utilisation :
[mono]./capturecam.sh[/mono]
ou
[mono]./capturecam.sh fichier.mkv[/mono]

#!/bin/bash
#
# capturecam.sh : small script for webcam video & audio capturing, using avconv (ffmpeg)
# 

myframerate=25
myvideosize=vga
myaudiorate=44100

outfile="$1"
[[ -z "$outfile" ]] && outfile="capture-$(date +%F-%H-%M-%S)_$$.mkv"

# sound input: run alsamixer to know which hw: to use
# or you can use OSS compat : -f oss -i /dev/dsp1 (be sure to install oss-compat and load oss kernel modules)

avconv\
 -f alsa -i hw:1\
 -f video4linux2 -i /dev/video0\
 -ar "$myaudiorate" -r "$myframerate" -s "$myvideosize"\
 -pre:0 libx264-lossless_ultrafast -c:v libx264 -strict experimental "$outfile"

EDIT : modification nom de fichier par défaut

[quote=“agentsteel”]Capture audio/vidéo depuis une webcam

optimisé pour produire une vidéo au format mkv, avec le flux vidéo sans perte (preset “lossless”), le but du jeu étant d’obtenir une vidéo de qualité acceptable sans trop de perte de trames (dépend surtout de votre machine), que vous pourrez réencoder avant upload sur un site (avec ffmpeg2theora par exemple).

Utilisation :
[mono]./capturecam.sh[/mono]
ou
[mono]./capturecam.sh fichier.mkv[/mono]

…/…

modification nom de fichier par défaut[/quote]
bonjour, avez vous pensé à mettre une option pour le son? peut être pour certain cas, le son pourrait etre optionnel ?
J’ai récupéré une webcam, je voudrais la mettre en continue sur ma porte d’entrée. Sans le son :slightly_smiling:

Rémi.

Pour ne pas enregistrer le son, il suffirait d’enlever la ligne

[mono]-f alsa -i hw:1[/mono]
ainsi que l’option [mono]-ar “$myaudiorate”[/mono]

Par contre pour ce que tu veux faire, l’encodage ne sera peut-être pas optimal (le format lossless prend bcp de place disque).

Et pour de la vidéosurveillance il existe des softs plus adaptés : motion et zoneminder pour les plus connus