《Linux系统编程》Linux指令收尾 (四):从零开始理解Linux基础指令

🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》《C++入门到进阶&自我学习过程记录》
《Linux操作系统从入门到实践》
《算法题讲解指南》--优选算法
《算法题讲解指南》--递归、搜索与回溯算法
《算法题讲解指南》--动态规划算法

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

Linux基本指令

文件压缩与远程传输指令

23、tar指令(文件归档与压缩利器)

24、scp指令(跨机文件传输工具)

25、bc指令(交互式计算器工具)

[26、uname -r指令](#26、uname -r指令)

附面试题

27、常用热键(Linux中的高频访问键位)

[Shell 以及运行原理](#Shell 以及运行原理)

核心原理解析

[核心角色定位:Shell 是 "翻译官",内核是 "执行者"](#核心角色定位:Shell 是 “翻译官”,内核是 “执行者”)

结束语


Linux基本指令

文件压缩与远程传输指令

23、tar指令(文件归档与压缩利器)

功能 :打包/解包,不打开它,直接看内容
语法:tar-cxtzjvf文件与目录

参数:

  • -c:建立一个压缩文件的参数指令(create的意思);
  • -x:解开一个压缩文件的参数指令!
  • -t:查看tarfile里面的文件!
  • -z:是否同时具有gzip的属性?亦即是否需要用gzip压缩?
  • -j:是否同时具有bzip2的属性?亦即是否需要用bzip2压缩?
  • -v:压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
  • -f:使用档名,请留意,在f之后要立即接档名喔!不要再加参数!
  • -C:解压到指定目录

参数组合:(这里需要注意 -f后不能再加别的参数)

  • tar -czf:静默打包并压缩目录,适合脚本中后台执行(不输出过程信息)
  • tar -xzf:静默解压 .tar.gz 格式的压缩包,快速恢复文件
  • tar -xzf -C:指定解压目录,避免文件散落在当前目录(-C 后接目标路径)
  • tar -cvzf:带详细输出的打包压缩(-v 参数显示每个处理的文件)
  • tar -xvzf:带详细输出的解压(适合确认解压内容是否正确)

实际案例

bash 复制代码
#===============================================
# 示例 1: 使用 tar -czf 打包并压缩目录(不显示过程)
#===============================================
# 创建测试目录和文件
[root@iZbp12ear9ufvimc78fddkZ test]# mkdir test
[root@iZbp12ear9ufvimc78fddkZ test]# echo "测试文件1" > test/file1.txt
[root@iZbp12ear9ufvimc78fddkZ test]# echo "测试文件2" > test/file2.txt
[root@iZbp12ear9ufvimc78fddkZ test]# ls ./test
file1.txt  file2.txt
# 打包并压缩 test_dir 目录为 archive.tgz(-c:创建 -z:gzip压缩 -f:指定文件名)
[root@iZbp12ear9ufvimc78fddkZ test]# tar -czf archive.tgz test
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz  test

#==========================================
# 示例 2: 使用 tar -xzf 解压压缩包(不显示过程)
#==========================================
# 先删除原目录
[root@iZbp12ear9ufvimc78fddkZ test]# rm -rf test
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz
# 解压 archive.tgz(-x:解压 -z:识别gzip压缩 -f:指定压缩包)
[root@iZbp12ear9ufvimc78fddkZ test]# tar -xzf archive.tgz
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz  test
[root@iZbp12ear9ufvimc78fddkZ test]# ll test
total 8
-rw-r--r-- 1 root root 14 May  8 19:40 file1.txt
-rw-r--r-- 1 root root 14 May  8 19:40 file2.txt

#=======================================
# 示例 3: 使用 tar -xzf -C 解压到指定目录
#=======================================
# 创建目标目录
[root@iZbp12ear9ufvimc78fddkZ test]# mkdir target_dir
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz  target_dir  test
# 解压到指定目录 target_dir(-C:指定解压路径)
[root@iZbp12ear9ufvimc78fddkZ test]# tar -xzf archive.tgz -C target_dir
[root@iZbp12ear9ufvimc78fddkZ test]# tree ./target_dir
./target_dir
└── test
    ├── file1.txt
    └── file2.txt

1 directory, 2 files

# ======================================
# 示例 4: 使用 tar -cvzf 打包压缩并显示过程
# ======================================
# -v:显示详细过程(verbose)
[root@iZbp12ear9ufvimc78fddkZ test]# tar -cvzf visible__archive.tgz test
test/
test/file1.txt
test/file2.txt
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz  target_dir  test  visible__archive.tgz

# ===================================
# 示例 5: 使用 tar -xvzf 解压并显示过程
# ===================================
# 清理已经存在的测试文件
[root@iZbp12ear9ufvimc78fddkZ test]# rm -rf test
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz  target_dir  visible__archive.tgz
# -v:显示解压的每个文件
[root@iZbp12ear9ufvimc78fddkZ test]# tar -xvzf visible__archive.tgz
test/
test/file1.txt
test/file2.txt
[root@iZbp12ear9ufvimc78fddkZ test]# ls
archive.tgz  target_dir  test  visible__archive.tgz

#====================================
#补充:在任意 tar 命令末尾加 &,例如:
#====================================
tar -czf big_archive.tar.gz /path/to/large_dir &  # 后台打包
tar -xzf big_archive.tar.gz -C /target &         # 后台解压
# 所以我们大部分时候也可以不用v

24、scp指令(跨机文件传输工具)

功能:scp 基于 SSH 协议实现远程文件拷贝,无需手动登录即可传输,适合服务器间文件同步

  • 本地到远程:scp local_file user@remote_ip:/remote/path,如 scp test.txt admin@47.98.198.24:/home/(将本地 test.txt 传到远程 /home 目录)。
  • 远程到本地:scp user@remote_ip:/remote/file local_path,如 scp root@47.98.198.24:/etc/hosts ./(将远程 hosts 文件下载到当前目录)。
  • 传输目录:加 -r 参数递归传输,scp -r local_dir user@remote_ip:/remote/path。

细节优势:密码不回显,且本地到远程时要输入的密码是要传给的目标机器的密码。

25、bc指令(交互式计算器工具)

功能:bc 解决了 Linux 终端默认不支持浮点运算的问题,是简单计算的高效工具

  • 基础使用:直接输入 bc 进入交互模式,支持 + - * / 运算,如 2+5 回车返回 7;输入 quit 退出。
  • 结合管道使用:输入 echo "1+2+3+4+5" | bc 直接返回结果15
bash 复制代码
# 基础使用
[root@iZbp12ear9ufvimc78fddkZ test]# 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@iZbp12ear9ufvimc78fddkZ test]# echo "1+2+3+4+5" | bc
15

26、uname -r指令

语法:uname 选项
功能:uname 用来获取电脑和操作系统的相关信息。
补充说明:uname 可显示 linux 主机所用的操作系统的版本、硬件的名称等基本信息。

常用选项:

-a 或 -all:详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称

lsb_release-a:查看操作系统版本

bash 复制代码
[root@iZbp12ear9ufvimc78fddkZ test]# uname -r
3.10.0-1160.119.1.el7.x86_64
[root@iZbp12ear9ufvimc78fddkZ test]# uname -a
Linux iZbp12ear9ufvimc78fddkZ 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

附面试题

1.你的计算机体系结构是什么?
2.如何查看你的 Linux 版本?
3.如何查看你的具体系统发行版?

27、常用热键(Linux中的高频访问键位)

热键组合 功能描述
Ctrl+c 强制终止当前运行的程序或进程,常用于中断终端中正在执行的命令(如 ping 测试、长时间运行的脚本等)。
Ctrl+r 快速搜索历史指令,输入关键字后会匹配最近执行过的含该关键字的指令,方便快速重复执行或编辑历史命令。
Ctrl+d 等效于 exit 命令,可用于退出当前 Shell 会话(如远程登录后退出服务器),也可在输入模式中表示"输入结束"(如 cat 命令中输入内容后按此键结束输入)。
Tab 自动补全指令或路径,输入指令前几个字符或路径前几个部分时,按此键会自动补全为完整的指令或路径,减少拼写错误,提升操作效率。

以下命令作为扩展:

  • 安装和登录命令: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 以及运行原理

核心原理解析

Linux严格意义上说的是⼀个操作系统,我们称之为**"核心(kernel)"** ,但我们⼀般用户,不能直接使用 kernel。而是通过 kernel 的"外壳"程序,也就是所谓的shell,来与 kernel 沟通。如何理解?为什么不能直接使用kernel?

从技术角度:shell的最简单定义,命令行解释器主要包含:

  • 将使用者的命令翻译核心处理
  • 同时,将核心的处理结果 翻译给使用者

核心角色定位:Shell 是 "翻译官",内核是 "执行者"

以目前的知识储备,我们可能无法很好的理解,那么接下来博主将通过一个故事带大家感性理解一下先:

**故事阶段一:**在一个村子里,老王是村长,他的儿子小王事业有成回到家乡。老王催小王找对象,但小王不擅长与女孩交流。于是,老王请来村里有名的媒婆------王婆。王婆到小王家询问他的心意,小王说:"我喜欢隔壁的如花。"王婆便去如花家说媒。如花表示不认识小王,王婆提醒:"他是你小学同学呀。"如花想起来了,但是认为小王小时候邋遢还是拒绝了。王婆只好回去告诉小王。

故事阶段一理解Shell:

  • 小王不亲自去,是因为他不擅长与女孩交流。

  • 在Linux中,用户 (小王)通常不直接与内核 (如花)打交道,而是通过Shell (王婆)传递用户输入的指令("喜欢如花")。

  • Shell解析并执行命令,内核处理请求,执行失败则需要反馈给用户。

故事阶段二:小王不死心,请王婆再去争取。王婆刚走到如花家附近,就看见如花正和隔壁的小帅及他家人一起吃饭,顿时明白如花已有对象。王婆没有将消息传给如花就直接返回,告诉小王此事不可为。

故事阶段二理解Shell:

  • 王婆在传递请求前,先判断情况,拒绝了不合理的要求。

  • 正如Shell能在一定程度上拦截非法或危险请求保护内核免受直接干扰

故事阶段三:小王仍不放弃,王婆本要拒绝,但又想到小王的父亲老王是村里的村长,碍于情面只好答应。但她担心事情办不成会砸招牌,于是想出一个办法:成立"王婆婚介公司",招聘实习生去执行任务。成功了说明是王婆指导有方,失败了也无妨,只能说明是实习生能力不行,换一个实习生再去试试即可。

故事阶段三理解Shell:

  • 王婆不亲自冒险,而是派实习生去尝试。

  • 这好比Shell不直接执行可能崩溃的任务,而是创建子进程(实习生)去执行。子进程若失败,不影响Shell本身。

总结

  • Shell与BashLinux 中常用的Shell程序 就是Bash (如which bash所示),用户登录后自动启动,常以"死循环"方式等待用户输入指令。
    王婆是Bash,媒婆是Shell ------Shell 是命令行界面的统称 ,Bash 是其中一种具体实现

  • 外壳的多样性 : Windows也有Shell,如图形化界面(GUI)。安卓基于Linux内核,其GUI也是一种Shell。这就是为什么手机厂商常宣传"基于安卓深度定制"(实为定制Shell),而非"优化Linux内核"。

  • 内核才是核心: 我们学习的应是操作系统最核心的部分------内核。无论Shell如何变化,内核始终是基础,选择哪种外壳反而次要。

通过这个故事,我们形象地理解了用户-Shell-内核之间 的关系:Shell作为用户-内核之间的桥梁,既传递指令,也提供保护,还能通过子进程机制增强系统稳定性。内核才是真正的力量中心,而Shell只是我们与它对话的窗口。

结束语

到此,Linux的大部分基础指令我们就全部讲解完了,指令的学习才是我们正式步入Linux系统编程学习的开始。**四篇文章的指令要点,能帮你后续用指令时更精准高效;拆解的 Shell 与内核交互逻辑,也让你不再对 "指令生效" 一知半解。后续操作 Linux 时,试着结合这些认知去选择指令、排查问题,不仅能少踩很多误区,还能更快找到优化方向,让 Linux 技能稳步提升。**希望对大家学习Linux能有所收获!

相关推荐
A小辣椒21 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言