Форум системных администраторов

IT => Unix => Тема начата: rjhdby от 01 августа 2011, 12:28:34

Название: Задачка по обработке текста
Отправлено: rjhdby от 01 августа 2011, 12:28:34
вывод ps -ef

    root 24742  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
     bin 17326 17322  0  Jul 26  ?         0:00 /opt/OV/httpd//bin/httpd -k start
    root 24814  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
    root 24785  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
    root 24423  1066  0  Jul 29  ?         0:00 /sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
  oracle  2134     1  0  Oct 21  ?        13:55 /oracle/product/current/bin/tnslsnr LISTENER -inherit
    root   985   978  0  Jul 29  ?         0:41 /opt/OV/bin/OpC/opcuiwww
    root 24821 24814  0  Jul 29  ?         0:11 /opt/OV/bin/OpC/opcuiwww
    root 21703 21702  1 13:20:00 ?         0:00 /opt/wbem/bin/cimprovider -l -s
    root 21659  1848  0 13:20:00 ?         0:00 sh -c   /etc/opt/resmon/lbin/mon_EMSHAProvider_state.sh
    root 21660  1848  1 13:20:00 ?         0:00 sh -c    /opt/sfm/bin/restart_sfm.sh
Соответственно надо вытащить отсюда все процессы рута с путями и аргументами.
Может кто предложит красивое решение? :]

PS В итоге недо получить вот это
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/sbin/sh /opt/OV/bin/OpC/opcuiwww.sh
/opt/OV/bin/OpC/opcuiwww
/opt/OV/bin/OpC/opcuiwww
/opt/wbem/bin/cimprovider -l -s
sh -c   /etc/opt/resmon/lbin/mon_EMSHAProvider_state.sh
sh -c    /opt/sfm/bin/restart_sfm.sh

Еще пара ограничений
1) только posix
2) операционки разные(hpus, aix, solaris, linux'ы), соответственно абсолютная позиция первого нужного символа может меняться(предполагаю)
Название: Re: Задачка для awk
Отправлено: VanDyke от 01 августа 2011, 12:36:48
ps ax -u root -U root -o args
так не?
Название: Re: Задачка для awk
Отправлено: rjhdby от 01 августа 2011, 12:40:38
Дописал.

К сожалению не прокатит
Цитировать
           -U uidlist     (UNIX Standard Only, see standards(5)) Select
                          processes whose real user ID numbers or login
                          names are given in uidlist.  (see
                          usergroupname(5)).
           -o format      (UNIX Standard Only, see standards(5)) format is a
                          comma- or space-separated list of the columns to
                          display, in the order they should be displayed.
                          (Valid column names are listed below.) A column

Название: Re: Задачка для awk
Отправлено: VanDyke от 01 августа 2011, 12:59:41
rjhdby, -o есть в POSIX, я недавно пересматривал IEEE Std 1003.1
Название: Re: Задачка для awk
Отправлено: VanDyke от 01 августа 2011, 13:03:24
Через awk попробуй так
ps -ef|grep root|grep -v grep |awk '{ for(i=8;i<=NF;i++) printf("%s ",$i);   printf("\n")  }'
Название: Re: Задачка для awk
Отправлено: rjhdby от 01 августа 2011, 13:04:00
rjhdby, -o есть в POSIX, я недавно пересматривал IEEE Std 1003.1
Не спорю, но особенности реализации ps на hpux требуют, к сожалению, выставления окружения, чтоб оно заработало. :[
export UNIX95=true
Сам пока вот так накракозябил
ps -fu $USER | sed 's/ [A-Za-z][A-Za-z][A-Za-z][ ][ 0-9][0-9] / /' | sed 's/ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] / /' | tr -s "[:space:]" | cut -f8- -d" "
Но боюсь, что один чортъ упрусь в нестандартизованный вывод ps'а
Название: Re: Задачка по обработке текста
Отправлено: VanDyke от 01 августа 2011, 13:14:26
один чортъ упрусь в нестандартизованный вывод ps'а
дык проверить что команда начинается с 8 столбика не так уж и сложно :)
Название: Re: Задачка по обработке текста
Отправлено: rjhdby от 01 августа 2011, 13:16:06
Через awk попробуй так
ps -ef|grep root|grep -v grep |awk '{ for(i=8;i<=NF;i++) printf("%s ",$i);   printf("\n")  }'
Там засада вот в этом
Цитировать
    root 24821 24814  0  Jul 29  ?         0:11 /opt/OV/bin/OpC/opcuiwww
    root 24821 24814  0  Jul  9  ?         0:11 /opt/OV/bin/OpC/opcuiwww
    root 21703 21702  1 13:20:00 ?         0:00 /opt/wbem/bin/cimprovider -l -s
Название: Re: Задачка по обработке текста
Отправлено: VanDyke от 01 августа 2011, 13:25:42
rjhdby, мне кажется легче проверить UNIX-ы на наличие -o. С разным количеством столбцов угадывать варианты можно долго :)
Название: Re: Задачка по обработке текста
Отправлено: shs от 01 августа 2011, 14:15:58
вот такой regex можно использовать для разбора:
'^\s*root\s+(?:.+)\d?\d:\d\d\s+(.+?)$'

