《Linux系统编程》Linux指令收尾 (四):从零开始理解Linux基础指令
小叶-duck个人主页❄️个人专栏《Data-Structure-Learning》《C入门到进阶自我学习过程记录》《Linux操作系统从入门到实践》《算法题讲解指南》--优选算法《算法题讲解指南》--递归、搜索与回溯算法《算法题讲解指南》--动态规划算法✨未择之路不须回头已择之路纵是荆棘遍野亦作花海遨游目录Linux基本指令文件压缩与远程传输指令23、tar指令(文件归档与压缩利器)24、scp指令(跨机文件传输工具)25、bc指令(交互式计算器工具)26、uname -r指令附面试题27、常用热键(Linux中的高频访问键位)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带详细输出的解压适合确认解压内容是否正确实际案例# # 示例 1: 使用 tar -czf 打包并压缩目录不显示过程 # # 创建测试目录和文件 [rootiZbp12ear9ufvimc78fddkZ test]# mkdir test [rootiZbp12ear9ufvimc78fddkZ test]# echo 测试文件1 test/file1.txt [rootiZbp12ear9ufvimc78fddkZ test]# echo 测试文件2 test/file2.txt [rootiZbp12ear9ufvimc78fddkZ test]# ls ./test file1.txt file2.txt # 打包并压缩 test_dir 目录为 archive.tgz-c:创建 -z:gzip压缩 -f:指定文件名 [rootiZbp12ear9ufvimc78fddkZ test]# tar -czf archive.tgz test [rootiZbp12ear9ufvimc78fddkZ test]# ls archive.tgz test # # 示例 2: 使用 tar -xzf 解压压缩包不显示过程 # # 先删除原目录 [rootiZbp12ear9ufvimc78fddkZ test]# rm -rf test [rootiZbp12ear9ufvimc78fddkZ test]# ls archive.tgz # 解压 archive.tgz-x:解压 -z:识别gzip压缩 -f:指定压缩包 [rootiZbp12ear9ufvimc78fddkZ test]# tar -xzf archive.tgz [rootiZbp12ear9ufvimc78fddkZ test]# ls archive.tgz test [rootiZbp12ear9ufvimc78fddkZ 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 解压到指定目录 # # 创建目标目录 [rootiZbp12ear9ufvimc78fddkZ test]# mkdir target_dir [rootiZbp12ear9ufvimc78fddkZ test]# ls archive.tgz target_dir test # 解压到指定目录 target_dir-C:指定解压路径 [rootiZbp12ear9ufvimc78fddkZ test]# tar -xzf archive.tgz -C target_dir [rootiZbp12ear9ufvimc78fddkZ test]# tree ./target_dir ./target_dir └── test ├── file1.txt └── file2.txt 1 directory, 2 files # # 示例 4: 使用 tar -cvzf 打包压缩并显示过程 # # -v:显示详细过程verbose [rootiZbp12ear9ufvimc78fddkZ test]# tar -cvzf visible__archive.tgz test test/ test/file1.txt test/file2.txt [rootiZbp12ear9ufvimc78fddkZ test]# ls archive.tgz target_dir test visible__archive.tgz # # 示例 5: 使用 tar -xvzf 解压并显示过程 # # 清理已经存在的测试文件 [rootiZbp12ear9ufvimc78fddkZ test]# rm -rf test [rootiZbp12ear9ufvimc78fddkZ test]# ls archive.tgz target_dir visible__archive.tgz # -v:显示解压的每个文件 [rootiZbp12ear9ufvimc78fddkZ test]# tar -xvzf visible__archive.tgz test/ test/file1.txt test/file2.txt [rootiZbp12ear9ufvimc78fddkZ 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 # 后台解压 # 所以我们大部分时候也可以不用v24、scp指令(跨机文件传输工具)功能scp 基于 SSH 协议实现远程文件拷贝无需手动登录即可传输适合服务器间文件同步本地到远程scp local_file userremote_ip:/remote/path如 scp test.txt admin47.98.198.24:/home/将本地 test.txt 传到远程 /home 目录。远程到本地scp userremote_ip:/remote/file local_path如 scp root47.98.198.24:/etc/hosts ./将远程 hosts 文件下载到当前目录。传输目录加 -r 参数递归传输scp -r local_dir userremote_ip:/remote/path。细节优势密码不回显且本地到远程时要输入的密码是要传给的目标机器的密码。25、bc指令(交互式计算器工具)功能bc 解决了 Linux 终端默认不支持浮点运算的问题是简单计算的高效工具基础使用直接输入 bc 进入交互模式支持 - * / 运算如 25 回车返回 7输入 quit 退出。结合管道使用输入 echo 12345 | bc 直接返回结果15# 基础使用 [rootiZbp12ear9ufvimc78fddkZ 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. 25 7 2*5 10 5/2 2 5-3 2 quit #结合管道 [rootiZbp12ear9ufvimc78fddkZ test]# echo 12345 | bc 1526、uname -r指令语法uname [选项]功能uname 用来获取电脑和操作系统的相关信息。补充说明uname 可显示 linux 主机所用的操作系统的版本、硬件的名称等基本信息。常用选项-a 或 -all详细输出所有信息依次为内核名称主机名内核版本号内核版本硬件名处理器类型硬件平台类型操作系统名称lsb_release-a查看操作系统版本[rootiZbp12ear9ufvimc78fddkZ test]# uname -r 3.10.0-1160.119.1.el7.x86_64 [rootiZbp12ear9ufvimc78fddkZ 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中的高频访问键位)热键组合功能描述Ctrlc强制终止当前运行的程序或进程常用于中断终端中正在执行的命令如 ping 测试、长时间运行的脚本等。Ctrlr快速搜索历史指令输入关键字后会匹配最近执行过的含该关键字的指令方便快速重复执行或编辑历史命令。Ctrld等效于 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能有所收获