와일드카드를 사용하여 Linux 명령을 찾는 방법은 무엇입니까? 및*[중복]

와일드카드를 사용하여 Linux 명령을 찾는 방법은 무엇입니까? 및*[중복]

ls내 Linux 컴퓨터에서는 다음으로 시작하는 명령을 찾을 수 있습니다.

$ ls<TAB-key>

나는이 결과를 얻습니다

ls           lsb_release  lscpu        lshw         lsipc        lslogins     lsmod        lsof         lspcmcia     lss16toppm   
lsattr       lsblk        lsdiff       lsinitramfs  lslocks      lsmem        lsns         lspci        lspgpot      lsusb   

이제 lsmod다른 명령이 무엇인지 알고 싶습니다.

내가 아는 한 다음과 $ man lsmod같은 다른 명령이 있습니다.

SEE ALSO
       insmod(8), modprobe(8), modinfo(8) depmod(8)

mod string하지만 터미널에서 사용할 명령을 찾을 수 없습니다와일드카드. 어떤 상황에서든 달성하는 방법을 안내해 주세요.유닉스와 리눅스디스트로

답변1

일부 쉘에는 이를 지원하는 기능이 내장되어 있습니다.

다루기 힘든

zsh쉘의 자체 검사 내장 명령 중 다수는 -m패턴 m일치를 위한 인수를 사용합니다. 이것은 whence다른 쉘 사용자(csh 사용자와 동일, (표준) SysV 쉘 사용자)의 편의를 위해 제공되는 명령 및 변형을 식별하고 내부 해시를 조작하기 위한 경우(ksh에서 복사 및 확장)입니다. which표준 내장 명령 표 , 명령 경로 테이블을 포함합니다.whence -ctypewhence -vhash

whence -m '*mod*'
  type -m '*mod*'
 which -m '*mod*'
  hash -m '*mod*'

처음 3개는 내장 함수, 함수, 키워드 및 별칭도 표시합니다. for 와 같은 -p명령에 대한 제한 사항을 추가합니다 .$PATHhash

또는 다음을 사용하여 일치하는 실행 파일 $PATH( $path배열에 매핑됨)을 수동으로 찾을 수 있습니다.

