OpenWrt之sysupgrade
程序员文章站
2022-06-09 18:40:15
...
升级后只保存自己想要的界面
package/base-files/files/sbin/sysupgrade 对应/sbin/sysupgrade
sysupgrade脚本,像所有的主体处理程序一样,会对传进来的参数进行处理。
Usage: /sbin/sysupgrade [<upgrade-option>...] <image file or URL>
/sbin/sysupgrade [-q] [-i] <backup-command> <file>
下面对这些参数的介绍:
upgrade-option:
-i 开启交互模式
-d 重启前延迟,延迟秒数是传进来的
-v 会打印sysupgrade脚本中的一些信息,脚本中默认打印
-q 与-v相反
-n 升级后不保存配置,默认保存配置
-c 保存所有的改动配置文件到/etc/
-f 从.tar.gz恢复配置
-F 即使升级文件检测失败,也要升级,这个参数是危险的,慎用
-T 验证升级文件和.tar.gz配置文件,但不升级
-h 打印帮助信息
backup-command:
-b 用sysupgrade.conf中指定的文件,创建.tar.gz格式备份文件
-r 用上步创建的.tar.gz文件,恢复配置
-l 列出将会备份的文件列表
#脚本sysupgrade原来的内容
add_uci_conffiles() {
local file="$1"
( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
/etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
-type f -o -type l 2>/dev/null;
opkg list-changed-conffiles ) | sort -u > "$file"
return 0
}
解读:
sed 一般是进行行操作的指令,
sed -ne
n: 不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),
e : $ sed -e ‘1,5d’ -e ‘s/test/check/’ example #(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果
p命令可以用来打印编辑行
/^#/d : 表示打印时 删除 行开头为# 的行
'/^[[:space:]]*$/d : 表示打印时 删除 行开头任意空白字符的行
$(sed -ne '/^[[:space:]]*$/d; /^#/d; p' /etc/sysupgrade.conf /lib/upgrade/keep.d/*)
表示的就是行打印文件/etc/sysupgrade.conf 及文件夹/lib/upgrade/keep.d/*中包含的文件中不含以“#”及空白字符开头的行,
linux中find命令。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件
1 l
所以完整代码的含义为:用find提出sed出的内容中不包含的文件,与 “opkg list-changed-conffiles” 出的内容经过排序一起打印到文件中
改为
add_uci_conffiles() {
local file="$1"
( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
/etc/sysupgrade.conf 2>/dev/null) \
-type f -o -type l 2>/dev/null;
) | sort -u > "$file"
return 0
}
/etc/sysupgrade.conf
#此文件包含的文件和目录应该
#在升级过程中保留
#例如:
/etc/config/network
/etc/config/wireless
/etc/config/system
/etc/httpd.conf