请添加图片描述

在这里插入图片描述


🎈主页传送门:良木生香

🔥个人专栏:《C语言》《数据结构-初阶》《鼠鼠的C++学习之路》《Linux系统编程》

🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离


前言:在上一篇 Linux 文章中我们又学习了一些 Linux 的基础指令,那么今天这篇文章我们就对 Linux 指令进行收尾,同时对下一个知识点做一个开头——Linux 权限。Linux 指令是非常多的,而且有非常多的组合,我们作为刚入门的小白,只用先掌握最主要的四十几个指令就行,后面如果遇到不会的功能我们再慢慢积累起来。只需要多练就能熟练使用这些指令,所以不用太担心,也不用特意去记忆和背诵。话不多说,我们直接开始~~~


一、file 指令——看穿文件的"真面目"

1.1 功能

查看文件的真实类型(不是看后缀名,而是读取文件内部的"魔数")。

1.2 用法

file 文件名

1.3 实战演示

现在我有一个还未编译的 .cpp 文件,使用 file 查看:

在这里插入图片描述

可以看到,系统识别出这是一个 C++ 源代码文件,编码格式是 UTF-8。

现在我将这个文件编译,得到一个可执行程序文件,再用 file 查看:

在这里插入图片描述

这次显示的信息就丰富多了:

  • ELF 64-bit LSB executable:这是一个 64 位的 ELF 格式可执行文件
  • x86-64:运行在 x86-64 架构上
  • dynamically linked:动态链接(依赖共享库)
  • interpreter /lib64/ld-linux-x86-64.so.2:程序加载器
  • for GNU/Linux 3.2.0:编译时针对的 Linux 内核版本
  • not stripped:符号表未剥离(方便调试)

💡 为什么 file 不看后缀?

因为文件后缀可以随意修改。比如把 photo.jpg 改成 photo.txt,用 file 查看它仍然是 JPEG 图片。file 读取的是文件开头的魔数(Magic Number)——每种文件格式都有固定的标识字节。

1.4 更多示例

file /bin/ls
# 输出:/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV)

file /etc/passwd
# 输出:/etc/passwd: ASCII text

file photo.png
# 输出:photo.png: PNG image data, 1920 x 1080, 8-bit/color RGBA

二、tar 指令——Linux 的"打包压缩"神器

2.1 为什么需要 tar?

在 Linux 中,打包压缩是两个概念:

操作 作用 类比
打包 把多个文件/目录合并成一个文件 把散落的文件装进一个箱子
压缩 把文件体积变小 把箱子里的空气抽掉
打包: file1 + file2 + dir1/  →  archive.tar
压缩: archive.tar            →  archive.tar.gz(体积变小)

2.2 tar 核心选项速查

选项 全称 作用
-c create 创建新归档
-x extract 解压归档
-t list 查看归档内容(不解压)
-v verbose 显示详细过程
-f file 指定归档文件名(必须放最后)
-z gzip 用 gzip 压缩/解压(.tar.gz)
-j bzip2 用 bzip2 压缩/解压(.tar.bz2)
-C directory 指定解压到某个目录

📌 口诀记忆c 创建、x 解压、t 查看、v 啰嗦、f 文件名、z gzip、j bzip2。

2.3 实战:打包、压缩、解压一条龙

现在我有一个文件夹 test_zip

在这里插入图片描述

打包并压缩

tar -czf test_zip.zip test_zip

执行后得到压缩包:

在这里插入图片描述

解压压缩包

tar -xzf test_zip.zip

⚠️ 注意tar 默认解压到当前路径下。如果想解压到指定路径,需要加 -C

tar -xzf test_zip.zip -C /larry/test

2.4 常见文件后缀对应关系

后缀 含义 解压命令
.tar 仅打包,未压缩 tar -xvf
.tar.gz / .tgz gzip 压缩 tar -xzvf
.tar.bz2 bzip2 压缩 tar -xjvf
.zip zip 格式 unzip

2.5 压缩的目的——文件传输

压缩的目的就是为了让文件能够更加快捷地传输。讲到这里,我们来复习一下 Linux 与 Windows 之间传输文件的指令:

指令 方向 说明
sz Linux → Windows 通过 XShell 下载文件到本地
rz Windows → Linux 通过 XShell 上传文件到服务器
scp Linux → Linux 服务器之间安全复制文件
# scp 示例:将本地文件复制到远程服务器
scp test.zip larry@192.168.1.100:/home/larry/

三、bc 指令——命令行计算器

3.1 功能

Linux 系统自带的命令行计算器,支持浮点数运算。

3.2 用法

在终端输入 bc,自动进入交互模式:
在这里插入图片描述

$ bc
1 + 2
3

10 / 3
3               # 默认是整数除法

scale=2         # 设置小数位数为 2
10 / 3
3.33

quit            # 退出 bc

3.3 在脚本中使用 bc

# 管道传入表达式
echo "1.2 + 3.4" | bc
# 输出:4.6

