`/sys/class/net/`の特別なファイルテストヘルプ

`/sys/class/net/`の特別なファイルテストヘルプ

背景

私はセルラーインターフェースを管理しています。bashインターフェースをテストするスクリプトがあります。問題は、ファイルが次の/sys/class/net/wwan1/carrier場所にあることです。wwan1未構成相互作用。

これは明らかに特別なファイルですが、bashスクリプトでこれを正しくテストする方法がわかりません。以下を参照してください...

以下を考慮してください。

file /sys/class/net/wwan0/carrier # a good interface
/sys/class/net/wwan0/carrier: ASCII text

file /sys/class/net/wwan1/carrier # an unconfigured interface
/sys/class/net/wwan1/carrier: ERROR: cannot read `/sys/class/net/wwan1/carrier' (Invalid argument)

いくつかのcatデータ:

$ cat /sys/class/net/wwan0/carrier # good interface
1

$ cat /sys/class/net/wwan1/carrier # unconfigured
cat: /sys/class/net/wwan1/carrier: Invalid argument

このエラーはcat問題です。

ただし、次の場所に/sys/class/net/wwan1/carrierあるファイルls

$ cd /sys/class/net/wwan1
$ ls -al
total 0
drwxr-xr-x 4 root root    0 Dec 27 17:36 .
drwxr-xr-x 3 root root    0 Dec 27 17:36 ..
-r--r--r-- 1 root root 4096 Dec 28 20:24 addr_assign_type
-r--r--r-- 1 root root 4096 Dec 28 20:24 address
-r--r--r-- 1 root root 4096 Dec 28 20:24 addr_len
-r--r--r-- 1 root root 4096 Dec 28 20:24 broadcast
-r--r--r-- 1 root root 4096 Dec 28 18:57 carrier
lrwxrwxrwx 1 root root    0 Dec 28 20:24 device -> ../../../1-1:1.10
-r--r--r-- 1 root root 4096 Dec 28 20:24 dev_id
-r--r--r-- 1 root root 4096 Dec 28 20:24 dormant
-r--r--r-- 1 root root 4096 Dec 28 20:24 duplex
-rw-r--r-- 1 root root 4096 Dec 28 20:24 flags
-rw-r--r-- 1 root root 4096 Dec 28 20:24 ifalias
-r--r--r-- 1 root root 4096 Dec 28 20:24 ifindex
-r--r--r-- 1 root root 4096 Dec 28 20:24 iflink
-r--r--r-- 1 root root 4096 Dec 28 20:24 link_mode
-rw-r--r-- 1 root root 4096 Dec 28 20:24 mtu
-rw-r--r-- 1 root root 4096 Dec 28 20:24 netdev_group
-r--r--r-- 1 root root 4096 Dec 28 18:57 operstate
drwxr-xr-x 2 root root    0 Dec 28 20:24 power
-r--r--r-- 1 root root 4096 Dec 28 20:24 speed
drwxr-xr-x 2 root root    0 Dec 28 20:24 statistics
lrwxrwxrwx 1 root root    0 Dec 27 17:36 subsystem -> ../../../../../../../../../../class/net
-rw-r--r-- 1 root root 4096 Dec 28 20:24 tx_queue_len
-r--r--r-- 1 root root 4096 Dec 28 20:24 type
-rw-r--r-- 1 root root 4096 Dec 27 17:36 uevent

質問

bashスクリプトで可能なさまざまなインターフェイス設定と問題をテストしています。そのうちの1つは、インターフェイスが設定されていないことです。私はandの出力が信頼できない/sysことを発見したので調査しています。ifconfigip

私の質問

/sys/class/net/wwan1/carrier文でファイル値をテストする方法bash if(ファイル自体は読み取れませんが、存在します。未構成相互作用?私が試したことは次のとおりです。

if [[ -e "/sys/class/net/wwan1/carrier" ]]; then
    echo "Good"
else
    echo "Bad"
fi

私はすべてのテストを使用しましたが、-b, -c, -fすべてのファイルの「読み取り可能」状態である/sys/class/net/wwan1/「不良」ファイルと/sys/class/net/wwan0/「良好」ファイルを区別できませんでした。

編集する

-rテストはどちらの場合も大丈夫だと報告します。これは最初のケースでは失敗する-sため問題になります。cat

stat出力の編集

$ stat /sys/class/net/wwan0/carrier
  File: `/sys/class/net/wwan0/carrier'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: fh/15d  Inode: 5657        Links: 1
Access: (0444/-r--r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-12-28 17:01:06.976418548 +0000
Modify: 2015-12-28 17:01:06.976418548 +0000
Change: 2015-12-28 17:01:06.976418548 +0000
 Birth: -

そして

$ stat /sys/class/net/wwan1/carrier
  File: `/sys/class/net/wwan1/carrier'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: fh/15d  Inode: 6181        Links: 1
Access: (0444/-r--r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-12-28 18:57:37.876419704 +0000
Modify: 2015-12-28 18:57:37.876419704 +0000
Change: 2015-12-28 18:57:37.876419704 +0000
 Birth: -

ベストアンサー1

WiFiインターフェースで試してみましたが、carrierダミーファイルもあります/sys/class/net/wlan0/carrier。 (注:私はワイヤレスネットワーキングを有効/無効にしましたnmtui。)

3つの状態があるようです。

  • ./carrier読み取れません(たとえば、Network Managerでインターフェイスが無効になっている場合など)。
  • ./carrier「1」が含まれています(インターフェースが有効でWiFiネットワークに接続されている場合)。
  • ./carrier「0」が含まれています(インターフェースがアクティブです。いいえWiFiネットワークに接続)

  if ! cat /sys/class/net/wlan0/carrier > /dev/null; then
    echo "Not connected to any network"
  elif [ "$(head -c1 /sys/class/net/wlan0/carrier)" -eq 1 ]; then
    echo "Connected to a wireless network"
  elif [ "$(head -c1 /sys/class/net/wlan0/carrier)" -eq 0 ]; then
    echo "Not connected to a wireless network"
  else
    echo "Unknown/Unhandled state"
  fi

おすすめ記事