目录
一.解释一行命令提示符
root@VM-0-7-ubuntu:/home#
root:当前登录用户 = 超级管理员 root 权限(最高权限,随便改系统文件)@:分隔符,固定格式VM-0-7-ubuntu:你的服务器主机名(买的轻量云默认名字)/home:你现在所在的当前工作目录#:root 用户的命令提示符(普通用户是$)
二.shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",但我们一般用户,不能直接使用kernel。而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
• 将使用者的命令翻译给核心(kernel)处理。
• 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果再通过内核运行出结果,通过shell解析给用户。

shell命令分为三种:
- 内置命令(Built-in)
Shell 自己自带的命令,不用找外部程序
特点:运行最快、不创建新进程
- 外部命令(External)
磁盘上真实的 二进制程序文件
特点:
在 /bin /usr/bin 里
运行时会 创建子进程
用 which 命令 能看到位置
3.别名(Alias)
三.Linux权限的概念
1.用户分类
Linux 下有两种用户:超级用户(root)、普通用户。
・超级用户:可以在 linux 系统下做任何事情,不受限制
・普通用户:在 linux 下做有限的事情。
用户切换命令:
1.普通用户切 root:
su # 或 su root
lighthouse@VM-0-7-ubuntu:/home$ su
Password:
root@VM-0-7-ubuntu:/home# whoami
root
2.root 切回普通用户(你的账号):
su lighthouse

3.暂时提权
sudo 要执行的命令
先整一个普通用户无权删除的文件(test1.txt,暂不解释)


普通用户删除权限不足
提升权限:

现在我们有一个问题:如果普通用户可以暂时提升权限,那么和超级用户有什么区别?还是有什么限制提升权限
我们先新建一个普通用户
root@VM-0-7-ubuntu:/home# useradd -m ljj
root@VM-0-7-ubuntu:/home# passwd ljj
New password:
Retype new password:
passwd: password updated successfully
使用sudo提升权限
$ sudo rm test2.txt
[sudo] password for ljj:
需要创建这个用户时自己的密码,否则无法获得sudo提升权限
所以sudo对于普通用户,是需要root授权的。
2.Linux权限管理
讨论:权限是什么?
权限本质是:能或者不能做什么事情
为什么?
1.控制用户的行为,防止错误的发生
理解:
1.权限首先限制的是角色 (人)
2.权限要求目标必须具备对应的属性
所以:权限=访问角色+目标权限属性
1.文件访问者分类(角色)
1.拥有者:创建这个文件 / 目录的用户,是文件的「主人」
核心特点:默认只有拥有者(或 root)能修改文件的权限、归属,对文件有最高的自主控制权
2.所属组:文件归属的用户组,组内的所有用户,都共享这套组权限
核心特点:用于团队协作,给同组成员统一分配权限,不用逐个给用户单独设置
3.other:除了「拥有者」和「所属组用户」之外,系统里的所有其他用户
核心特点:是系统的「陌生人」权限,通常设置最严格,只给最小必要权限(比如只读)

2.文件访问权限(目标权限属性)
◦ 读(r/4):Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
◦ 写(w/2):Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
◦ 执行(x/1):execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限,不过还有个前提,这个文件还得是可执行文件(程序)
◦ "-" 表示不具有该项权限

还有一种表示方法:8进制表示,可以用1表示,不可以用0表示。
拿上图举个例子:拥有者:r=1,w=1,- =0,所以结果:110
所属组:r=1,- =0,- =0,所以结果:100
other:结果:100
后面有更多讲述相关知识。
3.访问角色和目标权限属性的匹配规则
1.访问角色匹配
过程:
第 1 步:
确定「发起访问的用户身份」
系统先拿到当前操作的用户 UID(用户 ID)和所属的所有组 GID(组 ID)
第 2 步:
第一步匹配:是不是「文件拥有者(u)」
系统拿用户的 UID,和文件的拥有者 UID做对比:
✅ 匹配成功:直接使用「拥有者权限(u 的 rwx)」校验操作,不再进行后续匹配
❌ 匹配失败:进入下一步匹配
第 3 步:
第二步匹配:是不是「文件所属组(g)」
系统拿用户的所有 GID(主组 + 附加组),和文件的所属组 GID做对比:
✅ 匹配成功:直接使用「所属组权限(g 的 rwx)」校验操作,不再进行后续匹配
❌ 匹配失败:进入最后一步
第 4 步:
第三步匹配:默认归为「其他用户(o)」
如果前两步都没匹配上,系统直接将用户归类为「其他用户(other)」,使用「其他用户权限(o 的 rwx)」校验操作。
规则:
1.匹配顺序不可逆:
先匹配拥有者 → 再匹配所属组 → 最后归为其他,一旦匹配成功就不再往下走
比如一个用户既是文件拥有者,又在文件所属组里,只会用拥有者权限,不会用组权限
举例:第一次就匹配到拥有者,但是没有任何权限,所以无法cat

