리눅스에서 프로그램을 검색하는 명령


3

정규식을 사용하여 모든 "bin"디렉토리를 방문하여 컴퓨터에서 검색하려는 일부 명령 (이름을 잊어 버린 경우)을 찾기 위해 .bashrc에 별칭을 정의하는 쉬운 아이디어가 있습니까?

예 :

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

모든 bin 디렉토리를 검색하기 위해 정규식을 사용하는 방법을 알고 있습니까?


내가 오해하고 정규식이나 이름을 검색하지 않고 정확히 기억하지 않습니까?
사용자가 알 수 없음

답변:


4

당신은 whereis당신이 찾고있는 이름과 일치하는 모든 바이너리를 찾을 수 있습니다

> whereis -b ls
ls: /bin/ls

-b 옵션은 바이너리 전용이며 소스가 없으면 맨 페이지 파일도 찾을 수 있습니다.

> whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

3

bash 함수를 사용하십시오 type. whereis바이너리 실행 파일뿐만 아니라 bash 및 별칭에 내장 된 기능을 식별하기 때문에 보다 낫습니다 . whereis패턴 일치를 수행하기 때문에 더 좋습니다- type지정한 것을 찾으십시오.

-a옵션을 사용 하여 경로에서 모든 실행 파일을 표시하십시오.

~$ 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

이것이 저에게 가장 좋은 대답이었습니다. 변수에 대한 프로그램의 경로를 저장해야하며 다음과 같이 수행했습니다. PATH='type -p ffmpeg'(작은 따옴표를 백틱으로 바꿉니다). 고마워, 더그 해리스 내 예제가 다른 사람들에게도 도움이되기를 바랍니다. :)
arrayown

3

이것은 외부 의존성 (쉘 내장에서만)으로 작동하며 busybox ash 와도 작동합니다.

때로는 정확히 일치하는 단어를 찾는 방법을 기억할 수 없습니다. 밀접하게 일치 해야하는 사람들에게는 bashrc에 추가 할 수있는이 기능이 있습니다.

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

find_bin grep은 경로에 {grep, egrep, fgrep, bugreport, ...}와 함께 이름에 grep과 함께 $ PATH의 모든 바이너리를 나열합니다.

다음과 같은 구문을 사용할 수 있습니다.

  • a * z- az 와 함께
  • a? z- <1 문자> z
  • a [0-9] z- az 와 함께
  • A [아리조나] Z -와 AZ
  • a [AZ] z- az 와 함께
  • a * {a, z} * z-a.az와 같은 ....

grep을 입력 할 때 전체 단어 만 일치하고 egrep, fgrep 또는 bugreport를보고하지 않기를 원하는 경우 별표를 제거하고 원하는 위치에서만 명령 줄에 다시 추가 할 수 있습니다.

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

이 시작과 끝을 일치시키기 위해 하나의 추가 구문이 필요합니다.

  • * grep-gre로 끝나는 명령과 일치합니다 (grep, egrep 및 fgrep는 있지만 버그보고는 없음)
  • grep-정확한 문자열 grep 과만 일치합니다
  • grep *-grep로 시작하는 명령과 일치합니다
  • 위의 모든 패턴도 적용됩니다

find_bin "[aeiou]b.*"``ubuntu-bug ''또는``ebrowse ''를 찾지 못했습니다. 스크립트는 AFAIK, 글 로빙하지 정규 표현식에 사용하지만, 난 정말`$를 이해하지 못하는 {PATH // : // * $ {1} *} * $ {1} *`
알 수없는 사용자

op는 " 정규식을 사용하고 있을 것 "이라고 말했다 . 파일 이름의 경우 글 로빙 시간이 99 %이면 충분합니다. 다른 솔루션에는 셸에서 사용할 수없는 도구가 필요합니다. 예를 들어 내 상자에는 위치가 없지만 거의 모든 셸에서 작동하는 내장 기능을 사용하지만 $ 1 유형을 추가하여 bashrc의 별명 또는 함수. $ {PATH // : // * $ {1} *} * $ {1} *는 하위 문자열 조작이며 PATH의 ':'을 "* [첫 번째 인수] * space"로 바꿉니다. 끝에 콜론이 없기 때문에 필요하므로 ...에 사용할 수있는 무언가를 넣었습니다.
technosaurus

설명은 +1입니다. 이제 표현을 이해합니다.
사용자가 알 수 없음


0

.bashrc에 넣으려면 별칭이 매개 변수를 사용하지 않기 때문에 별칭이 유용하지 않지만 함수는 다음을 수행합니다.

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

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

find ... -reg 전체 경로에 대한 정규 표현식 검색을 정의하므로 $ d를 반복해야합니다.

pfind 프로그램 찾기 (또는 PATH 찾기)를 나타냅니다.


공백이있는 디렉토리가있는 경우 더 안전한 반복 방법은 다음과 같습니다 IFS=:; for dir in $PATH; do ...; done. 또한 구문 분석 대신 lsglobbing 디렉토리를 사용하십시오. echo *"$1"*(정규 표현식은 아닙니다.
glenn jackman 23시 43 분

위의 명령에서 echo $ d / *는 하나의 파일이 정규식과 독립적인지 여부와 상관없이 디렉토리의 모든 항목을 출력합니다. 일반적으로, 나는 ls를 사용하는 것을 옹호하므로 여기에서도 시도했다-find는 훌륭한 해결책이다. (보통 ~ / bin 아래에 디렉토리가 없다면, 경로 뒤에 find 매개 변수에 -maxdepth 1을 추가하십시오.
user 알 수없는

0

에서 bash명령의 첫 문자 나 두 문자를 기억하면 <character><character><TAB><TAB>이름이로 시작하는 모든 명령 목록을 보려면을 입력 하십시오 <character><character>.

Linux에서 "locate string"은 이름의 일부로 "string"을 가진 모든 파일과 디렉토리를 나열합니다. (먼저 DB를 구축해야합니다 updatedb. CentOS에서는 cron.daily작업이 실행됩니다 updatedb.) 실행 가능한 데이터베이스를 알려주지는 않습니다. 더 많은 정보를 찾는 또 다른 방법 일뿐입니다.


0

이동 패키지가 있다고 가정합니다.

locate programname

0

man -k를 사용하여 각 명령의 맨 페이지 내에서 검색 할 수 있습니다.

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

괄호 안의 숫자는 명령 매뉴얼 페이지의 섹션을 나타냅니다. 예를 들어 섹션 3과 5는 명령이 아닙니다. 물론 슬프게도 일부 명령에는 매뉴얼 페이지가 없다는 것을 고려해야합니다.


0
apropos program/library/related/anything really

Serchword에 대한 맨 페이지를 검색하고 정규식 지원이 포함되어 있습니다. 나는 ncmpcpp를 철자하는 방법을 결코 기억할 수 없다.

apropos mpd

ing 나는 ncmpcpp를 포함하여 모든 mpd를 찾을 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.