Como imprimir o número total de descritores de arquivo com índice 24

2

Como posso imprimir o número total de descritores de arquivos com o índice 24 para todos os processos em execução no Linux?

Eu tentei

$ ls /proc/*/fd 2> errors.txt > stdout.txt | grep "^24" stdout.txt | wc -l

Esta solução retorna 0 toda vez.

Eu mencionei que minha tarefa me pede para escrever um forro para resolvê-lo.

    
por laurentiupiciu 23.11.2014 / 15:52

2 respostas

4

Você poderia usar

find /proc/[0-9]*/fd/ -name 24 2> /dev/null | wc -l

Ou, se você insistir em usar ls (este deve ser um dos poucos exemplos onde é seguro fazer então):

ls /proc/[0-9]*/fd 2>/dev/null | grep -c '^24$'

Sua primeira tentativa falhou porque você estava redirecionando a saída para um arquivo ( > output.txt ), o que significa que o grep nunca seria igual, pois não tinha saída para correspondência. Você pode usar pipes ( | ) como eu fiz acima ou usar um ; ou & para separar os comandos:

ls /proc/[0-9]*/fd 2> errors.txt > stdout.txt; grep "^24" stdout.txt | wc -l
    
por 23.11.2014 / 15:57
4

Não há ponto chamando ls ou find aqui. Essa é a casca fazendo o trabalho expandindo o glob.

Apenas:

set -- /proc/[0-9]*/fd/24 && echo "$#"

Uma ressalva é que, exceto com zsh , se você obtiver 1 , você não sabe se é porque há um ou se o padrão não combinou.

Com bash , você pode fazer

shopt -s nullglob
fds=(/proc/[0-9]*/fd/24)
echo "${#fds[@]}"

Outra opção, que seria mais portável, seria usar lsof :

lsof -td24 | wc -l
    
por 23.11.2014 / 17:39