# 计算圆周率(-l 加载数学库)
echo "scale=10; 4 * a(1)" | bc -l
# 输出:3.1415926532

# 在变量中使用
result=$(echo "scale=2; 100 / 3" | bc)
echo $result
# 输出:33.33

3.4 bc 常用数学函数(加 -l 参数)

函数 说明
s(x) sin(x)
c(x) cos(x)
a(x) arctan(x)
l(x) ln(x)
e(x) e^x
sqrt(x) 平方根

四、uname 指令——查看系统信息

4.1 功能

查看计算机的详细信息,包括内核版本、系统架构等。

4.2 用法

uname -a    # 显示所有信息

在这里插入图片描述

4.3 输出解读

字段 含义 示例值
Linux 内核名称 Linux
VM-0-14-centos 主机名 VM-0-14-centos
3.10.0-1160.71.1.el7.x86_64 内核版本 CentOS 7 的 3.10 内核
#1 SMP 编译信息 对称多处理器支持
x86_64 机器架构 64 位 x86 架构
GNU/Linux 操作系统 GNU/Linux

4.4 分项查看

uname -s    # 内核名称(Linux)
uname -n    # 主机名
uname -r    # 内核版本(最常用!)
uname -m    # 机器架构(x86_64 / i686)
uname -o    # 操作系统(GNU/Linux)

4.5 面试考点:计算机体系结构

面试时如果被问到:“你的计算机体系结构是什么?”

回答思路:计算机体系结构问的就是 CPU 使用的是什么架构。现在市面上主要是两种:

架构 特点 典型设备
X86 高性能、功耗高 笔记本电脑、台式机、服务器
ARM 低功耗、高性能比 手机、平板、嵌入式设备

在 Linux 上查看架构:

uname -m
# 输出:x86_64(64 位 X86 架构)

五、热键——效率翻倍的秘密武器

5.1 常用热键速查

热键 作用 使用场景
Tab 自动补全命令/文件名 输入 cd /ho 按 Tab → 自动补成 cd /home
Tab ×2 显示所有可能的补全选项 输入 cd / 按两次 Tab → 列出根目录所有文件
Ctrl + C 终止当前运行的程序 程序死循环或执行错了,赶紧停掉
Ctrl + D 退出当前登录/关闭终端 相当于输入 exitlogout
Ctrl + L 清屏(光标移到顶部) 屏幕太乱,清一下
Ctrl + A 光标移到行首 改命令开头的参数
Ctrl + E 光标移到行尾 改命令末尾的参数
Ctrl + U 删除光标前的所有内容 整行输错了,快速删掉重来
Ctrl + K 删除光标后的所有内容 只保留前半部分
Ctrl + W 删除光标前的一个单词 删错了一个参数
/ 翻看历史命令 不用重新输入,找之前的命令
Ctrl + R 搜索历史命令 输入关键字,匹配历史命令
history 查看最近执行的命令 默认显示最近 1000 条
!n 执行历史记录中第 n 条命令 !100 执行第 100 条历史命令
!! 执行上一条命令 刚才的命令忘了加 sudo,输入 sudo !!

5.2 最实用的组合技

# 场景:刚才执行了一条命令,发现忘了加 sudo
apt-get install vim
# 报错:Permission denied

# 解决:sudo + !!(!! 表示上一条命令)
sudo !!
# 等价于:sudo apt-get install vim

5.3 Linux 指令分类速览

Linux 指令非常多,下面按功能分类列出最常用的:

类别 常用指令
文件处理 filemkdirgrepddfindmvlsdiffcatln
系统管理 dftopfreequotaatlpaddusergroupaddkillcrontab
网络操作 ifconfigippingnetstattelnetftprouterloginrcpfingermailnslookup
系统安全 passwdsuumaskchgrpchmodchownchattrsudopswho
其他工具 tarunzipgunzipunarjmtoolsmanunencodeuudecode

💡 学习建议:不用刻意背诵,多练多用自然就记住了。遇到不会的指令,用 man 指令名 查看手册。


六、Shell——以说媒的角度理解操作系统内核

6.1 广义操作系统 vs 狭义操作系统

在操作系统这个概念中,我们分为广义操作系统狭义操作系统两个概念:

概念 定义 例子
广义操作系统 操作系统内核 + 应用程序软件 我们日常说的 “Windows”、“Linux”
狭义操作系统 仅指操作系统内核(Kernel) Linux Kernel、Windows NT Kernel

广义操作系统大家都理解,所以今天我们要讲的是狭义操作系统。下面是基本框架的示意图:

在这里插入图片描述

从图中可以看到,用户并不是直接和内核打交道的,中间隔了一层 Shell(外壳)

6.2 “王婆说媒”——Shell 的本质

我们该怎么理解 Shell 这层外壳呢?

想象这样一个场景:有一个不擅长和女生打交道的男主(这就是用户),他看上了村里的如花(这就是操作系统内核 Kernel)。但是男主害羞啊,不知道怎么跟如花搭话,更不知道怎么表达心意。

