Есть ли способ получить список запущенных процессов в системе Linux за вычетом тех, которые по умолчанию запущены в каждой системе (т.е.только те, которые были установлены / выполнены постфактум). Можно ли это сделать с помощью ps или другого подобного инструмента?
Спасибо
По умолчанию системные процессы вы, вероятно, имеете в виду «демонов», таких как httpd, nfsd и т. Д. Столбец TTY в выводе ps: ?
для демонов. Поэтому, чтобы их исключить, вам, вероятно, потребуется написать сценарий для этого в оболочке / perl, в зависимости от того, что вы знаете.
Здесь я предполагаю, что tty - это столбец 2, поэтому в зависимости от результатов вы можете это изменить.
Perl:
#!/usr/bin/perl
use strict;
use warnings;
open (PS,'ps aux |') or die "command can't execute $!"; # Runs command using pipe
while(<PS>){ # Run through pipe line by line
my $ttycol=(split) [2]; # get tty column from ps output
if($ttycol ne '?'){ # If col is ? then it's a daemon
print $_; # if not print
}
}
close(PS);
затем просто запустите его как "perl script.pl".
Оболочка:
При участии лежать, то же самое может быть достигнуто в сценарии оболочки как
ps -ef | awk '$6 != "?" {print}'
Я также собираюсь предположить, как и в предыдущем ответе, что вы имеете в виду демонов «по умолчанию», и, следовательно, они будут работать на tty ?. В этом случае следующие должен работать, хотя, к сожалению, я не могу протестировать его здесь, на работе.
ps aux | grep "[:space;]+?[:space:]+"
ps aux
предоставляет вам все процессы в системе в стандартном формате BSD, передаваемые по конвейеру grep -v
который будет соответствовать всем строкам, НЕ включая строку регулярного выражения ([:space;]+?[:space:]+
). Regex ищет любое количество пробелов, за которыми следует один '?' за которым следует любое количество пробелов. (теоретически этому описанию не должно быть ничего, кроме записей в столбце, например tty.)
Быстро, грязно и от относительного новичка, но вот оно.