Linux 基础指令(三):grep、压缩打包、系统信息与 Shell 运行原理

Linux 基础指令(三):grep、压缩打包、系统信息与 Shell 运行原理


🔥 星恒随风: 个人主页 ❄️ 个人专栏: 《指针合集》 《C语言基础》 《数据结构》 《机器学习导论》 《前端基础》 《python基础》 《C++从入门到入土》 《Linux的学习之旅》 ✨ 数据即知识,压缩即智能


文章目录

  • [Linux 基础指令(三):grep、压缩打包、系统信息与 Shell 运行原理](#Linux 基础指令(三):grep、压缩打包、系统信息与 Shell 运行原理)
    • 一、whereis:查找程序及其相关文件
      • [1.1 whereis 能查什么?](#1.1 whereis 能查什么?)
      • [1.2 whereis 与 which 的区别](#1.2 whereis 与 which 的区别)
    • 二、alias:给命令设置别名
      • [2.1 为什么需要别名?](#2.1 为什么需要别名?)
      • [2.2 alias 的基本语法](#2.2 alias 的基本语法)
      • [2.3 查看已有别名](#2.3 查看已有别名)
      • [2.4 删除别名](#2.4 删除别名)
      • [2.5 临时别名与永久别名](#2.5 临时别名与永久别名)
      • [2.6 如何绕过别名?](#2.6 如何绕过别名?)
    • 三、grep:从文本中筛选目标行
      • [3.1 grep 是做什么的?](#3.1 grep 是做什么的?)
      • [3.2 `-i`:忽略大小写](#3.2 -i:忽略大小写)
      • [3.3 `-n`:显示行号](#3.3 -n:显示行号)
      • [3.4 `-v`:反向匹配](#3.4 -v:反向匹配)
      • [3.5 组合选项](#3.5 组合选项)
      • [3.6 grep 与管道配合](#3.6 grep 与管道配合)
      • [3.7 递归搜索目录](#3.7 递归搜索目录)
    • [四、zip 与 unzip:压缩和解压 ZIP 文件](#四、zip 与 unzip:压缩和解压 ZIP 文件)
      • [4.1 压缩普通文件](#4.1 压缩普通文件)
      • [4.2 递归压缩目录](#4.2 递归压缩目录)
      • [4.3 查看 ZIP 包内容](#4.3 查看 ZIP 包内容)
      • [4.4 解压到当前目录](#4.4 解压到当前目录)
      • [4.5 解压到指定目录](#4.5 解压到指定目录)
      • [4.6 覆盖问题](#4.6 覆盖问题)
    • [五、rz 与 sz:本地和远程之间传输文件](#五、rz 与 sz:本地和远程之间传输文件)
      • [5.1 上传文件](#5.1 上传文件)
      • [5.2 下载文件](#5.2 下载文件)
    • [六、tar:Linux 中常用的打包工具](#六、tar:Linux 中常用的打包工具)
      • [6.1 打包和压缩不是完全相同的概念](#6.1 打包和压缩不是完全相同的概念)
      • [6.2 tar 常用选项](#6.2 tar 常用选项)
      • [6.3 创建 `.tar.gz` 压缩包](#6.3 创建 .tar.gz 压缩包)
      • [6.4 查看压缩包内容](#6.4 查看压缩包内容)
      • [6.5 解压到当前目录](#6.5 解压到当前目录)
      • [6.6 解压到指定目录](#6.6 解压到指定目录)
      • [6.7 只打包,不压缩](#6.7 只打包,不压缩)
      • [6.8 排除指定文件](#6.8 排除指定文件)
      • [6.9 tar 常见错误](#6.9 tar 常见错误)
    • 七、bc:在终端中进行浮点计算
      • [7.1 进入交互模式](#7.1 进入交互模式)
      • [7.2 使用 scale 控制小数位](#7.2 使用 scale 控制小数位)
      • [7.3 通过管道直接计算](#7.3 通过管道直接计算)
      • [7.4 使用数学库](#7.4 使用数学库)
      • [7.5 退出 bc](#7.5 退出 bc)
    • 八、uname:查看内核与系统信息
      • [8.1 查看内核版本](#8.1 查看内核版本)
      • [8.2 查看全部信息](#8.2 查看全部信息)
      • [8.3 查看硬件架构](#8.3 查看硬件架构)
      • [8.4 查看发行版版本](#8.4 查看发行版版本)
    • 九、终端中几个重要的快捷键
      • [9.1 Tab:命令和路径补全](#9.1 Tab:命令和路径补全)
      • [9.2 Ctrl + C:中止前台程序](#9.2 Ctrl + C:中止前台程序)
      • [9.3 Ctrl + D:输入结束](#9.3 Ctrl + D:输入结束)
      • [9.4 Ctrl + L:清理终端显示](#9.4 Ctrl + L:清理终端显示)
      • [9.5 Ctrl + R:搜索历史命令](#9.5 Ctrl + R:搜索历史命令)
    • 十、shutdown:关机与重启
      • [10.1 立即关机](#10.1 立即关机)
      • [10.2 立即重启](#10.2 立即重启)
      • [10.3 延迟关机](#10.3 延迟关机)
      • [10.4 取消计划任务](#10.4 取消计划任务)
      • [10.5 常见替代命令](#10.5 常见替代命令)
    • [十一、Shell 命令是怎样运行的?](#十一、Shell 命令是怎样运行的?)
      • [11.1 Linux 内核不能直接面向普通用户操作](#11.1 Linux 内核不能直接面向普通用户操作)
      • [11.2 Shell 是命令行解释器](#11.2 Shell 是命令行解释器)
      • [11.3 Shell 与 Windows 图形界面的类比](#11.3 Shell 与 Windows 图形界面的类比)
      • [11.4 常见 Shell](#11.4 常见 Shell)
      • [11.5 为什么命令不存在?](#11.5 为什么命令不存在?)
    • [十二、为什么 Linux 需要权限?](#十二、为什么 Linux 需要权限?)
      • [12.1 超级用户和普通用户](#12.1 超级用户和普通用户)
      • [12.2 查看当前用户](#12.2 查看当前用户)
      • [12.3 切换用户](#12.3 切换用户)
      • [12.4 三类文件访问者](#12.4 三类文件访问者)
    • 十三、本篇总结
      • [13.1 命令查找和简化](#13.1 命令查找和简化)
      • [13.2 文本与压缩](#13.2 文本与压缩)
      • [13.3 系统工具](#13.3 系统工具)
      • [13.4 Shell 与权限入口](#13.4 Shell 与权限入口)

一、whereis:查找程序及其相关文件

1.1 whereis 能查什么?

前面已经学习了:

bash 复制代码
which ls

which 主要在环境变量 PATH 中查找命令对应的可执行程序。

whereis 的范围更广,它通常用于查找:

text 复制代码
可执行程序
源代码目录
man 手册文件

基本语法:

bash 复制代码
whereis 命令名

例如:

bash 复制代码
[root@xxx ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

输出中可能包含:

text 复制代码
/usr/bin/ls

表示可执行程序。

text 复制代码
/usr/share/man/man1/ls.1.gz

表示 ls 对应的手册页。

1.2 whereis 与 which 的区别

可以先简单记成:

text 复制代码
which:查找当前 Shell 可能执行的外部命令
whereis:查找程序、手册等相关文件

对比:

bash 复制代码
[root@xxx ~]# which ls
/usr/bin/ls
bash 复制代码
[root@xxx ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

不过,命令还可能是:

text 复制代码
Shell 内建命令
别名
Shell 函数

如果想判断一条命令到底是什么,更适合使用:

bash 复制代码
type 命令名

例如:

bash 复制代码
[root@xxx ~]# type -a pwd
pwd is a shell builtin
pwd is /usr/bin/pwd

二、alias:给命令设置别名

2.1 为什么需要别名?

有些命令比较长,而且经常重复使用。

例如:

bash 复制代码
ls -a -l -n

如果每次都完整输入,会比较麻烦。

可以使用 alias 为它设置一个短名称:

bash 复制代码
[root@xxx ~]# alias hello='ls -a -l -n'

以后输入:

bash 复制代码
[root@xxx ~]# hello

Shell 会把它展开成:

bash 复制代码
ls -a -l -n

2.2 alias 的基本语法

bash 复制代码
alias 别名='原命令'

例如:

bash 复制代码
[root@xxx ~]# alias ll='ls -alF'
[root@xxx ~]# alias cproj='cd /root/project'

执行:

bash 复制代码
[root@xxx ~]# cproj
[root@xxx project]# pwd
/root/project

2.3 查看已有别名

直接执行:

bash 复制代码
[root@xxx ~]# alias

可以查看当前 Shell 中定义的别名。

查看某个别名:

bash 复制代码
[root@xxx ~]# alias ll
alias ll='ls -alF'

2.4 删除别名

bash 复制代码
[root@xxx ~]# unalias hello

删除后,再执行:

bash 复制代码
hello

Shell 就不会继续把它当作别名处理。

2.5 临时别名与永久别名

直接在终端中执行:

bash 复制代码
alias ll='ls -alF'

通常只对当前 Shell 会话有效。

退出终端后,别名可能消失。

如果希望每次打开 Bash 都自动设置,可以把命令写入:

text 复制代码
~/.bashrc

例如:

bash 复制代码
echo "alias ll='ls -alF'" >> ~/.bashrc

然后重新加载:

bash 复制代码
source ~/.bashrc

修改配置文件前,建议先备份:

bash 复制代码
cp ~/.bashrc ~/.bashrc.backup

2.6 如何绕过别名?

假设 ls 被设置为:

bash 复制代码
alias ls='ls --color=auto'

想临时调用外部程序,可以写:

bash 复制代码
\ls

或者:

bash 复制代码
command ls

三、grep:从文本中筛选目标行

3.1 grep 是做什么的?

grep 用于在文本中搜索指定模式,并输出匹配的行。

基本语法:

bash 复制代码
grep [选项] 搜索内容 文件

例如,创建测试文件:

bash 复制代码
[root@xxx ~]# cat > users.txt <<'EOF'
Alice Linux
Bob Windows
alice C++
Charlie Linux
EOF

查找包含 Linux 的行:

bash 复制代码
[root@xxx ~]# grep 'Linux' users.txt
Alice Linux
Charlie Linux

3.2 -i:忽略大小写

默认情况下,Linux 命令通常区分大小写。

bash 复制代码
[root@xxx ~]# grep 'alice' users.txt
alice C++

使用 -i

bash 复制代码
[root@xxx ~]# grep -i 'alice' users.txt
Alice Linux
alice C++

此时:

text 复制代码
Alice
alice
ALICE

都会被视为匹配。

3.3 -n:显示行号

bash 复制代码
[root@xxx ~]# grep -n 'Linux' users.txt
1:Alice Linux
4:Charlie Linux

前面的数字表示匹配内容位于文件的第几行。

3.4 -v:反向匹配

-v 表示输出不匹配的行:

bash 复制代码
[root@xxx ~]# grep -v 'Linux' users.txt
Bob Windows
alice C++

可以把它理解为:

text 复制代码
普通 grep:保留匹配项
grep -v:排除匹配项

3.5 组合选项

忽略大小写并显示行号:

bash 复制代码
[root@xxx ~]# grep -in 'alice' users.txt
1:Alice Linux
3:alice C++

3.6 grep 与管道配合

查找当前目录列表中的 .txt 文件:

bash 复制代码
[root@xxx ~]# ls -al | grep '\.txt'

查看进程时筛选某个程序:

bash 复制代码
[root@xxx ~]# ps -ef | grep ssh

查看系统配置时排除注释和空行:

bash 复制代码
grep -v '^#' config.txt | grep -v '^$'

其中:

text 复制代码
^#:以 # 开头的行
^$:空行

3.7 递归搜索目录

除了 PPT 中的基础选项,实际工作中还经常使用:

bash 复制代码
grep -r '目标字符串' 目录

例如:

bash 复制代码
[root@xxx project]# grep -rn 'TODO' src

含义是:

text 复制代码
-r:递归搜索子目录
-n:显示行号

这在查找项目代码中的函数名、错误信息和待办标记时很有用。


四、zip 与 unzip:压缩和解压 ZIP 文件

4.1 压缩普通文件

基本语法:

bash 复制代码
zip 压缩包名称.zip 文件

例如:

bash 复制代码
[root@xxx ~]# touch file1.txt file2.txt
[root@xxx ~]# zip files.zip file1.txt file2.txt

查看结果:

bash 复制代码
[root@xxx ~]# ls
file1.txt  file2.txt  files.zip

4.2 递归压缩目录

创建测试目录:

bash 复制代码
[root@xxx ~]# mkdir -p test2/src
[root@xxx ~]# touch test2/README.md test2/src/main.cpp

压缩整个目录:

bash 复制代码
[root@xxx ~]# zip -r test2.zip test2

其中:

text 复制代码
-r:递归处理目录中的文件和子目录

相比:

bash 复制代码
zip test2.zip test2/*

直接使用:

bash 复制代码
zip -r test2.zip test2

通常更加完整,也能保留最外层目录结构。

4.3 查看 ZIP 包内容

bash 复制代码
[root@xxx ~]# unzip -l test2.zip

-l 表示只列出压缩包内容,不进行解压。

4.4 解压到当前目录

bash 复制代码
[root@xxx ~]# unzip test2.zip

4.5 解压到指定目录

bash 复制代码
[root@xxx ~]# mkdir extract
[root@xxx ~]# unzip test2.zip -d extract

其中:

text 复制代码
-d:指定解压目录

4.6 覆盖问题

当目标文件已经存在时,unzip 可能询问是否覆盖。

可以根据需要选择:

text 复制代码
y:覆盖当前文件
n:不覆盖当前文件
A:后续全部覆盖
N:后续全部不覆盖

不要在不清楚压缩包内容时直接覆盖已有项目。


五、rz 与 sz:本地和远程之间传输文件

PPT 中提到了 rzsz 工具,它们主要用于支持 ZMODEM 的终端客户端与 Linux 主机之间传输文件。

在部分基于 RPM 的系统中,可以安装:

bash 复制代码
[root@xxx ~]# dnf install -y lrzsz

旧系统也可能使用:

bash 复制代码
yum install -y lrzsz

Debian 或 Ubuntu 可以使用:

bash 复制代码
apt install -y lrzsz

5.1 上传文件

bash 复制代码
[root@xxx ~]# rz

支持该功能的客户端通常会弹出文件选择窗口。

5.2 下载文件

bash 复制代码
[root@xxx ~]# sz file.txt

不过,并不是所有终端都支持 rzsz

现在更通用的文件传输方式包括:

text 复制代码
scp
sftp
rsync
Git
终端客户端自带文件管理器

因此,rzsz 可以作为一种补充方式了解。


六、tar:Linux 中常用的打包工具

6.1 打包和压缩不是完全相同的概念

打包是把多个文件和目录组织成一个归档文件:

text 复制代码
多个文件
   ↓
一个 tar 包

压缩是在数据编码层面减少文件体积:

text 复制代码
tar 包
  ↓ gzip
tar.gz 文件

tar 可以单独打包,也可以配合 gzipbzip2 等压缩工具。

6.2 tar 常用选项

选项 含义
-c 创建归档文件
-x 解开归档文件
-t 查看归档文件内容
-z 使用 gzip
-j 使用 bzip2
-v 显示处理过程
-f 指定归档文件名
-C 切换到指定目录后再处理

可以把最常见的三组组合记成:

text 复制代码
-c:创建
-t:查看
-x:解开

6.3 创建 .tar.gz 压缩包

bash 复制代码
[root@xxx ~]# tar -czvf project.tar.gz project

选项含义:

text 复制代码
-c:创建归档
-z:使用 gzip 压缩
-v:显示过程
-f:后面紧跟压缩包文件名

命令结构是:

text 复制代码
tar -czvf 压缩包名称 要打包的目录

6.4 查看压缩包内容

bash 复制代码
[root@xxx ~]# tar -tzvf project.tar.gz

此时不会真正解压,只会列出其中的文件。

6.5 解压到当前目录

bash 复制代码
[root@xxx ~]# tar -xzvf project.tar.gz

6.6 解压到指定目录

bash 复制代码
[root@xxx ~]# mkdir extract
[root@xxx ~]# tar -xzvf project.tar.gz -C extract

-C 后面的目标目录必须已经存在。

6.7 只打包,不压缩

bash 复制代码
[root@xxx ~]# tar -cvf project.tar project

解包:

bash 复制代码
[root@xxx ~]# tar -xvf project.tar

查看:

bash 复制代码
[root@xxx ~]# tar -tvf project.tar

6.8 排除指定文件

bash 复制代码
tar --exclude='project/build' \
    -czvf project.tar.gz project

这个命令会打包 project,但排除:

text 复制代码
project/build

6.9 tar 常见错误

忘记 -f

错误:

bash 复制代码
tar -czv project.tar.gz project

应写成:

bash 复制代码
tar -czvf project.tar.gz project
把文件名放错位置

更容易阅读的结构是:

bash 复制代码
tar -czvf archive.tar.gz source
解压前不看内容

来源不明的压缩包,建议先执行:

bash 复制代码
tar -tzvf archive.tar.gz

确认它会释放哪些文件,再决定解压位置。


七、bc:在终端中进行浮点计算

Shell 自带的整数运算不适合直接处理一般浮点数。

bc 是一个命令行计算器,可以进行浮点计算。

7.1 进入交互模式

bash 复制代码
[root@xxx ~]# bc

输入:

text 复制代码
1 + 2

输出:

text 复制代码
3

输入:

text 复制代码
10 / 3

默认可能只得到整数结果:

text 复制代码
3

7.2 使用 scale 控制小数位

text 复制代码
scale=4
10 / 3

输出:

text 复制代码
3.3333

7.3 通过管道直接计算

bash 复制代码
[root@xxx ~]# echo 'scale=4; 10 / 3' | bc
3.3333

计算圆面积:

bash 复制代码
[root@xxx ~]# echo 'scale=4; 3.1415 * 5 * 5' | bc
78.5375

7.4 使用数学库

bash 复制代码
[root@xxx ~]# echo 'scale=4; sqrt(2)' | bc -l
1.4142

-l 会加载标准数学库,并设置较高的默认精度。

7.5 退出 bc

在交互模式中输入:

text 复制代码
quit

也可以按:

text 复制代码
Ctrl + D

表示输入结束。


八、uname:查看内核与系统信息

8.1 查看内核版本

bash 复制代码
[root@xxx ~]# uname -r

可能输出:

text 复制代码
6.8.0-xx-generic

这里显示的是 Linux 内核版本,不一定等同于发行版版本。

8.2 查看全部信息

bash 复制代码
[root@xxx ~]# uname -a

通常会输出:

text 复制代码
内核名称
主机名
内核版本
编译信息
硬件架构
操作系统名称

8.3 查看硬件架构

bash 复制代码
[root@xxx ~]# uname -m
x86_64

常见架构包括:

text 复制代码
x86_64
aarch64
riscv64

8.4 查看发行版版本

uname 主要查看内核和硬件信息。

发行版信息更适合查看:

bash 复制代码
[root@xxx ~]# cat /etc/os-release

系统安装了 lsb_release 时,也可以使用:

bash 复制代码
[root@xxx ~]# lsb_release -a

需要区分:

text 复制代码
uname -r:内核版本
/etc/os-release:发行版信息

九、终端中几个重要的快捷键

9.1 Tab:命令和路径补全

输入:

bash 复制代码
[root@xxx ~]# cd /ro

按下 Tab,Shell 可能自动补全为:

bash 复制代码
cd /root/

如果存在多个匹配项,连续按两次 Tab,通常会显示候选内容。

Tab 可以补全:

text 复制代码
命令名称
文件名称
目录路径
部分命令参数

9.2 Ctrl + C:中止前台程序

例如执行:

bash 复制代码
[root@xxx ~]# ping 127.0.0.1

程序会持续运行。

按下:

text 复制代码
Ctrl + C

可以向前台程序发送中断信号,请求它终止。

9.3 Ctrl + D:输入结束

Ctrl + D 通常表示:

text 复制代码
EOF
End Of File
输入结束

例如在 bc 中按 Ctrl + D 可以退出。

在空命令行提示符下,Ctrl + D 通常也能退出当前 Shell,效果类似:

bash 复制代码
exit

9.4 Ctrl + L:清理终端显示

text 复制代码
Ctrl + L

效果通常类似:

bash 复制代码
clear

它只是清理当前终端显示,并不会删除之前执行过的命令记录。

9.5 Ctrl + R:搜索历史命令

按下:

text 复制代码
Ctrl + R

再输入部分关键字,可以反向搜索历史命令。

例如输入:

text 复制代码
tar

Shell 会尝试找到之前执行过的 tar 命令。


十、shutdown:关机与重启

10.1 立即关机

bash 复制代码
[root@xxx ~]# shutdown -h now

其中:

text 复制代码
-h:停止系统并关机
now:立即执行

10.2 立即重启

bash 复制代码
[root@xxx ~]# shutdown -r now

其中:

text 复制代码
-r:重启系统

10.3 延迟关机

十分钟后关机:

bash 复制代码
[root@xxx ~]# shutdown -h +10

指定时间关机:

bash 复制代码
[root@xxx ~]# shutdown -h 23:30

10.4 取消计划任务

bash 复制代码
[root@xxx ~]# shutdown -c

10.5 常见替代命令

关机:

bash 复制代码
poweroff

重启:

bash 复制代码
reboot

这些命令通常需要管理员权限。

连接远程服务器时,不要随意执行关机或重启命令,否则可能造成:

text 复制代码
SSH 连接断开
业务服务停止
未保存数据丢失
其他用户任务中断

十一、Shell 命令是怎样运行的?

11.1 Linux 内核不能直接面向普通用户操作

严格来说,Linux 指的是内核。

内核负责:

text 复制代码
进程管理
内存管理
文件系统
设备管理
网络
系统调用

普通用户不会直接向内核提交底层数据结构,而是通过 Shell、图形界面和应用程序使用内核能力。

11.2 Shell 是命令行解释器

Shell 可以理解为:

text 复制代码
用户与 Linux 内核之间的命令翻译层

执行:

bash 复制代码
[root@xxx ~]# ls -l

大致过程如下:

text 复制代码
用户输入 ls -l
       ↓
Shell 解析命令和参数
       ↓
判断是否为别名、函数或内建命令
       ↓
在 PATH 中寻找外部程序
       ↓
创建进程运行 /usr/bin/ls
       ↓
程序通过系统调用访问目录
       ↓
内核返回文件信息
       ↓
ls 格式化结果
       ↓
Shell 和终端将结果显示给用户

11.3 Shell 与 Windows 图形界面的类比

在 Windows 中,我们可能通过:

text 复制代码
双击磁盘
点击文件夹
右键复制
点击删除

完成操作。

这并不是用户直接操作 Windows 内核,而是通过图形界面发出请求。

Linux Shell 承担类似角色,只不过交互形式由鼠标点击变成了文本命令。

11.4 常见 Shell

Linux 中常见的 Shell 包括:

text 复制代码
Bash
Zsh
Fish
Dash

查看当前用户默认 Shell:

bash 复制代码
[root@xxx ~]# echo "$SHELL"
/bin/bash

查看当前进程:

bash 复制代码
[root@xxx ~]# echo "$0"
-bash

11.5 为什么命令不存在?

执行:

bash 复制代码
[root@xxx ~]# mycommand
bash: mycommand: command not found

可能的原因包括:

text 复制代码
命令没有安装
命令名拼写错误
程序所在目录不在 PATH 中
文件没有执行权限
当前目录不在 PATH 中

假设当前目录中存在:

text 复制代码
hello.sh

通常不能只输入:

bash 复制代码
hello.sh

而应明确写:

bash 复制代码
./hello.sh

因为 Shell 默认不会自动在当前目录中寻找程序。


十二、为什么 Linux 需要权限?

Linux 是一个多用户系统。

一台主机中可能同时存在:

text 复制代码
系统管理员
开发人员
运维人员
普通用户
系统服务账号
数据库账号
Web 服务账号

如果任何用户都能随意修改所有文件,就会产生严重问题:

text 复制代码
普通用户删除系统文件
一个用户读取另一个用户的私人数据
Web 服务修改数据库配置
被入侵的程序控制整个系统

权限系统的目标就是回答两个问题:

text 复制代码
谁正在访问?
他能够做什么?

12.1 超级用户和普通用户

Linux 用户可以粗略分成:

text 复制代码
超级用户 root
普通用户

root 拥有很高的系统管理权限,终端提示符通常是:

bash 复制代码
[root@xxx ~]#

普通用户提示符通常是:

bash 复制代码
[student@xxx ~]$

区别之一是最后的符号:

text 复制代码
#:通常表示 root
$:通常表示普通用户

12.2 查看当前用户

bash 复制代码
[root@xxx ~]# whoami
root

查看用户和组信息:

bash 复制代码
[root@xxx ~]# id
uid=0(root) gid=0(root) groups=0(root)

12.3 切换用户

bash 复制代码
[root@xxx ~]# su - student
[student@xxx ~]$

其中:

text 复制代码
su:切换用户
- :同时加载目标用户的登录环境

返回原用户:

bash 复制代码
[student@xxx ~]$ exit
[root@xxx ~]#

12.4 三类文件访问者

对一个具体文件来说,Linux 会把访问者分成三类:

text 复制代码
u:user,文件拥有者
g:group,文件所属组中的用户
o:others,其他用户

例如:

bash 复制代码
[root@xxx ~]# ls -l demo.txt
-rw-r----- 1 root developers 120 Aug 2 18:00 demo.txt

这里:

text 复制代码
拥有者:root
所属组:developers
其他用户:既不是 root,也不在 developers 组中的用户

后面的权限判断,就是分别为这三类用户设置:

text 复制代码
读权限
写权限
执行权限

十三、本篇总结

本文介绍的内容可以分成四组。

13.1 命令查找和简化

text 复制代码
whereis:查找程序和手册等相关文件
alias:为复杂命令设置短名称

13.2 文本与压缩

text 复制代码
grep:筛选匹配行
zip/unzip:处理 ZIP 压缩包
tar:打包、查看和解包

13.3 系统工具

text 复制代码
bc:终端计算器
uname:查看内核和硬件信息
shutdown:关机或重启

13.4 Shell 与权限入口

text 复制代码
Shell 负责解释用户命令
内核负责执行底层资源管理
权限系统判断谁可以对文件做什么

整个流程可以看作:

text 复制代码
用户输入命令
     ↓
Shell 解析
     ↓
程序调用操作系统
     ↓
内核检查访问权限
     ↓
允许或拒绝操作
相关推荐
Tyfrank1 小时前
Linux内核收包路径及中断
linux·运维·单片机
库玛西1 小时前
快速幂算法全景总结图:从“愚公移山”到“细胞分裂”
c语言·c++·笔记·算法
男孩李2 小时前
浅谈Linux的last命令
java·linux·服务器
yunqi2 小时前
ELK日志平台架构详解:从Filebeat采集到Elasticsearch检索的企业级日志方案实践
linux
是江迪呀2 小时前
关于记笔记的批评和自我批评
笔记·aigc·ai编程
MartinYeung52 小时前
[论文学习]Skill-MAS:面向自动多智能体系统的元技能进化
大数据·人工智能·学习
手揽回忆怎么睡2 小时前
Ubuntu 22.04 64位安装MinIO
linux·前端·ubuntu
不会代码的小猴2 小时前
电机学笔记
笔记
阳光九叶草LXGZXJ2 小时前
达梦数据库-报错-11-cmd 13 validate error
linux·运维·数据库·sql·学习