在我们用ls -l这个命令的时候,会出现文件的详细信息,其中第一列的第一位表示文件的类型外,后面的九位就表示文件的权限,文件的权限和文件的所属主和所属组是有关系的

他主要分三个权限为,一共九位,分三段。rwxr-xr-x。其中的含义是r:可读、w:可写、x:可执行,如果没有权限,用 - 表示

第一段的三位是所属主的权限,第二段的三位是所属组的权限,第三段的三位是其他人的权限。
其中第一段的三位为rwx,含义就是所属主对这个文件有可读,可写,可执行的权限,而第二和第三段的权限为r-x,这就说明所属组和其他人的权限只有可读和可执行。
权限也可以用三位数字表示,其中r=4、w=2、x=1,除去第一位的字母(文件类型),剩下的九个字母也按照三个为一组去组合,每一个权限为三个字母对应的数字之和。
对应上面的例子,所属主的权限数字为4+2+1=7,那么所属主的对应数字是7,一次类推,所属组和其他人的权限数字为4+1=5,那么所属组合其他人的权限是5。那么上面文件的权限就是
rwxr-xr-x=755。

如果我们要改变权限,我们要用到一个命令chmod(change mode的缩写)。
-rw-r--r--. 1 root root 887 1月 7 14:20 2.txt
drwxr-xr-x. 2 root root 6 1月 6 09:01 aming
-rw-------. 1 root root 2289 12月 17 21:56 anaconda-ks.cfg.1
我们要改变2.txt的权限,如果用字母表示的话,应该是rwx------,数字表示为700,那么我们就需要输入chmod这个命令了 格式为chmod 【权限数字】 【文件名+文件格式】
[root@localhost ~]# chmod 700 2.txt
[root@localhost ~]# ll
总用量 8
-rwx------. 1 root root 887 1月 7 14:20 2.txt
drwxr-xr-x. 2 root root 6 1月 6 09:01 aming
-rw-------. 1 root root 2289 12月 17 21:56 anaconda-ks.cfg.1
这样2.txt的权限就已经改变成功了。

如果我们想改变目录下的子目录和子文件,也可以用chmod这个命令,但是后面要加-R这个参数,如果不加,则只能改变文件的权限,目录下的子文件和目录则不能更改
[root@localhost tmp]# ll
drwxr-xr-x. 2 root root 19 1月 7 14:55 aming2

[root@localhost tmp]# cd aming2
[root@localhost aming2]# ll
总用量 4
-rwxr-xr-x. 1 root root 887 1月 7 14:55 1.txt

这是初始的情况,目录权限为755,进入到目录下查看文件1.txt,权限也是755,。然后我们将权限为777。
[root@localhost tmp]# ll
drwxrwxrwx. 2 root root 19 1月 7 14:55 aming2

[root@localhost tmp]# ll aming2
-rwxr-xr-x. 1 root root 887 1月 7 14:55 1.txt
我们可以发现,虽然目录的权限已经改为777,但是目录下的子文件权限依然没有改变,这一因为没有加参数-R,这个参数是批量的将目录下的子目录和文件全部改成与目录一致的权限。

[root@localhost tmp]# ll
drwxrwxrwx. 2 root root 19 1月 7 14:55 aming2

[root@localhost tmp]# ll aming2
-rwxrwxrwx. 1 root root 887 1月 7 14:55 1.txt
这样就全部改为777权限了。

chmod还有这样一种用法,就直接用权限相对应的字母去更改,比如我们现在要将aming2的权限改为rwxr-xr--,我们可以这样改
[root@localhost tmp]# chmod u=rwx,g=rx,o=r aming2
其中u代表所属主,g代表所属组,o代表其他人。每个组之间用逗号隔开。
[root@localhost tmp]# ll
drwxr-xr--. 2 root root 19 1月 7 14:55 aming2
这也是一种方法,这种方法很直观,但是比较繁琐,没有数字法高效。

