Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: Linux

zstd 其實不支援多檔案解壓縮

Posted on 2025 年 3 月 6 日2025 年 3 月 6 日 By 日落 在〈zstd 其實不支援多檔案解壓縮〉中尚無留言

zstd 是由 Facebook 開發的一個壓縮演算法,由於壓縮率、花費時間介於 gzip 與 bzip2 之間,且支援多執行緒,近期很紅。

稍早看了 zstd 的 manual,有個 -r 參數的說明:

-r: operate recursively on directories

想說支援巢狀檔案結構,解壓縮會輕鬆一些,就直接使用 -r 來備份整個目錄:

tree -a www
www
├── docker-compose.yaml
└── .env

zstd -T4 -r www/ -o web-backup.zst

結果在解壓縮時發現問題,解壓縮以後不會還原資料結構,只會變成一個包含所有檔案內容的檔案:

unzstd web-backup.zst
web-backup.zst      : 27 bytes

ls
web-backup

查了一下資料,發現 Github 上有 issue 卻被 closed,而 StackExchange 上的文章也說明無法還原目錄結構。

如果你用了 zstd -r 的話,請注意資料可能無法復原,還是使用 tar 比較保險。


tar 使用 -z 時,會使用 gzip 壓縮檔案內容,指令大概長這樣:

tar zcvf web-backup.tgz www/

若要使用 bzip2 時,參數則為 -j:

tar jcvf web-backup.tbz www/

若想要使用 zstd,可以透過 tar -I 的參數來指定要使用的壓縮工具:

  • 使用 pigz 來壓縮:tar -I pigz -cvf web-backup.tgz www/
  • 使用 lbzip2 來壓縮:tar -I lbzip2 -cvf web-backup.tbz www/
  • 使用 zstd 則是:tar -I zstd -cvf web-backup.tbz www/

zstd 預設只會使用 1 個執行緒來壓縮,若要支援多個執行緒記得加上 -T 參數:

tar -I 'zstd -T4' -cvf web-backup.tbz www/
Tags:Linux

更改 Kali Linux 的使用者界面語言

Posted on 2024 年 6 月 8 日2024 年 6 月 8 日 By 日落 在〈更改 Kali Linux 的使用者界面語言〉中尚無留言

幾年前,在安裝時 Kali Linux 就會自動設定桌面環境的語言,安裝完成後就有中文界面可以使用。

新版的 Kali Linux 安裝完成後,預設還是使用英文。若要調整桌面環境的預設語言,必須透過 dpkg-reconfigure 修改:

sudo dpkg-reconfigure locales

選擇要安裝的 locales 以及預設的 locale,個人除了安裝 zh_TW 以外,還會使用 en_US,畢竟英文的錯誤訊息在網路上比較容易查資料:

選擇欲安裝的語言
選擇預設語言

設定完畢,重新開機即可看到中文環境。

ps. 若要使用中文輸入法,仍需要自行安裝

Tags:Kali, Linux

/tmp 滿了導致 docker 出錯

Posted on 2024 年 1 月 25 日2024 年 1 月 25 日 By 日落 在〈/tmp 滿了導致 docker 出錯〉中尚無留言

docker 遇到奇怪的錯誤訊息:

docker-compose up -d
Failed to write all bytes for unicodedata.cpython-37m-x86_64-linux-gnu.so
fwrite: No space left on device

看到 no space left 基本上先 df 看一下,剛好發現 /tmp 炸了:

df -h
....
tmpfs           256M  256M     0 100% /tmp

清乾淨以後就恢復正常了。

理論上 /tmp 給 256 MB 理論上應該算夠大了,被塞爆不太正常,找時間翻一下是不是有服務出錯吧


看到另個作法,是讓 docker 清除不需要的資料來釋放空間:

docker system prune -af

docker rmi $(docker images -f dangling=true -q)
Tags:Docker, Linux

shell script 中取得前一個指令的輸出內容

Posted on 2023 年 11 月 28 日 By 日落 在〈shell script 中取得前一個指令的輸出內容〉中尚無留言

假設要將 ls 的結果儲存到變數中,則可用下面的語法:

# 將結果儲存到 $OUTPUT 中
OUTPUT=$( ls / )

echo $OUTPUT

如果要將 stderr 也儲存下來,則加上 redirect:

OUTPUT=$( ls /not/exists 2>&1 )
Tags:Bash, Linux, shellscript

Bash 設定指令逾時時間

Posted on 2023 年 11 月 17 日2023 年 11 月 17 日 By 日落 在〈Bash 設定指令逾時時間〉中尚無留言

透過 timeout 設定指令最長可以跑多久。

timeout 3s sleep 1
echo "$?"
0

timeout 3s sleep 5
echo "$?"
124
Tags:Bash, Linux, shellscript

文章分頁

1 2 ... 32 下一頁

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.