2.组匹配是「或」关系:用户只要在文件所属组里(主组 / 附加组都算),就匹配组权限
拥有者只有一位,但是所属组包括主组和附属组(权限依赖被授予),拥有者可以对其他普通用户授予权限,使其可以有权限参与
创建root文件
root@VM-0-7-ubuntu:/home/ljj/mydir# touch test2.txt
root@VM-0-7-ubuntu:/home/ljj/mydir# ll
total 8
drwxrwxr-x 2 ljj ljj 4096 Apr 5 13:48 ./
drwxr-xr-x 3 ljj ljj 4096 Apr 5 13:42 ../
-rw-rw-r-- 1 ljj ljj 0 Apr 5 13:47 test1.txt
-rw-r--r-- 1 root root 0 Apr 5 13:48 test2.txt
创建附属组
root@VM-0-7-ubuntu:/home/ljj/mydir# groupadd mygroup
root@VM-0-7-ubuntu:/home/ljj/mydir# usermod -aG mygroup ljj
添加进所属组并且授权
root@VM-0-7-ubuntu:/home/ljj/mydir# chown root:mygroup test2.txt
root@VM-0-7-ubuntu:/home/ljj/mydir# chmod g+rw test2.txt
效果
root@VM-0-7-ubuntu:/home/ljj/mydir# su ljj
ljj@VM-0-7-ubuntu:~/mydir$ echo "dddd">>test2.txt
ljj@VM-0-7-ubuntu:~/mydir$ cat test2.txt
dddd
ljj@VM-0-7-ubuntu:~/mydir$ ll
total 12
drwxrwxr-x 2 ljj ljj 4096 Apr 5 13:48 ./
drwxr-xr-x 3 ljj ljj 4096 Apr 5 13:42 ../
-rw-rw-r-- 1 ljj ljj 0 Apr 5 13:47 test1.txt
-rw-rw-r-- 1 root mygroup 5 Apr 5 13:56 test2.txt
3.root 特权:UID=0 的 root 用户,完全跳过所有匹配和校验,任何操作都放行
4.权限更改
1.chown------改角色
只有root才能使用chown
1.1 核心定义
chown = 改文件 / 目录的【拥有者 (属主)】+【所属组】
1.2语法
1 只改拥有者 chown 用户名 文件
chown 用户名 文件
2 同时改 拥有者+所属组 chown 用户:组 文件
chown 用户:组 文件
3 只改所属组(等价 chgrp) chown :组 文件
chown :组 文件
举例:
例1.
原文件
----rw-r-- 1 lighthouse lighthouse 25 Mar 31 13:05 f3333
修改:
lighthouse@VM-0-7-ubuntu:~$ sudo chown ljj f3333
结果:
----rw-r-- 1 ljj lighthouse 25 Mar 31 13:05 f3333
例2:
drwxrwxr-x 2 ljj ljj 4096 Apr 5 13:48 ./
drwxr-xr-x 3 ljj ljj 4096 Apr 5 13:42 ../
-rw-rw-r-- 1 ljj ljj 0 Apr 5 13:47 test1.txt
-rw-rw-r-- 1 root mygroup 5 Apr 5 13:56 test2.txt
oot@VM-0-7-ubuntu:/home/ljj/mydir# groupadd myfile
root@VM-0-7-ubuntu:/home/ljj/mydir# usermod -aG myfile ljj
root@VM-0-7-ubuntu:/home/ljj/mydir# chown ljj:myfile test2.txt#更改
root@VM-0-7-ubuntu:/home/ljj/mydir# ll
total 12
drwxrwxr-x 2 ljj ljj 4096 Apr 5 13:48 ./
drwxr-xr-x 3 ljj ljj 4096 Apr 5 13:42 ../
-rw-rw-r-- 1 ljj ljj 0 Apr 5 13:47 test1.txt
-rw-rw-r-- 1 ljj myfile 5 Apr 5 13:56 test2.txt
2.chmod------只改 rwx 权限
1、核心定位
chmod = 改读 / 写 / 执行 (r/w/x) 权限
✅ 文件主人 + root 都能用
2.语法
2.1字母版:
u=属主 g=组 o=其他 a=所有人 chmod u+rwx 文件(加减就行)
chmod u+rwx# 给主人加读写执行 chmod g+rw 文件
chmod g+rw# 给同组加读写 chmod o-r 文件
chmod o-r# 删掉其他人读权限

