peut on ke faire avec bash , python ?
...et que lorsque l'erreur se fait par exemple
Code : Tout sélectionner
dd if=debian.iso of=/dev/sda bs=512k
Code : Tout sélectionner
dd if=debian.iso of=/dev/sda bs=512k
http://unix.stackexchange.com/questions ... ctive-diskIn other words, rather than dealing directly with the somewhat daunting command line arguments of dd directly, create a script in bash (or Python, etc) that takes the dd arguments that you're interested in, using an option syntax that you're more comfortable with. The script checks that the arguments are sensible, and prints out the arguments (and possibly the final dd command line) so you can verify that everything is as it should be. And then the script asks you "OK to proceed? [y/N]" so you have to enter y if you want the script to actually run the dd command line it's constructed for you.
Code : Tout sélectionner
si [dd= of=/dev/sda]
then
echo "commande rejeter, tu as failli effacer ton disque systeme"
alors [comande qui block la commande]
exit
Code : Tout sélectionner
function mon_dd() {
echo "$@"
if echo "$@" | grep "of=/dev/sda"; then
echo "Arrêt, écriture sur sda !"
return
fi
echo "Execution de dd"
...
...
}
alias dd=mon_dd
}
Code : Tout sélectionner
function safe_dd {
OPTIND=1
if=""
of=""
# Parse if= and of=
for i in "$@"
do
case $i in
if=*)
IF_opt="${i#*=}"
;;
of=*)
OF_opt="${i#*=}"
;;
*)
echo "Unknown option: " $i
;;
esac
done
# Check of= is not /dev/sda then run dd
if [[ $OF_opt == "/dev/sda"* ]]
then
echo "Something nasty is about to happen. Abort!"
else
echo "Command to run: dd if="$IF_opt" of="$OF_opt
echo "Write from" $IF_opt "to" $OF_opt
read -r -p "Confirm? [y/n]" answer
case $answer in
[yY][eE][sS]|[yYoO])
dd if=$IF_opt of=$OF_opt
;;
*)
echo "Abort!"
;;
esac
fi
}
pour le coup ca, je le savaisvohu a écrit : ... Si tu utilises dd avec sudo ou en root, il faut modifier le .bashrc de root et pas celui de ton user
meeerciii , c'est ce qu j'avais en tete , je modifierais juste la fonction echo a ma sauce :)Dunatotatos a écrit :Ah, du code ! Voici une fonction toute faite qui interdit l'écriture sur /dev/sda et qui demande confirmation avant l'exécution
...le sourcer, c'est bien la meme chose que compiler ?!! on est d'accord ?!Dunatotatos a écrit : Il n'y plus qu'à mettre ça dans un fichier, à le sourcer, et à créer un alias. (Et éventuellement à ajouter le support d'autres arguments.)
Code : Tout sélectionner
./define_func.sh, ou sh define_func.sh
Code : Tout sélectionner
source define_func.sh
ok , merci pour la confirmeDunatotatos a écrit :Oui, c'est bien du Bash. D'ailleurs pas POSIX, ni portable, à cause de la manipulation des chaîne de caractères.
.
et donc si je recopie cette definition dans le terminal , au prochain reboot, elle ne seras plus presente, mais justement en faisant le fichier et que je le sourceDunatotatos a écrit :
Et non, sourcer n'est pas compiler. Ce que j'ai écrit est une simple définition de fonction. Si tu copies cette définition dans ton terminal, la fonction est définie et devient utilisable.
Code : Tout sélectionner
source define_func.sh
Code : Tout sélectionner
$ chmod +x define_func.sh
oui c'est ce qu'il y a de marquer dans le bashrc , il faut creer un .bash.aliasesDunatotatos a écrit : * tu copies la définition de la fonction dans /etc/bashrc ;
* tu mets la définition de la fonction dans un autre fichier et tu sources ce fichier dans ton /etc/bashrc (source /path/to/fichier)
La différence entre les deux est minimes. Dans un cas, à l'ouverture du terminal, le fichier bashrc est interprété, et donc définie la fonction. Dans l'autre cas, le fichier bashrc est interprété, et lors de l'interprétation, le fichier /path/to/fichier est lu pour être lui aussi interprété.
Code : Tout sélectionner
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Pas de souci, j'ai aussi galéré sur la notion de sourcing quand j'ai découvert ça.Grhim a écrit :desolé de mon erreur :042:
Code : Tout sélectionner
blockdev --setro /dev/sda
Code : Tout sélectionner
# blockdev --setro /dev/sda
# echo "ok" > test
# sync
# cat /test
ok
PascalHambourg se met à l'humour... :biggrin:PascalHambourg a écrit : Il est possible de mettre un périphérique bloc en lecture seule avecDétail rigolo et important,Code : Tout sélectionner
blockdev --setro /dev/sda