Linux打包压缩+剩余指令+shell外壳程序+用户切换全解析

作者:袖梨 2026-08-06

Linux打包压缩+剩余指令+shell外壳程序+用户切换全解析并不只看表面做法,关键还要理解相关条件、限制和后续影响。

一,打包压缩zip与tar两套经典方法

1.0前言

1.0.1打包压缩是什么

  1. 打包 (Archiving)
    1. 定义:将多个文件或目录集合到一个文件中的过程。
    2. 比喻:把散落在桌上的零食全部装进一个大纸箱,方便搬运。
    3. 结果:文件总体积基本不变。
  1. 压缩 (Compression)
    1. 定义:通过压缩算法减少文件占用空间的过程。
    2. 比喻:把纸箱里的海绵垫用力挤压,抽出空气,使体积变小。
    3. 结果:显著减少存储空间。

1.0.2. 为什么要打包压缩 (应用场景)

打包的目的:防止文件丢失

  1. 完整性:在传输包含成千上万个碎文件的目录(如代码工程)时,碎文件极易在拷贝过程中丢失或损坏。打包成一个文件可确保“一个都不能少”。
  2. 管理便利:备份时,处理一个大文件比处理一堆小文件效率更高。

压缩的目的:效率至上

  1. 节省空间:长期存放不常用的数据时,压缩可以腾出大量硬盘空间。
  2. 网络加速:在网络传输(如 scprz/sz)前压缩,可以大幅缩短传输时间,节省带宽成本。

1.1zip打包压缩指令的使用

打包压缩出来的文件类型非常多,zip和tgz最常见。 压缩包也属于普通文件。

1.1.1指令详解:zip

  1. 指令名称:zip
  2. 指令作用zip 是 Linux/Unix 系统中常用的压缩程序,用于将一个或多个文件压缩成扩展名为 .zip 的文件。它在保持文件结构的同时能有效减小文件体积,且生成的压缩包在 Windows 和 macOS 上具有极佳的兼容性。
  3. 指令操作:

    zip [选项] [压缩包名.zip] [文件或目录...]

确定你的zip有没有安装,没有安装则安装

[root@VM-0-4-centos ~]# zip versionzip error: Nothing to do! (version.zip)[root@VM-0-4-centos ~]# zip -versionzip warning: Unable to read number (must start with digit): ionzip error: Invalid command arguments (bad split size:  'ion')

安装zip指令:

[root@VM-0-4-centos ~]# yum install -y zip unzip

1.1.2常用选项说明

选项说明
-r递归处理。用于压缩目录,将指定目录下的所有文件和子目录一并处理。
-m移入压缩包。文件压缩后,会自动删除原始文件。
-q安静模式。不显示指令执行的过程信息。
-e加密。执行指令后会提示输入密码。

1.1.3经典使用示例

  1. 压缩单个文件

    zip documents.zip file1.txt

  2. 压缩整个目录

    zip

    -r

    project_backup.zip ./my_project

    一定要加-r不然压缩的就是一个空目录

  3. 创建一个带密码保护的压缩包

    zip -re secret.zip private_folder

1.2tar打包压缩指令使用

1.2.1指令详解:tar

  1. 指令名称:tar (Tape Archive)
  2. 指令作用:Linux 中最常用的归档工具。它能将大量文件和目录打包成一个单独的 .tar 文件,或者进一步压缩为 .tar.gz缩写:.tgz)等格式。tar不同于zip,它默认是递归的。
  3. 指令操作tar [选项] [归档文件名] [文件或目录...]
  4. 常用组合(当然还有别的,但是只记住这两个就完全够用了)
  5. tar -czf a.tgz files

    (打包并压缩为.tgz 格式)
  6. tar -xzf a.tgz

    (解压 .tgz 格式的包)
  7. tar -zxvf project.tar.gz -C /usr/local/src/

    (解压到指定目标路径)
  8. tar -cvf project.tar ./my_project

    (仅打包不压缩生成.tar文件)