print -rC1 -- $^path/*mod*(DN-*)

일부 내장 명령 외에도 zsh는 내부 검사(및 완료를 돕기 위해)를 위해 일부 특수 변수에 일부 내부 상태 및 캐시 데이터를 노출합니다. 예를 들어 명령의 해시 테이블과 해당 경로는 $commands특수 연관 배열에 노출되므로 다음을 사용하여 해당 키를 볼 수 있습니다.

print -rC1 -- ${(kM)commands:#*mod*}

패턴 일치는 ${(M)array:#pattern}연산자를 사용하여 수행됩니다.

여기에서 일반 완성 외에 와일드카드 일치를 시도하도록 완성 시스템을 구성할 수도 있습니다. 예를 들어, 최소한:

zstyle ':completion:*' completer _complete _match
autoload -Uz compinit
compinit

~/.zshrc다음을 입력하세요.

$ *mod*<Tab>

패턴과 일치하는 가능한 명령 목록이 표시됩니다. 하지만:

$ man -s1,8 *mod*<Tab>
Completing manual page
check-module                  mk_modmap
chmod                         modinfo
combine_lang_model            modprobe
depmod                        perlmod
dh_gtkmodules                 perlmodinstall
[...]

파트 1(사용자 명령)과 파트 8(시스템 관리 명령)에 포함된 매뉴얼이 표시됩니다 mod.

zsh처음 실행하면 newuser이 모든 항목을 조정할 수 있는 메뉴가 표시됩니다. 위 내용은 다음에서 확인할 수 있습니다.

(1)  Continue to the main menu.
[...]
(2)  Configure the new completion system.  (Recommended.)
[...]
(2)  Run the configuration tool (compinstall)
[...]
1.  Completers:  choose completion behaviour for tasks such as
    approximation, spell-checking, expansion.
[...]
m.     Set completers that modify the behaviour of the four main ones above.
[...]
1.     _ignored: Use patterns that were previously ignored if no matches so far.
2.     _list:    Only list matches until the second time you hit TAB.
3.     _oldlist: Keep matches generated by special completion functions.
4. (*) _match:   If completion fails, retry with pattern matching.
5.     _prefix:  If completion fails, retry ignoring the part after the cursor.

위에서 4를 선택하세요. 하지만 더 많은 맛있는 음식이 있기 때문에 전체 메뉴를 살펴보는 것이 좋습니다.

세게 때리다

bash셸 에서는 다음을 사용할 수 있습니다.

compgen -cX '!*mod*'

그것은 다음과 같습니다:

compgen -A command -X '!*mod*'

compgen -c/는 패턴과 일치하는 명령을 제외하려는 의도로 compgen -A command알려진 명령(키워드, 별칭, 내장 및 기능 포함) 목록을 제공 하지만 로 시작하는 패턴은 제외에서 포함으로 변경됩니다.-X!

rc 및 파생 상품

에서 목록 rc은 csh 또는 zsh와 같은 $path환경 변수와 연결됩니다 .$PATH

ls -d -- $path/*mod* >[2] /dev/null

s 또는 glob 한정자 rc와 동등한 것이 없으므로 목록 은 실행 파일로 제한되지 않으며 숨겨진 파일도 포함하지 않습니다.zshD-*

rcBourne 쉘 및 대부분의 파생 제품과 공유되는 버그 기능은 일치하지 않는 glob 패턴이 그대로 남아 있다는 것입니다. 따라서 지정된 디렉토리에 일치하는 항목이 없으면 불평하는 /that/dir/*mod*목록을 전달하여 이 문제를 해결합니다. 이름에 존재하지 않는 파일이 포함되어 있지만 lsBourne과 같은 쉘을 사용하여 이러한 오류를 삭제합니다.*>[2] /dev/null2> /dev/nullfish

물고기

와 유사하며 rc실행 불가능에 대한 동일한 경고가 있지만 {.,}패턴 접두사를 추가하여 숨겨진 파일 지원을 추가합니다.

printf '%s\n' $PATH/{,.}*mod*

POSIX sh

POSIX sh에서는 다음과 같은 함수를 정의할 수 있습니다.

find_commands() (
  pattern=$1
  IFS=:; set -o noglob
  set -- $PATH''
  IFS=; set +o noglob
  for dir do
    for file in "${dir:+$dir/}"$pattern "${dir:+$dir/}".$pattern; do
      if [ -f "$file" ] && [ -x "$file" ]; then
        printf '%s\n' "$file"
      fi
    done
  done
)

다음과 같이 사용됩니다:

find_command '*mod*'

1 $PATH빈 구성 요소가 있으면 제대로 작동하지 않습니다. PATH=/bin/:/usr/bin:마지막 빈 구성 요소는 현재 작업 디렉터리를 찾는 것을 의미하기 때문입니다. 이 문제 는 빈 .${^path/#%/.}문자열을 다른 쉘이 / 디렉토리를 수동으로 찾기 위해 아래 제공된 솔루션 에도 동일하게 적용됩니다..$PATH$PATH$PATH$path

답변2

# in at least bash
start cmd:> ( IFS=: ; find $PATH -type f -name 'ls*' -perm /111 -ls )
    96723      4 lrwxrwxrwx   1 root     root            4 Mär 19 23:08 /usr/bin/lsmod -> kmod
   281915      4 lrwxrwxrwx   1 root     root           11 Mär 19 22:35 /usr/bin/lsb-release -> lsb_release
   733984      4 -rwxr-xr-x   1 root     root         2479 Mär 20 05:53 /usr/bin/lss16toppm
   734097      4 -rwxr-xr-x   1 root     root         1821 Mär 19 22:36 /usr/bin/lsdev
   955869     12 -rwxr-xr-x   1 root     root        10514 Mär 19 22:35 /usr/bin/lsb_release
  1070923     16 -rwxr-xr-x   1 root     root        14215 Mär 20 00:13 /usr/bin/lsusb.py
  1245610    136 -rwxr-xr-x   1 root     root       138016 Apr  1 19:45 /usr/bin/ls
  1254310    104 -rwxr-xr-x   1 root     root       104632 Apr  1 21:16 /usr/bin/lscpu
  1254311     76 -rwxr-xr-x   1 root     root        73928 Apr  1 21:16 /usr/bin/lsfd
  1254312     52 -rwxr-xr-x   1 root     root        51384 Apr  1 21:16 /usr/bin/lsipc
  1254313     28 -rwxr-xr-x   1 root     root        26808 Apr  1 21:16 /usr/bin/lsirq
  1254314     32 -rwxr-xr-x   1 root     root        31304 Apr  1 21:16 /usr/bin/lslocks
  1254315     40 -rwxr-xr-x   1 root     root        39096 Apr  1 21:16 /usr/bin/lsmem
  1254316     40 -rwxr-xr-x   1 root     root        39096 Apr  1 21:16 /usr/bin/lsns
  1254878    136 -rwxr-xr-x   1 root     root       137400 Apr  1 21:22 /usr/bin/lsblk
  1254879     52 -rwxr-xr-x   1 root     root        51384 Apr  1 21:22 /usr/bin/lslogins
  1255279     84 -rwxr-xr-x   1 root     root        85136 Mär 19 22:34 /usr/bin/lsscsi
  1255280    176 -rwxr-xr-x   1 root     root       179912 Mär 19 22:50 /usr/bin/lsof
  1258862   2980 -rwxr-xr-x   1 root     root      3048800 Mär 20 06:13 /usr/bin/lsar
  1264433     16 -rwxr-xr-x   1 root     root        14456 Mär 19 22:35 /usr/bin/lsattr
  1264457     12 -rwxr-xr-x   1 root     root        11989 Mär 20 04:18 /usr/bin/lsinitrd
  1271261    104 -rwxr-xr-x   1 root     root       106376 Mär 19 23:14 /usr/bin/lspci
  1272752    252 -rwxr-xr-x   1 root     root       256328 Mär 20 00:13 /usr/bin/lsusb

답변3

매뉴얼 페이지를 검색하려면 (많은 구현과 마찬가지로 apropos) 모든 매뉴얼 페이지 및 해당 요약의 색인에 대해 일부 정규식 일치를 수행하는 방법을 사용할 수 있습니다.man -kman

apropos다음에서 사용 mandb(Linux 기반 시스템에서 일반적),

apropos mod

이름이나 요약이 정규식과 일치하는 매뉴얼 페이지 항목을 반환합니다 mod(이것은 쉘 glob 와일드카드 패턴과 다릅니다). 즉, mod.

보려는 섹션이나 섹션 목록을 지정할 수도 있습니다.

초록이 아닌 이름에서만 찾으려면 mod페이지 이름에는 공백이 거의 포함되지 않지만 초록에는 거의 항상 공백이 포함된다는 사실을 활용할 수 있습니다.

그래서:

apropos -s1,8 '^[^ ]*mod[^ ]*$'

섹션 1과 8의 매뉴얼 페이지를 반환해야 합니다.이름mod포함합니다 . 정규식은 제목( )의 시작, ^공백( )을 제외한 모든 숫자( ) 문자, 공백( )을 제외한 모든 숫자( ) 문자, 제목의 끝( ) 과 일치하기 때문에 포함합니다 . 한마디로 주변에 공간이 없습니다.*[^ ]mod*[^ ]$mod

관련 정보