Linux基本权限及命令
-rwxr-xr-x 1 root root 72 5月 9 23:20 touch.sh
Linux系统中权限有10位,其中第一位是文件类型,其余在我们Linux基础命令中已经进行过描述。接下来让我们挨个解析
第一位:文件类型
"-" 代表普通文件
"b" 块设备文件(存储设备,如硬盘)
"d" 目录
"s" 代表套接字文件
"l" 链接文件
"c“ 字符设备文件
"p" 管道
其余九位为权限位,每三位为一组,从左往右数分别代表所有者(u表示),所属组(g表示)和其他人(o)。每组都有读(r)写(w)执行(x)权限。
rwx r-x r-x
421 4-1 4-1
基本权限命令
1.chmod (修改文件权限大小)
命令格式:
chmod [选项] 权限模式 文件名
选项 -R
chmod u+x 文件
chmod g+w,o+w 文件
chmod u=rwx 文件
chmod 644 文件
例:
[root@localhost ~]# chmod u+x ./up #给所有者添加执行权限
[root@localhost ~]# ls -l up
-rwxr--r-- 1 root root 249 5月 1 00:01 up
[root@localhost ~]# chmod g+x ./up #给所属组添加执行权限
[root@localhost ~]# ls -l up
-rwxr-xr-- 1 root root 249 5月 1 00:01 up
[root@localhost ~]# chmod o+x ./up #给其他人添加执行权限
[root@localhost ~]# ls -l up
-rwxr-xr-x 1 root root 249 5月 1 00:01 up
[root@localhost ~]# chmod -R o+x /root/ #给其他人递归添加root目录下所有文件的执行权限
[root@localhost ~]# ls -l
总用量 47892
-rw-r--r-x. 1 root root 1612 3月 9 2022 anaconda-ks.cfg
-rw-r--r-x 1 root root 840 5月 7 19:18 a.txt
drwxr-xr-x 3 root root 19 6月 15 15:28 cni
drwxr-xr-x 3 root root 19 6月 15 15:28 containerd
drwxr-xr-x 3 root root 21 6月 15 15:28 cri-tools
drwxr-xr-x 4 root root 43 6月 15 15:28 docker
-rw-r--r-x 1 root root 19521288 4月 10 2019 docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
-rw-r--r-x 1 root root 29108 4月 10 2019 docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
当然权限除了+也可以-
[root@localhost ~]# chmod -R o-x /root/ #给其他人递归减去root目录下所有文件的执行权限
[root@localhost ~]# ls -l
总用量 47892
-rw-r--r--. 1 root root 1612 3月 9 2022 anaconda-ks.cfg
-rw-r--r-- 1 root root 840 5月 7 19:18 a.txt
drwxr-xr-- 3 root root 19 6月 15 15:28 cni
drwxr-xr-- 3 root root 19 6月 15 15:28 containerd
drwxr-xr-- 3 root root 21 6月 15 15:28 cri-tools
drwxr-xr-- 4 root root 43 6月 15 15:28 docker
赋予权限的形式有很多种,如上边所表示的加号的形式赋予对应的权限,以减号的形式去减少权限。还有以“=”的方法去赋予权限。当热,有的时候需要去给所有的权限位赋予相同的权限,一个一个添加显得太麻烦。我们可以这样去赋予。
[root@localhost ~]# ls -l passwd
-rw-r--r-- 1 root root 922 5月 10 23:00 passwd
[root@localhost ~]# chmod u+x,g+w,o=x ./passwd #给所有者赋予执行权限,所属组赋予读权限,其他人赋予执行权限。
[root@localhost ~]# ls -l passwd
-rwxrw---x 1 root root 922 5月 10 23:00 passwd
当然,这样写显得Linux很呆,更多情况下我们是以数字的形式赋予权限。
在我们的Linux中“rwx”分别代表读写执行,当然他们也可以用数字来表示,分别是:
1.读(r)是4
2.写(w)是2
3.执行(x)是1
我们文件中每组权限位可以用对应权限数字相加的形式来表达,比如下面这个文件。
-rwxr-xr-- 1 root root 164 5月 8 10:55 yum.sh
其中所有者权限是rwx,就可以用7来表示,所属组是r-x就可以用5来表示,而其他人只有读权限就用4来表示
例如还是这个文件
[root@localhost ~]# ls -l yum.sh
-rwxr-xr-- 1 root root 164 5月 8 10:55 yum.sh
[root@localhost ~]# chmod 644 yum.sh #修改所有者的权限位rw,所属组的权限为r。其他人的权限为r。
[root@localhost ~]# ls -l yum.sh
-rw-r--r-- 1 root root 164 5月 8 10:55 yum.sh
注:1.
在Linux中拥有执行权限的文件颜色是绿的,为了在本文中凸显高亮,更改了md格式。
2.常见权限
文件:644 代表所有者有rw权限,所属组和其他人是r权限
目录:755 代表所有者有rwx权限,所属组和其他人是r-x权限
777 最大权限,在生产环境中尽量避免这样的文件或目录的出现,会造成一定的安全隐患
2.chown (更改文件所有者和所属组)
命令格式: chown 用户:组 文件名
选项
-R 递归修改所有者和所属组
chown user1 ss
chown user1:user2 ss
chown :user1 ss
[root@localhost ~]# ls -l a.txt
-rw-r--r-- 1 root root 840 5月 7 19:18 a.txt
[root@localhost ~]# chown user1:root a.txt #修改user1用户为a.txt文件的所有者,root用户为所属组。
[root@localhost ~]# ls -l a.txt
-rw-r--r-- 1 user1 root 840 5月 7 19:18 a.txt
注意:以冒号为分割,前边是所有者,后边是所属组。也可以用"."来分割。
在Linux中root是超级用户,是内裤穿在外边的男人,它可以修改任何用户的文件或目录的权限、属主和属组。而普通用户只能修改自己的文件权限,不能修改属主和属组(哪怕是属于自己的)
基本权限的作用
注:权限对文件的和目录的作用是不一样的
1.权限对文件的作用
读(r):用户可以读取文件中的数据,把权限对应到命令上,如果对文件拥有读权限,那么就可以使用cat less more head tail 等查看文件内容。
写(w):对文件拥有写权限,可以往文件内写内容。把权限对应到命令上,如果对文件拥有读权限,那么就可以使用vim echo 修改文件的数据。
注意:如果想删除文件,那么必须在上级目录拥有写(w)权限。(在之前讲俩链接文件的时候说过,文件名是存储在上级目录的block中。文件名对应的是inode,所以想要删除文件就必须对上级目录拥有写权限。我们只需要记住文件名是目录的数据。)
执行权限(x):如果拥有执行权限。就代表可以执行文件。而这个文件是否可以执行,要看文件里的代码是不是正确的语言代码。
权限对目录的作用
读(r):如果对目录有读权限,代表我们可以查看目录下有那些文件和目录,如果对应到命令,就能在目录下执行ls,查看目录下的内容了。
写(w):如果对目录有写权限,就可以修改目录下的数据,也就是说可以在目录中新建、删除、复制、剪切文件或者子目录。如果对应到命令就是touch、mkdir、mv、cp。对目录来说写权限是最高权限。
执行(x):目录不能运行,如果目录有执行权限,我们可以切换目录内。对应到命令就是cd。
目录的权限其实就有以下几种:
0:什么权限都不赋予
5:赋予读和执行权限(举个例子,你想看钕澡堂里有什么东西,你只有读权限,你不进去能看清里边有什么才怪了。root除外。之前说过root是内裤外穿的男人)
7:最大权限
3.umask(显示和设置文件和目录的掩码值)
[root@localhost bin]# umask
0022
#八进制位显示
[root@localhost ~]# touch ll
[root@localhost ~]# ls -l ll
-rw-r--r-- 1 root root 0 11月 4 10:49 ll
[root@localhost ~]# mkdir lml
[root@localhost ~]# ls -l lml
总用量 0
[root@localhost ~]# ls -ld lml
drwxr-xr-x 2 root root 6 11月 4 10:49 lml
从以上内容可以看出我们的权限umask值为0022,我们的文件默认权限位为三位,其实查看我们本章标题就可以知道,本节所描述为基本权限。我们只需要记住在Linux中,权限位其实是4位。
在umask掩码0022之下,我们创建的文件权限缺省是644,创建的目录缺省权限最大是755。我们还需要注意的是,文件默认是没有执行权限的。所以创建的新文件是需要把x权限去掉在与默认的uamsk掩码进行计算。
如下,最大权限是777,需要与我们umask值进行运算。需要注意的是权限计算不是相减而是逻辑与和逻辑非运算,我们也不建议去修改umask值。
777
-0022
755
如果想去计算的话,我们可以用权限位相减的算法去计算。
文件的缺省权限最大只能是666,而umask的值是022
-rw-rw-rw- 减去 -----w--w- 等于 --rw-r--r--
目录的缺省权限最大只能是777,而umask的值是022
-rwxrwxrwx 减去 -----w--w- 等于 -rwx-r-xr-x
注意:umask权限的计算值绝不是相减的来的
比如我们的umask是033
文件的缺省权限最大只能是666,而umask的值是022
-rw-rw-rw- 减去 -----wx-wx 等于 -rw-r--r--
使用命令去修改我们的umask值是属于临时修改,永久修改的话需要去修改我们的环境变量配置文件(/etc/profile)