使用jar與zip壓縮解壓檔案的區別

charsi發表於2014-09-25

使用jar命令壓縮和解壓檔案不會繼承原來的許可權,切記!
而使用zip/unzip壓縮解壓檔案則會保留檔案原來的許可權等資訊,因此使用壓縮解壓的時候儘量使用專業的工具

下面是測試內容和結果:
1.首先確認使用zip/unzip會繼承檔案原來的許可權
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir tst
[root@localhost ~]# touch ./tst/aaa
[root@localhost ~]# touch ./tst/bbb
[root@localhost ~]# touch ./tst/ccc
[root@localhost ~]# ls -l ./tst
total 0
-rw-r--r-- 1 root root 0 Sep 25 00:59 aaa
-rw-r--r-- 1 root root 0 Sep 25 00:59 bbb
-rw-r--r-- 1 root root 0 Sep 25 00:59 ccc
[root@localhost ~]# chmod 700 ./tst/aaa
[root@localhost ~]# chmod 777 ./tst/bbb
[root@localhost ~]# ls -l ./tst                    -----修改三個檔案的許可權分別是700,777,644
total 0
-rwx------ 1 root root 0 Sep 25 00:59 aaa
-rwxrwxrwx 1 root root 0 Sep 25 00:59 bbb
-rw-r--r-- 1 root root 0 Sep 25 00:59 ccc

[root@localhost ~]# zip -r tst tst                 ------使用zip壓縮一個包後,將原來目錄改名
  adding: tst/ (stored 0%)
  adding: tst/bbb (stored 0%)
  adding: tst/aaa (stored 0%)
  adding: tst/ccc (stored 0%)
[root@localhost ~]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst
-rw-r--r-- 1 root root  512 Sep 25 01:00 tst.zip
[root@localhost ~]# mv tst tst_bak
[root@localhost ~]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst_bak
-rw-r--r-- 1 root root  512 Sep 25 01:00 tst.zip
[root@localhost ~]# unzip tst.zip                  ------使用unzip解壓壓縮包,檢視許可權沒有改變
Archive:  tst.zip
   creating: tst/
extracting: tst/bbb                
extracting: tst/aaa                
extracting: tst/ccc                
[root@localhost ~]# ls -l tst
total 0
-rwx------ 1 root root 0 Sep 25 00:59 aaa
-rwxrwxrwx 1 root root 0 Sep 25 00:59 bbb
-rw-r--r-- 1 root root 0 Sep 25 00:59 ccc

2.使用上面的實驗結果,測試jar解壓檔案後的變化
[root@localhost ~]# ls -l
total 24
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst_bak
-rw-r--r-- 1 root root  512 Sep 25 01:00 tst.zip
[root@localhost ~]# rm -fr tst                      ------刪除掉原來的tst目錄,然後使用jar解壓原來zip壓縮的檔案(注意umask為022)
[root@localhost ~]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst_bak
-rw-r--r-- 1 root root  512 Sep 25 01:00 tst.zip
[root@localhost ~]# ls -l /home/oracle/oracle/product/11.2.0/dbhome_1/jdk/bin/jar
-rwxr-xr-x 1 oracle dba 62492 May  6  2009 /home/oracle/oracle/product/11.2.0/dbhome_1/jdk/bin/jar
[root@localhost ~]# export PATH=$PATH:/home/oracle/oracle/product/11.2.0/dbhome_1/jdk/bin/
[root@localhost ~]# which jar
/home/oracle/oracle/product/11.2.0/dbhome_1/jdk/bin/jar
[root@localhost ~]# jar xvf tst.zip
  created: tst/
extracted: tst/bbb
extracted: tst/aaa
extracted: tst/ccc
[root@localhost ~]# ls -l tst                      ------使用jar解壓後,在umask為022的情況下,解壓後的檔案許可權為644
total 0
-rw-r--r-- 1 root root 0 Sep 25 01:06 aaa
-rw-r--r-- 1 root root 0 Sep 25 01:06 bbb
-rw-r--r-- 1 root root 0 Sep 25 01:06 ccc
[root@localhost ~]# umask 0000                      ------設定umask為000後,解壓後的檔案許可權為666
[root@localhost ~]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst_bak
-rw-r--r-- 1 root root  512 Sep 25 01:00 tst.zip
[root@localhost ~]# jar xvf tst.zip
  created: tst/
