![비지박스 압축 해제 도구가 심볼릭 링크를 덮어쓸 수 있나요?](https://linux55.com/image/193350/%EB%B9%84%EC%A7%80%EB%B0%95%EC%8A%A4%20%EC%95%95%EC%B6%95%20%ED%95%B4%EC%A0%9C%20%EB%8F%84%EA%B5%AC%EA%B0%80%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%EB%8D%AE%EC%96%B4%EC%93%B8%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
임베디드 장치에서 Busybox 1.32.0 패키지 도구를 사용하고 있습니다. Ubuntu 기반 x64 플랫폼에서 심볼릭 링크를 추출하려고 하면 거기에 패키지된 unzip 도구가 오류 메시지 없이 대상 디렉터리를 추출할 수 있습니다. 그러나 Busybox의 경우 이 작업을 시도하고 동일한 링크가 저장된 심볼릭 링크가 이미 있으면 다음 오류가 발생합니다.
unzip: '/usr/local/bin/sample.so.1' exists but is not a regular file
물론 실제로는 심볼릭 링크이므로 일반 파일이 아닙니다. 하지만 내가 하고 싶은 것은:
- 이 파일을 무시하고 압축 해제 프로세스를 계속합니다.
- 이 파일을 zip에 저장된 심볼릭 링크 파일로 바꿉니다.
이것을 달성할 수 있는 방법이 있나요?
답변1
아니요, 그럴 수 없습니다.
먼저 삭제해야 합니다.
이것이 실제 상황이다소스 코드:
/* Does target file already exist? */
{
int mode = get_lstat_mode(dst_fn);
if (mode == -1) {
/* ENOENT: does not exist */
goto do_open_and_extract;
}
if (overwrite == O_NEVER) {
goto skip_cmpsize;
}
if (!S_ISREG(mode)) {
fishy:
bb_error_msg_and_die("'%s' exists but is not a %
s",
printable_string(dst_fn),
"regular file"
);
}
if (overwrite == O_ALWAYS) {
goto do_open_and_extract;
}
보시다시피 이 오류를 우회할 수 있는 방법은 없습니다.