UCI (Unified Configuration Interface) は OpenWrt のサービスの設定を集中管理するシステムである。
公式: [OpenWrt Wiki] The UCI system 翻訳 より🤔
設定を調整するには、通常、UCI 構成ファイルを直接変更します。
ただし、スクリプト目的では、uci
コマンドラインユーティリティを使用して、すべてのUCI構成を読み取り、変更することもできます。
したがって、UCI構成の自動解析を必要とする開発者の場合、awk
と grep
を使用するには冗長で、賢明でなく、非効率的です。
uci
ユーティリティは、UCI の変更と解析に関してすべての機能を提供します。
以下は使用法と、この強力なユーティリティの使用方法のいくつかの有用な例です。
uci
を使用して構成ファイルを書き込む場合、ファイルは常に全体で書き換えられ、認識されていないコマンドは省略されます。
これは、コメントなど、ファイル内の無関係な行が削除されることを意味します。自分で編集した UCI 構成ファイルがあり、独自のコメントや空白行を保持したい場合は、コマンドラインユーティリティを使用せず、ファイルを正常に編集する必要があります。
uHTTPd 構成ファイルなどの一部のファイルには、アプリケーションが最初にインストールされている場合、すでに多くのコメントが含まれていることに注意してください。
また、LuCI などの一部のアプリケーションは、uci
ユーティリティを使用しているため、UCI 構成ファイルを書き換える可能性があることに注意してください。
構成に同じタイプの複数のセクションがある場合、UCIはそれらの配列のような参照をサポートします。
/etc/config/system
で定義されている 8 つの NTP サーバーがある場合、UCI ではセクションを system.@timeserver[0]
は最初 system.@timeserver[7]
は最後として参照できます。
system.@timeserver[-1]
などのネガティブインデックスを使用することもできます。
“-1” とは最後のものを意味し、“-2” は最後から 2 番目のものを意味します。
これは、リストの最後に新しいルールを追加するときに非常に便利です。
以下の例を参照してください。
# uci
使用法: uci uci [<options>] <command> [<arguments>] コマンド: batch export [<config>] import [<config>] changes [<config>] commit [<config>] add <config> <section-type> add_list <config>.<section>.<option>=<string> del_list <config>.<section>.<option>=<string> show [<config>[.<section>[.<option>]]] get <config>.<section>[.<option>] set <config>.<section>[.<option>]=<value> delete <config>[.<section>[[.<option>][=<id>]]] rename <config>.<section>[.<option>]=<name> revert <config>[.<section>[.<option>]] reorder <config>.<section>=<position> オプション: -c <path> 設定ファイルの検索パスを設定します (デフォルト: /etc/config) -d <str> uci show のリスト値の区切り文字を設定します -f <file> stdin の代わりに <file> を入力として使用します -m インポート時に、データを既存のパッケージにマージします -n エクスポート時に名前のないセクションに名前を付けます (デフォルト) -N 名前のないセクションに名前を付けません -p <path> 構成変更ファイルの検索パスを追加します -P <path> 構成変更ファイルの検索パスを追加し、デフォルトとして使用します -q クワイエット モード (エラー メッセージを表示しません) -s 厳密モードを強制します (パーサー エラーで停止、デフォルト) -S 厳密モードを無効にします -X 'show' で拡張構文を使用しません
コマンド | ターゲット | 説明 |
---|---|---|
commit | [<config>] | 指定された設定ファイルの変更、または何も指定されていない場合はすべての設定ファイルをファイルシステムに書き込みます。すべての “uci set”, “uci add”, “uci rename” “および “uci delete” コマンドは一時的な場所にステージングされ、”uci commit“ で一度にフラッシュに書き込まれます。これは、テキスト エディターで設定ファイルを編集した後には必要ありませんが、スクリプト、GUI、および UCI ファイルを直接操作するその他のプログラムで必要です。 |
batch | - | 通常はヒアドキュメント構文にラップされる複数行の UCI スクリプトを実行します。 |
export | [<config>] | 構成を機械可読形式でエクスポートします。これは、シェル スクリプトとして構成ファイルを評価するために内部的に使用されます。 |
import | [<config>] | UCI 構文で構成ファイルをインポートします。 |
changes | [<config>] | 指定された構成ファイルへのステージングされた変更を一覧表示します。指定されていない場合は、すべての構成ファイルを表示します。 |
add | <config> <section-type> | 指定された構成に section-type タイプの匿名セクションを追加します。 |
add_list | <config>.<section>.<option>=<string> | 指定された文字列を既存のリスト オプションに追加します。 |
del_list | <config>.<section>.<option>=<string> | 既存のリスト オプションから指定された文字列を削除します。 |
show | [<config>[.<section>[.<option>]]] | 指定されたオプション、セクション、または構成を圧縮表記で表示します。 |
get | <config>.<section>[.<option>] | 指定されたオプションの値または指定されたセクションのタイプを取得します。 |
set | <config>.<section>[.<option>]=<value> | 指定されたオプションの値を設定するか、指定された値に設定されたタイプを持つ新しいセクションを追加します。 |
delete | <config>.<section>[.<option>] | 指定されたセクションまたはオプションを削除します。 |
rename | <config>.<section>[.<option>]=<name> | 指定されたオプションまたはセクションの名前を指定された名前に変更します。 |
revert | <config>[.<section>[.<option>]] | 指定されたオプション、セクション、または構成ファイルを元に戻します。 |
reorder | <config>.<section>=<position> | セクションを別の位置に移動します。 |
例えば uci delete
を使用して構成全体を削除できないことに注意してください。 uci delete umdns
は機能しません。あなたが本当に、あなたが構成全体をワイプすることを本当に確信しているなら、このシェルコードスニペットは、空になるまで構成の最初のエントリをループして削除することによってそれを行います:
while uci -q delete umdns.@umdns[0]; do :; done
OpenWrt の Samba の設定を変更する。
# vi /etc/config/samba
config samba option workgroup 'MONSTERS-G' option homes '1' option name 'GL-AR750S' option description 'GL-AR750S' config sambashare option path '/mnt/sd128gb' option name 'sd128gb' option read_only 'no' option guest_ok 'yes'
上記の変更は uci にも反映される。
# uci show samba
samba.@samba[0]=samba samba.@samba[0].workgroup='MONSTERS-G' samba.@samba[0].homes='1' samba.@samba[0].name='GL-AR750S' samba.@samba[0].description='GL-AR750S' samba.@sambashare[0]=sambashare samba.@sambashare[0].path='/mnt/sd128gb' samba.@sambashare[0].name='sd128gb' samba.@sambashare[0].read_only='no' samba.@sambashare[0].guest_ok='yes'