OpenWRT에서 uci 명령을 사용하여 모든 구성 옵션을 얻는 방법

OpenWRT에서 uci 명령을 사용하여 모든 구성 옵션을 얻는 방법

uciOpenWRT를 실행하는 라우터를 구성하고 있지만 명령(통합 구성 인터페이스)을 사용하여 기존 구성 파일을 확인하는 방법을 이해하는 데 문제가 있습니다 . 쉘 스크립트에서 이 구성을 자동화하고 싶습니다.

방화벽 구성을 예로 들면 /etc/config/firewall길이가 195이므로 cat.

여러 규칙이 있습니다. 첫 번째 규칙을 사용하세요.

root@OpenWrt:/etc/config# grep -B1 -A6 'Allow-DHCP-Renew' /etc/config/firewall
config rule
    option name     Allow-DHCP-Renew
    option src      wan
    option proto        udp
    option dest_port    68
    option target       ACCEPT
    option family       ipv4

root@OpenWrt:/etc/config# 

@rule[0]다음과 같이 첫 번째 규칙( )의 개별 필드를 확인할 수 있습니다 name.

root@OpenWrt:/etc/config# uci get firewall.@rule[0].name
Allow-DHCP-Renew
root@OpenWrt:/etc/config# 

하지만 전체 규칙을 출력으로 볼 수 없습니다. 시도해 보았지만 uci get firewall.@rule[0].*올바른 구문이 아닙니다.

uci( )에 대한 매뉴얼이 없어서 man uci이 명령을 어떻게 사용하는지에 대한 정보를 어디서 찾을 수 있는지 잘 모르겠습니다.

이런 '집단 인수'가 가능한가요?

답변1

장치의 모든 현재 설정을 사용하여 OpenWRT를 설정하는 스크립트를 생성하려는 경우.

#!/bin/sh
# Create OpenWRT setup script
script="/tmp/uci_setup_script.sh"
echo "#!/bin/sh" > "$script"
echo "uci -q batch << EOI" >> "$script"
for section in $(uci show | awk -F. '{print $1}' | sort -u); do
uci show "$section" | awk -F. '{print "set "$0}' >> "$script"
echo "commit $section" >> "$script"
done
echo "EOI" >> "$script"
chmod 755 "$script"

사용자 지정 펌웨어에 Image Builder를 사용하는 경우 files/etc/uci-defaultsImage Builder 디렉터리에 폴더에 대한 파일을 만듭니다.

#!/bin/sh
# Create OpenWRT uci-defaults file for image builder
# copy generated file to 'files/etc/uci-defaults/' folder in your image builder directory
script="/tmp/99-custom"
echo "#!/bin/sh" > "$script"
echo "uci -q batch << EOI" >> "$script"
for section in $(uci show | awk -F. '{print $1}' | sort -u); do
uci show "$section" | awk -F. '{print "set "$0}' >> "$script"
echo "commit $section" >> "$script"
echo "EOI" >> "$script"
chmod 755 "$script"
done

답변2

uci show흠... 대신 사용해야 한다는 걸 알았습니다 uci get. 아래 예를 참조하세요.

root@OpenWrt:/etc/config# uci show firewall.@rule[0]
firewall.cfg0592bd=rule
firewall.cfg0592bd.name='Allow-DHCP-Renew'
firewall.cfg0592bd.src='wan'
firewall.cfg0592bd.proto='udp'
firewall.cfg0592bd.dest_port='68'
firewall.cfg0592bd.target='ACCEPT'
firewall.cfg0592bd.family='ipv4'
root@OpenWrt:/etc/config#

관련 정보