这时候,王婆(这就是 Shell)出现了。王婆是村里有名的媒婆,专门帮人说媒。男主把想法告诉王婆,王婆翻译成如花能听懂的话,去跟如花沟通。如花回应了,王婆再把回应翻译给男主听。

在这里插入图片描述

Shell 就是操作系统内核和用户之间的"翻译官"+“媒婆”

  • 用户输入的是人类能看懂的命令(如 lscd
  • Shell 把这些命令翻译成内核能理解的系统调用
  • 内核执行完后,Shell 再把结果翻译回人类语言展示给用户

6.3 Shell 是怎么"传话"的?

用专业的话来说,Shell 是命令行解释器(Command Line Interpreter),它的工作流程如下:

用户输入命令 → Shell 分析指令 → 交给内核执行 → 返回执行结果
     ↑                                         ↓
     └──────────── 用户看到结果 ←────────────────┘

具体步骤

  1. 读取(Read):Shell 读取用户输入的命令行
  2. 解析(Parse):把命令拆分成命令名和参数
  3. 查找(Find):在环境变量 PATH 指定的目录中查找可执行文件
  4. 执行(Execute):通过系统调用让内核执行程序
  5. 返回(Return):收集程序的输出,显示给用户
# 例如用户输入:
ls -l /home

# Shell 的处理过程:
# 1. 解析出命令:ls,参数:-l, /home
# 2. 在 /bin/ls 找到可执行文件
# 3. 调用 execve() 系统执行 /bin/ls
# 4. 内核读取 /home 目录,返回文件列表
# 5. Shell 把结果格式化后显示给用户

6.4 Shell 的"保护机制"——拦截非法请求

Shell 还承担着保护内核的责任:

如果用户输入了"非法请求"(比如删除系统关键文件的命令),Shell 会在交给内核之前拦截下来。

就像王婆不会把"男主想欺负如花"这种话传过去一样,Shell 会过滤掉危险操作。

Shell 的保护机制包括

机制 作用
命令解析检查 检查命令语法是否正确
权限检查 检查用户是否有权限执行该操作
路径检查 防止访问非法路径
环境隔离 每个用户有独立的环境变量和工作目录

6.5 Linux 的 Shell——bash

Linux 中最常用的 Shell 是 bash(Bourne Again Shell):

# 查看当前使用的 Shell
echo $SHELL
# 输出:/bin/bash

# 查看系统支持的所有 Shell
cat /etc/shells
# 输出:/bin/sh、/bin/bash、/usr/bin/bash 等

bash 的特点

  • ✅ 支持命令历史(按 ↑↓ 翻历史命令)
  • ✅支持命令补全(按 Tab 自动补全)
  • ✅ 支持脚本编程(把多个命令写成 .sh 文件批量执行)
  • ✅ 支持管道|)和重定向>>><

6.6 Windows 的 Shell——图形界面

Windows 也有 Shell,只是形式不同:

系统 Shell 形式 交互方式
Linux 命令行(bash/zsh) 输入文字命令
Windows 图形界面(GUI) 点击图标、按钮

💡 本质一样:你双击"我的电脑",Windows 的 Shell(资源管理器)把这个操作翻译成内核调用,内核去读取磁盘信息,Shell 再把结果用图形展示出来。

Windows 的命令行 Shell

Windows 也有命令行 Shell,比如:

  • cmd.exe:传统的命令提示符
  • PowerShell:功能更强大的现代 Shell
# Windows PowerShell 示例
Get-ChildItem          # 相当于 Linux 的 ls
Set-Location C:\Users  # 相当于 Linux 的 cd

七、总结速查表

指令/概念 一句话总结 最常用场景
file 看穿文件的真实类型(不看后缀) 不知道文件是什么格式
tar -czf 打包并 gzip 压缩 备份、传输目录
tar -xzf 解压 .tar.gz 解压下载的源码包
bc 命令行计算器,支持浮点数 脚本中做数学运算
uname -a 查看系统所有信息 查内核版本、系统架构
uname -r 只看内核版本 排查兼容性问题
Tab 自动补全命令/文件名 少打字、防拼错
Ctrl+C 终止当前程序 程序卡死了
Ctrl+D 退出登录/关闭终端 快速退出
!! 执行上一条命令 忘了加 sudo 时用
Shell 用户和内核之间的"王婆" 理解操作系统架构
bash Linux 最常用的 Shell 写脚本、日常命令

后记:Linux 的学习是一个循序渐进的过程。今天我们从 Shell 的本质出发,理解了用户-内核之间的交互模型;掌握了 file、tar、bc、uname 等实用工具;还学习了让效率翻倍的热键。下一篇我们将深入 Linux 权限管理,探索 root 和普通用户之间的权力游戏。


🌟 那么以上就是本次所有的内容了
文章是自己写的哈,有什么描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读~ 🌟

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