权限机制和性能指标
前面我们学完了操作文件
和用户
相关知识,本篇学习权限
和性能
相关知识。
文件的属性看起
看 linux 的权限,先从文件的属性看起
ls -l 加 -d
是只看这个文件夹:
pjl@pjl-pc:~$ sudo ls -ld /root
drwx------ 8 root root 4096 7月 18 16:20 /root
最左侧的 d 表示目录,这个前面已经说过,后面的又是什么?我们两部分来讲:rwx------
、root root
。
属主和属组
root root
,第一个 root 表示这个文件夹是 root 用户,后一个 root 表示这个文件夹是 root 组的。
专业的叫法,前者叫做文件夹的属主
,后者叫做文件夹的属组
。
我们再来看一个:
pjl@pjl-pc:~$ ls -ld /home/test19
drwxr-xr-x 2 test19 test19 4096 7月 18 15:32 /home/test19
这里说明 /home/test19 文件夹的主人是 test19 用户,test19 组成员也是这个文件夹的主人。
既然 root 用户和 root 组成员是 /root 文件夹的主人,是否就可以对其为所欲为
?
权限位
明白了属主和属组,如何看一个一个的文件以及文件夹的权限?
我们把 rwx------
拆成三部分来看:rwx
、---
、---
。
root 用户的权限对应第一部分:rwx
。可读,可写,可执行。
root 组成员的权限对应第二部分:---
。不可读、不可写、不可执行
权限位由三部分组成:读权限
(r/-) + 写权限
(w/-) + 执行权限
(x/-)。
位权限和普通文件的关系
普通文件和文件夹的权限位,代表的意思不一样。
先看普通文件:
pjl@pjl-pc:~/linux-test$ ls -l
总用量 4
-rwxrw-r-- 1 pjl pjl 6 7月 19 17:14 a.txt
pjl 用户对应的权限是可读可写可执行(rwx
)。
对于 pjl 组成员的权限是可读可写不可执行(rw-
)。
对于普通文件,可读就是能读取(例如 cat、head)文件内容:
pjl@pjl-pc:~/linux-test$ cat a.txt
apple
对于普通文件,可写权限
就是可以通过编辑保存。如果没有写权限,vim 不让你保存。
可执行权限
,后续讲脚本的时候再说,简单理解:是否可以运行脚本。
// 创建一个脚本
pjl@pjl-pc:~/linux-test$ ls -l
-rw-rw-r-- 1 pjl pjl 26 7月 19 17:40 a.sh
// 没有执行权限
pjl@pjl-pc:~/linux-test$ ./a.sh
-bash: ./a.sh: 权限不够
// 增加执行权限
pjl@pjl-pc:~/linux-test$ chmod u+x a.sh
pjl@pjl-pc:~/linux-test$ ls -l
-rwxrw-r-- 1 pjl pjl 26 7月 19 17:40 a.sh
// 能执行了
pjl@pjl-pc:~/linux-test$ ./a.sh
hello
位权限和文件夹的关系
以这个文件夹为例:
pjl@pjl-pc:~/linux-test$ ls -ld dir1
d-wxrwxr-x 2 pjl pjl 4096 7月 19 18:38 dir1
文件夹如果有读权限
,才能使用 ls:
pjl@pjl-pc:~/linux-test$ ls dir1
ls: 无法打开目录'dir1': 权限不够
文件夹写权限
,表示我们可以改变这个文件夹下的内容。比如创建文件、删除文件、创建子文件夹。
pjl@pjl-pc:~/linux-test$ touch dir1/b.txt
pjl@pjl-pc:~/linux-test$ ls dir1
ls: 无法打开目录'dir1': 权限不够
文件夹执行权限
,表示能不能进入这个文件夹。最直接就是 cd 能不能用:
pjl@pjl-pc:~/linux-test$ cd dir1
pjl@pjl-pc:~/linux-test/dir1$ ls
ls: 无法打开目录'.': 权限不够
// 虽然文件夹没有读权限,但可以查看里面的文件内容
pjl@pjl-pc:~/linux-test/dir1$ cat b.txt
i am b.txt
其他用户权限
rwx------
的最后三位(---
)表示其他用户的权限。也就是属主和属组以外的用户。
例如 /root 文件夹对于其他用户的权限是---
:不可读、不可写、不可执行
drwx------ 12 root root 4096 6月 14 09:35 /root
我们创建用户 user1 去读、写和执行:
// 不可读
user1@pjl-pc:~$ ls /root
ls: 无法打开目录'/root': 权限不够
// 不可执行
user1@pjl-pc:~$ cd /root
-bash: cd: /root: 权限不够
// 不可写
user1@pjl-pc:~$ touch /root/a.txt
touch: 无法创建 '/root/a.txt': 权限不够
user1@pjl-pc:~$
修改权限
如何修改权限,用一个小任务来举例说明。
linux 下有一个用户 user1,他的家目录是 /home/user1,不过目前他无法进入自己的家目录。
pjl@pjl-pc:~/linux-test$ su - user1
输入密码
su: warning: cannot change directory to /home/user1: 权限不够
-bash: /home/user1/.bash_profile: 权限不够
user1@pjl-pc:/home/pjl/linux-test$ ls /home/user1
ls: 无法打开目录'/home/user1': 权限不够
作为系统管理员,我们要查看原因:
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
d--------- 4 root root 4096 7月 19 19:01 /home/user1
这里有两个问题:
- 属主和属组不应该是 root,而应该是用户自己
- 位权限都是 -
使用 chown 改变属主和数组:
pjl@pjl-pc:~/linux-test$ sudo chown -R user1:user1 /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
d--------- 4 user1 user1 4096 7月 19 19:01 /home/user1
现在还是进不去,需要修改位权限。
使用 chmod 修改位权限:
// u=rwx 给属主位权限设置成 rwx
pjl@pjl-pc:~/linux-test$ sudo chmod u=rwx /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
drwx------ 4 user1 user1 4096 7月 19 19:01 /home/user1
// g=rx 给属组位权限位设置成 rx
pjl@pjl-pc:~/linux-test$ sudo chmod g=rx /home/user1
pjl@pjl-pc:~/linux-test$ ls -ld /home/user1
drwxr-x--- 4 user1 user1 4096 7月 19 19:01 /home/user1
Tip