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还是有一些区别的,要视情况添加对应的参数.

  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/redheat/p/7095893.html
Copyright © 2011-2022 走看看