一、Shell命令及运行原理
1. 核心概念
-
Linux内核 (kernel):操作系统的核心,直接控制硬件资源,提供基础功能(如内存管理、进程调度)。
-
Shell:命令行解释器,是用户与内核之间的"桥梁",负责解析用户命令并传递给内核执行,再将执行结果反馈给用户。
-
通俗理解:内核是"幕后工作者",Shell是"沟通中介",用户通过Shell间接操作内核。常用的Shell是bash(Bourne Again Shell)。
2. 运行流程
-
用户在终端输入命令(如
ls)。 -
Shell解析命令,判断命令类型(内置命令/外部命令)。
-
若为外部命令,Shell查找命令的可执行文件(通过
PATH环境变量)。 -
内核执行命令对应的操作,返回结果。
-
Shell将结果格式化后显示给用户。
二、Linux用户与切换
1. 用户分类
-
超级用户(root) :拥有系统最高权限,可执行所有操作,命令提示符为
#。 -
普通用户 :权限受限,仅能操作自身目录及授权资源,命令提示符为
$。
2. 用户切换指令(su)
-
语法 :
su [用户名] -
功能:切换当前登录用户。
-
示例:
bash# 普通用户切换到root(需输入root密码) su root # 或简写(效果同上) su # root切换到普通用户(无需密码) su whb
三、Linux权限管理
1. 权限三要素
(1)访问者分类(人)
-
u(User):文件/目录的所有者(创建者)。 -
g(Group):所有者所在组的其他用户。 -
o(Others):既非所有者也非同组的其他用户。 -
a(All):所有用户(包含u、g、o)。
(2)文件类型标识
-
++
d++ ++:目录(文件夹)。++ -
++
-++ ++:普通文件(如文本、程序)。++ -
l:软链接(类似Windows快捷方式)。 -
b:块设备文件(如硬盘、光驱)。 -
c:字符设备文件(如屏幕、串口)。 -
++
p++ ++:管道文件。++ -
s:套接口文件。
(3)基本权限(操作权限)
-
r(Read,读权限,值为4):-
文件:可查看文件内容(如
cat、less)。 -
目录:可列出目录内文件(如
ls)。
-
-
w(Write,写权限,值为2):-
文件:可修改文件内容(如编辑、删除)。
-
目录:可在目录内创建、删除、移动文件/目录。
-
-
x(Execute,执行权限,值为1):-
文件:可运行该文件(如脚本、程序)。
-
目录:可进入该目录(如
cd)。
-
-
-:无对应权限(值为0)。
2. 权限表示方法
(1)字符表示法
-
格式:
ugo对应的权限组合(如rwxr-xr--)。 -
示例解析:
rwxr-xr---
u(所有者):rwx(可读、可写、可执行)。 -
g(同组用户):r-x(可读、可执行,无写权限)。 -
o(其他用户):r--(仅可读)。
-
(2)8进制数值表示法
-
原理:将
rwx转换为对应数值求和(r=4、w=2、x=1)。 -
常用组合:
-
7(4+2+1):rwx(全权限)。 -
6(4+2):rw-(读+写)。 -
5(4+1):r-x(读+执行)。 -
4(4):r--(仅读)。 -
0(0):---(无权限)。
-
-
示例:
rwxr-xr--对应数值754。
3. 权限修改指令
(1)chmod:修改文件/目录权限
-
语法:
-
字符格式:
chmod [用户标识][+/-=][权限] 文件名。 -
数值格式:
chmod [8进制权限] 文件名。
-
-
常用选项 :
-R递归修改目录及子目录/文件权限。 -
示例:
bash# 字符格式:给所有者添加写权限 chmod u+w file.txt # 字符格式:给同组用户取消执行权限 chmod g-x dir/ # 字符格式:给所有用户设置读+执行权限 chmod a=rx script.sh # 数值格式:设置文件权限为 rw-r--r--(所有者读+写,其他仅读) chmod 644 file.txt # 数值格式:递归设置目录权限为 rwxr-xr-x(所有者全权限,其他读+执行) chmod -R 755 project/ # 给目录添加粘滞位(仅所有者可删除自身文件) chmod +t /home/
(2)chown:修改文件/目录所有者
-
语法 :
chown [选项] 新所有者 文件名。 -
常用选项 :
-R递归修改目录及子内容。 -
示例:
bash# 修改文件所有者为user1 chown user1 file.txt # 递归修改目录所有者为user1 chown -R user1 dir/ # 同时修改所有者和所属组 chown user1:group1 file.txt
(3)chgrp:修改文件/目录所属组
-
语法 :
chgrp [选项] 新组名 文件名。 -
常用选项 :
-R递归修改。 -
示例:
bash# 修改文件所属组为group2 chgrp group2 file.txt # 递归修改目录所属组为group2 chgrp -R group2 dir/
(4)umask:设置默认权限掩码
-
核心作用:新建文件/目录的默认权限 = 基础权限 & (~掩码权限)。//(按位与非运算)
-
基础权限:
-
普通文件:
0666(rw-rw-rw-)。 -
目录:
0777(rwxrwxrwx)。
-
-
默认掩码:
-
超级用户(root):
0022。 -
普通用户:
0002。
-
-
示例:
bash# 查看当前掩码 umask # 设置掩码(仅当前终端有效) umask 002 # 验证:新建文件默认权限为 0666 - 002 = 0664(rw-rw-r--) touch test.txt ls -l test.txt # 验证:新建目录默认权限为 0777 - 002 = 0775(rwxrwxr-x) mkdir testdir ls -ld testdir
4. 目录权限特殊说明
-
仅有
r权限:可列出目录内文件,但无法进入(cd)或操作文件。 -
仅有
x权限:可进入目录,但无法列出文件(ls)。 -
仅有
w权限:可删除目录内文件(即使没有该文件的权限),但无法列出或进入(需配合x权限)。 -
关键组合:
r+x(可浏览目录内容并进入)、r+w+x(完全控制目录)。
四、sudo权限分配(普通用户提权)
1. 作用
允许普通用户执行原本仅root可执行的命令(如useradd、chmod 777),无需切换到root。
2. 配置方法
(1)修改sudoers文件(需root权限)
bash
# 先修改文件权限(默认只读)
chmod 740 /etc/sudoers
# 用vim编辑
vim /etc/sudoers
(2)添加授权规则
-
格式:
授权用户 登录主机=(执行命令的用户) 可执行命令。 -
示例:
bash# 允许whb用户在任何主机执行所有root命令(无需密码) whb ALL=(ALL) NOPASSWD: ALL # 允许whb用户仅执行useradd和userdel命令(需输入自身密码) whb ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel
(3)恢复sudoers文件权限
bash
chmod 440 /etc/sudoers
3. 使用示例
bash
# 普通用户用sudo执行root命令(添加新用户)
sudo useradd u2
# 切换到root执行命令(临时提权)
sudo -u root ls /root
# 查看当前用户可执行的sudo命令
sudo -l
五、粘滞位
1. 作用
解决"目录有写权限时,普通用户可删除他人文件"的问题。设置粘滞位后,目录内文件仅能被以下用户删除(在根目录的共享文件体现):
-
超级管理员(root)。
-
目录的所有者。
-
文件的所有者。
2. 操作指令
-
设置粘滞位 :
chmod +t 目录名。 -
取消粘滞位 :
chmod -t 目录名。 -
示例:
bash# 给/home目录设置粘滞位 chmod +t /home/ # 验证:目录权限末尾会出现't'(如drwxrwxrwt) ls -ld /home/ # 普通用户尝试删除他人文件(会提示无权限) rm /home/otheruser/file.txt
六、常用辅助指令
1. file:辨识文件类型
-
语法 :
file [选项] 文件名/目录。 -
示例:
bash# 查看文件类型 file test.txt # 查看软链接指向的原文件 file link.txt # 解读压缩文件内容 file -z test.tar.gz
2. 权限相关查询
bash
# 查看文件详细权限(包含所有者、所属组)
ls -l file.txt
# 查看目录详细权限
ls -ld dir/
# 查看当前用户所属组
groups
# 查看指定用户所属组
groups whb