extracted: tst/bbb
extracted: tst/aaa
extracted: tst/ccc
[root@localhost ~]# ls -l tst
total 0
-rw-rw-rw- 1 root root 0 Sep 25 01:10 aaa
-rw-rw-rw- 1 root root 0 Sep 25 01:10 bbb
-rw-rw-rw- 1 root root 0 Sep 25 01:10 ccc
[root@localhost ~]#

因此可以得出,jar解壓後檔案的許可權與使用者當前的umask有關係,而與檔案在原來壓縮包中的許可權沒有關係。不會繼承原來壓縮包中的許可權

3.測試jar壓縮的時候會不會記錄檔案的許可權
[root@localhost ~]# rm -fr tst tst.zip    ----刪除原來的檔案,然後設定umask為022,使用jar壓縮帶許可權的檔案,然後使用unzip解壓
[root@localhost ~]# mv tst_bak tst
[root@localhost ~]# ls -l tst
total 0
-rwx------ 1 root root 0 Sep 25 00:59 aaa
-rwxrwxrwx 1 root root 0 Sep 25 00:59 bbb
-rw-r--r-- 1 root root 0 Sep 25 00:59 ccc
[root@localhost ~]# umask 022
[root@localhost ~]# jar cvf tst.zip tst
added manifest
adding: tst/(in = 0) (out= 0)(stored 0%)
adding: tst/bbb(in = 0) (out= 0)(stored 0%)
adding: tst/aaa(in = 0) (out= 0)(stored 0%)
adding: tst/ccc(in = 0) (out= 0)(stored 0%)
[root@localhost ~]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst
-rw-r--r-- 1 root root  699 Sep 25 01:19 tst.zip
[root@localhost ~]# mv tst tst_bak
[root@localhost ~]# unzip tst.zip
Archive:  tst.zip
   creating: META-INF/
  inflating: META-INF/MANIFEST.MF   
   creating: tst/
extracting: tst/bbb                
extracting: tst/aaa                
extracting: tst/ccc                
[root@localhost ~]# ls -l tst            ---可以看到,使用unzip解壓後的檔案許可權為644
total 0
-rw-r--r-- 1 root root 0 Sep 25 00:59 aaa
-rw-r--r-- 1 root root 0 Sep 25 00:59 bbb
-rw-r--r-- 1 root root 0 Sep 25 00:59 ccc
[root@localhost ~]# rm -fr tst            ---刪掉解壓後的檔案,設定umask為000,再解壓發現解壓檔案的權現為666
[root@localhost ~]# ls -l
total 24
drwxr-xr-x 2 root root 4096 Jun  4 20:56 Desktop
drwxr-xr-x 2 root root 4096 Sep 25 01:19 META-INF
drwxr-xr-x 2 root root 4096 Sep 25 00:59 tst_bak
-rw-r--r-- 1 root root  699 Sep 25 01:19 tst.zip
drwxr-xr-x 7 root root 4096 Jan 22  2010 vmware-tools-distrib
[root@localhost ~]# umask 0000
[root@localhost ~]# umask
0000
[root@localhost ~]# unzip tst.zip
Archive:  tst.zip
replace META-INF/MANIFEST.MF? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
  inflating: META-INF/MANIFEST.MF   
   creating: tst/
extracting: tst/bbb                
extracting: tst/aaa                
extracting: tst/ccc                
[root@localhost ~]# ls -l tst
total 0
-rw-rw-rw- 1 root root 0 Sep 25 00:59 aaa
-rw-rw-rw- 1 root root 0 Sep 25 00:59 bbb
-rw-rw-rw- 1 root root 0 Sep 25 00:59 ccc
[root@localhost ~]#

因此可以判斷,使用jar壓縮的檔案,解壓後與系統當前環境的umask有關係。

通過這個實驗可以判斷,jar壓縮和解壓的時候,不會記錄檔案的許可權.建議我們在使用這些工具的時候,一定要熟悉它們的特點

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-1280734/,如需轉載,請註明出處,否則將追究法律責任。

相關文章