Desejo pesquisar arquivos usando o comando grep
no diretório /var/run
/var/run
armazena os processos em execução no sistema e possui arquivos com pid
. Eu quero obter uma lista de todos os arquivos com a extensão pid
.
Comando que estou usando sudo grep -nr "*.pid" .
(estou executando este comando do diretório /var/run
)
Não mostra saída. Estou usando o Ubuntu 14.04 LTS.
Comentários
Resposta
TL; DR : grep
é a ferramenta errada, use find
com as opções corretas
Se você stat /var/run
, descobrirá rapidamente que /var/run
é um link simbólico para /run
diretório.
$ stat /var/run File: /var/run -> /run Size: 4 Blocks: 0 IO Block: 4096 symbolic link Device: 801h/2049d Inode: 696874 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-02-07 13:17:01.225178554 +0800 Modify: 2017-12-18 20:44:12.898113636 +0800 Change: 2017-12-18 20:44:12.898113636 +0800
Então você realmente precisa do diretório /run
. para pesquisar arquivos com um nome de arquivo específico, você precisa do find
comando:
$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid
Porque alguns arquivos nesse diretório pertencem a root ou outros usuários do sistema, você pode precisar usar esse comando com sudo
.
Como alternativa , você pode usar a sinalização -L
para permitir os seguintes links simbólicos e chamar find
em /var/run
:
$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid
Observe também que grep
é a ferramenta errada para o trabalho. grep
é para pesquisar padrões de texto dentro de arquivos de texto, não em seus nomes de arquivo.
Você também mencionou:
/ var / run armazena os processos em execução no sistema e possui arquivos com extensão pid
Isso está incorreto. As informações do processo pertencem a /proc
. Os arquivos .pid
são usados simplesmente por alguns programas para evitar a execução de várias cópias do mesmo processo (bem, uma das maneiras possíveis de usar esses arquivos). Veja esta postagem stackoverflow para referência, bem como esta resposta altamente votada em unix.se. Embora o diretório pertença ao usuário root, não presuma que é apenas para aplicativos de inicialização e daemon; scripts iniciados com permissões de root por usuário podem gravar no diretório com a mesma facilidade.
Comentários
- Usando
/var/run/
evitará a necessidade de-L
. Também tenha em mente que o Ubuntu 14 LTS usa o Upstart, e o que realmente impede que várias cópias do mesmo programa sejam executadas como vários processos é o Upstart sabendo não iniciá-los. - @JdeBP Desculpe,
find /var/run
sozinho não ' não funciona no meu caso.find --version
relatóriosfind (GNU findutils) 4.7.0-git
. Portanto, pelo menos com minha versão do GNUfind
, ele precisa da bandeira-L
. Não tenho certeza sobre como BSDfind
lida com as coisas. É bom saber que cerca de 14.04 Ubuntu ' s recurso Upstart, embora isso não ' ajude com scripts que desejam evitar várias cópias de si mesmo em execução, pelo menos no askubuntu, sugerimos usar arquivos.pid
para isso. - Você lê rapidamente o que escrevi. Leia novamente devagar e observe a seqüência exata de caracteres. (-:
- @JdeBP Oh … Adicionar barra final funciona …
/var/run
. Na melhor das hipóteses, você está tendo o mal-entendido de que os arquivos PID são uma necessidade, quando na verdade eles são um mecanismo perigoso e profundamente falho de que o mundo está em baixa -long último, finalmente aprendendo a sabedoria de se livrar de.