Никакой реальный шанс того, чтобы заставлять AIX работать на Вашем ноутбуке, лучший способ учиться состоит в том, чтобы купить старую машину и делать попытку на реальных аппаратных средствах (сами аппаратные средства PPC являются очень отличающимся, другим процессом начальной загрузки и т.д.). Необходимо смочь найти дешевую рабочую станцию IBM на eBay за несколько сотен долларов, модель 275 с 4 ГБ RAM должна быть достаточной для выполнения AIX для тестирования.
Стоящий учета то, что более или менее все новое развертывание AIX виртуализируется, или использующий виртуализацию аппаратного уровня или контейнеры в установке AIX. К сожалению, самые дешевые аппаратные средства для этого - (afaik) что-то как p520 сервер (выполняющий сервер VIO), который будет стоить Вам, по крайней мере, 2k доллар США на eBay или подобный.
Что касается элегантности, я изменил бы две вещи в Вашей команде:
-q
вместо перенаправления вывода.Используйте тот grep
вместо два:
if netstat -an | grep -q " $address:$port .* ESTABLISHED"; then
lsof
должен сделать задание. Попросите, чтобы это дало Вам вывод машины-parseable с -F
опция.
lsof -n -i @${hostname}:${port} -F nT | grep '^TST=ESTABLISHED$'
Если Вам нужно больше информации:
lsof -n -i -F nT | awk '
function host_port(s, a) {
match(s, /:[^:]*$/);
a["host"] = substr(s, 1, RSTART-1);
a["port"] = substr(s, RSTART+1);
}
sub(/^p/,"") {pid = $0}
sub(/^n/,"") {
split($0, endpoints, "->");
host_port(endpoints[1], from);
host_port(endpoints[2], to);
}
/^TST=ESTABLISHED$/ {
print "Established from", from["host"] ":" from["port"],
"to", to["host"] ":" to["port"]
}
'
Это работает достаточно хорошо на данный момент для Linux.
В других системах UNIX (те у меня есть руки, Mac OS X и Солярис), порт разделяется .
вместо :
.
И это, скорее всего, перестанет работать для любого соединения IPv6. netstat
усекает адреса IPv6, поэтому удостоверьтесь, что использовали --wide
. Но снова, это не портативная опция.
Можно использовать lsof
вместо netstat
: что-то вроде этого: sudo /usr/sbin/lsof -i tcp@1.2.3.4:80
, но lsof только доступен пользователю root и часто не установленный по умолчанию, таким образом, это - дополнительная внешняя зависимость.
с ss
:
if ss -n -o state established '( dport = $hostname:$portnumber )'|awk 'NR==2{exit 0}END{exit 1}';then
grep
, когда нет никакой потребности в regexpsfgrep
соответствия лучше. – poige 13.04.2012, 07:48fgrep
(или скорееgrep -F
, с тех порfgrep
удерживается от использования), в этом случае бесполезно также из-за незначительного потенциального преимущества скорости в единственном вызове. Потребовалось бы намного больше времени к типу a (дольше) работающему фильтр сfgrep
- и это должно было бы использовать канал, так же, как в примере OP. – rozcietrzewiacz 13.04.2012, 09:40-f
к grep, никакой совет, делающий это любому. :) – poige 14.04.2012, 19:27grep
и расходы их время в выходе из его спецификации. символы, или что является хуже путем, получая неправильные результаты, забывавшие выйти из такого symbs.. Посмотрите,$address
Вы использовали в Вашемgrep
на самом деле имеет ту спецификацию. symbs. — точки. Это - дефект на самом деле. – poige 14.04.2012, 19:27:80
соответствовал бы ":80anything" — вот почему я поддерживаю использование решенияss
. И да, когда существует разделитель как:
, точки могут быть безопасными. Но иначе192.168.1.4
отлично соответствует целым 192.168.104, для, например, – poige 15.04.2012, 07:27