我们使用Windows系统时,下载的安装包都是双击鼠标一键安装,那么Linux下有没有这种懒人操作呢?
答案是肯定的,不过需要你动手写一点脚本,Linux的Shell脚本还是非常强大的,可以批处理很多任务,你值得拥有!!
1. 什么是bin文件
.bin 文件是在 Linux 和类 Unix 操作系统上的自执行文件。类似于windows的exe文件。
2. bin文件安装实现原理
在Linux下,万物皆文件!
运行的程序或打包后的压缩包等,其实都是一些二进制文件,都可以像操作普通字符文件一样进行操作!
基于以上原理,我们可以把我们的二进制文件与脚本文件打包到一个文件中,只要赋予该文件可执行权限,就可以一键执行脚本内的程序,对Linux进行各种操作,这个合成后的文件,就是bin文件!
Notice:Linux执行时,是顺序执行的,从第一行一直执行到最后一行,因此你的脚本指令肯定是放在bin文件的第一行,否则合成后的bin根本无法执行!
比如,我想要把我自己写好的 hello
程序拷贝到/sbin/目录下,并且执行该程序,那么我们可以这么创建这么一个 hello.sh
脚本,内容如下(简单的示例,复杂脚本见下一节:
#!/bin/bash
mv ./hello /sbin/
/sbin/hello
然后,将两个程序合并成一个bin文件:
cat hello.sh hello > hello.bin
记住,shell脚本用于是第一位哦!!
3. 脚本示例
3.1 打包脚本
#/bin/bash
##############################################################
# Function: 打包tyclient
# Autor:Jimmy Nie
# Date:2020-11-06
##############################################################
project_name=ty
#cur_dir=$(dirname $0)
cur_dir=$(pwd)
src_dir=$cur_dir/src
tmp_dir=$src_dir/$project_name
file_daemon=$src_dir/daemon
file_start=$src_dir/start_tyclient
file_wifi=$src_dir/wifi_tool
file_tyclient=$src_dir/tyclient
file_install=$src_dir/install.sh
tar_file=$src_dir/tyclient.tar.gz
bin_file=$src_dir/tyclient.bin
#=====================================================
#1.判断源文件目录存不存在
if [[ ! -d $src_dir ]]; then
echo "The $src_dir was not existed!!"
sleep 5s
exit 0
fi
#2. 判断文件内容是否齐全
if [[ ! -f $file_daemon ]]; then
echo "File: $file_daemon not existed!"
sleep 5s
exit 0
fi
if [[ ! -f $file_start ]]; then
echo "File: $file_start not existed!"
sleep 5s
exit 0
fi
if [[ ! -f $file_wifi ]]; then
echo "File: $file_wifi not existed!"
sleep 5s
exit 0
fi
if [[ ! -f $file_tyclient ]]; then
echo "File: $file_tyclient not existed!"
sleep 5s
exit 0
fi
#3. 创建ty的目录,将以上文件拷贝进去
if [[ -d $tmp_dir ]]; then
rm -rf $tmp_dir
fi
mkdir -p $tmp_dir
cp $file_daemon $file_start $file_wifi $file_tyclient $tmp_dir
#4. 打包ty目录,生成bin文件
cd $src_dir
tar -zcvf $(basename $tar_file) $project_name
cat $file_install $tar_file > $bin_file
mv $bin_file $cur_dir
rm -rf $tmp_dir $tar_file
3.2 安装脚本
#!/bin/sh
##############################################################
# Function: 安装tyclient
# Autor:Jimmy Nie
# Date:2020-11-06
#########################################################
project_name=TYclient
root_dir=/mnt/UDISK
target_dir=/usr/ty
log_dir=/usr/ty/tylog/
conf_dir=/etc/ty
init_dir=/etc/init.d
rc_dir=/etc/rc.d
tmp_dir=${root_dir}/ty
install_tar=${root_dir}/ty_install.tar.gz
# 提取安装文件
sed -n -e '1,/^exit 0$/!p' $0 > ${install_tar} 2>/dev/null && sync
dd if=${install_tar} | tar -xzf - -C ${root_dir} && sync
# 检查/usr/ty目录
if [[ ! -d ${target_dir} ]]; then
mkdir -p ${target_dir}
fi
# 检查/usr/ty/tylog/目录
if [[ ! -d ${log_dir} ]]; then
echo "Install ${log_dir} done ^_^"
mkdir -p ${log_dir}
fi
# 必须更新/usr/ty/daemon
cp -rf ${tmp_dir}/daemon ${target_dir}
# 必须更新/usr/ty/tyclient
cp -rf ${tmp_dir}/tyclient ${target_dir}
# 必须更新/usr/ty/wifi_tool
cp -rf ${tmp_dir}/wifi_tool ${target_dir}
#必须给所有文件执行权限
chmod +x ${target_dir}/*
# 必须更新/etc/init.d/start_tyclient
cp -rf ${tmp_dir}/start_tyclient ${init_dir}
chmod +x ${init_dir}/start_tyclient
# 检查/etc/rc.d/S99yg_autorun
if [[ ! -f ${rc_dir}/S99start_tyclient ]]; then
ln -fs ${init_dir}/start_tyclient ${rc_dir}/S99start_tyclient
fi
rm -rf ${install_tar}
rm -rf ${tmp_dir}
sync
echo "Install ${project_name} done ^_^"
exit 0
网友评论