개요
xxd는 `hexdump`나 `od`와 유사하게 바이너리 파일의 내용을 16진수와 ASCII 문자열로 보여줍니다. 하지만 가장 큰 특징은 덤프된 내용을 다시 원본 바이너리 파일로 되돌릴 수 있는 **역변환(reverse) 기능**입니다. 이 기능 덕분에 바이너리 파일을 텍스트 에디터에서 16진수 형태로 수정하고, `xxd -r`을 사용해 다시 바이너리 파일로 저장하는 작업이 가능합니다. 이 유연성은 바이너리 파일 분석 및 수정, 특히 `vim` 편집기와 함께 사용할 때 매우 강력합니다.
주요 특징
xxd 명령어의 주요 특징은 다음과 같습니다.
- 파일의 내용을 16진수 및 ASCII 형식으로 출력합니다.
- 16진수 덤프를 다시 원본 바이너리로 역변환할 수 있습니다.
- 일반 텍스트 에디터와 함께 바이너리 파일 수정에 활용할 수 있습니다.
- 출력 형식을 세부적으로 제어하는 옵션이 다양합니다.
xxd와 hexdump의 차이점
xxd와 hexdump는 16진수 덤프 기능은 유사하지만, 역변환 기능 유무에서 가장 큰 차이를 보입니다.
- xxd: 16진수 덤프를 원본 바이너리로 되돌리는 `역변환` 기능(`-r`)을 제공합니다. `vim`과의 통합 기능이 강력합니다.
- hexdump: 덤프 기능에만 초점을 맞춘 도구로, 역변환 기능은 없습니다.
주요 옵션
자주 사용하는 xxd 명령어의 옵션을 목적에 따라 그룹화했습니다.
1) 덤프 및 역변환 옵션
2) 도움말
생성된 명령어:
명령어를 조합해 보세요.
설명:
`xxd` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
xxd 명령어의 다양한 사용 예시를 통해 기능을 익혀보세요.
파일 내용 16진수 덤프
echo 'Hello World!' > test.txt
xxd test.txt
`test.txt` 파일의 내용을 16진수 및 ASCII 문자로 출력합니다.
16진수 덤프를 파일로 저장
xxd /bin/ls > ls_dump.txt
바이너리 파일 `/bin/ls`의 내용을 `ls_dump.txt` 파일로 저장합니다.
덤프 파일을 원본으로 역변환
xxd -r ls_dump.txt ls_copy
이전에 저장한 `ls_dump.txt` 파일을 원본 바이너리 파일 `ls_copy`로 되돌립니다. **이 기능이 xxd의 가장 큰 특징입니다.**
vim과 함께 바이너리 파일 편집
vim file.bin
(vim에서) :%!xxd
(편집)
(vim에서) :%!xxd -r
`vim`에서 `%!xxd` 명령으로 현재 파일을 16진수 덤프 모드로 전환하고, 수정한 후 다시 `%!xxd -r`로 되돌려 저장합니다.
설치
xxd는 `vim` 패키지에 포함되어 있습니다. 대부분의 리눅스 배포판에 `vim-common` 또는 `vim` 패키지가 기본적으로 설치되어 있으므로, 별도의 설치가 필요하지 않습니다.
Debian/Ubuntu
sudo apt update
sudo apt install -y vim-common
RHEL/CentOS/Fedora
sudo dnf install -y vim-common
팁 & 주의사항
xxd 명령어 사용 시 유의할 점들을 정리했습니다.
팁
- `xxd`의 `-r` 옵션은 오직 `xxd`로 생성된 덤프 파일만 정상적으로 역변환할 수 있습니다. 다른 형식의 16진수 덤프 파일에는 적용되지 않을 수 있습니다.
- 바이너리 파일을 수정할 때는 매우 신중해야 합니다. 잘못된 바이트 하나가 프로그램 전체를 망가뜨릴 수 있습니다.
- 역변환 시 원본 파일에 덮어쓰지 않도록, 항상 다른 파일 이름으로 저장하는 것이 안전합니다. (예: `xxd -r old.hex > new.bin`)