linux脚本分析01- - - - - - - - - - - - TRANS.TBL文件说明

#!/bin/bash

function download_dir() {
	url=$1
	dir=$2
	mkdir -p $dir
	wget -q $url/TRANS.TBL -O $dir/TRANS.TBL
	local line
	while read line; do
		local info=($line)
		if [ "${info[0]}" == 'D' ]; then
			download_dir $url/${info[2]} $dir/${info[2]}
		else
			wget -q $url/${info[2]} -O $dir/${info[2]}
		fi
	done < $dir/TRANS.TBL
}

if [ "${1:0:4}" == 'http' ]; then
	download_dir $1/os_patch os_patch
	download_dir $1/app_install app_install
else
        cp data/* /tmp -rf
fi

cd /tmp;

devicetype="`cat /proc/cmdline | awk -F " " {'print $3'}`"
if [ "`echo $devicetype | grep NI`" != "" ]; then

	sed -i 's/device_type=NI-Cloud-NVI/device_type='$devicetype'/g' ./install.info

	sleep 1
	mkdir -p System/$devicetype
	cd System/;
	mv ./NI-Cloud-NVI/* ./$devicetype/
	rm -rf ./NI-Cloud-NVI
	cd -
fi
sleep 1
chmod +x *.sh
./install.sh >>/root/install_system.log
mv /root/install_system.log /log/install/ks-post.log
mv /root/install_System.log /log/install/install_System.log

您的脚本主要执行以下任务:

  1. 下载目录: 通过一个递归函数 download_dir 从给定的 URL 下载文件和子目录。这个函数会创建本地目录,并下载远[用户中断]

您提供的脚本执行了一系列操作,包括下载文件、文件处理和执行安装脚本。下面是对这个脚本的逐行解析:

脚本内容分析

  1. 定义脚本的解释器:

    #!/bin/bash

    指定脚本应该使用Bash解释器执行。

  2. 定义下载函数 download_dir:

    function download_dir() { url=$1 dir=$2 ... }

    这个函数接受两个参数:一个是资源的URL,另一个是本地存储目录。它用于递归下载指定URL下的所有文件和目录。

  3. 创建本地目录并下载 TRANS.TBL 文件:

    mkdir -p $dir wget -q $url/TRANS.TBL -O $dir/TRANS.TBL

    在本地创建指定目录,并从URL下载 TRANS.TBL 文件到这个目录。

  4. 读取 TRANS.TBL 并下载文件或递归子目录:

    while read line; do ... done < $dir/TRANS.TBL

    遍历 TRANS.TBL 文件中的每一行,根据其内容下载文件或递归调用 download_dir 函数处理子目录。

  5. 检查脚本的第一个参数:

    if [ "${1:0:4}" == 'http' ]; then ... else ... fi

    如果脚本的第一个参数以 http 开头,执行下载操作;否则,执行文件复制操作。

  6. 下载或复制特定目录:

    • 如果是 http,则下载 os_patchapp_install 目录。
    • 如果不是 http,则将 data 目录下的文件复制到 /tmp
  7. 获取设备类型并进行处理:

    devicetype="`cat /proc/cmdline | awk -F " " {'print $3'}`" if [ "`echo $devicetype | grep NI`" != "" ]; then ... fi

    /proc/cmdline 获取设备类型,并检查是否包含 NI 字符串。如果是,执行一系列文件操作和替换。

  8. 修改 install.info 文件中的设备类型:

    sed -i 's/device_type=NI-Cloud-NVI/device_type='$devicetype'/g' ./install.info

    使用 sed 命令在 install.info 文件中替换设备类型。

  9. 文件和目录的操作:

    • 创建目录 System/$devicetype
    • NI-Cloud-NVI 目录中的文件移动到新创建的目录。
    • 删除原 NI-Cloud-NVI 目录。
  10. 设置执行权限并运行安装脚本:

    chmod +x *.sh ./install.sh >>/root/install_system.log

    为所有 .sh 脚本设置执行权限,并运行 install.sh 脚本,同时将输出重定向到日志文件。

  11. 移动日志文件:

    mv /root/install_system.log /log/install/ks-post.log mv /root/install_System.log /log/install/install_System.log

    将日志文件移动到指定的日志目录。

============================ TRANS.TBL 文件说明=========

TRANS.TBLISO9660文件系统上的一个文件,它被用于提供比ISO9660标准约定的基本文件名更加灵活的文件名。早在Rock Ridge和Joliet扩展被广泛传播使用之前,它就是在早期计算机CD上提供长文件名的最通用办法。

一个严格遵循ISO9660规则的文件名,其通常只能包含最多8个大写字母或者数字,再后接续一个句号,再后接最多3个大写字母或者数字。

TRANS.TBL是个正常文件,每个目录中都有一个,它包括了其所在目录中所有文件的扩展版文件名;因此,系统在读取文件时,可直接使用这些扩展名(或称长文件名)而不是ISO标准文件名。

TRANS.TBL文件是纯ASCII文本文件。每一行有三个字段,字段之间用任意多的空格分隔:

  • 文件类型 (“F” 表示“文件” 、“D” 表示“目录”、“L”表示“连接”);
  • ISO 9660文件名;以及
  • 扩展文件名(通常包含空格)。

多数的TRANS.TBL文件创建工具都会在文件类型和ISO9660文件名之间放置一个空格,并在ISO9660文件名与扩展文件名之间放置任意多个制表符。

许多ISO9660工具仍内置了对TRANS.TBL文件的支持, 尤其是在跟Unix相关的场合。然而,ISO9660规范已经用Rock Ridge和Joliet扩展替代TRANS.TBL文件很久了,因此,现代所用之创建ISO9660镜像文件的工具,或者根本不创建TRANS.TBL文件,或者仅在用户明确指定时才会创建它们。除了文件名有着特别意义之外,TRANS.TBL文件(与别的其他文件相比)再也没有什么特殊之处,因此,它们既可以被单独创建,也可以在文件系统创建之前提前放进目录中。

记事本打开一个TBL文件如下

文件类型

      F                 EFIBOOT.IMG;1                                            efiboot.img
      F                 EFIDISK.IMG;1                                             efidisk.img
      F                 INSTALL.IMG;1                                             install.img
      D                 PXEBOOT                                                     pxeboot

转自 ISO中的TRANS.TBL[转]_peng_新浪博客 (sina.com.cn)

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值