ps aux
から出力を取得しようとしているので、次のようになります。
giovanni 28331 4381 0 15:43 ? 00:00:00 sshd: giovanni@pts/1
giovanni 28346 28331 0 15:43 pts/1 00:00:00 -bash
giovanni 28646 28346 0 15:43 pts/1 00:00:00 ./example.sh
ただし、Ubuntu 14.04 LTSでこのコマンドを実行すると、代わりに次の結果が得られます。
giovan+ 28331 4381 0 15:43 ? 00:00:00 sshd: giovanni@pts/1
giovan+ 28346 28331 0 15:43 pts/1 00:00:00 -bash
giovan+ 28646 28346 0 15:43 pts/1 00:00:00 ./example.sh
これらのプラス記号を削除して、代わりにユーザー名全体を表示するようにコマンドに指示するにはどうすればよいですか?
man ps
によれば、ps -aux
は「標準(UNIX)構文」を使用してシステム上のすべてのプロセスを表示するためです。出力を表示するためにユーザー定義の形式を設定する方法が見つかりませんでした。
BSD構文では、列の幅をuser:<width>
のように設定できます。以下は同じ情報を提供し、ユーザー名の列幅を20(またはその他の値)に設定します。
ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm
(非常に)長い名前の出力:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
.........................................................................................
root 3826 0.0 0.1 77828 4788 ? Ss 08:15:55 00:00:00 cupsd
lp 3831 0.0 0.0 63156 2224 ? S 08:15:56 00:00:00 dbus
lp 3832 0.0 0.0 63156 2220 ? S 08:15:56 00:00:00 dbus
root 4822 1.7 5.1 446964 210416 tty8 Ss+ 08:38:00 00:03:27 Xorg
root 4923 0.0 0.1 174652 4412 ? Sl 08:38:02 00:00:00 lightdm
tantemarievanhier 5181 0.0 0.1 544216 4796 ? Sl 08:38:08 00:00:00 gnome-keyring-d
tantemarievanhier 5228 0.0 0.0 40492 2740 ? Ss 08:38:08 00:00:00 init
tantemarievanhier 5369 0.0 0.0 41816 3064 ? Ss 08:38:09 00:00:02 dbus-daemon
tantemarievanhier 5376 0.0 0.0 10616 316 ? Ss 08:38:09 00:00:00 ssh-agent
列幅を7に設定:
ps axo user:7,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
.........................................................................................
tantem+ 6623 0.0 0.0 287228 3820 ? Sl 08:39:00 00:00:00 unity-webapps-s
tantem+ 6679 0.0 0.4 676856 18640 ? Sl 08:39:20 00:00:00 update-notifier
tantem+ 6721 0.0 0.1 541224 7056 ? Sl 08:40:20 00:00:00 deja-dup-monito
tantem+ 6743 0.0 0.5 810616 21888 ? Sl 08:41:55 00:00:00 unity-scope-hom
tantem+ 6758 0.0 0.2 717256 10352 ? Sl 08:41:55 00:00:00 unity-files-dae
tantem+ 6760 0.0 0.5 607208 22920 ? Sl 08:41:55 00:00:00 unity-scope-loa
tantem+ 6784 0.0 0.2 350676 9060 ? Sl 08:41:56 00:00:00 unity-music-dae
便宜上、次の行を~/.bashrc
に追加できます。
alias psaux='ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm'
ps aux
が「通常の」出力であるのに対し、psaux
は完全な名前バージョンを提供します。
名前列を最後の位置に移動することによって、フルネームを表示することもできます。
ps axo pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm,user
与える:
PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND USER
5181 0.0 0.1 544216 4548 ? Sl 08:38:08 00:00:00 gnome-keyring-d tantemarievanhier
5228 0.0 0.0 40492 2668 ? Ss 08:38:08 00:00:00 init tantemarievanhier
5369 0.0 0.0 41816 3032 ? Ss 08:38:09 00:00:07 dbus-daemon tantemarievanhier
USER-列の幅を設定する別のより洗練された方法があります。 USER列幅に非常に高い値を指定してコマンドを実行すると、小さなスクリプトを使用して行を再配置し、列幅を最長のユーザー名に調整できます。
そうするために
psaux_alternative.py
として保存します。~/.bashrc
に行を追加します:
alias psaux='/path/to/psaux_alternative.py`
次に、ターミナルウィンドウでpsaux
を実行すると、USER列の幅が自動で出力が表示されます。
スクリプト:
#!/usr/bin/env python3
import subprocess
command = "ps axo user:30,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm"
l = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").split("\n")
minlen = sorted(set([30-len(item.split(" ")[0]) for item in l]))[0]
for line in l:
print(line[:30-minlen]+line[30:])
同じ問題が発生しました。 psマニュアルは、WIDE-WCHAN-COLUMNについて説明しています。並列に形成されたWIDE-RUSER-COLUMNを使用したスマートトライは、望ましい結果で終わりました。
$ ps -e -o ruser=WIDE-RUSER-COLUMN