欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
相关标签: OpenWrt