1.2.2 常用选项说明

Linux打包压缩+剩余指令+shell外壳程序+用户切换全解析

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.c5 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.c5 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.c5 directories, 13 files-bash-4.2# 

1.3.2传输Linux——>windows:sz

安装sz:[root@bite-alicloud other]# yum install -y lrzsz
  1. 指令名称:sz (Send Zmodem)
  2. 指令作用:从 Linux 服务器发送文件到本地 Windows。执行后会自动弹出 Windows 的“另存为”窗口。
  3. 指令操作

    sz [选项] [文件名]

1.3.2Linux——>Linux:scp

检查你的scp是否存在(一般系统都是自带的)

-bash-4.2# scp --visionunknown 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:

  1. 指令名称:rz
  2. 指令作用:利用 ZModem 协议将本地 Windows 的文件上传到 Linux 服务器。在 Xshell 等终端工具中,输入此命令会弹出 Windows 文件选择对话框。
  3. 指令操作

    rz [选项]

1.3.4解压指令详解:unzip

  1. 指令名称:unzip
  2. 指令作用:专门用于解压缩由 zip 指令生成的 .zip 压缩文件。它可以列出压缩包内容、测试压缩文件完整性以及将文件提取到指定目录。
  3. 指令操作

    unzip [选项] [压缩包名.zip]

  4. 常用选项
  5. -l

    :查看压缩包内容,但不解压。
  6. -d [目录]

    :指定解压到的目标目录。
  7. -o

    :解压时不询问,直接覆盖同名文件。
  8. -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/whereis

2.1.1find指令

  1. 指令名称:find
  2. 指令作用:在目录树中搜索文件,并执行指定的操作。它支持按文件名、大小、类型、权限、时间戳等多种条件进行查找,是 Linux 中功能最强大的搜索工具。
  3. 指令操作

    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.c5 directories, 13 files-bash-4.2# find /root -name "test" -ls-bash-4.2# find /root -name "test*" -ls786483    4 -rw-r--r--   1 root     root          297 Apr 15 20:22 /root/mulu01/mulu01/test03786485    0 -rw-r--r--   1 root     root            0 Apr 15 20:22 /root/mulu01/mulu01/nihao01/test789.txt786486    8 -rw-r--r--   1 root     root         4495 Apr 15 20:22 /root/mulu01/mulu01/test02786487    4 -rw-r--r--   1 root     root           28 Apr 15 20:22 /root/mulu01/mulu01/test01786488    0 -rw-r--r--   1 root     root            0 Apr 15 20:22 /root/mulu01/mulu01/test23786468    4 -rw-r--r--   1 root     root          905 Apr 16 10:59 /root/test.c786440    4 -rw-r--r--   1 root     root          297 Mar 31 20:24 /root/mulu66/test03786445    0 -rw-r--r--   1 root     root            0 Mar 30 17:31 /root/mulu66/nihao01/test789.txt786451    8 -rw-r--r--   1 root     root         4495 Mar 31 20:23 /root/mulu66/test02786452    8 -rw-r--r--   1 root     root         4900 Apr 16 09:06 /root/mulu66/test01786480    0 -rw-r--r--   1 root     root            0 Apr 15 20:18 /root/mulu66/test23-bash-4.2# 

2.2.2which指令

  1. 指令名称:which
  2. 指令作用:用于查找并显示给定命令的绝对路径。它通过在环境变量 PATH 指定的路径中搜索可执行文件,常用于确认某个指令是否存在以及它的具体安装位置。

    基本只用来查找指令而不是文件

  3. 指令操作

    which 指令名称

使用样例:

    我们这里看到alias是取别名的意思,在下面有讲。

-bash-4.2# which man/usr/bin/man-bash-4.2# which lsalias ls='ls --color=auto'/usr/bin/ls-bash-4.2# which llalias ll='ls -l --color=auto'/usr/bin/ls-bash-4.2# 

