linux限制一个目录写权限,[Linux]目录x权限对文件操作的影响

问题

我们常使用linux以下命令

cd 进入目录

ls 列出目录中的文件

或者直接打开目录中的文件

以上操作对于目录权限位的设置来说,是有一定迷惑性的,如表格所示

cd进入该目录

cd进入该目录内目录

ls列出该目录内文件

操作该目录内文件(读/写已存在文件)

操作该目录内文件(新建)

r--

No

No

No

No

No

-w-

No

No

No

No

No

--x

Yes

Yes

No

Yes

No

r-x

Yes

Yes

Yes

Yes

No

1.可以看见,当目录只有读取权限的时候,是无法用cd打开、ls列出或者操作目录内的文件的;

2.那么,为什么这里无法用cd进入目录呢?因为cd其实就是chdir,我们看看下面这段话对chdir行为的描述:

chdir函数用于改变当前工作目录。调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限。每个进程都具有一个当前工作目录。在解析相对目录引用时,该目录是搜索路径的开始之处。如果调用进程更改了目录,则它只对该进程有效,而不能影响调用它的那个进程。在退出程序时,shell还会返回开始时的那个工作目录。

3.chdir实际上就是修改进程当前工作目录从当前目录改变到目标目录,目录的访问(如绝对路径和相对路径的访问),路径中每一个目录,都需要执行类似chdir这样的打开操作,只有打开了目录,才能继续后续的读取目录中的目录项,从而操作这个目录项的文件,当然,如果这个目录项也是指向一个目录,那么将重复上述步骤。

4.如果目标目录路径当中包含有一个目录不具备执行(x)权限,访问就无法继续下去了;

5.我们来看看《Unix高级环境编程》第4.5节 文件访问权限 的描述

我们用名字打开任一类型的文件时,对该名字中包含的每一个目录,包括它可能隐含的当前工作目录都应该具有执行权限。这就是为什么对于目录其执行权限位常被称为搜索位的原因。

6.无论是从相对路径,或者是绝对路径中打开文件,Linux的文件系统都只能够通过第一个文件结构指针一级一级搜索下来的,当中所包含的每一个目录,只有一个目录不具备执行权限,就会无法对该目录应用搜索,也就查找不到该目录下的任何文件,所以无法进行下一步操作;

[ives@localhost documents]$ ls -al

drwxr--r--. root root Nov : test

[ives@localhost documents]$ less /documents/test/ives/test_1.txt

test/ives/test_1.txt: Permission denied

//通过root改变/documents/test权限后

[root@localhost documents]# chmod test

drwx--x--x. root root Nov : test

//ives具备了操作权限

[ives@localhost documents]$ less /documents/test/ives/test_1.txt

[END]

7.由于相对路径的打开方式是从当前目录开始,无需遍历完整的路径表,所以有时候当某进程已经进入了某目录,而恰好又有一个具备权限的进程修改了完整路径当中相对于当前工作目录之前的一个文件夹权限,就会出现相对路径依然能够打开,而绝对路径则不具备权限的情况

//在/documents/test具备权限前进入目录

[ives@localhost /]$ cd /documents/test/ives

[ives@localhost ives]$

//root临时改变了/documents/test权限

[root@localhost documents]# chmod test

//现在ives利用相对路径依然可以访问ives目录下的文件

[ives@localhost ives]$ less test_1

[END]

//但是在这个目录下利用绝对路径访问则存在权限问题

[ives@localhost ives]$ less /documents/test/ives/test_1

/documents/test/ives/test_1: Permission denied

结论

当你访问一个路径,无论是以相对或绝对路径访问(相对路径会从当前工作目录开始),路径所需遍历的文件夹都必须具备x权限,否则就会出现因搜索问题导致查找不到该目录下的文件而无法进行下一步操作

操作動作

/dir1

/dir1/file1

/dir2

重點

讀取 file1 內容

x

r

-

要能夠進入 /dir1 才能讀到裡面的文件資料!

修改 file1 內容

x

w

-

能夠進入 /dir1 且修改 file1 才行!

執行 file1 內容

x

x

-

能夠進入 /dir1 且 file1 能運作才行!

刪除 file1 檔案

wx

-

-

能夠進入 /dir1 具有目錄修改的權限即可!

將 file1 複製到 /dir2

x

r

wx

要能夠讀 file1 且能夠修改 /dir2 內的資料

如最后一列所述,要將 file1 複製到 /dir2,目标文件夹dir2必须具备w和x权限,如果只具备w,系统将会提示:

cp: failed to access ‘./l_1/test_3.c’: Permission denied

这是因为缺乏x权限来到进入该目录。

如果只具备x,系统则提示:

cp: cannot create regular file ‘./l_1/test_3.c’: Permission denied

这是因为缺乏写入权限向该目录写入一个目录项。

所以如果需要复制一个文件,目标文件夹必须具备w和x权限。

事实上不仅是复制,只要是需要在目录上建立目录项的操作,例如新建文件,重命名增加硬软链接等等,都需要当前目录具备w和x权限。

另外,当具备r和x权限时才能读取目录中的目录项,例如用于ls命令只有在rx下才能列出当前目录项。

