很多同学在初学Linux时,对执行ls、touch、rm、mv 和cd命令时需要的文件权限很熟悉,但对所需的目录权限不了解或不熟悉,有些还在死记硬背。这里按照自己的理解写一下,不保证完全准确,但能帮助同学们理解。下面以操作 /var/log/messages这个文件为例:
1. Linux中一切皆文件,当然目录也是一种文件。和普通文件一样,目录在保存时,也需要占用inode(索引节点)和block(块),就是说var和log都有自己的inode和block;
2.目录的inode中保存的是本目录的属性信息(如权限、大小、时间戳、到本目录的block指针等),block中保存的是子文件(或子目录)的文件名、文件名对应的inode编号。就是说子文件/子目录的名字是保存在其上层目录的block中,即messages这个文件名保存在log的block中,log这个名称保存在var的block中;
3.普通文件的inode中保存的是该文件的属性信息,block中保存的是文件的具体内容;
4.按照前三条,具体需要的目录权限就很好理解了
ls: 需要列出一个目录下所有文件名,即需要读取该目录的block,所以需要 读 权限
touch:新增一个文件,相当于在目录的block中增加内容,所以需要 写 权限
rm:删除一个文件,相当于在目录的block中删除内容,所以需要 写 权限
mv:移动一个文件,相当于编辑目录的block内容,所以需要 写 权限
cd:切换文件夹,切换前需要把文件夹的block内容读入内存,类似于程序执行前将程序调入内存,所以需要 执行 权限