2.2.数字版(很方便)
r=4 w=2 x=1
chmod 三数字 文件


常用固定搭配:
755:目录标配 → 所有者 7 (rwx),组 5 (r-x),其他 5 (r-x)
644:普通文件标配 → 所有者 6 (rw-),组 4 (r--), 其他 4 (r--)
700:私密专属 → 只有自己能看能用
600:私密文件 → 自己读写,别人碰不到
3.chgrp------只改文件 / 目录的所属组
感觉比不上chown
语法:
单次改单个文件 chgrp 组名 文件名
chgrp 组名 文件名
递归改整个文件夹(含内部所有文件) chgrp -R 组名 目录名
chgrp -R 组名 目录名
5.目录文件文件权限认识
1.角色上是没有什么区别的
2.属性区别
目录的 rwx 不看文件夹本身内容,控制三件事:
① 目录 r → 能不能列出里面的文件(ls)
有 r:可以 ls 目录,看到文件名
无 r:ls 报错 / 看不到文件名
② 目录 w → 能不能增删改里面的文件(关键!)
有 w:可以 新建、删除、重命名、移动目录里的文件
❌ 重点:删文件,看的是【父目录的 w 权限】,不看文件本身!
③ 目录 x → 能不能进入这个目录(cd)
有 x:可以 cd 目录、可以访问里面文件的完整路径
无 x:进不去,哪怕有 r/w 也白搭
root创建文件,删除所有other的操作权限
root的操作

other的操作

6.默认刚创建的权限属性
我们想文件刚创建时权限属性是什么样的?
答:新建文件 / 目录权限,由 默认基础权限 + umask 遮罩 决定
- Linux 原始出厂最大权限(硬规则)
普通文件(.txt/.sh 等):原始满权限 666(rw-rw-rw-)
目录:原始满权限 777(rwxrwxrwx)
2.umask
umask 作用:从原始满权限里 屏蔽 某些权限(取反+按位与&操作)
Ubuntu 默认普通用户 /root 常见:root:umask 👉 022
普通用户:umask 👉 022 或 002
先计算一下(以002为准):
普通文件:110 110 110
&~umask:&111 111 101
结果:110 110 100
验证:

我们也可以知道目录文件:

3.自己配置umask
3.1临时生效(当前终端马上用,关窗口就没)
umask 0002
3.2永久全局配置
当前用户
编辑自己的 bash 配置:vim ~/.bashrc
末尾加一行:umask 0002
保存退出,刷新生效:source ~/.bashrc
改系统全局(所有用户都生效,root 操作)
编辑全局配置:
vim /etc/profile
或 vim /etc/bash.bashrc
末尾加:
umask 0022 # root默认安全
或协作用 umask 0002
全局刷新:
source /etc/profile
7.多用户协作
多用户协作只能在根目录下就行,不能在任何一普通用户的家进行
原因:
1.其它普通用户根本进不去其它家目录(没有权限),除非放开权限,那么会带来更多问题

2.很多命令操作只有root权限才行
比如:
创建系统组 groupadd → 只能 root
把别人用户加到附加组 usermod -aG → 只能 root
修改目录 / 文件的所属组(chgrp /chown) 改成「不是自己当前拥有的组」→ 普通用户没权限
所以在普通用户下协作极其麻烦,我们选择在根目录下协作
方式1:把多个普通用户放进附加组
步骤:
- 在 / 目录创建共享文件夹
mkdir /share
- 创建协作组
groupadd devgroup
- 把用户加入协作组(附加组)
usermod -aG devgroup ljj
usermod -aG devgroup lighthouse
- 设置目录归属组 + 权限
chown :devgroup /share
chmod 775 /share

缺陷:
文件中,各个用户可以互相删除,万一误删就完了
方式2:全部为other+粘滞位 t
粘滞位 t作用:
只有文件的主人 或 root 才能删除自己的文件,别人不能删!
所以这样就不用担心自己的文件会被其他人删除了
怎么设置:
chmod +t 目录
或者chmod 1777 目录
结果:
drwxrwxrwt 5 root root 4096 ... /tmp
其实根目录下,系统已经提供了可以协作的目录文件,我们可以内部自己开发
