셸: 체크섬 대신 콘텐츠 파일 비교

셸: 체크섬 대신 콘텐츠 파일 비교

두 파일의 내용을 비교해야 합니다. 둘 다 세 번째 응용 프로그램에 의해 생성됩니다.

이 파일은 파일처럼 보입니다 env.

VAR1=VAL1
VAR2=VAL2
VAR3=VAL3
...

문제는 때때로 애플리케이션이 다음을 생성한다는 것입니다.

VAR2=VAL2
VAR1=VAL1
VAR3=VAL3
...

나는 이것을 md5sum체크섬이 있는 파일을 생성한 다음 이를 cmp비교하는 데 사용합니다.

따라서 내용은 동일하지만 체크섬이 다릅니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변1

파일에 상수 할당만 포함된 경우 먼저 정렬할 수 있습니다. 프로세스 대체 사용(Bash/zsh):

cmp <(sort foo) <(sort bar)

(혹은 cmp -s평소처럼)

표준 셸을 사용해야 하는 경우 임시 파일이 필요합니다.

a=$(mktemp) b=$(mktemp)
sort foo > "$a"; sort bar > "$b"
cmp "$a" "$b"
rm "$a" "$b"

그럼에도 불구하고 의미를 변경하지 않고 파일의 줄을 정렬할 수 있는지 확인해야 합니다. 여러 줄 문자열은 정렬로 인해 손상되며, 다른 변수를 참조하는 할당이 있는 경우 할당 순서도 중요합니다.

해시를 원하면 다음을 수행하십시오.

cksum1=$(sort foo | sha256sum)
cksum2=$(sort bar | sha256sum)

그러나 로컬에서 비교를 수행하는 경우 파일을 직접 비교해도 문제가 되지 않을 수 있습니다. 파일이 동일한지 확인하려면 파일 전체를 읽어야 하고, cmp찾은 경우 일찍 중지할 수 있기 때문입니다. 당신 이 할 수 없는 차이점 sha256sum.

파일이 다른 컴퓨터에 있는 경우 해시를 전달하는 것이 더 쉬울 것입니다. 하지만 가능하다면 MD5 (*) 대신 SHA-256(위에서 언급한 대로) 또는 SHA-512를 사용하는 것이 좋습니다 . busybox구현 되어 있으므로 sha256sum얻을 수도 있습니다.

물론 프로세스 교체도 임시 파일에 의존할 수 있으므로 직접 비교하려면 정렬된 임시 파일이 동시에 있어야 하지만 해시는 그렇지 않습니다. 그러나 이는 파일을 복사할 때 시스템의 저장 공간을 사용할 만큼 파일이 큰 경우에만 의미가 있습니다.

(*MD5는 충돌을 일으킬 수 있는 약점이 있는 것으로 알려져 있지만 SHA-2 해시는 더 강한 것으로 간주됩니다. MD5를 사용할 수 있는 사용 사례가 있지만 세부 사항에 따라 다르며 안전 장치가 가장 좋습니다.)

관련 정보