再次重申:

如果要操作(包括读、写、执行)某个文件x,x的当前目录必须具备x权限,这是前提!

无论x的当前目录是工作目录,还是非工作目录,都是一样的!

假设有目录结构如下

./a/b/test_1      --x.

./a/b/test_2      -w-.

./a/b/test_3      r--.

test_1、test_2、test_3分别是可执行可写可读文件。

假如当前工作目录是./a,./a/b的权限为r--,那么3个文件都将不能正常的进行rwx操作,因为进程在试图打开目录./a/b中所有的目录项时候就已经失败了,获取不到test_1、test_2、test_3这些目录项,自然就操作不到它们指向的iNode了

所有操作被理所当然的卡住了

./a/b/test_1      --x.

./a/b/test_2      -w-.

./a/b/test_3      r--.

Linux用户和权限——管理文件权限的命令

Linux用户和权限——管理文件权限的命令 摘要:本文主要学习了Linux中修改文件权限的命令. chown命令 chown命令,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件( ...

Linux系统调用和ANSI C文件操作的区别

一.在Linux下对文件操作有两种方式:Linux系统调用和ANSI C文件操作. 1.Linux系统调用调用常用于I/O文件操作,系统调用常用的函数有open.close.read.write.ls ...

python标准库之shutil——可操作权限的文件操作库

转载自:https://www.jb51.net/article/145522.htm shutil模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能. 文件夹与文件操作 ...

Linux目录和权限

1. rmdir -p  用来删除一串目录,是否可以成功删除?   rmdir -p  删除一个不存在的目录时是否报错呢?rmdir -p 不能成功删除非空目录,rmdir -p 删除一个不存在的目录 ...

Linux基础第四课——文件操作

文件的创建 touch sudo touch 文件1 文件2 文件3 #支持批量创建文件 sudo rm -f 文件1 文件2 文件3 #支持批量创建 也支持批量删除 echo '谁动谁输,对不起我输 ...

Linux目录结构以及一些常见操作

本章内容: Linux 目录结构 远程服务器关机及重启时的注意事项 不要在服务器访问高峰运行高负载命令 远程配置防火墙时不要把自己踢出服务器 指定合理的密码规范并定期更新 合理分配权限 定期备份重要数 ...

【php】目录、路径和文件 操作

目录操作 解析路径: basename() - 返回路径的文件名部分 获取目录部分: dirname() - 返回路径的目录部分 路径信息: pathinfo() - 返回数组(目录名,基本名,扩展名 ...

linux命令(5)文件操作:ls命令、显示文件总个数

一:ls命令是最常用的linux命令了:下面是ls --help里面的用法 在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息: 先介绍一下ls命令的主要参数: -a 列出目录下 ...

Linux C 下的大文件操作

这里说的大文件指大小超过4G的文件. 在32位环境下,linux默认打开.读.写超过4G的文件会返回错误.定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效. 注意它 ...

随机推荐

QT 调试时出现 During startup program exited with code 0xc0000135 错误

我用的QT creator 5.70 出现上述原因是动态库加载不成功,但是QTcreator 不会提示什么动态库,具体缺乏什么动态库要用VS新建一个工程调用才可以看到,这也是QT Creator很大的 ...

jsTree搜索排序向上向下

var _node = null, _all_match = 0, _current_match = 0; $(document).ready(function() { $('#area_settin ...

【UR #4】元旦三侠的游戏(博弈论+记忆化)

http://uoj.ac/contest/6/problem/51 题意:给m($m \le 10^5$)个询问,每次给出$a, b(a^b \le n, n \le 10^9)$,对于每一组$a, ...

用eclipse开发javaweb项目

准备工作:安装并配置jdk jdk环境变量:1.C:\Program Files\Java\jdk1.6.0_31\bin   path的配置2.C:\Program Files\Java\jdk1. ...

js各种宽高(2)

在javascript和jquery中,都有对各种高度的写法,在这里,我们就着重讲一下窗口.文档等高度的理解.(宽度和高度差不多!) jquery的各种高度 首先来说一说$(document)和$(w ...

webform repeater

repeater:由模板构成,解析后模板就不存在了             需要指定数据源进行数据绑定 List list = new FruitDA().Select(); ...

eclipse如何安裝JPA 和Data Source Explorer

安裝Data Source Explorer https://blog.csdn.net/XIAOZHI0999/article/details/61199801?utm_source=blogxgw ...

ccf-棋局评估-20190304

三更:  更短的代码,更短的时间,加油! 也祝你好运哦!!!! 核心: dfs(player)  player下完之后最大得分 优点: 我位运算掌握的还不错嘛 2和1如何转换  2^3=1; 1^3= ...

机器学习 Logistic 回归

Logistic regression 适用于二分分类的算法,用于估计某事物的可能性. logistic分布表达式 $ F(x) = P(X<=x)=\frac{1}{1+e^{\frac{-( ...

pts&sol;0代表什么意思?

在linux命令行中经常看到pts/0,这是什么意思呢??妈蛋!! 先说pts/0吧,man里面是这样说的:ptmx and pts - pseudo-terminal master and slav ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值