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

  • Essa não é uma descrição correta de /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.

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órios find (GNU findutils) 4.7.0-git. Portanto, pelo menos com minha versão do GNU find, ele precisa da bandeira -L. Não tenho certeza sobre como BSD find 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 …

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *