Linux 打包压缩+剩余指令+shell外壳程序+用户切换
目录一打包压缩zip与tar两套经典方法1.0前言1.0.1打包压缩是什么1.0.2. 为什么要打包压缩 (应用场景)打包的目的防止文件丢失压缩的目的效率至上1.1zip打包压缩指令的使用1.1.1指令详解zip1.1.3经典使用示例1.2tar打包压缩指令使用1.2.1指令详解tar1.2.2 常用选项说明1.3不同操作系统之间的压缩包传输与解压操作1.3.1先打包压缩两个文件1.3.2传输Linux——windowssz1.3.2Linux——Linuxscp1.3.3传输Windows——Linux物理拖拽/rz1.3.4解压指令详解unzip二剩余指令统讲2.1 查找指令——find/which/whereis2.1.1find指令2.2.2which指令2.2.3whereis指令2.2 过滤器grep2.2.1指令介绍2.2.2经典样例与实践操作2.3 重命名alias2.3.1指令介绍2.3.2经典样例2.4 计算器bc2.4.1指令介绍2.4.2使用样例2.5 体系结构查看 uname2.5.1什么是体系结构2.5.2指令介绍2.6 热键与关机2.6.1 重要的几个热键2.6.2 关机指令 shutdown三Linux 内核与 Shell 的关系3.1什么是Shell3.2用一个例子来帮助更好的理解3.3核心架构 拆解四.用户切换指令4.1.1指令介绍4.1.2su的使用案例4.1.3su - 的使用案例一打包压缩zip与tar两套经典方法1.0前言1.0.1打包压缩是什么打包 (Archiving)定义将多个文件或目录集合到一个文件中的过程。比喻把散落在桌上的零食全部装进一个大纸箱方便搬运。结果文件总体积基本不变。压缩 (Compression)定义通过压缩算法减少文件占用空间的过程。比喻把纸箱里的海绵垫用力挤压抽出空气使体积变小。结果显著减少存储空间。1.0.2. 为什么要打包压缩 (应用场景)打包的目的防止文件丢失完整性在传输包含成千上万个碎文件的目录如代码工程时碎文件极易在拷贝过程中丢失或损坏。打包成一个文件可确保“一个都不能少”。管理便利备份时处理一个大文件比处理一堆小文件效率更高。压缩的目的效率至上节省空间长期存放不常用的数据时压缩可以腾出大量硬盘空间。网络加速在网络传输如scp、rz/sz前压缩可以大幅缩短传输时间节省带宽成本。1.1zip打包压缩指令的使用打包压缩出来的文件类型非常多zip和tgz最常见。压缩包也属于普通文件。1.1.1指令详解zip指令名称zip指令作用zip是 Linux/Unix 系统中常用的压缩程序用于将一个或多个文件压缩成扩展名为.zip的文件。它在保持文件结构的同时能有效减小文件体积且生成的压缩包在 Windows 和 macOS 上具有极佳的兼容性。指令操作zip [选项] [压缩包名.zip] [文件或目录...]确定你的zip有没有安装没有安装则安装[rootVM-0-4-centos ~]# zip version zip error: Nothing to do! (version.zip) [rootVM-0-4-centos ~]# zip -version zip warning: Unable to read number (must start with digit): ion zip error: Invalid command arguments (bad split size: ion)安装zip指令[rootVM-0-4-centos ~]# yum install -y zip unzip1.1.2常用选项说明选项说明-r递归处理。用于压缩目录将指定目录下的所有文件和子目录一并处理。-m移入压缩包。文件压缩后会自动删除原始文件。-q安静模式。不显示指令执行的过程信息。-e加密。执行指令后会提示输入密码。1.1.3经典使用示例压缩单个文件zip documents.zip file1.txt压缩整个目录zip-rproject_backup.zip ./my_project一定要加-r不然压缩的就是一个空目录创建一个带密码保护的压缩包zip -re secret.zip private_folder1.2tar打包压缩指令使用1.2.1指令详解tar指令名称tar (Tape Archive)指令作用Linux 中最常用的归档工具。它能将大量文件和目录打包成一个单独的.tar文件或者进一步压缩为.tar.gz缩写.tgz等格式。tar不同于zip它默认是递归的。指令操作tar [选项] [归档文件名] [文件或目录...]常用组合当然还有别的但是只记住这两个就完全够用了tar -czf a.tgz files(打包并压缩为.tgz 格式)tar -xzf a.tgz(解压 .tgz 格式的包)tar -zxvf project.tar.gz -C /usr/local/src/解压到指定目标路径tar -cvf project.tar ./my_project(仅打包不压缩生成.tar文件)1.2.2 常用选项说明1.3不同操作系统之间的压缩包传输与解压操作1.3.1先打包压缩两个文件我们顺便把上面的两个指令练习一下初始文件结构如下我们接下来要打包压缩mulu01和mulu66。-bash-4.2# tree . |-- mulu01 | -- mulu01 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu66 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 -- test.c 5 directories, 11 files -bash-4.2#压缩成功形成压缩包mulu.zip。和mulu.tgz压缩一个目录一定要记得-r递归-bash-4.2# zip mulu.zip mulu01 adding: mulu01/ (stored 0%) -bash-4.2# tree . |-- mulu01 | -- mulu01 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu66 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu.zip -- test.c 5 directories, 12 files -bash-4.2# tar czf mulu66.tgz mulu66 -bash-4.2# tree . |-- mulu01 | -- mulu01 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu66 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu66.tgz |-- mulu.zip -- test.c 5 directories, 13 files -bash-4.2#1.3.2传输Linux——windowssz安装sz[rootbite-alicloud other]# yum install -y lrzsz指令名称sz (Send Zmodem)指令作用从 Linux 服务器发送文件到本地 Windows。执行后会自动弹出 Windows 的“另存为”窗口。指令操作sz [选项] [文件名]1.3.2Linux——Linuxscp检查你的scp是否存在(一般系统都是自带的)-bash-4.2# scp --vision unknown option -- - usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user]host1:]file1 ... [[user]host2:]file2 -bash-4.2#1.3.3传输Windows——Linux物理拖拽/rz最省事儿的方法拖拽先安装sz和rz更安全的方法rz指令名称rz指令作用利用 ZModem 协议将本地 Windows 的文件上传到 Linux 服务器。在 Xshell 等终端工具中输入此命令会弹出 Windows 文件选择对话框。指令操作rz [选项]1.3.4解压指令详解unzip指令名称unzip指令作用专门用于解压缩由zip指令生成的.zip压缩文件。它可以列出压缩包内容、测试压缩文件完整性以及将文件提取到指定目录。指令操作unzip [选项] [压缩包名.zip]常用选项-l查看压缩包内容但不解压。-d [目录]指定解压到的目标目录。-o解压时不询问直接覆盖同名文件。-v解压时显示详细的过程信息.-bash-4.2# unzip -v mulu.zip #显示解压过程 Archive: mulu.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 0 Stored 0 0% 04-15-2026 20:22 00000000 mulu01/ -------- ------- --- ------- 0 0 0% 1 file -bash-4.2# unzip mulu.zip -d /root #定向解压二剩余指令统讲2.1 查找指令——find/which/whereis2.1.1find指令指令名称find指令作用在目录树中搜索文件并执行指定的操作。它支持按文件名、大小、类型、权限、时间戳等多种条件进行查找是 Linux 中功能最强大的搜索工具。指令操作find [在哪里找] [匹配规则] [执行什么操作]这个最常用名称-name-name *.sh匹配文件名区分大小写-bash-4.2# tree . |-- mulu01 | -- mulu01 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu66 | |-- nihao01 | | -- test789.txt | |-- test01 | |-- test02 | |-- test03 | -- test23 |-- mulu66.tgz |-- mulu.zip -- test.c 5 directories, 13 files -bash-4.2# find /root -name test -ls -bash-4.2# find /root -name test* -ls 786483 4 -rw-r--r-- 1 root root 297 Apr 15 20:22 /root/mulu01/mulu01/test03 786485 0 -rw-r--r-- 1 root root 0 Apr 15 20:22 /root/mulu01/mulu01/nihao01/test789.txt 786486 8 -rw-r--r-- 1 root root 4495 Apr 15 20:22 /root/mulu01/mulu01/test02 786487 4 -rw-r--r-- 1 root root 28 Apr 15 20:22 /root/mulu01/mulu01/test01 786488 0 -rw-r--r-- 1 root root 0 Apr 15 20:22 /root/mulu01/mulu01/test23 786468 4 -rw-r--r-- 1 root root 905 Apr 16 10:59 /root/test.c 786440 4 -rw-r--r-- 1 root root 297 Mar 31 20:24 /root/mulu66/test03 786445 0 -rw-r--r-- 1 root root 0 Mar 30 17:31 /root/mulu66/nihao01/test789.txt 786451 8 -rw-r--r-- 1 root root 4495 Mar 31 20:23 /root/mulu66/test02 786452 8 -rw-r--r-- 1 root root 4900 Apr 16 09:06 /root/mulu66/test01 786480 0 -rw-r--r-- 1 root root 0 Apr 15 20:18 /root/mulu66/test23 -bash-4.2#2.2.2which指令指令名称which指令作用用于查找并显示给定命令的绝对路径。它通过在环境变量 PATH 指定的路径中搜索可执行文件常用于确认某个指令是否存在以及它的具体安装位置。基本只用来查找指令而不是文件指令操作which 指令名称使用样例我们这里看到alias是取别名的意思在下面有讲。-bash-4.2# which man /usr/bin/man -bash-4.2# which ls alias lsls --colorauto /usr/bin/ls -bash-4.2# which ll alias llls -l --colorauto /usr/bin/ls -bash-4.2#2.2.3whereis指令指令名称whereis指令作用用于定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。相比 find它的搜索速度更快因为它直接查询数据库。指令操作whereis 指令名称-bash-4.2# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz -bash-4.2# whereis pwd pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/mann/pwd.n.gz /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz -bash-4.2# whereis cd cd: /usr/bin/cd /usr/share/man/mann/cd.n.gz /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz -bash-4.2#2.2 过滤器grep2.2.1指令介绍指令名称grep (Global Regular Expression Print)指令作用强大的文本搜索工具它能使用正则表达式搜索文本并将匹配的行打印出来。常配合管道符|使用用于过滤其他命令的输出结果。指令操作grep [选项] [过滤什么] [在哪里过滤]你要过滤的东西可以不用带“”但是如果你要过滤的东西有空格就必须带“”选项不区分大小写 -i。显示行号 -n。反向过滤 -v。2.2.2经典样例与实践操作我们用日志文件来演示grep的强大功能如下我们用cat拉出了一堆message现在我们想要筛选出其中“有Removed关键字的最后十个文件”我们输入指令:-bash-4.2# grep Removed /var/log/messages | tail -10 Apr 17 13:02:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:03:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:04:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:05:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:06:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:07:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:08:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:09:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:10:01 VM-0-9-centos systemd: Removed slice User Slice of root. Apr 17 13:11:01 VM-0-9-centos systemd: Removed slice User Slice of root. -bash-4.2#2.3 重命名alias2.3.1指令介绍指令名称alias指令作用用于为较长或复杂的指令创建别名简写。通过设置别名可以减少输入量并提高工作效率。如果不带参数执行则显示当前系统中已定义的所有别名。指令操作alias [别名]实际指令2.3.2经典样例常用安全操作提供询问。alias rmrm -i # 删除前询问 alias cpcp -i # 覆盖前询问 alias mvmv -i # 移动/重命名覆盖前询问我们在上文看到的which ll发现它实际上是ls -l的一个别名。-bash-4.2# which ll alias llls -l --colorauto /usr/bin/ls2.4 计算器bc2.4.1指令介绍指令名称bc (Binary Calculator)指令作用一个支持任意精度的交互式计算语言。它可以进行简单的算术运算也可以进行逻辑运算和科学计算。在脚本中常用于处理浮点数运算。指令操作bc [选项](在终端输入bc进入交互模式或使用echo 计算表达式 | bc)2.4.2使用样例基本运算 (加), - (减), * (乘), / (除), % (取模), ^ (指数)。自增自减, --和 C 语言逻辑一致。比较, , , !, , 。逻辑 (与), || (或), ! (非)。s(x)正弦函数x 是弧度。c(x)余弦函数。a(x)反正切函数。l(x)自然对数ln。-bash-4.2# 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. 9598456545 762 78645*45546 3581965170 7878787/76876 102 ^C (interrupt) Exiting bc. -bash-4.2#2.5 体系结构查看 uname2.5.1什么是体系结构什么是体系结构在 Linux 语境下体系结构Architecture通常指硬件平台与操作系统的组合方式。它决定了计算机如何处理数据如 32 位或 64 位以及内核的版本信息。简单来说就是告诉软件“我这台机器的大脑是什么型号沟通语言的版本是多少。”2.5.2指令介绍指令名称uname(Unix Name 的缩写)指令作用用于显示当前操作系统的相关信息如内核版本、硬件架构等。指令操作uname -r显示内核的发行版本号Release。uname -m显示系统的硬件架构如 x86_64。uname -a显示所有系统信息包括内核名、节点名、版本、编译时间等。2.6 热键与关机在 Linux 操作中熟练使用热键可以极大提高工作效率避免重复敲打冗长的路径或陷入失控的进程。2.6.1 重要的几个热键[Tab]按键核心功能命令补全与档案补齐。操作技巧敲出命令或文件的前几个字母连按两次Tab键可以列出所有匹配项。[Ctrl] c按键核心功能强行停止当前程序。应用场景当你发现指令跑飞了、陷入死循环或者不想等结果时直接按下它。[Ctrl] d按键核心功能键盘输入结束End Of File, EOF。操作技巧可以用来取代exit指令快速退出当前的终端登录。2.6.2 关机指令shutdown语法shutdown [选项] [时间]常见选项说明-h将系统的服务停掉后立即关机。-r在将系统的服务停掉之后重新启动reboot。-t sec-t后面加秒数表示“过几秒后关机”。Linux云服务器永远不会关机除非维护或者不用了。三Linux 内核与 Shell 的关系3.1什么是ShellLinux 严格意义上说是一个操作系统我们称之为“核心kernel”但我们一般用户不能直接使用 kernel。而是通过 kernel 的“外壳”程序也就是所谓的 shell来与 kernel 沟通。如何理解为什么不能直接使用 kernel从技术角度Shell 的最简单定义命令行解释器command Interpreter主要包含将使用者的命令翻译给核心kernel处理。同时将核心的处理结果翻译给使用者。3.2用一个例子来帮助更好的理解以下内容纯属瞎编村里有个程序员叫小王不仅闷骚还特别宅。他的生活里只有 0 和 1让他去敲代码他在行但要让他去面对村头那个美若天仙、却高冷的小花他瞬间就会因为“系统过载”而死机。小王深知小花就像家里最精密的保险箱直接硬闯不仅会被当成流氓非法指令还可能被小花反手一个“防御性重置”。于是小王找到了村里路子最广、嘴皮子最溜的王婆。第一访初试成功小王对王婆说“帮我问问小花能不能给我一张她的近照获取数据。”王婆扭着腰去了她深谙小花的脾性把小王的“宅男黑话”翻译 成了体贴的问候。小花点点头把照片交给了王婆。王婆喜滋滋地跑回来把照片递给小王顺带还说了一句“妥了返回值0执行成功”第二访惨遭拒绝过了一周小王胆子大了让王婆去问“小花能把你的存折密码告诉我吗”王婆这回刚开口小花脸就绿了直接把王婆轰了出来并附赠了一个大大的白眼。王婆灰头土脸地跑回来对小王摊摊手“别想了权限拒绝错误码403Permission Denied。”第三访实习生顶包关键一战第三次小王心血来潮非要王婆去问小花能不能一起去吃火锅。王婆刚走到小花家门口扒着窗户一看心凉了半截——小花正和隔壁帅气的小帅共进晚餐呢王婆心想“坏了这要是把这消息直接传回去依小王那玻璃心不得直接崩溃、当场撒手人寰进程崩溃啊要是小王挂了谁给我发佣金系统停摆”为了保住自己的名声和系统的稳定王婆灵机一动转头从兜里掏出一个分身符变出了个实习生子进程。王婆叮嘱实习生“你去把这个‘修罗场’的情况确认一下。要是真成了你回来报信要是出事了你被骂就被骂了反正别连累老娘。”结果实习生果然被愤怒的小花一扫帚赶出了家门子进程报错退出。王婆站在远处安全区观察着拍拍胸口镇定地走回小王家把实习生的遭遇润色了一下报给小王。王婆父进程依然稳如泰山随时准备处理下一次请求。3.3核心架构 拆解看完这个故事你会发现 Linux 的设计逻辑简直神了。以下是角色与技术的真实对应关系四.用户切换指令Linux下的用户有两类root超级用户命令提示符#与普通用户命令提示符$。所谓权限我必须先讲清楚——它是用来限制普通用户的。这一点我们在接下来会慢慢渗透4.1.1指令介绍指令名称su / su -指令重要性★★★★☆说明su 是Linux中切换用户的核心命令尤其在权限管理中极其常用。su 仅切换身份环境变量仍保留原用户。su - 则模拟完整登录彻底切换用户和环境。4.1.2su的使用案例普通用户到超级用户的切换必须输入超级用户密码但是超级用户切换到普通用户不需要输入密码。[rootVM-0-9-opencloudos ~]# clear [rootVM-0-9-opencloudos ~]# whoami root [rootVM-0-9-opencloudos ~]# ls /home lighthouse zbc [rootVM-0-9-opencloudos ~]# su zbc [zbcVM-0-9-opencloudos root]$ whoami zbc [zbcVM-0-9-opencloudos root]$ su root Password: [rootVM-0-9-opencloudos ~]# whoami rootsu这个指令是将你whb这个用户的外面套上一层身份但是我这个whb用户并没有退出。4.1.3su - 的使用案例为了更加清晰的看出来su和su - 的区别我们需要借助目录来帮助观察。如果是重新登录新用户新建用户一定会在他的家目录/root/home/xxx。如果只是暂时切换身份目录不会改变。哎我找到了一个非常巧妙的案例首先我们是root用户在根目录下。对于根目录而言其他用户是没有写和读权限的。后面会讲所以当我们用su切换成zbc用户该用户任然在根目录既不能执行创建文件夹又不能读取目录信息。补充知识直接按ctrld可以”退出当前用户“如下我们退出了当前用户zbc回到了root如果再次按一下ctrld则就把root也退出了。这个快捷键和指令exit的效果一致。[rootVM-0-9-opencloudos ~]# su zbc [zbcVM-0-9-opencloudos root]$ mkdir mulu01 mkdir: cannot create directory ‘mulu01’: Permission denied [zbcVM-0-9-opencloudos root]$ ls -al ls: cannot open directory .: Permission denied [zbcVM-0-9-opencloudos root]$ exit [rootVM-0-9-opencloudos ~]# ls -al total 36 dr-xr-x--- 4 root root 202 Apr 25 12:37 . dr-xr-xr-x 18 root root 256 Apr 25 18:33 .. -rw------- 1 root root 209 Apr 25 18:33 .bash_history -rw-r--r-- 1 root root 18 Apr 23 2025 .bash_logout -rw-r--r-- 1 root root 141 Apr 23 2025 .bash_profile [rootVM-0-9-opencloudos ~]# [C:\~]$看我按su - 不久可以回到zbc的家目录了于是我可以读可以写。这就说明了su - 确实是模拟了一次重新登录。[rootVM-0-9-opencloudos ~]# clear [rootVM-0-9-opencloudos ~]# su - zbc Last login: Sat Apr 25 18:32:25 CST 2026 on pts/0 [zbcVM-0-9-opencloudos ~]$ pwd /home/zbc [zbcVM-0-9-opencloudos ~]$ ls -l total 1956 drwxr-xr-x 4 zbc zbc 40 Apr 23 15:43 gitcage -rw-r--r-- 1 zbc zbc 87 Apr 25 14:19 ma6174 -rw-r--r-- 1 zbc zbc 149 Apr 25 14:21 makefile -rw-r--r-- 1 zbc zbc 0 Apr 25 12:57 PassWordForZbc [zbcVM-0-9-opencloudos ~]$于是有小伙伴要问了那么我这个时候按ctrld为什么还能够回到原来的root这是什么原理好问题但是这个问题得放到进程的时候讲现在可以简单了解一下。[zbcVM-0-9-opencloudos ~]$ logout [rootVM-0-9-opencloudos ~]#