sed -r 's/([^John] )Smith/\1John/g;s/([^Jane] )Johnson/\1Jane/g'
() получит non-Firstname перед LastName, таким образом, они - backref'd в замене.
Править
@manatwork, gilles
Вы правы. Как насчет
sed -r 's/(John Smith)/temp1/g;s/Smith/John/g;s/temp1/John Smith/g'
Это, кажется, добивается цели.
существуют команды для генерации дерева процесса. 'PS' выбирает варианты 'fu', и я думаю, что солнце имеет B-дерево.
Нет никакого стандартного пути, и насколько я знаю, что нет никакого Соляриса пути также. Если бы был надежный способ узнать пользователя “предка”, то обычная модель обеспечения безопасности Unix, где корень может сделать все, не содержала бы.
Можно проверить родителя каждого процесса рекурсивно. (Предупреждение, непротестированный сценарий.)
pid=$1 pids=$pid user=
while pid=$(ps -o ppid= $pid); do
user=$(ps -o ruser= $pid)
case $user in
0|root) :;;
*) break;;
esac
done
echo $user
Это, как гарантируют, не даст результата, все же. Возможно, родительский процесс родителя родителя вышел.
Можно проверить, какой терминал процесс выполняет (ps -o tty= $pid
) и проверьте, кто продержался, вошел в систему на том терминале (who
, last
). Это только показательно, хотя: корень может запустить процессы на любом терминале.
Что делает Вы ожидаете видеть, работает ли user1 su user2 -c 'su user1 -c …'
? Возможно, что ОС отследила бы последовательные цепочки аутентификации в структурах данных ядра, связанных с процессом, но это очень далеко от обычной модели обеспечения безопасности Unix.
/usr/lib/ssh/sshd
. Я услышал оssh
но нетsshd
. – Srikanth 03.03.2011, 23:47