Este é o Linux, então é fácil. Digite echo $PATH
e encontre um diretório que 1) você tenha acesso de gravação; e 2) é mais antigo na lista do que o diretório obtido de type -p dd
. Coloque esse arquivo nesse diretório, chamado dd
, e torne-o executável via chmod +x
.
Aqui está o arquivo:
----------------------------- cut here ---------------------------
#!/bin/bash
# try to prevent foot-shooting via dd - complain if if= or of= is mounted
debugmode=1
#
# either abort with a message or pass everything to the real dd
realdd="/usr/bin/dd"
if [ $debugmode = 1 ] ; then
realdd="/bin/echo"
fi
if [ ! -x "$realdd" ] ; then
echo "$0 cannot find the real dd at $realdd" >&2
exit 255
fi
errors=0
function diskok () {
# passed a parameter, if=... or of=...
# if the argument to if= or of= is "WRONG", pull the plug
param=$1;
device="${param##?f=}"
# replace this with checks of your choice. I'm simply excluding any word in /etc/fstab
if [[ $( grep -q "$device" /etc/fstab;echo $? ) = 0 ]]; then
echo "Trying to dd a mounted device $param" >&2
(( errors++ ))
fi
}
laundry=""
# Re: Those tests for if and of. You can just do if [[ $1 = if=* ]] and if [[ $1 = of=* ]]. Or, better yet, use a case statement. – muru 7 mins ago
while [[ $# -gt 0 ]] ; do
case "$1" in
if=*)
diskok "$1" ;;
of=*)
diskok "$1" ;;
esac
laundry="$laundry $1"
shift
done
if [ 0 -eq $errors ] ; then
eval "$realdd $laundry"
else
echo "Saved"
fi
----------------------------- cut here ---------------------------
Quando você tiver testado suficientemente, altere debugmode=1
para debugmode=0
.
Aqui estão meus testes:
w3@aardvark:~(254)$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 170416096 29962928 131773488 19% /
none 4 0 4 0% /sys/fs/cgroup
udev 1938252 12 1938240 1% /dev
tmpfs 390632 1104 389528 1% /run
none 5120 0 5120 0% /run/lock
none 1953148 444 1952704 1% /run/shm
none 102400 24 102376 1% /run/user
/dev/sda6 302248384 247234972 39637036 87% /home
/home/w3/.Private 302248384 247234972 39637036 87% /home/w3
/dev/sdb 3840544 1229408 2611136 33% /home/w3/mnt/CLIPZIP
w3@aardvark:~(0)$ dd bs=8293 if=/dev/sda of=/dev/sda5 of=/home
Trying to dd a mounted device if=/dev/sda
Trying to dd a mounted device of=/dev/sda5
Trying to dd a mounted device of=/home
Saved
w3@aardvark:~(254)$ dd bs=8293 if=/dev/sdaa of=/dev/sdaa5 of=/homae
bs=8293 if=/dev/sdaa of=/dev/sdaa5 of=/homae
Lembre-se de alterar o teste para o teste que você deseja.
Obrigado a @muru por [[e case