当前位置:

首页 > 软件教程 > 用Shell脚本在Linux上创建一个能够自动解压文件的脚本

用Shell脚本在Linux上创建一个能够自动解压文件的脚本

前几天在使用阿里云时候发现阿里工程师提供的一个脚本里,后面都是乱码加密文件,并且文件只要一更改自解压就会失效,心里是什么技术进行代码加密,仔细查看代码后发现,原来是.tar.gz的二进制文件,把打包压缩以后的文件进行直接存进shell脚本后面,从而实现自解压,次篇文件使用tar编码进行嵌入存文件。一、系统环境说明Centos7系统shell使用自带bash二、开始编码测试1.先来看看阿里工程师编写的部分代码,从代码可以看出后面一连串的乱码是一个.tar.gz的打包压缩文件,可以看到是使用awk进行获取.t

本文目录

    前几天在使用阿里云时候发现阿里工程师提供的一个脚本里,后面都是乱码加密文件,并且文件只要一更改自解压就会失效,心里是什么技术进行代码加密,仔细查看代码后发现,原来是
    .tar.gz 的二进制文件,把打包压缩以后的文件进行直接存进shell脚本后面,从而实现自解压,次篇文件使用 tar 编码进行嵌入存文件。

    使用Shell脚本制作Linux自解压文件

    一、系统环境说明

    • Centos 7 系统
    • shell使用自带bash

    二、开始编码测试

    1.先来看看阿里工程师编写的部分代码,从代码可以看出后面一连串的乱码是一个 .tar.gz 的打包压缩文件,可以看到是使用 awk 进行获取 .tar.gz
    二进制开始行,所以才有那句话 #This line must be the last line of the file 。

    #! /bin/bash
    #
    # Copyright (c) 2009-2015 Aliyun Corporation
    # All Rights Reserved
    .......
    ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "$0"`
    tail -n+$ARCHIVE "$0" | tar -ixzvm -C $tmp_dir > /dev/null 2>&1 3>&1
    if [ $? -ne 0 ]
    then
    echo "Error: prepare env error, failed create extract xbstream..." >&2
    rm -rf $tmp_dir
    exit 1
    fi
    ......
    exit 0
    
    #This line must be the last line of the file
    __ARCHIVE_BELOW__
    ^_^H^@_÷^U^@^CÔ[wX^TW׿à¨Y°!¸5±ÐD¯º(Ø+ö^LÃî,lc^KÅh²vÆÞ0FÑ Á^^RM¢Ñ¬]^TF /dev/null 2>&1 3>&1
    if [ $? == 0 ];then
    echo "Success"
    else
    echo "Fail"
    fi
    
    
    exit 0
    #This line must be the last line of the file
    __ARCHIVE_BELOW__

    3.创建一个 test 文件夹,里面建两个文件分别是 TestA 和 TestB ,文件里面分别写着 This is TestA 和 This is
    TestB

    [root@gz--vm-workstation-0001 scripts]# mkdir test
    [root@gz--vm-workstation-0001 scripts]# cd test/
    [root@gz--vm-workstation-0001 test]# echo "This is TestA" > TestA
    [root@gz--vm-workstation-0001 test]# echo "This is TestB" > TestB
    [root@gz--vm-workstation-0001 test]# cat TestA 
    This is TestA
    [root@gz--vm-workstation-0001 test]# cat TestB
    This is TestB
    [root@gz--vm-workstation-0001 test]#

    4.把文件进行打包加压嵌入 shell 脚本(也可以使用cat .tar.gz 文件嵌入 shell 脚本),并且删除 test 文件夹

    [root@gz--vm-workstation-0001 scripts]# tar-zcvm test >> SelfExtracting.sh 
    test/
    test/TestA
    test/TestB
    [root@gz--vm-workstation-0001 scripts]# ls
    SelfExtracting.shtest
    [root@gz--vm-workstation-0001 scripts]# rm -rf test
    [root@gz--vm-workstation-0001 scripts]# ls
    SelfExtracting.sh

    5.再次查看 SelfExtracting.sh 脚本,发现已经有 .tar.gz 的二进制文件,但注意此时的脚本不能修改和增加任何字符

    #!/bin/bash
    #Test shell self-extracting
    TmpDir=/tmp
    
    ARCHIVE=$(awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "$0")
    tail -n+$ARCHIVE "$0" | tar -xzvm -C $TmpDir > /dev/null 2>&1 3>&1
    if [ $? == 0 ];then
    echo "Success"
    else
    echo "Fail"
    fi
    
    
    exit 0
    #This line must be the last line of the file
    __ARCHIVE_BELOW__
    ^_^H^@^¨Z^@^CíÔM
    Â0^Pá¬=En`¦ùéÚ¡^Wp!èªÐÆû;ÍB â"âû^P@^B^Yø2ͧ)ïM]Nµ1Y=Ïe-¾¸^S^W}kl¬Wqòq´ÖÃßû´¿Qyο×Ï¡Þ^]sÀ)×ùKZä/¿Ö^[ëêôðçù÷çËdu'°ûu5XÛ½ÿ»zw|×ÿóÿ_¢nÓÿ+Xö^?Gÿ^C^@^@^@^@^@^@^@^@^@^@°I7^ZÊá^@(^@^@

    6.运行脚本 SelfExtracting.sh 测试

    [root@gz--vm-workstation-0001 scripts]# ./SelfExtracting.sh
    Success
    [root@gz--vm-workstation-0001 scripts]# ls
    SelfExtracting.sh

    7.聪明的你可能发现,运行显示成功,怎么不见原来的的目录呢,哈哈哈,有没有注意我们是把解压目录指向 /tmp
    下面,返回去查看上面脚本定义的变量,所以查看如下

    [root@gz--vm-workstation-0001 test]# cd /tmp/test
    [root@gz--vm-workstation-0001 test]# ls
    TestATestB
    [root@gz--vm-workstation-0001 test]# cat TestA 
    This is TestA
    [root@gz--vm-workstation-0001 test]# cat TestB
    This is TestB
    [root@gz--vm-workstation-0001 test]#

    8.在深入研究过程中,看到一篇博客[点击这里查看],发现还有专门的命令可以搞定在脚本嵌入二进制文件: uuencode,安装这个工具请在命令行输入yum install sharutils 进行安装,原理和tar一样,具体操作留给各位去探究了咯。

    总结: Shell 自解压脚本在很多情况可以使用,比如防止别人进行修改你的文件,把一些必要的文件发给别人时候,如果使用的是 linux
    ,可以进行嵌入到shell脚本,就发一个脚本给别人,他们一运行就可以得到他们需要的文件或者配置,如果他们自作聪明打开文件进行修改,哈哈哈哈哈哈哈,对不起,脚本直接报错运行不了。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    Linux编程环境
    Linux编程环境

    接触Linux编程,首先得摸清它的脾气,理解几个关键点,再熟悉一下手头的工具,才能事半功倍。 一、Linux下的编程环境 在Linux系统的程序设计中,有一些重要特性要特别注意: 1. Linux天生就是多任务系统。同一时刻可以跑很多进程或线程,所以千万别以为你的程序是唯一的实例,同一个用户或不同用

    Linux Shell脚本之流程控制语句举例详解
    Linux Shell脚本之流程控制语句举例详解

    Shell脚本流程控制包含:if/elif/else条件判断实现分支执行;for/while/until循环实现重复任务;case分支选择处理多条件匹配;而break/continue则分别用于跳出当前循环和提前进入下一次循环。这些控制结构共同构成脚本的逻辑基础,使自动化任务灵活高效。

    手工设置Solaris 10.0 上网
    手工设置Solaris 10.0 上网

    在配置Solaris主机的网络连接时,有几个关键文件需要逐一检查并修改。它们分别是 /etc/hosts、/etc/resolv.conf、/etc/defaultrouter 和 /etc/nsswitch.conf。这几个文件协同工作,决定了主机能否正常访问互联网。下面挨个说清楚。 第一个是 /

    Solaris系统多用户模式下系统备份和多分区写入磁带
    Solaris系统多用户模式下系统备份和多分区写入磁带

    生产系统不能中断,ufsdump又需要单用户模式才能运行,所以fssnap就成了在线备份的首选方案。这次需要备份两个服务器上的四个分区,同时又想节约磁带,自然有了“把多个分区塞进一盘磁带”的想法。目标很明确:在多用户模式下,不中断应用,把APP和Oracle的系统分区完整备份下来,并且全部写入同一盘

    solaris系统配置文件说明
    solaris系统配置文件说明

    在系统运维中,下面这些配置文件的用途值得逐一了解,每个文件都有自己明确的职责。 /etc/bootparams 用来指定网络客户机启动时所需的配置文件信息。 /etc/cron.d/cron.allow 和 /etc/cron.d/cron.deny 这一对组合,专门用于对 crontab 做访问控

    solaris 10下安装java+tomcat
    solaris 10下安装java+tomcat

    在Solaris系统上配置Ja va和Tomcat环境,说起来不算复杂,但一些细节如果不注意,很容易卡壳。下面以Solaris10为例,把整个流程拆开讲清楚,跟着步骤走就能搞定。 1. Ja va安装 先把安装文件 j2re-1_4_2_05-solaris-i586.sh 上传到 /export/

    solaris网络和IP设置基础
    solaris网络和IP设置基础

    先交代一个细节:在Solaris系统中,网络接口的配置信息由一组核心文件来定义。其中有一个不太起眼的文件——/etc/hostname.interface,命名方式简单直接:这个Interface代表网卡的型号。 比如le是十兆网卡,hme是百兆网卡。型号后面跟一个数字,第一个十兆网卡是le0,第二

    Solaris 10 Openssh安装和配置
    Solaris 10 Openssh安装和配置

    SSH(Secure Shell)最初是由芬兰的一家公司开发的,但受限于版权和加密算法,很多人转而选择了免费的替代品——OpenSSH。SSH本身由客户端和服务端两部分组成,有两个不兼容的版本:1.x 和 2.x。这里要特别留意:如果你用SSH 2.x的客户端,是没法连接到SSH 1.x的服务端上的

    OpenBSD3.6编译内核的方法
    OpenBSD3.6编译内核的方法

    第一步嘛,自然是要先把需要的包都给备好。OpenBSD官方光盘上就有源代码,当然从网上下载src.tar.gz、sys.tar.gz、ports.tar.gz这几个压缩包也可以。 cp /home/jjp/src.tar.gz /usr/src/ tar zxvf src.tar.gz cp /ho

    FreeBSD 数据转移办法
    FreeBSD 数据转移办法

    在开始之前,先确认硬件已经就位:关机,把新硬盘装上,再重新开机。开机后第一件事,就是检查系统是否识别到了新设备。用 dmesg | grep ad2 看一眼,如果输出类似 ad2: 9765MB [19841/16/63] at ata1-master UDMA33 这样的信息,说明新硬盘已经被成功

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。