2.2.3whereis指令

  1. 指令名称:whereis
  2. 指令作用:用于定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。相比 find,它的搜索速度更快,因为它直接查询数据库。
  3. 指令操作whereis 指令名称
-bash-4.2# whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz-bash-4.2# whereis pwdpwd: /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 cdcd: /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 过滤器:grep

2.2.1指令介绍

  1. 指令名称:grep (Global Regular Expression Print)
  2. 指令作用:强大的文本搜索工具,它能使用正则表达式搜索文本,并将匹配的行打印出来。常配合管道符 | 使用,用于过滤其他命令的输出结果。
  3. 指令操作

    grep [选项] [过滤什么] [在哪里过滤]

    你要过滤的东西可以不用带“”但是如果你要过滤的东西有空格就必须带“”

选项:

  1. 不区分大小写 -i。
  2. 显示行号 -n。
  3. 反向过滤 -v。

2.2.2经典样例与实践操作

    我们用日志文件来演示grep的强大功能,如下,我们用cat拉出了一堆message,现在我们想要筛选出其中“有Removed关键字的最后十个文件

我们输入指令:

-bash-4.2# grep "Removed" /var/log/messages | tail -10Apr 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 重命名:alias

2.3.1指令介绍

  1. 指令名称:alias
  2. 指令作用:用于为较长或复杂的指令创建别名(简写)。通过设置别名,可以减少输入量并提高工作效率。如果不带参数执行,则显示当前系统中已定义的所有别名。
  3. 指令操作

    alias [别名]='实际指令'

2.3.2经典样例

    常用安全操作: 提供询问。

alias rm='rm -i'    # 删除前询问alias cp='cp -i'    # 覆盖前询问alias mv='mv -i'    # 移动/重命名覆盖前询问

我们在上文看到的,which ll发现它实际上是ls -l的一个别名

-bash-4.2# which llalias ll='ls -l --color=auto'/usr/bin/ls

2.4 计算器:bc

2.4.1指令介绍

  1. 指令名称:bc (Binary Calculator)
  2. 指令作用:一个支持任意精度的交互式计算语言。它可以进行简单的算术运算,也可以进行逻辑运算和科学计算。在脚本中常用于处理浮点数运算。
  3. 指令操作

    bc [选项]

    (在终端输入

    bc

    进入交互模式,或使用

    echo "计算表达式" | bc

    )

2.4.2使用样例

  1. 基本运算:+ (加), - (减), * (乘), / (除), % (取模), ^ (指数)。
  2. 自增自减:++, --(和 C 语言逻辑一致)。
  3. 比较:==, <=, >=, !=, <, >。
  4. 逻辑:&& (与), || (或), ! (非)。
  5. s(x):正弦函数(x 是弧度)。
  6. c(x):余弦函数。
  7. a(x):反正切函数。
  8. l(x):自然对数(ln)。
-bash-4.2# bcbc 1.06.95Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.This is free software with ABSOLUTELY NO WARRANTY.For details type `warranty'. 9+59+84+565+4576278645*4554635819651707878787/76876102^C(interrupt) Exiting bc.-bash-4.2# 

2.5 体系结构查看 uname

2.5.1什么是体系结构

什么是体系结构

在 Linux 语境下,体系结构(Architecture)通常指硬件平台与操作系统的组合方式。它决定了计算机如何处理数据(如 32 位或 64 位)以及内核的版本信息。概括来看,就是告诉软件:“我这台机器的大脑是什么型号,沟通语言的版本是多少。”

2.5.2指令介绍

  1. 指令名称uname (Unix Name 的缩写)
  2. 指令作用:用于显示当前操作系统的相关信息(如内核版本、硬件架构等)。
  3. 指令操作
    1. uname -r

      :显示内核的发行版本号(Release)。
    2. uname -m

      显示系统的硬件架构(如 x86_64)。
    3. uname -a

      :显示所有系统信息(包括内核名、节点名、版本、编译时间等)。

