Linux权限问题(2)-unzip引发的权限问题

摘要:
背景:依然是上一个朋友,在用php调用unzip命令时,再次出现了权限被拒绝的问题.Notice:此处描述的问题,为使用php命令行执行php文件,因此进程属主为登录的用户,而不是nginx用户.以root身份登录,给myuser的家目录设置读和执行的权限Notice:cd到一个目录,需要对该目录具有执行权限,否则会出现权限被拒绝的提示.#chmoda+rxmyuser#ll-dmyuserdrw

背景:依然是上一个朋友,在用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:41sysinfo.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 donot 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:41sysinfo.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:41sysinfo.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引发的权限问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【5】Redis从入门到放弃---秒杀案例(Redis的事务+锁机制+lua脚本)python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别和基本使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux学习之-vsftp

一、简介   vsftp是一个基于GPL发布的类unix系统上使用的ftp服务器软件,它的全称是very secure FTP ,软件的编写初衷是为了代码的安全,另外高速与高稳定性也是vsftp的两个重要特性。 二、ftp服务的连接方式   ftp并不是只单一的支持一种工作模式,它可以支持主动模式(active ftp)和被动模式(passive ftp)...

linux c 检测网络状态

转自:http://stackoverflow.com/questions/808560/how-to-detect-the-physical-connected-state-of-a-network-cable-connector You want to look at the nodes in /sys/class/net/ I experimente...

解析 Linux 中的 VFS 文件系统机制(根文件系统的由来)

http://os.51cto.com/art/200803/67283_4.htm ◆1. 摘要 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是...

Windows,Linux的select函数功能差异

Windows,Linux的select函数功能差异 感谢主,Windows当年也实现了select函数,这让我们的跨平台大业至少顺畅了一节。但由于Windows渗入骨髓的叛逆心理,他总要和UNIX的实现保持一些差别,让你无可奈何。首先是Windows的select函数的参数接口设计和Linux下有较大差别,这个在我的《设计极其糟糕的select函数》就讨...

创建.ZIP压缩文件[CL_ABAP_ZIP]

SAP提供了一个类CL_ABAP_ZIP来创建.zip扩展名的压缩文件。 代码: 先将文件通过cl_gui_frontend_services=>gui_upload以BIN的文件类型上载,然后通过cl_abap_zip中的方法add() save()压缩,最后下载到本地。   1 2 3 4 5 6 7 8 9 10 11 12 13 1...

Linux下添加php的zip模块

./configure --with-php-config=/usr/local/php/bin/php-config extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/zip.so Linux下添加php的zip模块 今天早上开发的人员过来跟我说,测试机上的XX项目...