linux bin 包制作

一 Linux安装文件

Linux常见的安装为tar,zip,gz,rpm,deb,bin等。我们可以简单的分为三类,
第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件;

第二:对应的有管理工具的deb,rpm等,通常的这类安装文件可以通过第三方的命令行或UI来简单的安装,例如Ubuntu中的apt来安装deb,Redhat中的yum来安装rpm;

第三:像.bin类,其实就是把sh和zip打包为bin,或把sh和rpm打包为bin等,当在命令行运行bin安装文件时,其实就是bin里面的sh来解压bin中的zip或安装rpm的过程;

.bin安装文件可以认为是sh文件和zip或rpm等其他安装文件的打包形式。如下图:


image.png

1、bin文件制作

shell脚本:

#!/bin/bash

path=`pwd`
#判断字符串是否相等
if [ "$path" = "/" ];then
    path=''
fi

#提取压缩包
sed -n '1,/^exit 0$/!p' $0 >$path/install.tar.gz
#解压出安装包
tar -zxvf $path/install.tar.gz

echo "finish"
exit 0

脚本很简单,关键在于sed那一行,大概意思是匹配exit 0,如果匹配到了,把它后面的打印出来。

然后将安装包打包成 install.tar.gz,如:

tar zcvf install.tar.gz postgresql-9.4.0.tar postgre9.4.sh clouddoc_v20_demo.bak pg_hba.conf postgresql postgresql.conf

最终将上述两个文件打包成bin文件,并赋予执行权限

cat test.sh install.tar.gz > install.bin
chmod u+x install.bin

执行bin文件和执行shell脚本一样,直接运行

sh install.bin

Tip:提取文件也可以使用tail来分割文件的,这个有时候可能会失败(网上很多人都说tail方法可能有各种问题,我测试没碰见)。建议使用sed方式提取文件

#lines表示shell脚本行数+1
tail -n +$lines $0 > $path/install.tar.gz


作者:游侠胖虎
链接:https://www.jianshu.com/p/09cb8a113c39
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
 
 
RPM:

 

 

 

tar.gz 脚本。

 

#!/bin/bash

path=`pwd`
#判断字符串是否相等
if [ "$path" = "/" ];then
    path=''
fi

#提取压缩包
sed -n '1,/^exit 0$/!p' $0 >$path/install.tar.gz
#解压出安装包
tar -zxvf $path/install.tar.gz

echo "finish"
exit 0


exit 0 后面 不能有空格。


 

 EOF 注释。

 

EOF 用法。

1、EOF 

 Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。
  可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。

  回顾一下< <的用法。当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。

例子:自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录。

复制代码代码如下:

#!/bin/sh
mysql -uroot -p123456 <<EOF
use test;
select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int
# type,only char type need single quote mark.
exit
EOF

特殊用法:

: << COMMENTBLOCK
   shell脚本代码段
COMMENTBLOCK
用来注释整段脚本代码。 : 是shell中的空语句。
 

echo start
:<<COMMENTBLOCK
echo
echo "this is a test"
echo
COMMENTBLOCK
echo end

这段脚本执行时,中间部分不会被执行:
 

复制代码代码示例:

[root@newserver shell]# sh eof.sh
start
end

 

2、cat和eof结合使用具有追加功能

使用Cat和EOF多行输入

cat >> /root/test.txt <<EOF 

abcdef 

hello word ! 

FFFFFFFFFFFFFFFFFFFFFFF 

EOF

以上的脚本命令是,在a.txt文件后面加上三行代码。

参考:http://www.eepw.com.cn/zhuanlan/272665.html





参考:
https://www.jianshu.com/p/09cb8a113c39
posted @   redrobot  阅读(566)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示