группа захвата захватит нужную тебе часть строки, как это прилипить к вашим sed и прочим grep - не знаю ;)
Название: Re: Задачка по обработке текста
Отправлено: shs от 01 августа 2011, 14:17:14
вот такой regex можно использовать для разбора:
'^\s*root\s+(?:.+)\d?\d:\d\d\s+(.+?)$'

группа захвата захватит нужную тебе часть строки, как это прилипить к вашим sed и прочим grep - не знаю ;)
чо-то я чуток лишнего навернул, можно так:
'^\s*root\s+.+\d?\d:\d\d\s+(.+?)$'
или даже так:
'^\s*root\s+.+\d?\d:\d\d\s+(.+)$'
Название: Re: Задачка по обработке текста
Отправлено: shs от 01 августа 2011, 14:26:14
подозреваю, что должно получиться что-то типа следующего:
ps -fu $USER | sed 's/^\s*root\s+.+\d?\d:\d\d\s+\(.+\)$/\1/'
Название: Re: Задачка по обработке текста
Отправлено: rjhdby от 01 августа 2011, 15:03:02
У меня в чпуксе крайне куций sed  :dash:
\d \s он тупо не понимает. А на + реагирует неадекватно.
Название: Re: Задачка по обработке текста
Отправлено: shs от 01 августа 2011, 15:06:15
У меня в чпуксе крайне куций sed  :dash:
\d \s он тупо не понимает. А на + реагирует неадекватно.
ну замени + на *, в данном конкретном случае разницы не будет. вместо \s  напиши пробел или [ \t].
Название: Re: Задачка по обработке текста
Отправлено: rjhdby от 01 августа 2011, 15:11:51

