1. 程式人生 > >Linux權限問題(2)-unzip引發的權限問題

Linux權限問題(2)-unzip引發的權限問題

res gen pie 描述 this 執行權 disk 也不會 sin

背景:依然是上一個朋友,在用php調用unzip命令時,再次出現了權限被拒絕的問題.

Notice:此處描述的問題,為使用php命令行執行php文件,因此進程屬主為登錄的用戶,而不是nginx用戶.

以root身份登錄,給myuser的家目錄設置讀和執行的權限

Notice:cd到一個目錄,需要對該目錄具有執行權限,否則會出現權限被拒絕的提示.

# chmod a+rx myuser
# ll -d myuser
drwxr-xr-x. 2 myuser myuser 4096 Jun 29 17:48 myuser

使用redheat用戶,進入myuser用戶的家目錄

$ ll -d `pwd
` drwxr-xr-x. 2 myuser myuser 4096 Jun 29 18:02 /home/myuser $ whoami redheat

可以看到,redheat對該目錄只有讀和執行的權限.

執行unzip命令進行解壓

$ unzip /home/redheat/zip_test/sysinfo.zip 
Archive:  /home/redheat/zip_test/sysinfo.zip
error:  cannot create sysinfo.go
        Permission denied

很明顯,出現了權限被拒絕的提示.

unzip默認會把文件解壓到你當前所在的目錄(pwd所顯示的目錄),當你對該目錄沒有寫權限時,就會出現了權限問題.

unzip指定目錄解壓的參數為-d.

$ unzip /home/redheat/zip_test/sysinfo.zip -d /home/redheat/zip_test/
Archive:  /home/redheat/zip_test/sysinfo.zip
  inflating: /home/redheat/zip_test/sysinfo.go  
$ ll /home/redheat/zip_test/
total 16
-rw-r--r--. 1 redheat redheat 11140 Jun 15 15:41 sysinfo.go
-rw-r--r--. 1 root    root     2167 Jun 29
18:04 sysinfo.zip

小技巧: 例如上面所用,第一次用完/home/redheat/zip_test/,第二次又要使用該參數,則輸入ESC,.(ESC按下後松開,然後按下.),該參數就會自動填寫. 馬哥Linux base學習筆記中有更多快捷鍵.

下面介紹unzip的-f和-u的區別

摘自man文檔
-f     freshen  existing files, i.e., extract only those files that already exist on disk and that are newer than the disk copies.
    更新存在的文件.(只有這些文件已經在磁盤上存在,並且比磁盤上的副本更新時)
-u     update existing files and create new ones if needed.  This option performs the same function as the -f option, extracting (with query) files that are newer than those with the same name on disk, and in addition it extracts those files that do not already exist on disk. 
    更新存在的文件,如果需要的會創建新的.這個選項類似於-f,解壓同名的並且更新的文件,而且附加的,它還會解壓沒有在磁盤上存在的文件.

好吧,我英文不好,翻譯比較爛.

但是很明顯可以看出,當壓縮包裏的文件沒有變動時,-f選項不會執行任何操作,而且壓縮包內之前沒有的文件,後來又添加進去,再執行解壓,它也不會將新文件解壓出來.

而-u選項,同樣的當壓縮包裏的文件沒有變動時,不會執行任何操作,但是如果壓縮包內有新加文件時,-u選項會將新文件解壓出來.

$ unzip -f sysinfo.zip 
Archive:  sysinfo.zip
$ ll
total 2024
-rw-r--r--. 1 redheat redheat   11140 Jun 15 15:41 sysinfo.go
-rw-r--r--. 1 redheat redheat 2056718 Jun 29 18:29 sysinfo.zip
$ unzip -u sysinfo.zip 
Archive:  sysinfo.zip
  inflating: monitor_agent.tar.bz2   
$ ll
total 4032
-rw-r--r--. 1 redheat redheat 2055327 Jun 28 10:58 monitor_agent.tar.bz2
-rw-r--r--. 1 redheat redheat   11140 Jun 15 15:41 sysinfo.go
-rw-r--r--. 1 redheat redheat 2056718 Jun 29 18:29 sysinfo.zip

使用-f時,沒有解壓出新文件,而使用-u時,解壓出了一個新的文件.

並且sysinfo.go一直沒有變化.

總結:

1.unzip時,-d可以指定解壓到的目錄

2.-f與-u還是有一些區別的,要視情況添加對應的參數.

Linux權限問題(2)-unzip引發的權限問題