2.6 热键与关机

  在 Linux 操作中,熟练使用热键可以极大提高工作效率,避免重复敲打冗长的路径或陷入失控的进程。

2.6.1 重要的几个热键

  1. [Tab]

    按键:
    1. 核心功能:命令补全与档案补齐。
    2. 操作技巧:敲出命令或文件的前几个字母,连按两次 Tab 键可以列出所有匹配项。
  2. [Ctrl] + c

    按键:
    1. 核心功能:强行停止当前程序。
    2. 应用场景:当你发现指令跑飞了、陷入死循环或者不想等结果时,直接按下它。
  3. [Ctrl] + d

    按键:
    1. 核心功能:键盘输入结束(End Of File, EOF)。
    2. 操作技巧:可以用来取代 exit 指令,快速退出当前的终端登录。

2.6.2 关机指令shutdown

语法

shutdown [选项] [时间]

  1. 常见选项说明

    1. -h

      :将系统的服务停掉后,立即关机
    2. -r

      :在将系统的服务停掉之后,重新启动(reboot)。
    3. -t sec

      -t 后面加秒数,表示“过几秒后关机”。

Linux云服务器永远不会关机,除非维护或者不用了。

三,Linux 内核与 Shell 的关系

3.1什么是Shell?

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

从技术角度,Shell 的最简单定义:命令行解释器(command Interpreter) 主要包含:

  1. 将使用者的命令翻译给核心(kernel)处理。
  2. 同时,将核心的处理结果翻译给使用者。

Linux打包压缩+剩余指令+shell外壳程序+用户切换全解析

3.2用一个例子来帮助更好的理解

    以下内容纯属瞎编

   村里有个程序员叫小王,不仅闷骚,还特别宅。他的生活里只有 0 和 1,让他去敲代码他在行,但要让他去面对村头那个美若天仙、却高冷的 小花,他瞬间就会因为“系统过载”而死机。

小王深知,小花就像家里最精密的保险箱,直接硬闯不仅会被当成流氓(非法指令),还可能被小花反手一个“防御性重置”。于是,小王找到了村里路子最广、嘴皮子最溜的王婆

第一访:初试成功

   小王对王婆说:“帮我问问小花,能不能给我一张她的近照(获取数据)。”

   王婆扭着腰去了,她深谙小花的脾性,把小王的“宅男黑话”翻译 成了体贴的问候。小花点点头,把照片交给了王婆。王婆喜滋滋地跑回来,把照片递给小王,顺带还说了一句:“妥了,返回值:0(执行成功)!

第二访:惨遭拒绝

   过了一周,小王胆子大了,让王婆去问:“小花,能把你的存折密码告诉我吗?”

   王婆这回刚开口,小花脸就绿了,直接把王婆轰了出来,并附赠了一个大大的白眼。王婆灰头土脸地跑回来对小王摊摊手:“别想了,权限拒绝,错误码:403(Permission Denied)。

第三访:实习生顶包(关键一战)

   第三次,小王心血来潮,非要王婆去问小花能不能一起去吃火锅。王婆刚走到小花家门口,扒着窗户一看,心凉了半截——小花正和隔壁帅气的小帅共进晚餐呢!

   王婆心想:“坏了,这要是把这消息直接传回去,依小王那玻璃心,不得直接崩溃、当场撒手人寰(进程崩溃)啊?要是小王挂了,谁给我发佣金(系统停摆)?”

   为了保住自己的名声和系统的稳定,王婆灵机一动,转头从兜里掏出一个分身符,变出了个实习生(子进程)。王婆叮嘱实习生:“你去,把这个‘修罗场’的情况确认一下。要是真成了,你回来报信;要是出事了,你被骂就被骂了,反正别连累老娘。”

   结果,实习生果然被愤怒的小花一扫帚赶出了家门(子进程报错退出)。王婆站在远处安全区观察着,拍拍胸口,镇定地走回小王家,把实习生的遭遇润色了一下报给小王。王婆(父进程)依然稳如泰山,随时准备处理下一次请求。

