Передача данных в сценарий или функцию, определяющая, поступает ли вывод на стандартный вывод или на стандартный вывод?

iptables -L -nv

Это выводит конфигурацию вашего брандмауэра.

apt update
yum install nmap

Это устанавливает инструмент nmap, который является мощным сканером портов, очень полезным.

nmap -Ss -O 89.169.183.2
nmap -O 89.169.183.2

Эти команды сканируют компьютер по IP-адресу 89.169.183.2. -Ss ищет открытые порты TCP, а -O пытается идентифицировать операционную систему и версию этого компьютера.

Anyone have any idea what these commands mean and what type of action I should take on the server?

Вам необходимо немедленно связаться с вашим поставщиком услуг хостинга и узнать, несет ли его системный администратор ответственность за выполнение этих команд на вашем сервере. Если они уверены , что это были их действия, вы можете вежливо попросить их сообщать вам в будущем, когда они будут использовать root в вашей системе, но все в порядке.

Если поставщик услуг хостинга сообщает вам, что никто из его сотрудников не выполнял команды от имени пользователя root в вашей системе, вам необходимо сообщить им, что система была взломана, а затем либо заставить их помочь вам восстановить его на заведомо исправную резервную копию, сделанную до того, как система была скомпрометирована, или (предпочтительнее)сжечь ее дотла и восстановить с нуля .

Никогда больше не используйте то, что вы использовали в качестве пароля root в этой системе для чего-либо .

0
28.02.2020, 07:38
3 ответа

Использовать Замена процесса не трубы:

{ echo "foo" ; echo "bar" >&2; } 2> >(sed "s/^/err: /") > >(sed "s/^/out: /")
err: bar
out: foo

Если вы делаете это в скрипте, используйте команду execдля настройки перенаправления на все время скрипта:

bash -c '
    exec 2> >(sed "s/^/err: /") > >(sed "s/^/out: /")
    echo foo
    echo bar >&2
'
err: bar
out: foo

Если да

exec > >(sed "s/^/out: /") 2> >(sed "s/^/err: /")

, тогда вывод

out: foo
out: err: bar

Я предполагаю, что это то, что вы подразумеваете под "не работает". Это связано с тем, что вывод подстановки процесса «err» по умолчанию идет на стандартный вывод, и теперь он указывает на подпроцесс «out». Вам нужно будет сделать это, чтобы обойти это:

exec 3>&1 > >(sed "s/^/out: /") 2> >(sed "s/^/err: /" >&3)

Создайте еще один файловый дескриптор (3 ), указывающий на стандартный вывод по умолчанию,затем перенаправление stderr печатает на fd3.

2
28.04.2021, 23:22

Последующий вопрос отвечает сам на себя при выполнении:

Функция errтакже выводит на стандартный вывод. Очевидно, что первая форма имеет исходный стандартный вывод, а вторая уже использует функцию «перенаправление на выход ()».

1
28.04.2021, 23:22

Это должно работать в любой стандартной оболочке, а не только в bash:

{ cmd 2>&1 >&3 | sed 's/^/err: /' >&2; } 3>&1 | sed 's/^/out: /'

Для удобства это можно превратить в функцию:

# usage louterr cmd [args...]
louterr(){ { "$@" 2>&1 >&3 | sed 's/^/err: /' >&2; } 3>&1 | sed 's/^/out: /'; }

cmd(){ echo ERR >&2; echo OUT; }
louterr cmd
out: OUT
err: ERR
louterr louterr louterr cmd
err: err: err: ERR
out: out: out: OUT

или с настраиваемыми «фильтрами»:

# usage: louterrx out_filter err_filter cmd [args...]
louterrx(){
   oflt=$1; eflt=$2; shift; shift
   eval "{ \"\$@\" 2>&1 >&3 | $eflt >&2; } 3>&1 | $oflt"
}

louterrx "sed 's/^/out: /'" "sed 's/^/err: /'" cmd

Недостатком этого является то, что статус выхода cmdбудет скрыт (, как и любая правая часть конвейера ). Чтобы обойти это, вы можете использовать подоболочку и set -o pipefail(, поддерживаемую в bash, zsh, kshи т. д., но пока не в dash):

.
louterr()(
   set -o pipefail
   { "$@" 2>&1 >&3 | sed 's/^/err: /' >&2; } 3>&1 | sed 's/^/out: /'
)
cmd(){ echo ERR >&2; echo OUT; return 13; }
louterr cmd; echo $?
out: OUT
err: ERR
13

Я не рекомендую использовать > >(...)zsh/bash -изм в этом случае, так как он зависит от особенностей, связанных с порядком, в котором расширения и перенаправления выполняются в разных оболочках (, и подлежит много других причуд и ошибок). Например, в

ls no_such_file >/dev/null 2> >(cat)

выводcat(сообщение об ошибкеls)будет перенаправлено на /dev/nullв bash, но не в zsh.

~единственная ситуация, когда вы должны использовать форму cmd > >(...), — это когда cmd— это функция, целью которой является изменение текущей среды и которая не может быть запущена в подоболочке.

0
28.04.2021, 23:22

Теги

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