Wyświetlanie pełnego wyniku polecenia PS


163

Kiedy uruchamiam ps -auxpolecenie na moim serwerze linuxowym, z którym łączyłem się za pomocą putty, kilka procesów jest zbyt długich, aby zmieścić się w bieżącej szerokości okna. Czy jest alternatywa?

-- Aktualizacja --

Przepraszam, że obniżyłem ocenę, myślałem, że inni też nie uznają odpowiedzi za przydatną, więc obniżyłem ocenę.

Oto informacje, o które prosiłeś.

hadoop-user@hadoop-desk:~$ echo $TERM
xterm

hadoop-user@hadoop-desk:~$ stty -a
speed 38400 baud; rows 47; columns 158; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

hadoop-user@hadoop-desk:~$ echo $COLUMNS
158

Poza tym podałeś bardzo mało informacji, więc nie powinieneś zanegować wszystkich odpowiedzi, które otrzymałeś do tej pory. Próbujemy Ci pomóc. Należy zakładać wyjście echo $TERM, stty -aoraz echo $COLUMNSw swoim pytaniu.
Alok Singhal

Spróbuj stty ocrnli / lub stty sane?
Alok Singhal

29
ps axuwwTaka jest odpowiedź;) Przynajmniej dla mnie. Podwójni wwto zrobili.
brutuscat

Odpowiedzi:


145

Jest prawdopodobne, że używasz pagera, takiego jak lesslub mostponieważ dane wyjściowe ps auxsą dłuższe niż ekranowe. Jeśli tak, poniższe opcje spowodują (lub wymuszą) zawijanie długich wierszy zamiast ich obcięcia.

ps aux | less -+S

ps aux | most -w

Jeśli użyjesz jednego z poniższych poleceń, wiersze nie zostaną zawinięte, ale możesz użyć klawiszy strzałek lub innych klawiszy ruchu, aby przewijać w lewo iw prawo.

ps aux | less -S    # use arrow keys, or Esc-( and Esc-), or Alt-( and Alt-) 

ps aux | most       # use arrow keys, or < and > (Tab can also be used to scroll right)

Linie są zawsze zawijane dla morei pg.

Gdy ps auxjest używana w potoku, wopcja jest niepotrzebna, ponieważ psużywa szerokości ekranu tylko wtedy, gdy wyjście jest kierowane do terminala.


21
Należy pamiętać, że w Linuksie nadal istnieje ograniczenie 4096 znaków zakodowanych na
stałe

3
@MarianoPaniga: Uratowałeś mi życie tym komentarzem.
stackular

większość? masz na myśli więcej
Mike Furlender

@MikeFurlender: Nie, mostto kolejny pager. Dodałem link w mojej odpowiedzi.
Wstrzymano do odwołania.

@DennisWilliamson Twoje oświadczenie, że wnie jest potrzebne, gdy używasz potoku, wydaje się być zależne od systemu. Zarówno w openSUSE Leap 15.0, jak i Ubuntu 18.04 polecenia takie jak ps aux | grep <something>działają na wyjściu psobciętym przez szerokość terminala.
pkeller

149

Używając auxwwflag, zobaczysz pełną ścieżkę do wyjścia zarówno w oknie terminala, jak i ze skryptów powłoki.

darragh@darraghserver ~ $uname -a
SunOS darraghserver 5.10 Generic_142901-13 i86pc i386 i86pc

darragh@darraghserver ~ $which ps
/usr/bin/ps<br>

darragh@darraghserver ~ $/usr/ucb/ps auxww | grep ps
darragh 13680  0.0  0.0 3872 3152 pts/1    O 14:39:32  0:00 /usr/ucb/ps -auxww
darragh 13681  0.0  0.0 1420  852 pts/1    S 14:39:32  0:00 grep ps

ps auxwyświetla wszystkie procesy wykonywane przez wszystkich użytkowników. Zobacz man psszczegóły. wwFlaga ustawia nieograniczoną szerokość.

-w         Wide output. Use this option twice for unlimited width.
w          Wide output. Use this option twice for unlimited width.

Odpowiedź znalazłem na następującym blogu:
http://www.snowfrog.net/2010/06/10/solaris-ps-output-truncated-at-80-columns/


10
Jest to lepsza odpowiedź niż obecnie akceptowane rozwiązanie, ponieważ nie wszystkie systemy (wbudowany linux) zawierają „większość”, „więcej” lub „mniej” pagerów.
frakman1

lubps auxf > ps.log
Marslo


64

Wystarczy rzucić go na kota, który automatycznie zawija linę

ps aux | cat

możesz rozwinąć, ale więcej.
MZaragoza

10
Dobre rozwiązanie dla lekkich dystrybucji Linuksa, takich jak BusyBox, gdzie zaawansowane narzędzia nie są dostępne :)
Lion

łatwe do zapamiętania!
fzN

Bardzo proste. catpolecenie jest na każdym polu nix.
Ligemer


11

Jeśli ręcznie określasz format wyjściowy, musisz również upewnić się, że argsopcja znajduje się na końcu listy pól wyjściowych, w przeciwnym razie zostanie obcięta.

ps -A -o args,pid,lstart daje

