Como removo as declarações de impressão "permissão negada" do programa de localização?

26

Código

find / -name netcdf

Saída

find: '/root/.dbus': Permission denied
find: '/root/.gconf': Permission denied
find: '/root/.gconfd': Permission denied
find: '/root/.gnome': Permission denied
find: '/root/.gnome2': Permission denied
find: '/root/.gnome2_private': Permission denied
    
por InquilineKea 26.08.2011 / 02:17

3 respostas

25

Essas mensagens são enviadas para o stderr, e praticamente somente essas mensagens são geralmente vistas nesse fluxo de saída. Você pode fechá-lo ou redirecioná-lo na linha de comando.

$ find / -name netcdf 2>&-

ou

$ find / -name netcdf 2>/dev/null

Além disso, se você for pesquisar o diretório-raiz (/), geralmente é bom otimizar o processo para que o find não consuma todos os recursos.

$ nice find / -name netcdf 2>&-

Isso diminui a prioridade do processo, permitindo que outros processos demorem mais tempo na CPU. Claro que se nada mais estiver usando a CPU, ela não faz nada. :) Para ser técnico, o valor de NI (visto de ps -l ) aumenta o valor de PRI. Valores mais baixos de PRI têm uma prioridade mais alta. Compare ps -l com nice ps -l .

    
por 26.08.2011 / 02:40
13

Gostaria apenas de salientar esta resposta de @Gilles em Excluir caminhos que fazem encontrar reclamações sobre permissões - Unix & Stack Exchange do Linux ; Basicamente, envolve uma construção para find que faz com que ela não desça diretórios ilegíveis e, nesse sentido, provavelmente também seja um pouco mais rápida.

Isso parece funcionar para mim:

With GNU find or any other find that supports the -readable and -executable predicates:

find / -type d ! -readable ! -executable -prune -o -type f -name netcdf -print

(Edit: tentei este comando exacto e encontrei "find: '/ var / lib / php5': Permission denied", onde tem permissões drwx-wx-wt e propriedade de root ; mas o seguinte comando não denunciou uma única permissão negada:)

ou também isto:

find / -type d ! -perm -g+r,u+r,o+r -prune -o -type f -name 'netcdf' -print

Por algum motivo, eu preciso adicionar todo o g+r,u+r,o+r (atalho para isso é a+r ), caso contrário, se um deles for deixado de fora, eu ainda recebo acessos "Permissão negada".

Aqui está um resumo de como eu vejo isso (observe o operador -a (e) em find is implícito entre dois predicados ):

find /         # find starting from path /
  -type d        # match type is directory
  ! -perm -a+r   # (and) match not permissions of 'r'ead present 
  -prune         # ignore what matched above and do not descend into it
  -o             # or (whatever didn't match above)
  -type f        # match type is file
  -name 'netcdf' # (and) match name is 'netcdf'
  -print         # print what matched above

Observe que sem o último -print , recebo alguns itens extras mostrados (que não têm nada a ver com -name 'netcdf' ); o -print garante que apenas as correspondências de nome sejam impressas (se houver).

    
por 23.03.2014 / 15:56
7

Use locate(1) :

$ locate netcdf

Ele só mostrará os arquivos que seu usuário pode ver.

    
por 26.08.2011 / 02:24

Tags