Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Елементарен въпрос за awk


  • Subject: Re: lug-bg: Елементарен въпрос за awk
  • From: Peter Pentchev <roam@xxxxxxxxxxx>
  • Date: Mon, 19 Jul 2004 10:36:39 +0300

On Mon, Jul 19, 2004 at 08:31:29AM +0200, Nickolay Kolev wrote:
> Здравейте,
> 
> Написах си следното нещо, с което да мога да търся процеси:
> 
> #!/bin/sh
> 
> ps aux | grep -i $1 | grep -v grep | grep -v psf | awk '{FS="\t"; print 
> $1 "\t" $2 "\t" $11}'
> 
> какво прави скриптът е очевидно - показва списъка на процесите с тази 
> разлика, зе се появяват само ПИД, потребител и самата команда, 
> стартирала процеса. Лошото е, че много често тази въпросна команда 
> съдържа в себе си и интервали. Например ако съм стратирел нещо със sudo 
> отпред, то това горното ще ми покаже само sudo, но не и командата 
> по-нанатък. Мислех си, че трябва да сложа \t като разделител на awk (в 
> първия опит просто го бях оставил на разделитяля по подразбиране), но 
> пак не става, резултатът е същият.
> 
> Та как да кажа на авк да ми даде цялата команда? Демек, а оттук нататък 
> ми дай всичко останало...

Мисля, че и с awk можеше да се направи, само че в момента не мога да се
сетя точно как :(  Но можеш да се справиш малко по-добре с Perl, като го
направиш 1. с една команда (а не с три grep-а), 2. без да показва самия
процес, който търси това, което търсиш:

ps awwwfux | perl -ne 'next unless /rspawn/; split /\s+/; next if $_[0] == $$; print join(" ", @_[10..$#_])."\n"'

Или, ако го искаш в малко по-чист вид, като отделно скриптче без
hardcode-нат /rspawn/, погледни прикаченото pidof-pl :)

[roam@straylight ~]> pidof-pl pidof
roam    10164   vim bin/pidof-pl
[roam@straylight ~]> pidof-pl mys
mysql   791     /usr/local/libexec/mysqld --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/straylight.pid
root    648     /bin/sh /usr/local/bin/mysqld_safe --user=mysql --datadir=/var/db/mysql --pid-file=/var/db/mysql/straylight.pid
[roam@straylight ~]>

Защо се казва pidof-pl ли?  Ами отчасти защото такова нещо вече има: в
почти всички Linux дистрибуции би трябвало да имаш pidof в пакета
procutils или нещо такова (май някъде съм го виждал като ps-procutils),
а ако използваш някой от вариантите на BSD, погледни това, което хората
от NetBSD направиха преди време: pgrep и pkill.  Те май ще ти свършат
повече работа от pidof, защото извеждат и пълното име на програмата, не
само process ID-то.

[roam@straylight ~]> pgrep -lf mys
791 /usr/local/libexec/mysqld --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/straylight.pid
648 /bin/sh /usr/local/bin/mysqld_safe --user=mysql --datadir=/var/db/mysql --pid-file=/var/db/mysql/straylight.pid
[roam@straylight ~]>

Поздрави,
Петър

-- 
Peter Pentchev	roam@xxxxxxxxxxx    roam@xxxxxxxx    roam@xxxxxxxxxxx
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
If I had finished this sentence,

Attachment: pgpjDx7A93Y6l.pgp
Description: PGP signature



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.