在Linux中,删除一个文件需要什么权限?
昨天面试被问到了这个问题,思考了十几秒,认为是rw权限。面试结束后我查了一些说法和资料才知道我的理解太浅,也不够准确。今天就来好好复习一下权限的知识,也通过记录的方式强化记忆。
1、文件权限简单梳理
假设在Linux中,使用ls命令查看到某文件的权限为:-rw-r--r--,那么它们分别代表什么?
首位可能的字符有三,-
代表文件,d
代表目录,|
代表软链接文件。
后九位可能出现的字符有r(读)w(写)x(执行)。其中每3位代表一个权限组所拥有的的权限,分别是该文件的所有者(u),所有者所在的组(g)和其他人(o)。
因此我们可以得知它是一个文件,其所有者可以读写,所在组和非同组的其他用户都只能读取。
可以用chmod命令来修改文件权限:
Usage:chmod [ugoa][+-=][mode=xxx]
这三个方括号代表分组指定和数字权限修改两种方式。使用例:
chmod g+w,o+w a.file 的作用是为组和其他用户添加写权限;
chmod u-x,g-w,o-w a.file 的作用是删除拥有者的执行权限,删除组合其他用户的写权限。
数字权限是用 3 位二进制表示的,将rwx权限的是否授予看成二进制数的1和0,那么我们就可以得到权限的数字表示
r-- 100 = 4
-w- 010 = 2
--x 001 = 1
因此数字权限的修改方式也很好理解了,例如常见的权限:
777 --- 代表所有人都对该文件拥有完全的权限
755 --- 可执行文件的常用权限
644 --- 普通文件的常用权限
2、权限对目录和文件的作用
(1)目录
- r: 可以查询目录下文件名(如ls)
- w: 具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切,复制等(touch、rm、mv、cp)
- x: 可以进入(应当看做是“执行”)目录(如cd)
(2)文件
- r: 读取文件内容(cat、more、head、tail)
- w: 编辑、新增、修改文件内容(vi、echo),但不包括删除本文件。
- x: 可执行
(3)删除一个文件到底需要什么权限?
啰嗦了这么多,有了以上的基础知识,咱就能回答这个问题了。Linux下,对于某个目录或文件拥有的权限,针对的是该文件的内容,而不是文件本身,所以应该着重考虑该文件的父文件夹。
删除文件a时,必须拥有a的父文件夹的rwx权限。因为你在浏览文件夹内容时,“执行”了这个文件夹(cd),且“读取”了文件夹的内容,浏览目录里的文件(ls);删除文件a,是对该目录内容的“写”(rm)。
总而言之,要想删除a,需要其父文件夹的rwx权限,而无需获取文件a的rwx权限。
因为a作为其父文件夹的内容而存在,已经由父文件夹的权限所控制。而a的内容则是由a本身的权限所控制。只要不读写执行a,就无需a的任何权限。
转载请注明出处。