Как получить состояние сети (онлайн/офлайн) и приписать его переменной в сценарии оболочки?

Я запускаю коврик для мыши с оболочки:

mousepad & 
[1] 24289

проверьте, куда это прибывает из:

which mousepad 
   /usr/bin/mousepad

запустите его с пути:

/usr/bin/mousepad &

взгляд через PS:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Как мы видим, тот, вызванный без пути, отображен без пути и запущен с ПУТИ, и поэтому быть найденным

which mousepad

Простой как это, не так ли? Ожидайте! Что, если я запускаю коврик для мыши с меню? Ну, это могло бы быть указано с или не используя настройки PATH. Я попробовал. Нормальный запуск приводит к простому 'коврику для мыши' в ps v -C. С тех пор ~ / мусорное ведро первая часть моего ПУТИ, я создаю макет там, и, вуаля, макет запускается с меню.

Но что, если Вы запускаете программу, которая удаляет себя? Который не найдет удаленную программу и сообщит о неправильной, если будет секунда в пути.

Таким образом, это - состояние состязания. Если Вы знаете, что Ваши программы не удаляют себя или не перемещены при исследовании их местоположения, ps v -C NAME и which NAME должен работать вполне прилично.

4
03.03.2011, 15:41
4 ответа

другой... для более старого NICs, инструмент mii команды является потрясающим

2
27.01.2020, 20:49

Я иду в reccomend ip снова:

status=$(ip -o link show eth0 | awk '{print $9}')

(Девятый столбец является состоянием интерфейса),

3
27.01.2020, 20:49
  • 1
    Странный, что это показывает "НЕИЗВЕСТНЫЙ" при соединении. Это работает, поскольку это показывает "ВНИЗ" при разъединении, но это корректно для показа "НЕИЗВЕСТНЫЙ" при соединении? –  Tom Brito 03.03.2011, 18:54
  • 2
    я добираюсь UNKNOWN в системе Ubuntu 10.10, и '1000' в системе CentOS 5.5. –  Stefan Lasiewski 03.03.2011, 20:42

При использовании администратора сети для сетевого соединения Вы могли бы запросить его через dbus несколько как это:

dbus-send --type=method_call --print-reply --system --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" org.freedesktop.NetworkManager.state

(несколько удержанный от использования, но все еще работает, для более новых интерфейсов, Вы просто запросили бы другой адрес),

Если это возвращается "3", Вы "соединены", как описано в http://projects.gnome.org/NetworkManager/developers/spec.html#type-NM_STATE (но это ничего не говорит об интернет-соединении).

Если Вы действительно хотите знать, имеете ли Вы интернет-соединение, просто проверяете с помощью ping-запросов удаленный сервер как google.com и видите, работало ли это или нет.

3
27.01.2020, 20:49

Вы говорите, что просто хотите состояние онлайн/в режиме офлайн интерфейса и не обеспокоены скоростью или типом канала.

Попробуйте ethtool как корень:

# ethtool eth0 |grep "Link detected"
  Link detected: yes
# ethtool eth1 |grep "Link detected"
  Link detected: no

ifconfig может также показать Вам состояние онлайн/в режиме офлайн, и эта команда обычно доступна любому пользователю в системе.

$ { /sbin/ifconfig eth0 | grep MTU: | grep -w UP >/dev/null 2>&1 ; }; echo $?
0
# This could return some false errors
$ { /sbin/ifconfig eth1 | grep MTU: | grep -w UP >/dev/null 2>&1 ; }; echo $?
1
1
27.01.2020, 20:49

Теги

Похожие вопросы