如何获取有关网络接口正常运行时间的信息?

Ste*_*hén 10 networking linux debian ubuntu

我有一台 Ubuntu 机器和一台 Debian 机器。

在两者上,我都希望能够看到网络接口连接了多长时间。(也就是说,连接到网络获取 IP 等。不是电缆的物理状态)。以秒为单位的正常运行时间或自上次更改以来的日期 + 时间或任何类似内容。

到目前为止,我已经编写了一个小脚本来完成这项任务,但似乎应该有一种更通用的方法来检查这一点。/proc 中的程序或其他内容。

我的脚本:

#!/bin/bash

if [ -f /etc/os-release ]; then

    if TMP=$(grep -i 'ubuntu' /etc/os-release); then

        # we are on ubuntu
        for i in $(/bin/ls -1 /var/log/syslog* | sort -r); do
                TMP=$(zgrep '(eth0): device state change: ip-config -> activated' "$i" | tail -1 | sed "s/ "$(hostname)"/*/")
        done

        WHEN=$(echo "$TMP" | cut -f1 -d '*')
        SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
        echo "Last link up: $WHEN ($SEC seconds ago)."

    elif TMP=$(grep -i 'debian' /etc/os-release); then

        # we are on debian
        TMP=$(grep 'eth0: link up' /var/log/syslog* | tail -1 | cut -f2- -d':' | sed "s/ "$(uname -n)" kernel:/*/")
        WHEN=$(echo "$TMP" | cut -f1 -d '*')
        SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
        echo "Last link up: $WHEN ($SEC seconds ago)."

    fi

else
    echo "File /etc/os-release not found."
fi
Run Code Online (Sandbox Code Playgroud)

hfs*_*hfs 5

在我的机器上,dhclient重新连接到网络时,NetworkManager 会重新启动。那么也许您可以使用进程的开始时间dhclient

ps -o start,cmd $(pgrep dhclient)
Run Code Online (Sandbox Code Playgroud)


sep*_*ber 0

这是我的变体(与你的非常相似):

~ # expr $(echo $(date +%s) - $(date -d "`grep 'eth0: leased' /var/log/messages | tail -1 | awk '{print $1, $2, $3}'`" +%s))
1116
~ #
Run Code Online (Sandbox Code Playgroud)

1116 - IP 租用后的秒数。