还有一种方法,就是chmod a+ 目录名,这里a代表all(全部)
比如
[root@localhost tmp]# chmod a+w aming2
[root@localhost tmp]# ll
drwxrwxrw-. 2 root root 19 1月 7 14:55 aming2
这是讲所有人的权限都加上w(可写)权限,我们也可以输入a- 讲所有人 的权限全部减去某个权限,也可以具体到u+、u-、g+、g-、o+、o-。

还有一种情况是在权限位后面有一个点。例如下面的文件
-rw-r--r--. 1 root root 887 1月 7 13:36 1.txt
drwxr-xr-x. 4 root root 24 12月 17 21:42 aming
drwxr-xr-x. 5 root root 42 12月 17 21:02 aming1
drwxr-xr-x. 5 root root 42 1月 7 13:39 aminglinux
最后一位都有一个点,这个点表示文件受制于selinux,如果selinux(安全加强工具)开启了,那么你创建的文件或者目录最后一位就会有一个点。

chown:更改文件的所有者
首先我们找出需要更改所有者的文件
[root@localhost ~]# ll /tmp
-rw-------. 1 root root 0 1月 7 15:35 yum.log

然后输入命令
[root@localhost ~]# chown aming /tmp/yum.log
然后再查看
[root@localhost ~]# ll /tmp
-rw-------. 1 aming root 0 1月 7 15:35 yum.log
我们可以看到相同的文件大是所有者发生了变化。
chown也可以改变所属组,具体用法是chown (所属主):(所属组) 文件的全路径。注意的是主和组之间要用“:”分割。
chown后面加-R的话也可以改变目录下文件的所属情况。
比如:
[root@localhost tmp]# chown -R :aming /tmp/aming2/1.txt
[root@localhost aming2]# ll
-rwxrwxrwx. 1 root aming 887 1月 7 14:55 1.txt
这样我们就将1.txt的所属组改为aming了

chgrp:(change group)改变所属组
比如说我们现在要将tmp下的yum.log的所属组从root改为aming1,我们需要这样改

[root@localhost ~]# chgrp aming /tmp/yum.log
然后查看
[root@localhost tmp]# ll
-rw-------. 1 aming aming 0 1月 7 15:35 yum.log
这样我们也将yum.log的所属组改变成功了。

隐藏权限命令:
chattr:给文件增加隐藏属性。常用参数+i、+a。
加参数i,你就无法对这个文件做任何操作,包括写入,删除,重命名,移动文件,更改文件的创建时间,就算你把它拷贝到其他目录后更改后,也无法覆盖 原来的文件。
chattr +i 1.txt
lsattr:查看文件的隐藏属性
[root@localhost ~]# lsattr 1.txt
----i----------- 1.txt
则输入chattr -i
[root@localhost aming]# cp 1.txt /root
cp:是否覆盖"/root/1.txt"? y
cp: 无法创建普通文件"/root/1.txt": 权限不够

[root@localhost ~]# mv 1.txt /tmp/aming1
mv: 无法将"1.txt" 移动至"/tmp/aming1/1.txt": 不允许的操作

[root@localhost ~]# rm -f 1.txt
rm: 无法删除"1.txt": 不允许的操作

[root@localhost ~]# mv 1.txt 8.txt
mv: 无法将"1.txt" 移动至"8.txt": 不允许的操作

加参数a,只能在文件的末尾追加,不能编辑文件,不能删除,不能重命名,但是可以改变文件的创建时间。
[root@localhost ~]# chattr +a 1.txt
[root@localhost ~]# mv 1.txt 8.txt
mv: 无法将"1.txt" 移动至"8.txt": 不允许的操作
[root@localhost ~]# rm -f 1.txt
rm: 无法删除"1.txt": 不允许的操作
我们先查询一下1.txt这个文件
[root@localhost ~]# ll
总用量 8
-rw-rw-r--. 1 root root 0 1月 7 21:10 1.txt
然后我们touch 1.txt,然后再查询
总用量 8
-rw-rw-r--. 1 root root 0 1月 7 21:45 1.txt
这时我们发现参数+a可以改变创建时间。-a可以去掉权限。

