Linux小知識分享-壓縮包解壓之后屬主和屬組不是當前用戶問題

今天給大家分享一個Linux小知識


Linux 小知識.png

背景

假設當前Linux下用戶是root,我們從網絡上或者其他環境下載了個壓縮包進行本地解壓。

結果發現解壓之后的文件或者文件夾的 屬主和屬主 都不是當前用戶root

# 檢查當前用戶
[root@test-xxxx-01-vm /tmp/colinspace ]# id
uid=0(root) gid=0(root) groups=0(root)

# 上傳文件然后查看上傳的文件屬主和屬組信息
[root@test-xxxx-01-vm /tmp/colinspace ]# ls -l mysqld_exporter-0.15.1.linux-amd64.tar.gz
-rw-r--r-- 1 root       root        8287769 Jan 30 10:25 mysqld_exporter-0.15.1.linux-amd64.tar.gz

# 解壓文件之后查看
# 發現解壓之后的文件夾 屬主和屬組分別是 zhangsan 和 lisi 
[root@test-xxxx-01-vm /tmp/colinspace ]# tar -zxf mysqld_exporter-0.15.1.linux-amd64.tar.gz
[root@test-xxxx-01-vm /tmp/colinspace ]# ll
total 8100
drwxr-xr-x 2 zhangsan   lisi           4096 Dec 12 15:57 mysqld_exporter-0.15.1.linux-amd64
-rw-r--r-- 1 root       root        8287769 Jan 30 10:25 mysqld_exporter-0.15.1.linux-amd64.tar.gz

# 檢查系統中zhangsan 和 lisi的信息
[root@test-xxxx-01-vm /tmp/colinspace ]# grep zhangsan /etc/passwd
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
[root@test-xxxx-01-vm /tmp/colinspace ]# grep lisi /etc/group
lisi:x:1002:

根源所在

其實根源在于你解壓的時候沒有明確指定 屬主和屬組的情況下。 解壓時使用的是壓縮文件中保存的屬主和屬組信息。

可以通過 -tvf 參數組合來查看壓縮包的中文件信息( -t/--list means list the contents of an archive)

[root@test-xxxx-01-vm /tmp/colinspace ]# tar -tvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
drwxr-xr-x circleci/circleci 0 2023-12-12 15:57 mysqld_exporter-0.15.1.linux-amd64/

發現這里展示的用戶和用戶組是circleci, 但是當然主機肯定沒有這個用戶,而且也不是root

[root@test-xxxx-01-vm /tmp/colinspace ]# grep circleci /etc/passwd /etc/group

這個時候使用另外一個參數 --numeric-owner, 含義是 always use numbers for user/group names

[root@test-xxxx-01-vm /tmp/colinspace ]# tar -tvf  mysqld_exporter-0.15.1.linux-amd64.tar.gz  --numeric-owner
drwxr-xr-x 1001/1002         0 2023-12-12 15:57 mysqld_exporter-0.15.1.linux-amd64/
... ...

看到這里顯示的屬主和屬組分別是 1001 和 1002 ,不正是當前主機上對應的 zhangsan 和 lisi 么。

所以,解壓之后的屬主和屬組雖然不影響實際使用。但是顯示不是當前用戶的,總感覺有點'奇怪' ,對于運維人員而言,保持好奇心進行探究問題是好習慣哦~

寫在最后

如果想要對解壓之后的文件或者文件夾的屬主和屬組有要求,那么就只能是解壓之后再通過chown來設定屬主和屬組了

這時有人就說不是有--owner=Name--group=Name 參數可以用嗎?

當然 tar 命令確實有這兩個參數,但是它們不是在解壓的時候使用的。而是在壓縮的時候來使用修改最終存放到壓縮包中文件或者文件夾的屬主和屬組的。

注意這里說的是壓縮包總的文件或者文件夾 而不是最終的 壓縮包文件哦~

最終的 壓縮包文件的屬主和屬組是當前用戶。但是里面的文件或者文件夾的屬主和屬組會被修改為這兩個參數設定的值


我是菩提老鷹,熱愛分享,保持好奇和樂觀。有問題的小伙伴加我討論交流哦~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容