elsa in mac

Linux에서 yazi를 사용할 때 zip 파일을 압축해제 하지 못하는 문제의 원인과 대처법 본문

Linux/Linux 팁

Linux에서 yazi를 사용할 때 zip 파일을 압축해제 하지 못하는 문제의 원인과 대처법

elsa in mac 2025. 12. 7. 19:29

이 포스트는 Fedora Linux를 기준으로 작성되었습니다. 

오늘 .zip 압축 파일을 yazi로 압축 해제하려 하니, 압축 해제가 되지 않고, firefox(기본 웹 브라우저)가 실행되면서 해당 파일을 다운로드하겠냐고 물어보는 황당한 상황이 발생했습니다.. 

"어 이게 뭐지 ???"

평소에는 .zip 파일을 다룰 일이 없어서 이런 버그 현상이 있는지 조차 알지 못했는데, 오늘 알게 되었네요..  이것은 fedora linux 혹은 기타 다른 linux에서도 동일하게 발생할 수 있는 내제적인 bug 이므로 동일한 증상을 겪고 있다면 내용을 확인하고 조치하시기 바랍니다. 

 

문제점 파악

우선은 왜 yazi가 압축 파일을 압축파일로 인식하지 못하는지를 확인해야 했습니다.  yazi 에서 tab 키를 누르면 현재 선택된 파일에 대한 파일의 유형을 확인할 수 있습니다. 

위의 스샷을 보면, Mimetype: 에 application/octet-stream 이라고 표시가 됩니다. 

Linux는 Windows와 달리 파일 확장자라는 개념이 없습니다.  Linux에서 test.zip 이라는 것은 그냥 해당 파일의 이름 자체가 test.zip 일 뿐입니다. .zip은 확장자가 아니며 파일명의 일부일 뿐입니다.  

그럼 Linux는 파일의 유형을 어떻게 식별할까?  Linux에서는 파일의 magic number라는 것을 확인하는데, 파일들은 그 내부에 파일 유형에 따른 고유한 특정 비트열을 갖고 있습니다. 이것을 확인함으로써 해당 파일이 압축파일인지, 이미지 파일인지 아니면 일반 text 파일인지를 1차적으로 식별합니다.  그리고 2차적으로 MIME(Multipurpose Internet Mail Extensions) Type을 사용하여 파일의 유형을 식별하는데,  여기서 소위 말하는 확장자를 고려하게 됩니다. 물론 Linux에서는 파일명의 끝이 .txt 인지, .zip 인지 혹은 .png 인지를 보는 것이겠죠. 이것은 magic number로 파일의 유형이 식별되지 않을 때 보조적인 수단 입니다.  

그럼, 위의 실제 상황에서 test.zip 파일은 파일명이 끝이 .zip 일 뿐 실제로는 .zip 파일이 아니었다는 건가?

yazi는 mime type을 이용하여 파일을 식별하도록 되어 있기 때문에 mime type이 잘못 식별되면 사용자가 기대하는 결과를 얻을 수 없습니다. 

terminal에서 특정 파일의 mime type을 확인하려면 워의 스샷처럼 xdg-mime이라는 명령을 사용하면 됩니다. 역시 application/octet-stream 으로 식별이 됩니다. 

하지만, 해당 파일을 unzip 으로 압축 해제해 보면 정상적으로 압축이 해제되므로 zip 파일은 맞는데, mime 유형은 zip으로 식별하지 않는 것이 문제 입니다.  

 

원인은 file 명령의 버그

이거 왜 이런 걸까?
xdg-mime 은 내부적으로 file comand 를 사용하기 때문에 file의 문제가 있는 것이 아닐까 하는 생각이 들어 해당 github에 가 봤습니다. 

이런 이런..
일부 zip 파일을 식별되지 않은 일반 data로 판단하는 버그가 있었고, 이 버그를 수정한 commit 이 있다는 것을 확인했습니다. 

문제는 이 프로젝트의 정식 업데이트 반영 주기가 꽤나 길다는 것입니다. 버그를 식별하고 조치를 했지만, 각 Linux 배포판으로 업데이트가 안되어 있을 수 있다는 것이죠.  마지막 release가 2024년 11월 이였고, 그 이전의 기록을 보니, 대략 1년에 2번 정도를 업데이트 하는 것으로 파악이 되었습니다. 해당 commit가 2024년 12월 이니.. 1년 전인데.. 언제 Release가 될런지.. 하..

따라서, 이 문제를 해결하기 위해서는 해당 프로젝트의 소스코드를 다운로드하여 직접 빌드하고 기존에 설치된 file를 대치해야만 합니다. 

# 최신 source 코드를 clone 합니다. 
git clone https://github.com/file/file.git

# 디레토리 변경 
cd file 

# 빌드  
autoreconf -fi
./configure 
make
sudo make install 

# 실행파일은 /usr/local/bin/file 임.

위의 절차대로 소스코드를 다운로드하고, 빌드를 하고 나면 /usr/local/bin/file 에 설치가 됩니다. 기존에 package manager로 설치한 file의 경로는 /usr/bin/file 이므로 해당 파일을 임시로 백업해 놓습니다. 

# file 백업 
sudo mv /usr/bin/file /usr/bin/file-backup

기존의 file을 file-backup으로 변경했으므로, 이제 file은 /usr/local/bin/file 이 사용되게 됩니다. 

터미널에서 test.zip 파일의 type을 다시 확인해 보니, 이제 정상적으로 zip 파일로 인식합니다. 

yazi 에서도 MimeType 을 application/zip 으로 정상적으로 식별합니다. 

 

- - - - - - - - -

zip 파일을 압축해제하는 방법은 사용자들의 환경에 따라 다를 수 있습니다. 직접 터미널에서 압축관리 프로그램으로 해제 할 수도 있고, KDE나 GNOME 같은 DE를 사용하신 다면, file manager GUI 에서 압축을 해제할 수도 있을 겁니다. file manager GUI 앱들은 파일명이 확장자를 mime으로 식별하는 방식을 사용한다면 이것이 문제가 안되었을 수도 있겠단 생각이구요.  

yazi를 사용하시는 분들 중에 같은 문제를 겪고 있다면 도움이 되었으면 합니다. 

공유하기 링크
Comments