一、Shell命令及运行原理
(一)Shell的角色
Linux 严格意义上的操作系统核心是 kernel(内核),但普通用户无法直接与 kernel 交互。这是因为 kernel 负责管理系统的硬件资源、进程调度等底层核心工作,直接操作 kernel 风险极高,可能会因误操作导致系统崩溃等严重问题。而 Shell 就像 kernel 的 “外壳” 程序,充当着用户与 kernel 之间的中间桥梁。
(二)Shell的定义与功能
从技术角度,Shell 最简单的定义是 命令行解释器(command interpreter),主要有两大功能:
- 翻译指令:将用户输入的命令翻译给 kernel 处理。
- 反馈结果:把 kernel 处理后的结果翻译回给用户。
(三)类比理解
对比 Windows 系统,我们操作 Windows 并非直接操作其内核,而是通过图形界面(GUI),比如双击 D 盘盘符进入 D 盘、点击运行应用程序等。
Shell 对于 Linux,就如同 Windows 的图形界面,对用户指令进行解析,传递给 Linux 内核,再将内核运行结果解析后反馈给用户。
可以用一个更形象的比喻:如果把操作系统内核比作你心仪的姑娘,你(用户)比较害羞不好意思直接交流,Shell 就像媒婆(比如常用的 bash),你通过媒婆和姑娘沟通,媒婆负责传达你的心意并带回姑娘的回应。
二、Linux权限的概念
(一)用户分类
Linux 下有两种用户:
- 超级用户(root):拥有最高权限,可在 Linux 系统下做任何事情,不受限制。超级用户的命令提示符是 “#”。
- 普通用户:权限有限,只能在 Linux 下做特定范围内的事情。普通用户的命令提示符是 “$”。
(二)useradd / userdel(创建用户/删除用户)
在 Linux 系统中,强烈不建议直接使用
root账户进行日常操作,而要创建普通用户并按需获取权限直接用root就像 “拿着一把能打开所有门的钥匙满街走”—— 既容易丢(被攻击),也容易自己不小心把重要的门拆了(误操作)。而普通用户 +sudo是 “平时用普通钥匙,需要时找管理员拿 master 钥匙开特定的门”,安全且可控。那我们该如何创建一个用户呢?可以用到指令 useradd + 用户名,具体如下:
添加用户后,可以对新添加的账户设置密码,指令 passwd + 用户名,具体如下:
当我们要删除用户时,不能只是 userdel 用户名,这样是删除不掉的,具体如下:
我们可以看出zhangsan用户并没有被删除。应该用到的指令是:userdel -r 用户名, -r是必不可少的,如果我们不添加 -r 选项,发现用户是已经被删除了,但是用户的文件仍然在。
因此要想直接用户及其文件直接删除,建议直接用userdel -r 用户名。
(三)用户切换命令:su 和 su -
1、功能:切换用户
2、格式:su [用户名] 或 su - [用户名]
su:仅仅是切换到目标用户身份,部分环境变量仍保留当前用户的设置。比如当前用户是普通用户yql,执行su root切换到root用户后,像HOME环境变量(表示用户家目录),此时还是yql的家目录(/home/yql),而不是root的家目录(/root)。此外,一些自定义的环境变量、工作目录等也可能维持切换前的状态。属于非登录式切换,只是简单地获取目标用户的权限,并没有完整模拟目标用户的登录过程。
su -:完全切换到目标用户的环境,目标用户的所有环境变量都会生效。例如,从普通用户yql执行su - root,切换成功后,HOME环境变量会变为root用户的家目录(/root),同时会加载root用户的.bash_profile、.bashrc等配置文件中定义的环境变量和别名等设置,工作目录也会切换到目标用户的家目录。更接近目标用户的完整登录过程,系统会认为是目标用户进行了一次登录操作,会执行一些登录相关的初始化工作,如加载用户的配置文件等,这也是它能完全切换到目标用户环境的原因。
总的来说,
su -能更全面地模拟目标用户的登录状态和环境,在需要完整切换用户环境时更常用;而su则相对灵活,在仅需临时获取权限执行单个命令时使用起来更便捷。
(三)Linux权限管理
(一)文件访问者分类
Linux 中,文件和文件目录的访问者分为三类:
- 所有者(u - User):文件或目录的拥有者,可类比为 “中国平民”,对自己的文件 / 目录有基础的权限管理能力。
- 所属组用户(g - Group):所有者所在组的用户,这部分用户对文件 / 目录也有一定权限。
- 其他用户(o - Others):除所有者和所属组用户外的其他用户,可类比为 “外国人”,权限通常更受限制。
(二)文件类型和访问权限(事物属性)
1、文件类型
Linux 下文件类型多样:
d:文件夹。-:普通文件。l:软链接(类似 Windows 的快捷方式)。b:块设备文件(例如硬盘、光驱等)。p:管道文件。c:字符设备文件(例如屏幕等串口设备)。s:套接字文件。2、基本权限
权限分为读(r)、写(w)、执行(x),不同权限对文件和目录的作用不同:
- 读(r/4):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
- 写(w/2):对文件而言,具有修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
- 执行(x/1):对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
- “
-” 表示不具有该项权限。
(三)文件权限值的表示方法
- 字符表示方法:通过
r、w、x和-的组合来表示权限,比如rwxr - xr - x表示所有者有读、写、执行权限,所属组用户有读、执行权限,其他用户有读、执行权限。
- 8 进制数值表示方法:因为
r、w、x分别对应 4、2、1 的数值,所以可以将权限转换为 8 进制数,例如rwx对应 7(4 + 2 + 1),r - x对应 5(4 + 0 + 1)等。
(四)文件访问权限的相关设置方法
1、chmod
(1)功能:设置文件的访问权限。
(2)格式:
chmod [参数] 权限 文件名(3)常用选项:
-R:递归修改目录文件的权限(即连同目录下的子文件和子目录一起修改权限)。说明:只有文件的拥有者和 root 才可以改变文件的权限。(4)chmod 命令权限值的格式:
- 用户表示符 + / - / = 权限字符:
+:向权限范围增加权限代号所表示的权限。-:向权限范围取消权限代号所表示的权限。=:向权限范围赋予权限代号所表示的权限。- 用户符号:
u:拥有者。g:拥有者同组用户。o:其他用户。a:所有用户。- 实例:
chmod u+w abc.txt:给abc.txt文件的所有者增加写权限。chmod g-w abc.txt:取消abc.txt文件所属组用户的写权限。chmod a = x abc.txt:将abc.txt文件所有用户的权限设置为仅执行权限。2、chown
(1)功能:修改文件的拥有者。
(2)格式:
chown [参数] 用户名 文件名
(3)说明:在 Linux 系统中,只有 root 用户(超级用户)或者对该文件拥有足够权限的用户,才能修改文件的所有者。如果要成功修改文件所有者,需要使用 root 用户来执行chown命令。可以通过su - root(然后输入 root 密码)或者sudo chown user temp.txt来切换到 root 身份后再进行操作。(4)实例:
- 将temp.txt的拥有者修改为 qly。
- 递归将
testdir目录及其下内容的拥有者修改为 qly。3、chgrp
(1)功能:修改文件或目录的所属组。
(2)格式:
chgrp [参数] 用户名 文件名(3)常用选项:
-R递归修改文件或目录的所属组。(4)实例:
chgrp users /abc/f2:将/abc/f2文件的所属组修改为users组。4、umask
(1)功能:
- 查看或修改文件掩码。
- 新建文件默认权限
0666(所有用户都有读、写权限,文件默认没有执行权限,因为执行权限对普通文件风险较高),新建目录默认权限0777(所有用户都有读、写、执行权限)但实际创建的文件和目录权限会受umask影响,实际权限 = 默认最大权限& (~umask)(~表示对umask取反,即把每一位的二进制位翻转)。(2)格式:umask 权限值
(3)说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为
0022,普通用户默认为0002。(4)实例:
umask 022:设置umask值为 022。umask:查看当前umask值。5、file指令
(1)功能说明:辨识文件类型。
(2)语法:
file [选项] 文件或目录...(3)常用选项:
-c:详细显示指令执行过程,便于排错或分析程序执行的情形。-z:尝试去解读压缩文件的内容。6、使用sudo分配权限
sudo(Superuser Do)是 Unix/Linux 系统中用于让普通用户以其他用户(通常是超级用户 root)身份执行命令的工具,通过配置/etc/sudoers文件来分配权限,能在保障系统安全的同时,灵活地为不同用户授权特定操作。(1)修改
/etc/sudoers文件分配文件格式:
接受权限的用户登陆的主机 = (执行命令的用户) 命令
(2)使用 sudo 调用授权的命令格式:
$ sudo - u 用户名 命令实例:
$ sudo - u root /usr/sbin/useradd u2:以 root 用户身份执行添加用户u2的命令。sudo userdel -r testuser //这里 sudo 会以 root 身份执行 userdel -r testuser,完成用户的删除。sudo yum install nginx //这里 sudo 会以 root 身份执行, 完成安装包的下载和安装。
(五)目录的权限
- 执行权限:如果目录没有可执行权限,则无法
cd到目录中。- 可读权限:如果目录没有可读权限,则无法用
ls等命令查看目录中的文件内容。- 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
这里有个特殊情况:只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论这个用户是否有这个文件的写权限。这看似不科学,比如张三创建的文件,李四只要有目录写权限就能删除。我们可以通过以下操作验证:
为了解决这个问题,Linux引入了粘滞位的概念。
设置粘滞位后(用
chmod + t),当一个目录被设置为 “粘滞位”,则该目录下的文件只能由:
- 超级管理员删除;
- 该目录的所有者删除;
- 该文件的所有者删除。
我们再来看设置粘滞位后的情况:
(六)权限总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有
x权限,则无法对目录执行任何命令,甚至无法cd进入目录,即使目录有r读权限(这里容易犯错,认为有读权限就可以进入目录读取目录下的文件)。- 如果目录有
x权限,但没有r权限,则用户可以执行命令,可以cd进入目录,但由于没有读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。























283

被折叠的 条评论
为什么被折叠?



