![파일 데이터가 특정 16진수 시퀀스로 시작하는 경우 해당 파일에 대해 strings 명령을 실행합니다.](https://linux55.com/image/109983/%ED%8C%8C%EC%9D%BC%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B0%80%20%ED%8A%B9%EC%A0%95%2016%EC%A7%84%EC%88%98%20%EC%8B%9C%ED%80%80%EC%8A%A4%EB%A1%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20%ED%95%B4%EB%8B%B9%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EB%8C%80%ED%95%B4%20strings%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4..png)
디렉터리를 재귀적으로 크롤링하고 파일에 처음 4바이트가 있으면 해당 파일에서 실행 \x58\x46\x53\x00
하고 싶습니다 .strings
답변1
이것이 자주 사용하는 파일 형식인 경우에는 ~/.magic
이를 사용자(또는 시스템 매직 파일)에 정의하겠습니다.
0 long 0x00534658 XFS-file
(리틀 엔디안 시스템을 사용한다고 가정). 이제 file
다음 명령을 사용하여 테스트할 수 있습니다.
$ file testfile
testfile: XFS-file
다음을 테스트하기 위해 이를 수행할 수 있습니다.
if [[ `file -b testfile` == XFS-file ]]; then strings testfile; fi
답변2
h_signature=$(echo 58465300 | tr 'a-f' 'A-F')
read -r x a b x <<<$(od --endian=big -N 4 -t x2 yourfile | tr 'a-f' 'A-F')
case "$a$b" in "$h_signature" ) strings yourfile ;; esac
메틸-2:
dd if=yourfile count=4 bs=1 2>/dev/null |
perl -lpe '$_ = uc unpack "H*"' | xargs test "$h_signature" = && strings yourfile
메틸-3:
head -c 4 yourfile | xxd -ps -g 4 | grep -qwi "$h_signature" && strings yourfile
답변3
파일의 처음 4바이트가 특정 문자열 XFS\0
(질문의 16진수 바이트 시퀀스에 해당하는 문자열)인지 확인하려면 다음을 수행하세요.
if od -N 4 -a file | grep -qF 'X F S nul'; then
strings file
fi
od -N 4 -a
파일의 처음 4바이트를 단일 바이트 문자 표시 형식으로 변환합니다. 우리는 이것을 사용하여 우리가 찾고 있는 것과 비교하여 출력을 테스트합니다 grep -qF
.od
리틀 엔디안 시스템에서는 od -N 4
추가 플래그 없이 grep을 사용할 수 있습니다 043130 000123
.
또는:
if od -N 4 -A n -c file | tr -d ' ' | grep -qF 'XFS\0'; then
strings file
fi