先看看当前目录下有啥

当我们处于一个目录下,我们用ls查看当前目录都有啥,

用ls -l来看当前目录下的具体信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(base) ➜  ~ ls
Desktop Movies VSCode_WorkStation k
Documents Music a latex
Downloads Pictures a.dSYM latex.txt
Library Public blog_hexo latex2
(base) ➜ ~ ls -l
total 120
drwx------ 4 sosactwt staff 128 3 12 18:34 Desktop
drwx------ 7 sosactwt staff 224 3 12 11:27 Documents
drwx------ 14 sosactwt staff 448 3 12 13:24 Downloads
drwx------ 75 sosactwt staff 2400 3 12 18:50 Library
drwx------ 5 sosactwt staff 160 3 12 20:02 Movies
drwx------ 4 sosactwt staff 128 3 12 22:43 Music
drwx------ 7 sosactwt staff 224 3 12 19:41 Pictures
drwxr-xr-x 4 sosactwt staff 128 3 12 13:10 Public
drwxr-xr-x 19 sosactwt staff 608 3 12 16:08 VSCode_WorkStation
-rwxr-xr-x 1 sosactwt staff 49760 3 12 12:40 a
drwxr-xr-x 3 sosactwt staff 96 3 12 12:40 a.dSYM
drwxr-xr-x 15 sosactwt staff 480 3 12 11:32 blog_hexo
lrwxr-xr-x 1 sosactwt staff 1 3 12 13:16 k -> k
-rw-r--r-- 2 sosactwt staff 3701 3 12 20:41 latex
-rw-r--r-- 2 sosactwt staff 3701 3 12 20:41 latex.txt
lrwxr-xr-x 1 sosactwt staff 9 3 12 13:17 latex2 -> latex.txt

注意看每一行的第一个字母:

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

我们这里只出现了前四种。

接下来是权限

  • r为读权限,-则表示没有读权限
  • x为执行权限,-则表示没有执行权限
  • w为写权限,-则表示没有写权限

可以看到一共有三组权限

  • 第一组:属主,即当前文件的所有者的权限
  • 第二组:属组,即所有者的同组用户对这个文件的权限
  • 第三组:其他的用户对这个文件的权限

关于属主和属组

属主的意思很直白,“主人”嘛,即一个文件的所有者,即对这个文件具有所有权的用户。

同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

对于 root 用户来说,一般情况下,文件的权限对其不起作用。

修改属组和属主

改组:

1
chgrp [-R] 属组名 文件名 #即change group

这里- R是递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

一般文件目录里面用到- R都是递归操作,在对目录进行操作时,如果想让这个目录下的文件也被同样更改,那可以用- R。

如在修改目录权限时,用了- R之后,这个目录及其目录下所有东西的权限会被改掉,这个目录下的目录即其下所有东西的权限被改掉,。。。。一直往下深入。(下面修改权限给个例子)

改主:

1
2
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名# 可以把属组和属主都改掉

改权限

改权限有几种方法

  • 将rwx转换为数字

    • 规定:r:4;w:2;x:1
    • 那么如此一来rwx就是4+2+1=7;r-x就是4+0+1=5,—就是0+0+0=0

    我们这种办法来表示权限,然后这样改:

    1
    chmod [-R] xyz 文件或目录

    这里说一下- R的例子

    现有一个目录c:

    1
    drwxr-xr-x   2 sosactwt  staff     64  3 12 14:36 c

    c的目录下有:

    目录cc 和文本cc

    1
    2
    drwxr-xr-x  2 sosactwt  staff  64  3 12 14:38 cc
    -rw-r--r-- 1 sosactwt staff 0 3 12 14:38 cc.txt

    目录cc下有:

    1
    2
    drwxr-xr-x  2 sosactwt  staff  64  3 12 14:40 ccc
    -rw-r--r-- 1 sosactwt staff 0 3 12 14:40 ccc.txt

    现在我们用- R把c目录的权限改为777

    1
    chmod -R 777 c

    可以看到:

    1
    drwxrwxrwx   4 sosactwt  staff    128  3 12 14:38 c

    当我们进入c:

    1
    2
    3
    4
    5
    (base) ➜  ~ cd c
    (base) ➜ c ls -l
    total 0
    drwxrwxrwx 4 sosactwt staff 128 3 12 14:40 cc
    -rwxrwxrwx 1 sosactwt staff 0 3 12 14:38 cc.txt

    当我们进入cc:

    1
    2
    3
    4
    5
    (base) ➜  c cd cc
    (base) ➜ cc ls -l
    total 0
    drwxrwxrwx 2 sosactwt staff 64 3 12 14:40 ccc
    -rwxrwxrwx 1 sosactwt staff 0 3 12 14:40 ccc.txt

    这就是- R的力量,递归深入,一直改下去。

    这在删除目录的时候也用得到

    如果c是空目录我们可以用rmdir c;如果c.txt是文件,我们可以用rm c.txt;

    而如果c是非空目录,那这两个都不管用了;

    我们用

    1
    rm -R c

    这样一来目录c及其里面所有的东西就都被删掉了。所以慎用。。

  • 针对三组权限的不同身份分别修改权限

    • user:用户,简写为u
    • group:组,简写为g
    • others:其他,简写为o
修改符号 组别 修改方式 对应权限 修改对象
chmod u
g
o
a
+增加权限
-除去权限
=设定为什么权限
r
w
x
文件或目录

我们对b来修改权限。

1
chmod u=x,g=rwx,o=w b

可以看到:

1
d--xrwx-w-   5 sosactwt  staff    160  3 12 14:12 b

再如:

1
2
3
chmod u-x,g-w b
得到:
d---r-x-w- 5 sosactwt staff 160 3 12 14:12 b

a则是对所有身份都执行某一项操作

如:

1
2
3
chmod a+rwx b  
得到
drwxrwxrwx 5 sosactwt staff 160 3 12 14:12 b