Linux - GeneralThis Linux forum is for general Linux questions and discussion.
If it is Linux Related and doesn't seem to fit in any other forum then this is the place.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
A "completely different output" to what? The checksum provided at the download site? If that number and the one you get from sha1sum are different, then something has changed or corrupted the file. Assuming both numbers are the same kind of checksum, of course--they should both have the same number of digits.
A while back I wrote a script that will compare the checksums of either two files, or a file and a pre-calculated string. Maybe you'll find it useful.
Code:
#!/bin/bash
# comparisum--a script for comparing checksums.
checktype="sha1sum" #Sets the default check type. String is the name
#of the checksum program you want it to use.
EX_HELPOUT=79 #User-defined exit. Successful output of usage information.
EX_USAGE=64 #Standard C exit code for bad arguments.
#See /usr/include/sysexits.h
IFS='
'
BCYAN='\e[1;36m' #Define some colors.
BGREEN='\e[1;32m'
BRED='\e[1;31m'
BBLUE='\e[1;34m'
BMAGENTA='\e[1;35m'
RESET='\e[0m' #disable any colors
## function that outputs usage info ##
function ShowHelp(){
if [ "$1" = "short" ]; then
cat <<FOOBAR
Usage: ${0##*/} [-t <type>] <file1|checksum1> <file2|checksum2>
For detailed help use: ${0##*/} -h
FOOBAR
elif [ "$1" = "long" ]; then
cat <<FOOBAR
Usage: ${0##*/} [-t <type>] <file1|checksum1> <file2|checksum2>
${0##*/} -h
-h : Display this help message and exit.
-t <type>: Use checksum <type> instead of the default.
(Only works with file-to-file comparisons.)
Valid types: md5 sha1 sha224 sha256 sha384 sha512
This script will compare the sha1, sha2, or md5 checksums of
two files, one file and a previously-generated checksum, or two
checksums.
If two filenames are given it will calculate and compare their
checksums. It uses sha1 by default (this can be changed in the script).
You can tell it to use a different checksum type with the -t option.
If multiple types are given, only the last one will be used.
The -t option is ignored when comparing a file to a checksum. The
type of checksum to use is instead automatically determined by the
length of the string given.
If neither argument is a file, then it will compare the two entries
as literal text strings (may be useful for comparing long checksums).
In this case the strings can be of any length.
FOOBAR
fi
}
## function that calculates checksums for files ##
function Check_Sum(){
sum1=$($checktype "$1")
echo "${sum1%% *}"
}
## function that compares the checksums of two files ##
function Compare2Files(){
filename1=${1##*/} #strip leading directories
filename2=${2##*/} # for display purposes
filesum1=$(Check_Sum "$1")
filesum2=$(Check_Sum "$2")
echo
echo -e "Comparing files ${BCYAN}$filename1${RESET} and ${BCYAN}$filename2${RESET}."
echo -e "Using ${BCYAN}$checktype${RESET} for comparison."
echo
echo -e "Sum of $filename1 is:\n${BBLUE}$filesum1${RESET}"
echo -e "Sum of $filename2 is:\n${BBLUE}$filesum2${RESET}"
echo
if [ "$filesum1" = "$filesum2" ]; then
echo -e "${BGREEN}The two files match.${RESET}"
else
echo -e "${BRED}The two files are different.${RESET}"
fi
}
## function that compares a file checksum to a given string ##
function CompareFile2Sum(){
if [ -f $1 ]; then #determine the order of arguments
file=$1
filename=${1##*/}
compstring=$2
else
file=$2
filename=${2##*/}
compstring=$1
fi
#Determine if $compstring is a valid checksum, and which type it is.
#First decide if it's hex, then test for length.
if [[ "$compstring" =~ [^0123456789abcdef] ]]; then
echo
echo -e "${BMAGENTA}String to compare is not a valid checksum. Exiting.${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE
fi
case ${#compstring} in
32) checktype=md5sum ;;
40) checktype=sha1sum ;;
56) checktype=sha224sum ;;
64) checktype=sha256sum ;;
96) checktype=sha384sum ;;
128) checktype=sha512sum ;;
*) echo
echo -e "${BMAGENTA}String to compare is not a valid checksum. Exiting.${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE ;;
esac
filesum=$(Check_Sum $file)
echo
echo -e "Comparing ${BCYAN}$filename${RESET} to the checksum given."
echo -e "Using ${BCYAN}$checktype${RESET} for comparison."
echo
echo -e "Sum of $filename is:\n${BBLUE}$filesum${RESET}"
echo -e "Sum to compare against is:\n${BBLUE}$compstring${RESET}"
echo
if [ "$filesum" = "$compstring" ]; then
echo -e "${BGREEN}The two checksums match.${RESET}"
else
echo -e "${BRED}The two checksums are different.${RESET}"
fi
}
## function that compares two strings ##
function Compare2Strings(){
echo
echo "Comparing text string one to text string two."
echo
echo -e "Text string one is:\n${BBLUE}$1${RESET}"
echo -e "Text string two is:\n${BBLUE}$2${RESET}"
echo
if [ "$1" = "$2" ]; then
echo -e "${BGREEN}The two text strings match.${RESET}"
else
echo -e "${BRED}The two text strings are different.${RESET}"
fi
}
###### Start main script operations ######
##########################################
## Process input options ##
while getopts ":ht:" option; do
case $option in
h) ShowHelp long >&2
exit $EX_HELPOUT
;;
t) case $OPTARG in
md5|sha1|sha224|sha256|sha384|sha512) checktype="${OPTARG}sum"
;;
*) echo
echo -e "${BMAGENTA}Invalid type \"${BRED}$OPTARG${BMAGENTA}\".${RESET}" >&2
echo -e "${BMAGENTA}Valid types are ${BRED}md5 sha1 sha224 sha256 sha384 sha512${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE
;;
esac
;;
\?) echo -e "${BMAGENTA}Invalid option \"${BRED}-$OPTARG${BMAGENTA}\". Ignoring.${RESET}" >&2
;;
esac
done
shift $((OPTIND-1)); OPTIND=1
## Analyze input arguments and call the appropriate functions ##
if [[ ! $1 || ! $2 || $3 ]]; then
echo
echo -e "${BMAGENTA}Invalid number of arguments.${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE
elif [[ -f $1 && -f $2 ]]; then
Compare2Files $1 $2
elif [[ ! -f $1 && ! -f $2 ]]; then
Compare2Strings $1 $2
elif [[ ! -f $1 || ! -f $2 ]]; then
CompareFile2Sum $1 $2
fi
echo
exit 0
A "completely different output" to what? The checksum provided at the download site? If that number and the one you get from sha1sum are different, then something has changed or corrupted the file. Assuming both numbers are the same kind of checksum, of course--they should both have the same number of digits.
A while back I wrote a script that will compare the checksums of either two files, or a file and a pre-calculated string. Maybe you'll find it useful.
Code:
#!/bin/bash
# comparisum--a script for comparing checksums.
checktype="sha1sum" #Sets the default check type. String is the name
#of the checksum program you want it to use.
EX_HELPOUT=79 #User-defined exit. Successful output of usage information.
EX_USAGE=64 #Standard C exit code for bad arguments.
#See /usr/include/sysexits.h
IFS='
'
BCYAN='\e[1;36m' #Define some colors.
BGREEN='\e[1;32m'
BRED='\e[1;31m'
BBLUE='\e[1;34m'
BMAGENTA='\e[1;35m'
RESET='\e[0m' #disable any colors
## function that outputs usage info ##
function ShowHelp(){
if [ "$1" = "short" ]; then
cat <<FOOBAR
Usage: ${0##*/} [-t <type>] <file1|checksum1> <file2|checksum2>
For detailed help use: ${0##*/} -h
FOOBAR
elif [ "$1" = "long" ]; then
cat <<FOOBAR
Usage: ${0##*/} [-t <type>] <file1|checksum1> <file2|checksum2>
${0##*/} -h
-h : Display this help message and exit.
-t <type>: Use checksum <type> instead of the default.
(Only works with file-to-file comparisons.)
Valid types: md5 sha1 sha224 sha256 sha384 sha512
This script will compare the sha1, sha2, or md5 checksums of
two files, one file and a previously-generated checksum, or two
checksums.
If two filenames are given it will calculate and compare their
checksums. It uses sha1 by default (this can be changed in the script).
You can tell it to use a different checksum type with the -t option.
If multiple types are given, only the last one will be used.
The -t option is ignored when comparing a file to a checksum. The
type of checksum to use is instead automatically determined by the
length of the string given.
If neither argument is a file, then it will compare the two entries
as literal text strings (may be useful for comparing long checksums).
In this case the strings can be of any length.
FOOBAR
fi
}
## function that calculates checksums for files ##
function Check_Sum(){
sum1=$($checktype "$1")
echo "${sum1%% *}"
}
## function that compares the checksums of two files ##
function Compare2Files(){
filename1=${1##*/} #strip leading directories
filename2=${2##*/} # for display purposes
filesum1=$(Check_Sum "$1")
filesum2=$(Check_Sum "$2")
echo
echo -e "Comparing files ${BCYAN}$filename1${RESET} and ${BCYAN}$filename2${RESET}."
echo -e "Using ${BCYAN}$checktype${RESET} for comparison."
echo
echo -e "Sum of $filename1 is:\n${BBLUE}$filesum1${RESET}"
echo -e "Sum of $filename2 is:\n${BBLUE}$filesum2${RESET}"
echo
if [ "$filesum1" = "$filesum2" ]; then
echo -e "${BGREEN}The two files match.${RESET}"
else
echo -e "${BRED}The two files are different.${RESET}"
fi
}
## function that compares a file checksum to a given string ##
function CompareFile2Sum(){
if [ -f $1 ]; then #determine the order of arguments
file=$1
filename=${1##*/}
compstring=$2
else
file=$2
filename=${2##*/}
compstring=$1
fi
#Determine if $compstring is a valid checksum, and which type it is.
#First decide if it's hex, then test for length.
if [[ "$compstring" =~ [^0123456789abcdef] ]]; then
echo
echo -e "${BMAGENTA}String to compare is not a valid checksum. Exiting.${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE
fi
case ${#compstring} in
32) checktype=md5sum ;;
40) checktype=sha1sum ;;
56) checktype=sha224sum ;;
64) checktype=sha256sum ;;
96) checktype=sha384sum ;;
128) checktype=sha512sum ;;
*) echo
echo -e "${BMAGENTA}String to compare is not a valid checksum. Exiting.${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE ;;
esac
filesum=$(Check_Sum $file)
echo
echo -e "Comparing ${BCYAN}$filename${RESET} to the checksum given."
echo -e "Using ${BCYAN}$checktype${RESET} for comparison."
echo
echo -e "Sum of $filename is:\n${BBLUE}$filesum${RESET}"
echo -e "Sum to compare against is:\n${BBLUE}$compstring${RESET}"
echo
if [ "$filesum" = "$compstring" ]; then
echo -e "${BGREEN}The two checksums match.${RESET}"
else
echo -e "${BRED}The two checksums are different.${RESET}"
fi
}
## function that compares two strings ##
function Compare2Strings(){
echo
echo "Comparing text string one to text string two."
echo
echo -e "Text string one is:\n${BBLUE}$1${RESET}"
echo -e "Text string two is:\n${BBLUE}$2${RESET}"
echo
if [ "$1" = "$2" ]; then
echo -e "${BGREEN}The two text strings match.${RESET}"
else
echo -e "${BRED}The two text strings are different.${RESET}"
fi
}
###### Start main script operations ######
##########################################
## Process input options ##
while getopts ":ht:" option; do
case $option in
h) ShowHelp long >&2
exit $EX_HELPOUT
;;
t) case $OPTARG in
md5|sha1|sha224|sha256|sha384|sha512) checktype="${OPTARG}sum"
;;
*) echo
echo -e "${BMAGENTA}Invalid type \"${BRED}$OPTARG${BMAGENTA}\".${RESET}" >&2
echo -e "${BMAGENTA}Valid types are ${BRED}md5 sha1 sha224 sha256 sha384 sha512${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE
;;
esac
;;
\?) echo -e "${BMAGENTA}Invalid option \"${BRED}-$OPTARG${BMAGENTA}\". Ignoring.${RESET}" >&2
;;
esac
done
shift $((OPTIND-1)); OPTIND=1
## Analyze input arguments and call the appropriate functions ##
if [[ ! $1 || ! $2 || $3 ]]; then
echo
echo -e "${BMAGENTA}Invalid number of arguments.${RESET}" >&2
ShowHelp short >&2
exit $EX_USAGE
elif [[ -f $1 && -f $2 ]]; then
Compare2Files $1 $2
elif [[ ! -f $1 && ! -f $2 ]]; then
Compare2Strings $1 $2
elif [[ ! -f $1 || ! -f $2 ]]; then
CompareFile2Sum $1 $2
fi
echo
exit 0
Hi David,
Thanks for your advice.
I solved my problem running;
Code:
$ sha256sum /path/to/.iso
The printout is exactly the same as the hash indicated on that website.
Glad you figured it out. I kind of suspected you were using the wrong kind of checksum.
Give my script a try though. Simply give it both the number and the filename, and it will automatically detect which type needs to be run when it compares them.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.