Your second error is a usage error. It's not AVRDUDE's duty to
perform the tilde expansion (using ~ as an abbreviation for $HOME),
this is the job of your shell. However, the shell will only perform
tilde expansion if there is a white space in front of the tilde (or
the tilde is the very first character on the commandline). Thus,
programming works through

avrdude ... -U ~/path/to/file

because there is a space in front of the tilde.

But reading back by

avrdude ... -U flash:r:~/path/to/file:i

does not work since the shell does not expand the tilde (and there
is no directory named "~/path/to/").

Programming through

avrdude ... -U~/path/to/file

or

avrdude ... -U flash:w:~/path/to/file

would not work either.

The solution is to explicitly write $HOME:

avrdude ... -U flash:r:$HOME/path/to/file:i

About your first problem, I need more debugging information as I don't
have an USBasp programmer handy to test myself.

I still get error when I try to program microcontroller ATmega8 by using USBasp programmer It seems like it write first byte OK (it even light up my led Diode but do not blink as it should) but it gives me constantly error verification error, first mismatch at byte 0x0040
0xff != 0xac