我是 ubuntu linux 新手,遇到了一个小问题:我需要编写一个 shell 脚本来显示特定用户在后台启动的进程。用户名是一个位置参数。我将不胜感激。
答案1
这个答案解释了一些基础知识,并提供了参考。您仍然需要做一些研究并付出一些努力来根据实际需求进行调整。
首先,让我们从一些基本术语开始:Bash 是 Ubuntu 的默认命令行解释器。这意味着 bash 脚本由您的“常规”命令组成,就像您要通过在终端中编写每个命令来执行它们一样(甚至启动程序),还有一些允许您自动执行或重复执行操作的功能。
每个脚本都必须以操作系统应使用哪种解释器的定义开始。对于 bash 来说,它将是:#!/bin/bash
我们将使用的命令带有ps
一些附加参数。
来自ps
手册页:
ps displays information about a selection of the active processes.
If you want a repetitive update of the selection and the displayed
information, use top(1) instead.
您可以ps
在此处阅读有关我们将要使用的参数的更多信息:PS(1) - Linux 手册页
要搜索命令的输出,我们将使用grep
,它允许您搜索特定的字符串或模式。有关 grep 的更多信息,请参见:grep(1) - Linux 手册页。
脚本本身非常短(命令和参数):
#!/bin/bash
ps -aux |grep $1
答案2
下一个命令将显示someuser
在后台运行的进程:
ps -U someuser -l -H | grep " S "
在哪里
-l Long format. The -y option is often useful with this.
-H Show process hierarchy (forest).
grep " S "
将仅过滤后台进程
man ps
如果您想将其用作脚本,请创建一个文件:
nano procs.sh
内容如下:
#!/bin/bash
ps -U $1 -l -H | grep " S "
或下一个:
ps S -l -u $1
打开终端:
通过以下方式允许其执行:
chmod +x procs.sh
运行:
./procs.sh someuser
user@ubuntu2004:~$ touch procs.sh
user@ubuntu2004:~$ echo 'ps -U $1 -l -H | grep " S "' > procs.sh
user@ubuntu2004:~$ cat procs.sh
ps -U $1 -l -H | grep " S "
user@ubuntu2004:~$ chmod +x procs.sh
user@ubuntu2004:~$ ./procs.sh user
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 1000 1677 1634 0 80 0 - 43863 poll_s tty2 00:00:00 gdm-x-session
4 S 1000 1699 1677 4 80 0 - 129191 ep_pol tty2 00:00:08 Xorg
0 S 1000 1753 1677 0 80 0 - 50570 poll_s tty2 00:00:00 gnome-session-b
touch procs.sh
创建一个空文件,procs.sh
文件名为
user@ubuntu2004:~$ echo 'ps -U $1 -l -H | grep " S "' > procs.sh
将ps -U $1 -l -H | grep " S "
命令发送到procs.sh
文件中。可以使用文本编辑器手动添加
关于位置参数:
位置参数是调用脚本时提供给脚本的参数。它可以从 到
$1
。$N
当 N 由多位数字组成时,必须将其括在括号中,如${N}
。变量$0
是basename
调用程序时的 。
$1
将代表第一个脚本的参数,
$2
将代表第二个脚本的参数,依此类推
在脚本中,您将第一个参数称为 a$1
并在命令中用作myscript firstargument
。 Bash 将$1
用firstargument
单词替换。