#Linux学习笔记# Linux文件的属性以及权限说明

1. Linux文件的属性

关于Linux文件的属性的说明和设置请参考鸟哥Linux私房菜:Linux 的文件权限与目录配置

2. 目录和文件的权限意义

Linux系统中,每个文件都有三种身份的权限配置,而每个身份都有三种权限(rwx)。这三种权限对于普通的文件很好理解,如下表所示,

表格 1 普通文件的rwx权限位意义

权限

说明

r

文件内容可读

w

文件内容可修改

x

文件可执行

 在Window系统中,文件是否可执行是通过文件扩展名来进行识别,例如.exe.bat等。而在Linux系统下,文件扩展名只是为了给用户直观说明文件内容的类型而已,文件是否可执行则是通过是否设置了x权限位来决定的(当然,你如果非要给一个不能执行的普通文本文件设置成可执行,那我也没办法,事实上它也执行不了)。

 对于目录rwx权限位则需要特殊进行说明了。

目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?

    • r (read contents in directory):
      表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
    • w (modify contents of directory):
      这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:
      • 建立新的文件与目录;
      • 删除已经存在的文件与目录(不论该文件的权限为何!)
      • 将已存在的文件或目录进行更名;
      • 搬移该目录内的文件、目录位置。
      总之,目录的w权限就与该目录底下的文件名异动有关就对了啦!
    • x (access directory):
      咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰!

关于目录的r权限和x权限的验证测试:

下面我们通过对subdir目录进行操作来进行验证测试。目录subdir下具有两个文件file1file2

lienhua34@test$ ls -l subdir/
total 0
-rw-r--r-- 1 lienhua34 lienhua34 0 Dec 12 22:33 file1
-rw-r--r-- 1 lienhua34 lienhua34 0 Dec 12 22:33 file2

我们将subdir的所有者和所属群组都修改为root,而用户lienhua34不在群组root中,并将subdir的其他人权限设置成空,

lienhua34@test$ sudo chown -R root:root subdir
[sudo] password for lienhua34: 
lienhua34@test$ sudo chmod o-rx subdir
lienhua34@test$ ls -l
total 3
drwxr-x--- 2 root      root      4096 Dec 12 22:33 subdir 

此时用户lienhua34要进入该目录或者查看该目录下的文件列表均没有权限,

lienhua34@test$ cd subdir/
bash: cd: subdir/: Permission denied
lienhua34@test$ ls -l subdir/
ls: cannot open directory subdir/: Permission denied

我们将subdir的其他人权限添加r权限后,

复制代码
lienhua34@test$ sudo chmod -R o+r subdir
lienhua34@test$ ls -l
total 4
drwxr-xr-- 2 root root 4096 Dec 12 22:33 subdir
lienhua34@test$ ls -l subdir
ls: cannot access subdir/file1: Permission denied
ls: cannot access subdir/file2: Permission denied
total 0
-????????? ? ? ? ?            ? file1
-????????? ? ? ? ?            ? file2
lienhua34@test$ cd subdir
bash: cd: subdir: Permission denied
复制代码

有上面的执行结果,我们可以看到用户lienhua34对目录subdir具有r权限,其可以通过ls命令列出subdir目录下的文件列表。但是lienhua34没有权限获取该目录下的文件的属性,也没有权限进入该目录(因为用户lienhua34没具备对目录subdirx权限)。现在我们给lienhua34赋予x权限,

复制代码
lienhua34@test$ sudo chmod o+x subdir
lienhua34@test$ ls -l
total 4
drwxr-xr-x 2 root root 4096 Dec 12 22:33 subdir
lienhua34@test$ ls -l subdir
total 0
-rw-r--r-- 1 root root 0 Dec 12 22:33 file1
-rw-r--r-- 1 root root 0 Dec 12 22:33 file2
lienhua34@test$ cd subdir
lienhua34@subdir$ 
复制代码

由上面的结果可见,lienhua34subdir具有x权限之后,可以查看该目录下的文件属性,也可以进入该目录。如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。

 

关于目录的w权限的验证测试:

下面我们还是通过刚刚的subdir目录进行验证测试。首先用户lienhua34对目录subdir具有rx权限,而且对subdir目录下的文件没有任何权限,如下所示,

lienhua34@test$ ls -l
total 4
drwxr-xr-x 2 root root 4096 Dec 12 22:33 subdir
lienhua34@test$ cd subdir/
lienhua34@subdir$ ls -l
total 4
drw-r----- 2 root root 4096 Dec 12 23:18 dir1
-rw-r----- 1 root root    0 Dec 12 22:33 file1

此时用户lienhua34可以进入subdir目录,能够查看该目录下的文件列表。但无法查看该目录下的文件的内容,也无法增删文件或目录,

复制代码
lienhua34@subdir$ cat file1
cat: file1: Permission denied
lienhua34@subdir$ touch file3
touch: cannot touch ‘file3’: Permission denied
lienhua34@subdir$ rm file1
rm: remove write-protected regular empty file ‘file1’? y
rm: cannot remove ‘file1’: Permission denied
lienhua34@subdir$ rmdir dir1
rmdir: failed to remove ‘dir1’: Permission denied
lienhua34@subdir$ mkdir dir2
mkdir: cannot create directory ‘dir2’: Permission denied
复制代码

如果此时赋予用户lienhua34对目录subdirw权限,则lienhua34便具有了改动目录subdir的目录结构权限。于是便可以增删文件或目录(不管用户lienhua34对这些目录具有什么权限)。

复制代码
lienhua34@test$ sudo chmod o+w subdir
lienhua34@test$ ls -l
total 4
drwxr-xrwx 3 root root 4096 Dec 12 23:18 subdir
lienhua34@test$ cd subdir
lienhua34@subdir$ ls -l
total 4
drw-r----- 2 root root 4096 Dec 12 23:18 dir1
-rw-r----- 1 root root    0 Dec 12 22:33 file1
lienhua34@subdir$ rm file1
rm: remove write-protected regular empty file ‘file1’? y
lienhua34@subdir$ touch file2
lienhua34@subdir$ rmdir dir1
lienhua34@subdir$ mkdir dir2
lienhua34@subdir$ ls -l
total 4
drwxr-xr-x 2 lienhua34 lienhua34 4096 Dec 12 23:24 dir2
-rw-r--r-- 1 lienhua34 lienhua34    0 Dec 12 23:24 file2
复制代码

由此可见目录的w权限如此之重要。切莫轻易给其他人开启目录的w权限。

(done)

posted on   lienhua34  阅读(1188)  评论(1编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示