uci
OpenWRT를 실행하는 라우터를 구성하고 있지만 명령(통합 구성 인터페이스)을 사용하여 기존 구성 파일을 확인하는 방법을 이해하는 데 문제가 있습니다 . 쉘 스크립트에서 이 구성을 자동화하고 싶습니다.
방화벽 구성을 예로 들면 /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-defaults
Image 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#