리눅스에서 프로그램을 검색하는 명령 일부 명령 (이름을 잊어 버린 경우)을 찾기

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

예 :

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

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



답변

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

> whereis -b ls
ls: /bin/ls

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

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

답변

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

답변

이것은 외부 의존성 (쉘 내장에서만)으로 작동하며 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로 시작하는 명령과 일치합니다
  • 위의 모든 패턴도 적용됩니다

답변

which 정확히 그렇게 :

which commandname

답변

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

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

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

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

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


답변

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

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


답변

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

locate programname