Użyj -o
flagi.
Aby wyświetlić listę tylko własnych procesów
ps -o command
Aby wyświetlić listę wszystkich procesów systemowych
ps -e -o command
Nie jest to jedyny sposób wyświetlania poleceń, mogą być drukowane z flagami wiersza poleceń lub tylko jako pliki wykonywalne (co command
robi ta opcja).
Z mojego komentarza poniżej odpowiedź:
polecenia, argumenty i cmd dają pełne polecenie. W rzeczywistości polecenia man page Stany i cmd są aliasami argumentów, z dołączonymi flagami. Comm podaje tylko nazwę egzacutable. Pseudonimy to ucmd i ucomm. Źle przeczytałem o opcjach systemu AIX, można je określić za pomocą formatu podobnego do printf,% a dla argumentów,% c dla komunikatora
Patrz man ps
uzyskać więcej informacji na temat użytkowania i dostępnych opcji formatowania
Podejście programowe byłoby nieco zbędne, ponieważ ps
już zapewnia nam opcje formatowania, ale można to zrobić awk
, co jest bardzo przydatne, gdy mamy do czynienia ze skumulowanymi danymi wyjściowymi.
ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Należy jednak pamiętać, że ten kod łamie się, jeśli nazwa użytkownika zawiera spacje, np john doe
. Można to zmienić, dodając gsub
funkcję, która usunie twoją nazwę użytkownika z ps
listy. Jeśli jednak do systemu zalogowanych jest wielu użytkowników, usunięcie wszystkich nazw użytkowników z danych wyjściowych może być trudne. W ten sposób widać, że -o
flaga jest znacznie bardziej preferowana.
Uwaga dodatkowa: sudo
nie jest konieczne wylistowanie wszystkich procesówps
ps -eo command
&ps -eo comm
? Jedyną różnicą znalazłem wcommand
wyjście było jako takie:[kthreadd]
podczas gdy wcomm
wyjście było jak ten:kthreadd
. Czy to coś znaczy?comm
jest to format AIX, gdzie podobnie jakcommand
standardowy format GNU. AIX jest kolejnym systemem podobnym do * NIX, więc można użyć tej opcji dla zapewnienia zgodności. W przeciwnym razie nie ma różnicydiff <(ps -eo comm) <(ps -eo command)
i wydaje się, że jest tam dość grzechotka, czy możesz to wyjaśnić?awk
rozwiązanie psuje się, jeśli nazwa użytkownika zawiera spacje ( tutaj ); też może po prostups aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'
?command
,args
icmd
wszystkie dają pełną kontrolę. W rzeczywistości strona man stanówcommand
icmd
są aliasyargs
, z-
flagami zawartych.comm
Podaje nazwę tylko exacutable. Pseudonimy toucmd
iucomm
. Źle przeczytałem o opcjach systemu AIX, można je tak naprawdę określić za pomocą formatu podobnego do printf,% a dla argumentów,% c dla komunikatoraBardziej ogólny sposób. Określamy kolumnę polecenia. W ten sposób nie ma znaczenia, które przełączniki są używane
ps
.Próbka wyjściowa
I co o
pstree
?Próbka wyjściowa
źródło
Znalazłem odważny sposób na osiągnięcie tego stąd
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
odwraca dane wyjściowe,ps
a następnie wycinanie może pomóc ci wytyczyć pierwsze pole (które jest ostatnie!), a następnie odwrócić je ponownie ...pracował dla mnie.
źródło
ps aux
samo będzie na liście jakoaux
.sudo
nie jest konieczne,ps
a polecenie przycina wiele poleceń, więc nie jest zbyt dokładne, jeśli chcesz pracować z kolumnami, użyjawk
go znacznie lepiej do tego zadania. W rzeczywistości dokładne polecenieps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
awk
powinien to załatwić .sudo ps
i pomyślałemawk
, że będzie to zbyt skomplikowane do tego zadania i wyszłocut
. W każdym razie, czy nie powinieneś zaktualizować swojej odpowiedzi tym kodem, aby PO mógł ją zaakceptować?ps
po prostu nie można go ślepo przetwarzać. Myślę, że jedyną bezpieczną metodą jest tutajps -e -o
.