Altere o padrão para que seja uma expressão regular que não corresponda ao texto literal.
ps -ef | grep [s]shd
# ps -ef | grep gre
root 15067 63614 0 11:03 pts/0 00:00:00 grep --color=auto gre
Outro exemplo
# ps -ef | grep sshd
root 1186 1 0 Jul26 ? 00:00:00 /usr/sbin/sshd -D
root 15439 63614 0 11:05 pts/0 00:00:00 grep --color=auto sshd
Como posso parar o comando grep sendo encontrado sozinho e não retornado como um campo?
A melhor maneira é usar pgrep
para essa tarefa. Parece estar disponível na maioria dos sistemas nos dias de hoje.
Existem várias maneiras, mais ou menos hacky e desajeitadas. Meu favorito é inserir uma barra invertida dupla antes de uma letra na minha string de pesquisa:
ps -ef | grep ss\hd
O \\ é interpretado como \ pelo shell e \ h é interpretado como equivalente a 'h' pelo grep. Por isso, está efetivamente procurando por 'sshd' como antes. No entanto, seu próprio comando string não contém mais 'sshd', ele contém 'ss \ hd', então ele não corresponde a si mesmo.
Quando disponível, use apenas pgrep
que foi criado para resolver esse problema, por exemplo:
ps -f $(pgrep sshd)
Este método é mais limpo do que as soluções alternativas geralmente sugeridas.
O que você precisa é de ps -e | grep sshd
( ps -ef
está listando processos e seus argumentos, ps -e
lista apenas os processos).
ps -fCsshd
Isso é provavelmente tudo que você precisa em um sistema Linux.
Você pode usar o próprio grep para evitar esse resultado:
ps -ef|grep your_search_chain|grep -v grep
Da mesma forma que o Andrew, você pode usar []:
ps -ef |grep [s]shd
Ele será considerado como um regex BRE simples e não corresponderá a si próprio. Considero menos intrusivo do que as barras invertidas, pelas quais você terá que se preocupar com "qual intérprete as levará em consideração primeiro".
Tags grep