У меня в чпуксе крайне куций sed  :dash:
\d \s он тупо не понимает. А на + реагирует неадекватно.
ну замени + на *, в данном конкретном случае разницы не будет. вместо \s  напиши пробел.
Ну в общем действительно, можно зацепиться за " [0-9][0-9]*:[0-9][0-9] "
ps -fu $USER | sed 's/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/'
работает
Название: Re: Задачка по обработке текста
Отправлено: VanDyke от 01 августа 2011, 15:17:15
ps -fu $USER | sed 's/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/'
на дебиане не сработало  :(
Название: Re: Задачка по обработке текста
Отправлено: rjhdby от 01 августа 2011, 15:20:57
ps -fu $USER | sed 's/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/'
на дебиане не сработало  :(
На что ругнулось? Или криво вывело?
Название: Re: Задачка по обработке текста
Отправлено: VanDyke от 01 августа 2011, 15:28:04
rjhdby, криво вывело.
вот кусок
?        00:00:00 [pdflush]
?        00:00:01 [pdflush]
root     13212     1  0 Apr20 tty1     00:00:00 /sbin/getty 38400 tty1
pts/0    00:00:00 ps -fu root
pts/0    00:00:00 sed s/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/
root     20246  3644  0 Jul22 ?        00:00:17 sshd: root@pts/0
root     20249 20246  0 Jul22 pts/0    00:00:00 -bash
Название: Re: Задачка по обработке текста
Отправлено: DedMagarbI4 от 01 августа 2011, 15:33:00
криво вывело
у мну вот так получилось  ::)
root@sysadmin:/home/slava# ps -fu $USER | sed 's/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/'
UID        PID  PPID  C STIME TTY          TIME CMD
?        00:00:00 init [2]         
?        00:00:00 [kthreadd]
?        00:00:00 [migration/0]
?        00:00:00 [ksoftirqd/0]
?        00:00:00 [watchdog/0]
?        00:00:00 [events/0]
?        00:00:00 [cpuset]
?        00:00:00 [khelper]
?        00:00:00 [netns]
?        00:00:00 [async/mgr]
?        00:00:00 [pm]
?        00:00:00 [sync_supers]
?        00:00:00 [bdi-default]
?        00:00:00 [kintegrityd/0]
?        00:00:00 [kblockd/0]
?        00:00:00 [kacpid]
?        00:00:00 [kacpi_notify]
?        00:00:00 [kacpi_hotplug]
?        00:00:00 [kseriod]
?        00:00:00 [kondemand/0]
?        00:00:00 [khungtaskd]
?        00:00:00 [kswapd0]
?        00:00:00 [ksmd]
?        00:00:00 [aio/0]
?        00:00:00 [crypto/0]
?        00:00:00 [ksuspend_usbd]
?        00:00:00 [khubd]
?        00:00:02 [ata/0]
?        00:00:00 [ata_aux]
?        00:00:00 [kmmcd]
?        00:00:04 [scsi_eh_0]
?        00:00:00 [scsi_eh_1]
?        00:00:00 [scsi_eh_2]
?        00:00:00 [scsi_eh_3]
?        00:00:00 [scsi_eh_4]
?        00:00:00 [usb-storage]
?        00:00:00 [usbhid_resumer]
?        00:00:00 [kjournald]
?        00:00:00 udevd --daemon
?        00:00:00 [flush-8:0]
?        00:00:00 udevd --daemon
?        00:00:00 udevd --daemon
?        00:00:00 [kpsmoused]
?        00:00:00 [phy0]
?        00:00:00 [i915]
?        00:00:00 [hd-audio0]
?        00:00:00 [firewire_sbp2]
?        00:00:00 [kjournald]
?        00:00:00 /usr/sbin/rsyslogd -c4
?        00:00:00 /usr/sbin/acpi_fakekeyd
?        00:00:00 /usr/sbin/NetworkManager
?        00:00:00 /usr/sbin/modem-manager
?        00:00:00 /usr/sbin/gdm3
?        00:00:00 /usr/lib/gdm3/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
?        00:00:00 /usr/sbin/acpid
tty7     00:01:14 /usr/bin/Xorg :0 -br -verbose -audit 0 -novtswitch -auth /var/run/gdm3/auth-for-Debian-gdm-OxLCG0/database -nolisten tcp vt7
?        00:00:00 /sbin/wpa_supplicant -u -s
?        00:00:00 /usr/sbin/apache2 -k start
?        00:00:00 /usr/sbin/cron
?        00:00:00 /usr/sbin/console-kit-daemon --no-daemon
?        00:00:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf
?        00:00:00 /usr/lib/gdm3/gdm-session-worker
?        00:00:00 /usr/lib/policykit-1/polkitd
?        00:00:00 /usr/lib/upower/upowerd
?        00:00:00 hald-runner
?        00:00:00 [kconservative/0]
?        00:00:00 /usr/sbin/kerneloops
?        00:00:00 hald-addon-input: Listening on /dev/input/event15 /dev/input/event0 /dev/input/event3 /dev/input/event2 /dev/input/event9 /dev/input/event8 /dev/input/event1 /dev/input/event14
?        00:00:00 /usr/lib/hal/hald-addon-rfkill-killswitch
?        00:00:00 /usr/lib/hal/hald-addon-leds
?        00:00:00 /usr/lib/hal/hald-addon-generic-backlight
?        00:00:00 hald-addon-storage: polling /dev/sdb (every 2 sec)
?        00:00:03 hald-addon-storage: polling /dev/sr0 (every 2 sec)
?        00:00:00 [rpciod/0]
?        00:00:00 /usr/sbin/inetd
?        00:00:00 /usr/sbin/nmbd -D
?        00:00:00 [lockd]
?        00:00:00 [nfsd4]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 [nfsd]
?        00:00:00 /usr/sbin/rpc.mountd --manage-gids
?        00:00:00 /usr/sbin/smbd -D
?        00:00:00 /usr/sbin/smbd -D
?        00:00:00 /usr/sbin/winbindd
?        00:00:00 /usr/sbin/winbindd
?        00:00:00 [kauditd]
?        00:00:00 /usr/lib/udisks/udisks-daemon
?        00:00:01 udisks-daemon: polling /dev/sr0 /dev/sdb
tty1     00:00:00 /sbin/getty 38400 tty1
tty2     00:00:00 /sbin/getty 38400 tty2
tty3     00:00:00 /sbin/getty 38400 tty3
tty4     00:00:00 /sbin/getty 38400 tty4
tty5     00:00:00 /sbin/getty 38400 tty5
tty6     00:00:00 /sbin/getty 38400 tty6
?        00:00:00 /usr/sbin/winbindd
?        00:00:00 /usr/sbin/winbindd
?        00:00:00 /usr/bin/sudo -H -S -p GNOME_SUDO_PASS -u root -- /usr/bin/x-terminal-emulator
?        00:00:00 gnome-terminal
?        00:00:00 dbus-launch --autolaunch 15f1c0477fc703affbdac6390000000e --binary-syntax --close-stderr
?        00:00:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
?        00:00:00 /usr/lib/libgconf2-4/gconfd-2
?        00:00:00 gnome-pty-helper
pts/1    00:00:00 bash
pts/1    00:00:00 ps -fu root
pts/1    00:00:00 sed s/.* [0-9][0-9]*:[0-9][0-9] \(.*\)/\1/
[/spoiler]
Название: Re: Задачка по обработке текста
Отправлено: rjhdby от 01 августа 2011, 15:34:18
ага. там TIME в другом формате. засада вопщем.

Вот так :]
ps -fu $USER | tr -s " " | cut -f8- -d" " | sed 's/.*:[0-9][0-9] \(.*\)/\1/'