Я новичок в ubuntu linux, и у меня небольшая проблема: Мне нужно написать сценарий оболочки, который отображает процессы, запущенные в фоновом режиме определенным пользователем. Имя пользователя - это позиционный параметр. Буду очень признательна.
Этот ответ объясняет некоторые из основ и имеет некоторые ссылки. Вам все еще нужно будет провести некоторое исследование и приложить некоторые усилия, чтобы приспособить его к вашим реальным потребностям.
Для начала давайте начнем с некоторой базовой терминологии: Bash является интерпретатором командной строки по умолчанию для Ubuntu. Это означает, что скрипты bash состоят из ваших «обычных» команд, как если бы вы выполняли их, записывая каждую команду в терминале (даже запуская программу), и некоторые функции, которые позволяют вам автоматизировать или повторять действия.
Каждый сценарий должен начинаться с определения типа интерпретатора, который должна использовать операционная система. Для bash это будет: #! / bin / bash
Команда, которую мы будем использовать, это пс
с некоторыми дополнительными параметрами.
Со страницы руководства пс
:
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
The next command will show you processes running for someuser
in background:
ps -U someuser -l -H | grep " S "
where
-l Long format. The -y option is often useful with this.
-H Show process hierarchy (forest).
grep " S "
will filter only background processes
For reference, use this, this and
man ps
If you want to use it as a script, then create a file:
nano procs.sh
with the next content:
#!/bin/bash
ps -U $1 -l -H | grep " S "
or the next:
ps S -l -u $1
Open terminal:
Allow its execution by:
chmod +x procs.sh
Run it:
./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
creates an empty file with procs.sh
file name
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
являетсябазовым именем
программы в том виде, в котором она была вызвана.
$ 1
будет соответствовать параметру первого скрипта
, $ 2
будет означать параметр второго скрипта
и т. д.
В скрипте первый аргумент вызывается как $ 1
и используется в команде как первый аргумент myscript
. Bash заменит $ 1
словом из первого аргумента
.