Skrypt bash zliczanie procesów unix

0

otóż napisalem taki skrypt:

#!/bin/bash
for user in `ps -Af | tr -s ' ' | cut -f1 -d' ' | sort | uniq | grep -v UID`; do
        echo -e "$user":
        i=1
        for process in `ps -fu "$user" | tr -s ' ' | cut -f8 -d' ' | grep -v CMD`; do
                echo "$i". "$process"
                i=$((i+1))
        done
        echo 
done 

Chciałbym teraz, żeby zamiast wypisywać wszystkie procesy userów wypisywać tylko top5 procesów z największą liczbą odpalonych instancji? Ma ktoś jakiś pomysł?

0

pełna odpowiedź to nie będzie, ale za bardzo kombinujesz. zobacz co daje:

ps -A -o user,comm --sort user,comm

oraz

ps -A -o user,comm --sort user,comm | uniq -c
0
Azarien napisał(a)

pełna odpowiedź to nie będzie, ale za bardzo kombinujesz. zobacz co daje:

ps -A -o user,comm --sort user,commoraz
ps -A -o user,comm --sort user,comm | uniq -c

Może kombinuję za bardzo, ale nie wiem jak to łatwiej zrobić. Za zadanie mam wypisanie wszystkich userów z aktywnym przynajmniej 1 procesem a następnie zsumować powtarzające się procesy i wypisać 5 które mają najwięcej instancji.

0

wypisanie wszystkich userów z aktywnym przynajmniej 1 procesem

ps -A h -o user --sort user|uniq

wypisać 5 które mają najwięcej instancji

user image

0

Jestem początkujący w bashu:

ps: illegal option -- -
ps: ort is an invalid non-numeric argument for -s option
0
Azarien napisał(a)

wypisanie wszystkich userów z aktywnym przynajmniej 1 procesem

ps -A h -o user --sort user|uniq

wypisać 5 które mają najwięcej instancji

user image</quote>
Dla każdego usera mam oddzielnie sumować procesy, ale bardzo mi już pomogłeś. Dziękuję

0

Jestem początkujący w bashu:
ja też. ale znam takie fajne polecenie: man ;-)

0
Azarien napisał(a)

Jestem początkujący w bashu:
ja też. ale znam takie fajne polecenie: man ;-)

Tyle, że ja dopiero dziś zacząłem to rozkminiać, bo zadanie do 13.30 muszę wysłać prowadzącemu:P

0
#!/bin/bash
for user in `ps -A -o ruser | tail -n +2 | sort | uniq` ; do
	echo -e "$user":
	ps -u "$user" -o command | tail -n +2 | cut -f1 -d ' ' | sort | uniq -c | sort -rg | head -5
	echo
done

ps -o ruser pokaż tylko nazwy userów
ps -o command pokaż tylko komendę
tail -n +2 omiń pierwszą linię
cut -f1 -d ' ' bierzemy samą komendę (to co przed spacją), bez parametrów wywołania (nienajlepszy sposób, zakłada brak spacji w nazwie komendy)
uniq -c wypisz liczbę powtórzeń przy każdej linii
sort -rg odwrócona kolejność sortowania (r), sortowanie numeryczne (g)
head -5 pierwsze 5 linijek

0
adf88 napisał(a)
#!/bin/bash
for user in `ps -A -o ruser | tail -n +2 | sort | uniq` ; do
	echo -e "$user":
	ps -u "$user" -o command | tail -n +2 | cut -f1 -d ' ' | sort | uniq -c | sort -r | head -5
	echo
done

ps -o ruser pokaż tylko nazwy userów
ps -o command pokaż tylko komendę
tail -n +2 omiń pierwszą linię
cut -f1 -d ' ' bierzemy samą komendę (to co przed spacją), bez parametrów wywołania
uniq -c wypisz liczbę powtórzeń przy każdym elemencie
sort -r odwrócona kolejność sortowania
head -5 pierwsze 5 linijek

usage: tail [+/-[n][lbc][f]] [file]
tail [+/-[n][l][r|f]] [file]

0

spróbuj dać tail -n+2 zamiast tail -n +2

0

jak się doda parametr h (bez minusa) do ps, to nie trzeba będzie omijać nagłówka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1