给目录加上隐藏权限和给文件加隐藏目录是一样的,同样是+i,效果也是一样的,不能删除,不能重命名,不能创建子文件和子目录。但是可以在已经创建好的文件中追加和编辑内容。
[root@localhost ~]# chattr +i 111
[root@localhost ~]# rm -r 111
rm:是否进入目录"111"?
[root@localhost ~]# rm -r 111
rm:是否进入目录"111"? y
rm:是否删除目录 "111/222"?y
rm: 无法删除"111/222": 权限不够(无法删除)
[root@localhost ~]# mv 111 1212
mv: 无法将"111" 移动至"1212": 不允许的操作(无法重命名)
[root@localhost ~]# touch 111/12.txt
touch: 无法创建"111/12.txt": 权限不够(无法创建子目录)
[root@localhost ~]# head -n2 /etc/passwd >> 111/12.txt
[root@localhost ~]# cat 111/12.txt
sdjflkjsadlkfjs;adlkjf;sakd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin(追加的内容)

如果我们+a权限,是可以在这个目录下创建子文件的,因为这个操作视同于追加操作,也可以向里面的文件追加内容。但是不能够删除,重命名。
[root@localhost ~]# rm -r 111
rm:是否进入目录"111"?
[root@localhost ~]# rm -r 111
rm:是否进入目录"111"? y
rm:是否删除目录 "111/222"?
rm:是否删除普通文件 "111/12.txt"?y
rm: 无法删除"111/12.txt": 不允许的操作
rm:是否删除普通空文件 "111/.12.txt.swp"?n
rm:是否删除普通空文件 "111/.12.txt.swx"?^[[A
rm:是否删除普通文件 "111/12_txt.swp"?y
rm: 无法删除"111/12_txt.swp": 不允许的操作
rm:是否删除普通空文件 "111/4913"?y
rm: 无法删除"111/4913": 不允许的操作
rm:是否删除普通空文件 "111/12.tx~"?y
rm: 无法删除"111/12.tx~": 不允许的操作(无法删除)

[root@localhost ~]# mv 111 222
mv: 无法将"111" 移动至"222": 不允许的操作(无法重命名)

[root@localhost ~]# touch 111/12.txt
[root@localhost ~]# vi 111/12.txt
[root@localhost ~]# head -n2 /etc/passwd >> 111/12.txt
[root@localhost ~]# cat 111/12.txt
sdjflkjsadlkfjs;adlkjf;sakd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin(可以在里面创建文件,向文件里追加内容)

lsattr -R可以查看有隐藏目录下的全部文件和目录,如果不加,只能看到一层。

[root@localhost ~]# lsattr 111
---------------- 111/222
---------------- 111/12.txt
---------------- 111/12_txt.swp
---------------- 111/4913
---------------- 111/12.tx~(不加参数)

[root@localhost ~]# lsattr -R 111
---------------- 111/222

111/222:

---------------- 111/12.txt
---------------- 111/12_txt.swp
---------------- 111/4913
---------------- 111/12.tx~(加了参数)

lsattr -a查看全部文件,包括隐藏文件。
[root@localhost ~]# lsattr /root
---------------- /root/anaconda-ks.cfg.1
---------------- /root/aming
---------------- /root/2.txt
---------------- /root/aming2
-----a---------- /root/1.txt
---------------- /root/1.txt~
----i----------- /root/111
---------------- /root/12.txt(不加参数a)

[root@localhost ~]# lsattr -a /root
---------------- /root/.
---------------- /root/..
---------------- /root/.bash_logout
---------------- /root/.bash_profile
---------------- /root/.bashrc
---------------- /root/.cshrc
---------------- /root/.tcshrc
---------------- /root/.bash_history
---------------- /root/.ssh
---------------- /root/anaconda-ks.cfg.1
---------------- /root/.lesshst
---------------- /root/aming
---------------- /root/2.txt
---------------- /root/aming2
-----a---------- /root/1.txt
---------------- /root/1.txt~
----i----------- /root/111
---------------- /root/12.txt(加参数a)*文件名前面带点的为隐藏文件。