Comando para procurar programas no Linux

3

Você tem alguma idéia fácil para definir algum alias em .bashrc para encontrar algum comando que você queira procurar (quando você esqueceu seu nome) em sua máquina, visitando todos os diretórios "bin", talvez usando regex?

por exemplo,

ls /bin /sbin /usr/bin | grep program

Você tem alguma idéia de como usar o regex para pesquisar todos os diretórios bin?

    
por user unknown 12.03.2012 / 20:01

9 respostas

4

você pode usar whereis para encontrar todos os binários correspondentes ao nome que você é procurando por

> whereis -b ls
ls: /bin/ls
A opção

-b é apenas para binários, sem ela você também encontrará fontes e arquivos man pages

> whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
    
por 12.03.2012 / 20:06
3

Este funciona sem dependências externas (somente builtins de shell) e também trabalha com ash busybox.

Às vezes você não consegue lembrar como soletrá-lo exatamente, para aqueles de nós que só precisam encontrar uma correspondência aproximada, existe essa função para adicionar ao bashrc:

find_bin(){
for x in ${PATH//://*${1}* }*${1}*; do
    [ -f "$x" ] && echo $x
done
}

find_bin grep irá listar todos os binários em $ PATH com grep no nome junto com o caminho {grep, egrep, fgrep, bugreport, ...}

isso pode aceitar a seguinte sintaxe:

  • a * z - com az
  • a? z - com um < 1 caractere > z
  • a [0-9] z - com az
  • a [a-z] z - com az
  • a [A-Z] z - com az
  • a * {a, z} * z - com a .... mesmo que um [az] z

se você ocasionalmente quiser que apenas coincida com a palavra inteira e não relate egrep, fgrep ou bugreport ao digitar grep, você poderá remover os asteriscos e adicioná-los novamente na linha de comando somente onde desejar

find_bin(){
for x in ${PATH//://${1} }${1}; do
    [ -f "$x" ] && echo $x
done
}

para esta sintaxe extra é necessária para combinar os começos e finais

  • * grep - corresponderá aos comandos terminados em gre (encontrará grep, egrep e fgrep, mas não reportará erros)
  • grep - corresponderá apenas à string exata grep
  • grep * - corresponderá aos comandos que começam com grep
  • todos os padrões acima se aplicam também
por 13.03.2012 / 06:23
1

which faz exatamente isso:

which commandname
    
por 12.03.2012 / 20:03
1

Use a função bash type . É melhor que whereis , pois identificará funções construídas no bash e aliases, bem como executáveis binários. whereis é melhor porque fará algumas correspondências de padrões - type apenas encontrará o que você especificar.

Use a opção -a para mostrar todas as ocorrências do executável em seu caminho.

~$ type python
python is /usr/local/bin/python
~$ type -a python
python is /usr/local/bin/python
python is /usr/bin/python
python is /usr/local/bin/python
~$ whereis -b python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python /usr/local/bin/python2.6 /usr/local/bin/python2.5 /usr/local/bin/python2.7 /usr/local/bin/python2.7-config /usr/local/bin/python2.5-config /usr/local/bin/python2.6-config /usr/local/lib/python2.6 /usr/local/lib/python2.5 /usr/local/lib/python2.7 /usr/include/python2.4

~$ whereis -b time
time: /usr/bin/time /usr/include/time.h
~$ type -a time
time is a shell keyword
time is /usr/bin/time
    
por 14.03.2012 / 14:39
0

Para colocá-lo em seu .bashrc, um alias não é útil porque os aliases não aceitam parâmetros, mas uma função serve:

pfind () {
  for d in ${PATH//:/ }
  do
    find $d -regex $d/"$1"
  done
}

pfind '.*[ou]b.*h'

find ... -reges procura por expressões regulares para todo o caminho, então precisamos repetir $ d.

pfind deve representar o programa-find (ou o PATH find).

    
por 12.03.2012 / 21:02
0

Em bash , se você lembrar do primeiro caractere ou dois de um comando, digite <character><character><TAB><TAB> para ver a lista de todos os comandos cujo nome começa com <character><character> .

No Linux, "locate string" listará todos os arquivos e diretórios com "string" como parte de seu nome. (Você precisaria ter criado seu banco de dados primeiro, com updatedb . No CentOS, uma tarefa cron.daily executa updatedb .) Isso não lhe dirá qual deles pode ser executável; é apenas outra maneira de encontrar mais informações.

    
por 13.03.2012 / 16:29
0

Supondo que você tenha um pacote de mlocate:

locate programname
    
por 09.11.2012 / 22:19
0

Você pode usar man -k para procurar dentro da manpage de cada comando:

man -k packet


PF_PACKET (7)        - packet interface on device level.
gpgsplit (1)         - Split an OpenPGP message into packets
ip6tables (8)        - IPv6 packet filter administration
iptables (8)         - administration tool for IPv4 packet filtering and NAT
lft (1)              - print the route packets trace to network host
lft.db (1)           - print the route packets trace to network host
packet (7)           - packet interface on device level.
pcap-filter (7)      - packet filter syntax
tc-bfifo (8)         - Packet limited First In, First Out queue
tc-pfifo (8)         - Packet limited First In, First Out queue
tcptraceroute (1)    - A traceroute implementation using TCP packets
tcptraceroute.db (8) - print the route packets trace to network host
tcptraceroute.mt (1) - A traceroute implementation using TCP packets
traceproto (1)       - print the route packets trace to network host
traceproto.db (1)    - print the route packets trace to network host
traceroute (1)       - print the route packets trace to network host
traceroute-nanog (1) - print the route packets trace to network host
traceroute.db (1)    - print the route packets trace to network host
traceroute6 (1)      - print the route packets trace to network host
traceroute6.db (1)   - print the route packets trace to network host


man -k "packet limited"
tc-bfifo (8)         - Packet limited First In, First Out queue
tc-pfifo (8)         - Packet limited First In, First Out queue

Os números entre parênteses representam a seção da página man do comando, as seções 3 e 5, por exemplo, não são para comandos. É claro que você tem que considerar que, infelizmente, alguns comandos não têm uma página man.

    
por 13.03.2012 / 12:00
0
apropos program/library/related/anything really

Pesquisa as páginas de manual do seu serchword, suporte a regex incluído. Eu nunca consigo lembrar como escrever ncmpcpp, então

apropos mpd

ing Eu posso encontrar tudo mpd, incluindo ncmpcpp

    
por 26.02.2015 / 22:22