一. 基础指令首尾与总结
1.1 文件压缩与远程传输指令
1.1.1 tar:文件归档与压缩利器
功能:打包/解包,不打开它,直接看内容
参数组合:(这里需要注意 -f后不能再加别的参数)
tar -czf:静默打包并压缩目录,适合脚本中后台执行(不输出过程信息)tar -xzf:静默解压 .tar.gz 格式的压缩包,快速恢复文件tar -xzf -C:指定解压目录,避免文件散落在当前目录(-C 后接目标路径)tar -cvzf:带详细输出的打包压缩(-v 参数显示每个处理的文件)tar -xvzf:带详细输出的解压(适合确认解压内容是否正确)
实际案例:
# ================================================== # 示例 1: 使用 tar -czf 打包并压缩目录 (不显示过程) # ================================================== # 创建测试目录和文件 [root@VM-0-3-centos lesson5]# mkdir -p test_dir [root@VM-0-3-centos lesson5]# echo "测试文件1" > test_dir/file1.txt [root@VM-0-3-centos lesson5]# echo "测试文件2" > test_dir/file2.txt [root@VM-0-3-centos lesson5]# ls ./test_dir file1.txt file2.txt # 打包并压缩 test_dir 目录为 archive.tgz (-c:创建 -z:gzip压缩 -f:指定文件名) [root@VM-0-3-centos lesson5]# tar -czf archive.tgz test_dir [root@VM-0-3-centos lesson5]# ls archive.tgz test_dir # ================================================== # 示例 2: 使用 tar -xzf 解压缩包 (不显示过程) # ================================================== # 先删除原目录 [root@VM-0-3-centos lesson5]# rm -rf test_dir [root@VM-0-3-centos lesson5]# ls archive.tgz # 解压 archive.tgz (-x:解压 -z:识别gzip压缩 -f:指定压缩包) [root@VM-0-3-centos lesson5]# tar -xzf archive.tgz [root@VM-0-3-centos lesson5]# ls archive.tgz test_dir [root@VM-0-3-centos lesson5]# ls -l test_dir total 8 -rw-r--r-- 1 root root 14 Oct 16 10:28 file1.txt -rw-r--r-- 1 root root 14 Oct 16 10:28 file2.txt # ================================================== # 示例 3: 使用 tar -xzf -C 解压到指定目录 # ================================================== # 创建目标目录 [root@VM-0-3-centos lesson5]# mkdir -p target_dir [root@VM-0-3-centos lesson5]# ls archive.tgz target_dir test_dir # 解压到指定目录 target_dir (-C:指定解压路径) [root@VM-0-3-centos lesson5]# tar -xzf archive.tgz -C target_dir [root@VM-0-3-centos lesson5]# ls ./target_dir test_dir # ================================================== # 示例 4: 使用 tar -cvzf 打包压缩并显示过程 # ================================================== # -v:显示详细过程 (verbose) [root@VM-0-3-centos lesson5]# tar -cvzf visible__archive.tgz test_dir test_dir/ test_dir/file2.txt test_dir/file1.txt [root@VM-0-3-centos lesson5]# ls archive.tgz target_dir test_dir visible__archive.tgz # ================================================== # 示例 5: 使用 tar -xvzf 解压并显示过程 # ================================================== # 清理已经存在的测试文件 [root@VM-0-3-centos lesson5]# rm -rf test_dir # -v:显示解压的每个文件 [root@VM-0-3-centos lesson5]# tar -xvzf visible__archive.tgz test_dir/ test_dir/file2.txt test_dir/file1.txt [root@VM-0-3-centos lesson5]# ls archive.tgz target_dir test_dir visible__archive.tgz # ================================================== #补充: 在任意 tar 命令末尾加 &, 例如: # ================================================== tar -czf bigarchive.tar.gz /path/to/large_dir & # 后台打包 tar -xzf bigarchive.tar.gz -C /target & # 后台解压 # 所以我们大部分时候也可以不用v1.1.2 scp:跨机文件传输工具
功能:scp基于 SSH 协议实现远程文件拷贝,无需手动登录即可传输,适合服务器间文件同步
- 本地到远程:
scp local_file user@remote_ip:/remote/path,如scp test.txt Lotso@192.168.1.1:/home/(将本地test.txt传到远程/home目录)。 - 远程到本地:
scp user@remote_ip:/remote/file local_path,如scp root@192.168.1.1:/etc/hosts ./(将远程hosts文件下载到当前目录)。 - 传输目录:加
-r参数递归传输,scp -r local_dir user@remote_ip:/remote/path。
1.1.3 bc:交互式计算器工具
功能:bc解决了 Linux 终端默认不支持浮点运算的问题,是简单计算的高效工具
- 基础使用:直接输入
bc进入交互模式,支持 + - * / 运算,如 2+5 回车返回 7;输入 quit 退出。 - 结合管道使用:输入
echo "1+2+3+4+5"|bc直接返回结果15
实际案例:
# 基础使用 [root@VM-0-3-centos lesson5]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 2+5 7 2*5 10 5/2 2 5-3 2 quit #结合管道 [root@VM-0-3-centos lesson5]# echo "1+2+3+4+5"|bc 151.2 面试题讲解(附带两个指令)
面试题:
1.你的计算机体系结构是什么?
2.如何查看你的 Linux 版本?
3.如何查看你的具体系统发行版?
1.3 常用热键
| 热键组合 | 功能描述 |
|---|---|
Ctrl+C | 强制终止当前运行的程序或进程,常用于中断终端中正在执行的命令(如ping测试、长时间运行的脚本等)。 |
Ctrl+R | 快速搜索历史指令,输入关键字后会匹配最近执行过的含该关键字的指令,方便快速重复执行或编辑历史命令。 |
Ctrl+D | 等效于exit命令,可用于退出当前 Shell 会话(如远程登录后退出服务器),也可在输入模式中表示“输入结束”(如cat命令中输入内容后按此键结束输入)。 |
Tab | 自动补全指令或路径,输入指令前几个字符或路径前几个部分时,按此键会自动补全为完整的指令或路径,减少拼写错误,提升操作效率。 |
补充一个关机指令shutdown
语法:shutdown [选项]
常见选项:
-h:停止系统服务后,立即关机。-r:停止系统服务后,重新启动系统。-t sec:指定延迟sec秒后执行关机操作。
以下命令作为扩展:
- 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
- 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;
- 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
- 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup;
- 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
- 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
二. Shell 与内核交互原理:拆解 “指令生效” 的关键环节
2.1 核心原理解析
Linux严格意义上说的是⼀个操作系统,我们称之为“核心(kernel)“,但我们⼀般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度:shell的最简单定义,命令行解释器主要包含:
- 将使用者的命令翻译给核心处理
- 同时,将核心的处理结果结果翻译给使用者。
2.2 核心角色定位:Shell 是 “翻译官”,内核是 “执行者”
以目前的知识储备,我们可能无法很好的理解,那么接下来博主将通过一个故事带大家感性理解一下先。
故事阶段一:在一个村子里,老王是村长,他的儿子小王事业有成回到家乡。老王催小王找对象,但小王不擅长与女孩交流。于是,老王请来村里有名的媒婆——王婆。王婆到小王家询问他的心意,小王说:“我喜欢隔壁的如花。”王婆便去如花家说媒。如花表示不认识小王,王婆提醒:“他是你小学同学呀。”如花想了想,还是拒绝了。王婆只好回去告诉小王。
阶段一理解:
小王不亲自去,是因为他不擅长与女孩交流。
在Linux中,用户(小王)通常不直接与内核(如花)打交道,而是通过Shell(王婆)传递指令(“喜欢如花”)。
Shell解析并执行命令,内核处理请求,执行失败则反馈给用户。
故事阶段二:小王不死心,请王婆再去争取。王婆走到如花家附近,看见如花正和隔壁的小帅及家人一起吃饭,顿时明白如花已有对象。王婆直接返回,告诉小王此事不可为。
阶段二理解:
王婆在传递请求前,先判断情况,拒绝了不合理的要求。
正如Shell能在一定程度上拦截非法或危险请求,保护内核免受直接干扰。
故事阶段三:小王仍不放弃,王婆本要拒绝,却遇见老王,碍于情面只好答应。但她担心事情办不成会砸招牌,于是想出一个办法:成立“王婆婚介公司”,招聘实习生去执行任务。成功了是王婆指导有方,失败了也无妨,换一个实习生再去试试就是。
阶段三理解:
王婆不亲自冒险,而是派实习生去尝试。
这好比Shell不直接执行可能崩溃的任务,而是创建子进程(实习生)去执行。子进程若失败,不影响Shell本身。
✅ 整体总结:
Shell与Bash: Linux中常用的Shell程序是Bash(如which bash所示),用户登录后自动启动,常以“死循环”方式等待用户输入。
王婆是Bash,媒婆是Shell——Shell是命令行界面的统称,Bash是其中一种具体实现。
外壳的多样性: Windows也有Shell,如图形化界面(GUI)。安卓基于Linux内核,其GUI也是一种Shell。这就是为什么手机厂商常宣传“基于安卓深度定制”(实为定制Shell),而非“优化Linux内核”。
内核才是核心: 我们学习的应是操作系统最核心的部分——内核。无论Shell如何变化,内核始终是基础,选择哪种外壳反而次要。
通过这个故事,我们形象地理解了用户-Shell-内核之间的关系:Shell作为桥梁,既传递指令,也提供保护,还能通过子进程机制增强系统稳定性。内核才是真正的力量中心,而Shell只是我们与它对话的窗口。
2.3 Shell与内核交互过程图解(对应上面的故事)
阶段一:正常命令执行流程
┌─────────┐ 请求 ┌─────────┐ 传递 ┌─────────┐ │ 小王 │ ────────> │ 王婆 │ ────────> │ 如花 │ │ (用户) │ │ (Shell) │ │ (内核) │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ "喜欢如花" │ 解析命令 │ 处理请求 │ │ │ │ │ │ │ ←──────────────── ──────────────────── │ │ 反馈结果(拒绝) │关键理解:用户不直接操作内核,需要通过Shell中介
阶段二:Shell拦截非法请求
┌─────────┐ 再次请求 ┌─────────┐ │ 小王 │ ────────> │ 王婆 │ │ (用户) │ │ (Shell) │ └─────────┘ └─────────┘ │ │ 检测到异常情况 │ (如花已有对象) │ ┌─────┴─────┐ │ 拒绝执行 │ │ 保护内核 │ └─────┬─────┘ │ │ ←────────────────── │ │ 直接返回拒绝 │关键理解:Shell能在传递前拦截危险请求,保护系统
阶段三:创建子进程执行任务
┌─────────┐ 坚持请求 ┌─────────┐ │ 小王 │ ────────> │ 王婆 │ │ (用户) │ │ (Shell) │ └─────────┘ └─────────┘ │ │ 创建子进程 ┌───────────┴───────────┐ │ │ ┌─────┐ ┌─────┐ │实习生│ │实习生│ │(子进│ │(子进│ │ 程) │ │ 程) │ └─────┘ └─────┘ │ │ │ 尝试执行 │ 备份方案 │ │ ┌───┴───┐ ┌───┴───┐ │成功/失败│ │成功/失败│ └───┬───┘ └───┬───┘ └─────────┬─────────────┘ │ │ ←────────────── │ │ 汇总结果 │关键理解:通过子进程机制,Shell本身不会崩溃
整体架构对比
现实世界比喻: Linux系统对应: ┌─────────────────┐ ┌─────────────────┐ │ 小王 │ │ 用户 │ │ (不擅长直接交流) │ │ (不直接操作内核) │ └────────┬────────┘ └────────┬────────┘ │ │ ┌────────▼────────┐ ┌────────▼────────┐ │ 王婆 │ │ Shell │ │ (沟通中介) │ │ (命令解释器) │ └────────┬────────┘ └────────┬────────┘ │ │ ┌────────▼────────┐ ┌────────▼────────┐ │ 如花 │ │ 内核 │ │ (最终决策者) │ │ (核心资源管理) │ └─────────────────┘ └─────────────────┘