/usr/lib/postgresql/9.5/bin 29900 Thu May 11 10:41:59 2017
postgres: checkpointer proc 29902 Thu May 11 10:41:59 2017
postgres: writer process    29903 Thu May 11 10:41:59 2017
postgres: wal writer proces 29904 Thu May 11 10:41:59 2017
postgres: autovacuum launch 29905 Thu May 11 10:41:59 2017
postgres: stats collector p 29906 Thu May 11 10:41:59 2017
[kworker/2:0]               30188 Fri May 12 09:20:17 2017
/usr/lib/upower/upowerd     30651 Mon May  8 09:57:58 2017
/usr/sbin/apache2 -k start  31288 Fri May 12 07:35:01 2017
/usr/sbin/apache2 -k start  31289 Fri May 12 07:35:01 2017
/sbin/rpc.statd --no-notify 31635 Mon May  8 09:49:12 2017
/sbin/rpcbind -f -w         31637 Mon May  8 09:49:12 2017
[nfsiod]                    31645 Mon May  8 09:49:12 2017
[kworker/1:0]               31801 Fri May 12 09:49:15 2017
[kworker/u16:0]             32658 Fri May 12 11:00:51 2017

ale ps -A -o pid,lstart,argsdostajesz pełną linię poleceń:

29900 Thu May 11 10:41:59 2017 /usr/lib/postgresql/9.5/bin/postgres -D /tmp/4493-d849-dc76-9215 -p 38103
29902 Thu May 11 10:41:59 2017 postgres: checkpointer process   
29903 Thu May 11 10:41:59 2017 postgres: writer process   
29904 Thu May 11 10:41:59 2017 postgres: wal writer process   
29905 Thu May 11 10:41:59 2017 postgres: autovacuum launcher process   
29906 Thu May 11 10:41:59 2017 postgres: stats collector process   
30188 Fri May 12 09:20:17 2017 [kworker/2:0]
30651 Mon May  8 09:57:58 2017 /usr/lib/upower/upowerd
31288 Fri May 12 07:35:01 2017 /usr/sbin/apache2 -k start
31289 Fri May 12 07:35:01 2017 /usr/sbin/apache2 -k start
31635 Mon May  8 09:49:12 2017 /sbin/rpc.statd --no-notify
31637 Mon May  8 09:49:12 2017 /sbin/rpcbind -f -w
31645 Mon May  8 09:49:12 2017 [nfsiod]
31801 Fri May 12 09:49:15 2017 [kworker/1:0]
32658 Fri May 12 11:00:51 2017 [kworker/u16:0]

9

możesz ustawić format wyjściowy, np. aby zobaczyć tylko polecenie i identyfikator procesu.

ps -eo pid,args

zobacz stronę podręcznika systemowego ps, aby uzyskać więcej informacji o formacie wyjściowym. alternatywnie możesz użyć opcji -wlub --width n.

Jeśli wszystko inne zawiedzie, oto kolejne obejście (tylko po to, aby zobaczyć długie cmds)

awk '{ split(FILENAME,f,"/") ; printf "%s: %s\n", f[3],$0 }' /proc/[0-9]*/cmdline

1
zmień kolejność i spróbuj ponownie, pid, args
ghostdog74

3

Przepraszam, że spóźniłem się na imprezę, ale właśnie znalazłem to rozwiązanie problemu.

Linie są obcięte, ponieważ ps nalega na użycie wartości $ COLUMNS, nawet jeśli wyjście nie jest w tym momencie ekranem. Co jest błędem, IMHO. Ale łatwe do obejścia, po prostu spraw, by ps pomyślał, że masz super szeroki ekran, tj. Ustaw kolumny COLUMNS wysoko na czas trwania polecenia ps. Przykład:

$ ps -edalf                 # truncates lines to screen width
$ COLUMNS=1000 ps -edalf    # wraps lines regardless of screen width

Mam nadzieję, że nadal komuś się to przyda. Wszystkie inne pomysły wydawały się zbyt skomplikowane :)



1

Jeśli szukasz greppolecenia z potokiem z ps aux, automatycznie zawinie tekst. Użyłem tutaj wielu innych odpowiedzi, ale czasami, jeśli szukasz czegoś konkretnego, miło jest po prostu użyć grepi wiesz, że zawija linie.

Na przykład ps aux | grep ffmpeg.



0

Dowody na obcinanie, o których wspominali inni (osobisty przykład)

foo=$(ps -p 689 -o command); echo "$foo"

COMMAND
/opt/conda/bin/python -m ipykernel_launcher -f /root/.local/share/jupyter/runtime/kernel-5732db1a-d484-4a58-9d67-de6ef5ac721b.json

To ^^ przechwytuje ten długi wynik w zmiennej W przeciwieństwie do

ps -p 689 -o command

COMMAND
/opt/conda/bin/python -m ipykernel_launcher -f /root/.local/share/jupyter/runtim

Ponieważ próbowałem tego z notebooka Docker jupyter, musiałem oczywiście uruchomić to z hukiem.

!foo=$(ps -p 689 -o command); echo "$foo"

Zaskakująco jupyter notebooki pozwala Ci to osiągnąć! Ale cieszę się, że obraźliwy notatnik zajmuje całą moją pamięć = D

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.