ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux – 为什么test -e在只具有读权限的目录中的文件上失败?

2019-08-16 04:02:51  阅读:195  来源: 互联网

标签:linux permissions test


根据我对目录的读取权限的理解,它允许列出目录中的哪些文件以及关于它的文件.

给定具有0744权限的目录,由userA拥有:

[userA@localhost ~]$mkdir -m 0744 /tmp/semi-secret
[userA@localhost ~]$ls -ld /tmp/semi-secret/
drwxr--r--. 2 userA userA 6 Aug 29 10:15 /tmp/semi-secret/
[userA@localhost tmp]$touch semi-secret/foobar.txt
[userA@localhost tmp]$chmod 0600 semi-secret/foobar.txt

对于userB,ls命令显示文件foobar.txt的存在.

[userB@localhost ~]$ls -l /tmp/semi-secret/
ls: cannot access /tmp/semi-secret/foobar.txt: Permission denied
total 0
-????????? ? ? ? ?            ? foobar.txt

但是为什么test -e命令以非零状态退出?!它唯一的工作是确认文件是否存在,并且目录权限应该允许.

[userB@localhost ~]$test -e /tmp/semi-secret/foobar.txt || echo "The file doesn't exist."
The file doesn't exist.

解决方法:

由于即使stat(2)系统调用也不能用于错过权限中x位的目录中的任何文件,因此基于stat(2)系统调用的任何内容都将在此类目录中失败.

如果您的目录设置了r位,您确实能够使用readdir()读取该目录的内容,但您无法统计或打开任何文件.

相反,如果您知道相关文件名但是不能使用readdir()来检索相关目录的内容,则设置了x位的目录允许您使用stat(2)或打开文件.

test -e以非零状态退出,以防文件不存在(符号链接解析后,因此也适用于现有符号链接到不存在或不可访问的文件)或尝试stat时发生任何错误( 2)相关文件.

标签:linux,permissions,test
来源: https://codeday.me/bug/20190816/1663726.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有