Arm

busybox 解壓縮工具可以覆蓋符號連結嗎?

  • August 26, 2021

我在嵌入式設備中使用 Busybox 1.32.0 包工具。當我在基於 Ubuntu 的 x64 平台中時,如果我嘗試提取符號連結,則打包在那裡的解壓縮工具可以提取目標目錄而不會提示任何錯誤。但是,在 Busybox 的情況下,當我嘗試執行此操作並且已經有一個符號連結與儲存在那裡的相同連結時,我收到此錯誤:

unzip: '/usr/local/bin/sample.so.1' exists but is not a regular file

當然它不是一個正常文件,因為它實際上是一個符號連結。但我想做的是:

  • 繼續解壓縮過程忽略此文件。
  • 將此文件替換為 zip 中儲存的符號連結文件。

有什麼辦法可以做到這一點?

不,它不能。

您必須先將其刪除。

這是實際的原始碼

               /* 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;
                       }

如您所見,無法繞過該錯誤。

引用自:https://unix.stackexchange.com/questions/659437