zoukankan      html  css  js  c++  java
  • Linux权限问题(2)-unzip引发的权限问题

    背景:依然是上一个朋友,在用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还是有一些区别的,要视情况添加对应的参数.

  • 相关阅读:
    .NET + Jcrop 实现在线裁图功能
    jquery表格可编辑修改表格里面的值,点击td变input无刷新更新表格
    A、B、C、D和E类IP地址
    linux内核源码阅读之facebook硬盘加速flashcache之四
    Help-IntelliJIDEA-2019.3.4-插件:插件下载,安装,重启idea
    Help-IntelliJIDEA-2019.3.4-基础设置:14. intellij idea怎么调整菜单栏字体大小
    Help-IntelliJIDEA-2019.3.4-基础设置:13. 统一设置编码
    Help-IntelliJIDEA-2019.3.4-基础设置:12. Intellij IDEA的代码提示功能
    Help-IntelliJIDEA-2019.3.4-基础设置:11. idea 自动补全返回值,自动补全变量名称和属性名称
    Help-IntelliJIDEA-2019.3.4-基础设置:10.Maven自动下载源码包,告别反编译,直接上源码注释
  • 原文地址:https://www.cnblogs.com/redheat/p/7095893.html
Copyright © 2011-2022 走看看