背景:依然是上一个朋友,在用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引发的权限问题的更多相关文章

  1. Linux系统文件和目录的属性及权限

    1 文件属性概述 Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.硬链接数.所归属的用户和用户组.最近修改时间等内容(文件名严格来说不属于文件的属性): 下面是 ...

  2. Linux常用命令(二)之权限管理、文件搜索、帮助、压缩命令及管道

    在(一)中提到过rwx的含义,但是我们还需深入理解,明白其真正的含义和权限,对于文件和目录,rwx权限是不同的,尤其是目录的权限往往是被忽略的: 对于目录,其权限和对应的操作: r-ls w-touc ...

  3. 第3章 Linux常用命令(2)_权限管理命令

    2. 权限管理命令 2.1 改变文件或目录权限:chmod (1)chmod命令 命令名称 chmod(change the permission mode of a file) 命令所在路径 /bi ...

  4. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

  5. 菜鸟学Linux命令:chmod命令和数字文件权限

    chmod是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权限 ...

  6. Linux改变文件或目录的访问权限命令

    使用  ll  或  ls -l 指令时 第一列会显示出目录下文件的权限 例如∶ -rw-r-r- 横线代表空许可.r代表只读,w代表写,x代表可执行.注意这里共有10个位置.第一个字符指定了文件类型 ...

  7. [转]linux主机644、755、777权限详解

    转自:http://my.oschina.net/qihh/blog/73135 从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限. 从左至右,第一 ...

  8. linux概念之用户,组及权限

    Linux 是一个多用户.多任务的操作系统:我们应该了解单用户多任务和多用户多任务的概念 单用户多任务一个beinan用户,为了完成工作,执行了几个任务:当然beinan这个用户,其它的人还能以远程登 ...

  9. .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限

    一.Linux下的文件目录 简介:linux的文件系统是采用级层式的树状目录结构,在此 结构中的最上层是根目录“/”,然后在此目录下再创建 其他的目录.深刻理解linux文件目录是非常重要的,如下图所 ...

随机推荐

  1. Logtash遇到的异常和注意点

    1.Logtash遇到的异常和注意点 1.1 logstash使用kafka插件和es集成 如果logstash使用kafka插件和es集成,必须设置kafka插件参数 session_timeout ...

  2. day-08-文件管理

    文件的操作的初识 利用python代码写一个很low的软件,去操作文件. 文件路径:path 打开方式:读,写,追加,读写,写读...... 编码方式:utf-8,gbk ,gb2312...... ...

  3. 【笔记】《Redis设计与实现》chapter12 事件

    12.1 文件事件 Redis基于Reactor模式开发了自己的网络事件处理器:这个处理器被称为文件时间处理器: 文件时间处理器使用IO多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为 ...

  4. 对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载

    目录 一.MinIO快速入门 1. MinIO简介 2. CentOS7更换成阿里云镜像 3. 安装 3.1 下载 3.2 运行测试 4. 配置脚本执行文件 4.1 创建配置执行文件 4.2 执行 二 ...

  5. 13. VUE 组件之间数据传递

    组件数据传递: 父组件向内传递属性---动态属性 子组件向外发布事件 solt 插槽传递模板---具名solt 1. 父组件向子组件传递数据 子组件在父组件的并作为标签引入,通过设置标签的属性传递数据 ...

  6. 网络编程NIO之Reactor线程模型

    目录 单Reactor线程模型 基于工作线程的Reactor线程模型 多Reactor线程模型 多Reactor线程模型示例 结束语 上篇文章中写了一些NIO相关的知识以及简单的NIO实现示例,但是示 ...

  7. Python 3.10 中新的功能和变化

    随着最后一个alpha版发布,Python 3.10 的功能更改全面敲定! 现在,正是体验Python 3.10 新功能的理想时间!正如标题所言,本文将给大家分享Python 3.10中所有重要的功能 ...

  8. spring boot 集成logstash 日志

    1.logstash 插件配置 logstash下config文件夹下添加 test.conf 文件内容: input{ tcp { mode => "server" hos ...

  9. SpringMVC笔记(五)

    1. 拦截器 1.1 拦截器和过滤器 SpringMVC的处理器拦截器类似于Servlet开发过程中的过滤器Filter,用于对处理器进行预处理和后处理.我们可以自定义一些拦截器来实现特定的功能 过滤 ...

  10. 1.7.8- HTML合并单元格

    跨行与跨列