Только что узнав о сс:
ss -n -o state established '( dport = :telnet or sport = :ssh )' |
awk 'NR==2 { print substr($5, 1, index($5, ":")-1) }'
Я использую NR==2, чтобы пропустить заголовок и получить только первую строку вывода, чтобы соответствовать вашему поведению netstat/grep. Остальная часть awk-кода печатает $5, но начиная с первого символа и продолжая только до индекса, в котором найдено «:», минус один.
Если в системе отсутствует ss
, то можно использовать sed:
echo 192.168.15.73.64759 | sed 's/\.[0-9]*$//'
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' | sed 's/\.[0-9]*$//'
Это заменяет «точка, за которой следует ноль или более цифр, за которыми следует конец строки» на «ничего».
У меня возникла эта проблема после того, как я попробовал то же самое. Как упоминает новичок в комментариях , есть флаг -o
, который должен выводить в файл, однако я обнаружил, что это не работает под Linux, несмотря на то, что он находится на странице руководства. В конечном итоге мне нужно было, чтобы iperf продолжал работать после прерывания сеанса ssh. В конце концов я использовал следующую команду.
nohup iperf -s > iperflog 2>&1 &
Чтобы немного разобраться, мы запускаем iperf с флагом сервера и перенаправляем стандартный вывод в файл iperflog
. 2>&1
перенаправляет stderr на stdout, чтобы обеспечить захват всего вывода в этом файле, включая ошибки. &
указывает оболочке запустить эту команду в фоновом режиме. Это по-прежнему приведет к завершению процесса при закрытии сеанса, поскольку он будет отправлен SIGHUP. nohup
исправляет это, игнорируя этот сигнал и позволяя процессу продолжать работу.
Затем вы можете запустить tail -f iperflog
для просмотра вывода в оболочке в обычном виде.
Это не идеально, так как требует оболочки, чего не требовала предыдущая команда, но это привело меня туда, где мне было нужно.