A noção de daemon está anexada a processos , não arquivos . Por esse motivo, não há sentido em "encontrar daemons no sistema de arquivos". Apenas para tornar a noção um pouco mais clara: um programa é um arquivo executável (visível na saída de ls
); um processo é uma instância desse programa (visível na saída de ps
).
Agora, se usarmos as informações que eu forneci em minha resposta , podemos encontrar daemons em execução procurando por processos que rodam sem um terminal de controle anexado a eles . Isso pode ser feito facilmente com ps
:
$ ps -eo 'tty,pid,comm' | grep ^?
O campo de saída tty
contém "?" quando o processo não tem terminal de controle.
O grande problema aqui vem quando o sistema executa um ambiente gráfico. Como os programas GUI (ou seja, o Chromium) não estão conectados a um terminal, eles também aparecem na saída. Em um sistema padrão, em que o root não executa programas gráficos, você poderia simplesmente restringir a lista anterior aos processos do root. Isso pode ser conseguido usando ps
' -U
switch.
$ ps -U0 -o 'tty,pid,comm' | grep ^?
No entanto, dois problemas surgem aqui:
- Se o root estiver executando programas gráficos, eles serão exibidos.
- Daemons em execução sem privilégios de root não. Note que os daemons que começam no tempo de boot são geralmente executados como root.
Basicamente, gostaríamos de exibir todos os programas sem um terminal de controle, mas não programas GUI . Felizmente para nós, existe um programa para listar os processos da GUI: xlsclients
! Esta resposta do slm nos diz como usá-la para listar todos os programas GUI, mas teremos que reverter isso , uma vez que queremos excluí-los. Isso pode ser feito usando a opção --deselect
.
Primeiro, criaremos uma lista de todos os programas GUI para os quais temos processos em execução. Da resposta que acabei de ligar, isso é feito usando ...
$ xlsclients | cut -d' ' -f3 | paste - -s -d ','
Agora, ps
tem uma opção -C
que nos permite selecionar pelo nome do comando. Acabamos de receber nossa lista de comandos, então vamos injetar na linha de comando ps
. Observe que estou usando --deselect
para reverter minha seleção.
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect
Agora, temos uma lista de todos os processos não-GUI. Não nos esqueçamos da nossa regra "no TTY attached". Para isso, adicionarei -o tty,args
à linha anterior para gerar o tty
de cada processo (e sua linha de comando completa):
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --deselect -o tty,args | grep ^?
O% final grep
captura todas as linhas que começam com "?", ou seja, todos os processos sem um controle tty. E ai você vai! Esta linha final dá a você todos os processos não-GUI em execução sem um terminal de controle. Observe que você ainda pode melhorar, por exemplo, com excluindo encadeamentos do kernel (que não são processos). .
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,args | grep ^?
... ou adicionando algumas colunas de informações para você ler:
$ ps -C "$(xlsclients | cut -d' ' -f3 | paste - -s -d ',')" --ppid 2 --pid 2 --deselect -o tty,uid,pid,ppid,args | grep ^?