3.3核心架构 拆解

   看完这个故事,你会发现 Linux 的设计逻辑简直神了。以下是角色与技术的真实对应关系

Linux打包压缩+剩余指令+shell外壳程序+用户切换全解析

四.用户切换指令

  Linux下的用户有两类:root超级用户(命令提示符:#)与普通用户(命令提示符:$)。所谓权限,我必须先讲清楚——它是用来限制普通用户的。(这一点我们在接下来会慢慢渗透)

4.1.1指令介绍

  1. 指令名称:su / su -
  2. 指令重要性:★★★★☆
  3. 说明:
    1. su 是Linux中切换用户的核心命令, 尤其在权限管理中极其常用
    2. su 仅切换身份,环境变量仍保留原用户。
    3. su - 则模拟完整登录,彻底切换用户和环境。

4.1.2su的使用案例

    普通用户到超级用户的切换必须输入超级用户密码,但是超级用户切换到普通用户不需要输入密码。

[root@VM-0-9-opencloudos ~]# clear[root@VM-0-9-opencloudos ~]# whoamiroot[root@VM-0-9-opencloudos ~]# ls /homelighthouse  zbc[root@VM-0-9-opencloudos ~]# su zbc[zbc@VM-0-9-opencloudos root]$ whoamizbc[zbc@VM-0-9-opencloudos root]$ su rootPassword: [root@VM-0-9-opencloudos ~]# whoamiroot

su这个指令是将你whb这个用户的外面套上一层身份,但是我这个whb用户并没有退出。

4.1.3su - 的使用案例

    为了更加清晰的看出来su和su - 的区别,我们需要借助目录来帮助观察。

  1. 如果是重新登录新用户(新建用户),一定会在他的家目录(/root/home/xxx)。
  2. 如果只是暂时切换身份,目录不会改变。

哎,我找到了一个非常巧妙的案例,首先我们是root用户,在根目录下。对于根目录而言,其他用户是没有写和读权限的。(后面会讲)

    所以,当我们用su切换成zbc用户,该用户任然在根目录,既不能执行创建文件夹,又不能读取目录信息。

补充知识:直接按ctrl+d可以”退出当前用户“,如下,我们退出了当前用户zbc回到了root,如果再次按一下ctrl+d,则就把root也退出了。这个快捷键和指令exit的效果一致。

[root@VM-0-9-opencloudos ~]# su zbc[zbc@VM-0-9-opencloudos root]$ mkdir mulu01mkdir: cannot create directory ‘mulu01': Permission denied[zbc@VM-0-9-opencloudos root]$ ls -alls: cannot open directory '.': Permission denied[zbc@VM-0-9-opencloudos root]$ exit[root@VM-0-9-opencloudos ~]# ls -altotal 36dr-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[root@VM-0-9-opencloudos ~]# [C:~]$ 

看,我按su - 不久可以回到zbc的家目录了?于是我可以读可以写。这就说明了su - 确实是模拟了一次重新登录。

[root@VM-0-9-opencloudos ~]# clear[root@VM-0-9-opencloudos ~]# su - zbcLast login: Sat Apr 25 18:32:25 CST 2026 on pts/0[zbc@VM-0-9-opencloudos ~]$ pwd/home/zbc[zbc@VM-0-9-opencloudos ~]$ ls -ltotal 1956drwxr-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[zbc@VM-0-9-opencloudos ~]$ 

于是有小伙伴要问了:那么我这个时候按ctrl+d为什么还能够回到原来的root,这是什么原理?好问题!,但是这个问题得放到进程的时候讲,现在可以简单了解一下。

[zbc@VM-0-9-opencloudos ~]$ logout[root@VM-0-9-opencloudos ~]# 

相关文章

精彩推荐