`/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 스크립트에서 가능한 다양한 인터페이스 구성과 문제를 테스트하고 있습니다. 그 중 하나는 인터페이스가 구성되지 않았다는 것입니다. 나는 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.)

세 가지 상태가 있는 것 같습니다.

  • ./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

관련 정보