사용 가능한 모든 명령 및 별명을 나열하는 Linux 명령


280

이 터미널 세션에 사용 가능한 모든 명령과 별명을 나열하는 Linux 명령이 있습니까?

'a'를 입력하고 탭을 누른 것처럼 알파벳의 모든 문자에 해당합니다. 또는 '별칭'을 실행하지만 명령을 반환합니다.

왜? 다음을 실행하고 명령을 사용할 수 있는지 확인하고 싶습니다.

ListAllCommands | grep searchstr

환경에서 사용할 수있는 모든 명령을 나열하려면 Tab 키를 두 번 누르십시오
ntshetty

답변:


599

bash (1) 내장을 사용할 수 있습니다 compgen

  • compgen -c 실행할 수있는 모든 명령이 나열됩니다.
  • compgen -a 실행할 수있는 모든 별칭이 나열됩니다.
  • compgen -b 실행할 수있는 모든 내장 기능이 나열됩니다.
  • compgen -k 실행할 수있는 모든 키워드가 표시됩니다.
  • compgen -A function 실행할 수있는 모든 기능이 나열됩니다.
  • compgen -A function -abck 위의 모든 내용을 한 번에 나열합니다.

생성 할 수있는 다른 완료 사항에 대해서는 매뉴얼 페이지를 확인하십시오.

질문에 직접 대답하려면 :

compgen -ac | grep searchstr

당신이 원하는 것을해야합니다.


1
csh / tcsh에 해당하는 것이 있습니까? 이 터미널에는 탭에서 사용되는 일종의 자동 완성 기능이 있으므로 어떤 것이 있습니까?
krb686

2
대신 compgen | grep문자열을 인수로 전달하는 것이 더 효율적일 수 있습니다 compgen(문제에서 암시 된 것처럼 접두사로 알려진 경우). 이 경우에는입니다 compgen -ac searchstr.
Toby Speight

실제로 우분투는에 대한 '아무것도 whatis compgen없음'과 '수동 입력 없음'을 표시 man compgen합니다.
MarAvFe

1
@MarAvFe : bash자체 매뉴얼 페이지가있는 별도의 명령이 아니라 내장되어 있기 때문입니다 . bash(1)매뉴얼 페이지 를 읽 거나 명령 줄 help compgen에서 실행 해야합니다 bash.
camh

확장 기능을 compgen -c | sort | uniq | less사용하면 중복 행없이 사용 가능한 모든 명령을 인쇄 하고 알파벳순으로 정렬합니다.
Fabián

39

.bashrc에 추가

function ListAllCommands
{
    echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
        -executable -type f -printf '%P\n' | sort -u
}

별명도 원하면 다음을 수행하십시오.

function ListAllCommands
{
    COMMANDS=`echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
        -executable -type f -printf '%P\n'`
    ALIASES=`alias | cut -d '=' -f 1`
    echo "$COMMANDS"$'\n'"$ALIASES" | sort -u
}

이것은 매우 가깝지만 별명을 포함하지 않습니다. 별명을 추가하는 방법 | -f1을 결과로 자르지 만 정렬하기 전에?
ack

1
어쨌든 출력을 grep을 통해 출력하는 것이 목적이라면 정렬을 귀찮게하는 이유는 무엇입니까? 유닉스 철학은 간단한 도구를 만들고 필요한 경우 서로 연결하는 것이므로 ListAllCommands에서 정렬을 생략하고 사용자가 정렬 된 출력을 원하면 그렇게 할 수 있습니다.
danio

4
정렬은 중복을 제거하는 것입니다.
개미 Aasma

1
실행 파일에 대한 심볼릭 링크 인 명령을 찾지 못합니다. -L대상에 대한 심볼릭 링크를 따르려면 on 옵션 을 사용하십시오 . 참고 : -L옵션이며 일치하는 표현식의 일부가 아니므로 명령 행에서 경로 앞에 배치해야합니다. 이 경우find -L {}
Adaephon

1
존재하지 않는 디렉토리 경고를 억제하기 위해 STDERR을 / dev / null로 경로 재 지정할 수 있습니다. echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u(zsh 호환성을 위해 +1)
TheLonelyGhost

27

있다

type -a mycommand

mycommand 가 사용되는 $ PATH의 모든 별명과 명령을 나열하는 명령입니다 . 명령이 여러 변형으로 존재하는지 확인하는 데 사용할 수 있습니다. 그 외에는 ... $ PATH와 모든 별칭을 구문 분석하는 스크립트가 있지만 그러한 스크립트에 대해서는 모릅니다.


1
그것이 질문에 대한 대답이 아니더라도 문제에 대한 더 나은 해결책이라고 생각합니다. 따라서 -a foo를 입력 할 수 있으며 foo를 사용할 수 없으면 명령을 찾을 수 없거나 이와 유사한 것을 반환합니다. 따라서 명령 자체를 호출하지 않고도 명령을 확인할 수 있습니다.
Janusz

1
OP가 "다음을 실행하고 명령을 사용할 수 있는지 확인하고 싶습니다"라고 물었으므로 실제로는 질문에 대한 답변이므로 명령이 사용 가능한지 확인 하고이 대답이 명확하게 작동하는 것이 목적입니다.
lothar 2016 년

2
@lothar, 찾고있는 명령이 "startserver"?, "serverstart"?, "server-something-or-other"중 무엇입니까? 서버에 "grep -i"를 입력하여 서버가 있는지 확인합니다. 죄송합니다. 이 솔루션이 아닌 Bzzz. 친구의이 :-) 내가 (그것도 제한된 방법으로 경우에 유용 이후)하지만 전체 날려 솔루션 GREP가 있음을 고려할 것이 응답 아래로 투표를하지 않을거야 정규 표현식 아닌 고정 문자열.
paxdiablo 2016 년

6

"which searchstr"을 사용하십시오. 바이너리의 경로 또는 별명 인 경우 별명 설정을 리턴합니다.

편집 : 별칭 목록을 찾고 있다면 다음을 사용할 수 있습니다.

alias -p | cut -d= -f1 | cut -d' ' -f2

원하는 PATH 검색에 추가하십시오. bash를 사용한다고 가정합니다.


6

기타 명령은 bash 또는보다 완전한 xargs 버전이 필요하기 때문에 임베디드 시스템에서 작동하지 않았습니다 (busybox가 제한적 임).

다음 명령은 모든 유닉스 계열 시스템에서 작동해야합니다.

폴더 별 목록 :

ls $(echo $PATH | tr ':' ' ')

모든 명령을 이름으로 나열

ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort

이것은 여전히 ​​의지합니다 tr. 왜 간단하지 ls $(echo ${PATH//:/ })않습니까?
mschilli

5

이 스크립트를 사용해보십시오 :

#!/bin/bash
echo $PATH  | tr : '\n' | 
while read e; do 
    for i in $e/*; do
        if [[ -x "$i" && -f "$i" ]]; then     
            echo $i
        fi
    done
done

이것은 알려진 명령이 있는지 확인하는 것이 아니라 모든 명령에 대해 수행하는 유일한 코드 솔루션입니다. +1.
paxdiablo 2016 년

3

Mac 사용자의 경우 ( 찾기 에는 실행 파일이없고 xargs 에는 -d가 없음) :

echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'

고마워 @AntsAasma 답변이 작동하지 않는 비 맥 유닉스를 실제로 사용하고 있습니다. 이것은 맥과 유닉스에서도 작동합니다. 사용중인 유닉스 버전을 확인하기 위해 어떤 명령을 입력 할 수 있습니까? 다른 사람이 내 문제를 해결하기 위해 여기에 회신 할 수 있습니까?
prismaticorb

리눅스 <corporate_proprietary_build_info_here> 월요일 12 월 12 일 13:34:16 동부 표준시 2011 x86_64 x86_64 x86_64 GNU / Linux
prismaticorb

3

명령과 관련된 키워드를 기반으로 명령을 나열하는 것이 유용합니다.

사용하다: man -k "your keyword"

자유롭게 결합하십시오 :| grep "another word"

예를 들어, 텍스트 편집기를 찾으려면 man -k editor | grep text


2

ALT-를 눌러보십시오? (alt와 물음표가 동시에). 목록을 작성하는 데 1-2 초를 제공하십시오. bash에서 작동해야합니다.


3
또는 빈 줄이 시작될 때 Esc 키를 네 번 누르십시오.
ephemient 2016 년

:-) 그것은 놀랍게도 유용, 나는 이미 그것을 감사 몰랐어요
크리스 황 졸업자

2

다음은 모든 실행 파일 별명 목록을 제공하는 솔루션입니다 . 또한 xargs -dMac OS X이 없는 시스템에 이식 가능 하며 공백이있는 경로를 올바르게 처리합니다.

#!/bin/bash
(echo -n $PATH | tr : '\0' | xargs -0 -n 1 ls; alias | sed 's/alias \([^=]*\)=.*/\1/') | sort -u | grep "$@"

사용법 : myscript.sh [grep-options] pattern, 예 : ls대소 문자를 구분하지 않고 시작하는 모든 명령을 찾으려면 다음을 수행하십시오.

myscript -i ^ls

2

모든 명령을 나열하는 바로 가기 방법입니다. 터미널을 열고 "탭" 버튼을 두 번 누르십시오. 터미널의 모든 명령을 보여줍니다.


1
그리고 당신은 grep정확히 어떻게 그것을 파이프 ?
Toby Speight

2

또는 명령에 매뉴얼 페이지가있는 한 빠른 설명과 함께 편리한 명령 목록을 얻을 수 있습니다.

apropos -s 1 ''

-s 1 returns only "section 1" manpages which are entries for executable programs.

'' is a search for anything. (If you use an asterisk, on my system, bash throws in a search for all the files and folders in your current working directory.)

그럼 당신이 원하는대로 그냥 grep.

apropos -s 1 '' | grep xdg

수율 :

xdg-desktop-icon (1) - command line tool for (un)installing icons to the desktop
xdg-desktop-menu (1) - command line tool for (un)installing desktop menu items
xdg-email (1)        - command line tool for sending mail using the user's preferred e-mail composer
xdg-icon-resource (1) - command line tool for (un)installing icon resources
xdg-mime (1)         - command line tool for querying information about file type handling and adding descriptions for new file types
xdg-open (1)         - opens a file or URL in the user's preferred application
xdg-screensaver (1)  - command line tool for controlling the screensaver
xdg-settings (1)     - get various settings from the desktop environment
xdg-user-dir (1)     - Find an XDG user dir
xdg-user-dirs-update (1) - Update XDG user dir configuration

결과가 정렬되지 않은 것처럼 보이므로 긴 목록을 찾으려면 | 정렬 | 중간에 넣은 다음 더 적거나 더 많거나 가장 많이 같은 호출기로 파이프하십시오. 알라 :

apropos -s 1 '' | sort | grep zip | less

이름이나 간단한 설명에 "zip"이있는 모든 명령의 정렬 된 목록을 반환하고 "less"호출기로 펌핑합니다. ( "less"를 $ PAGER로 바꾸고 기본 호출기를 사용할 수도 있습니다.)


1

언제든지 다음을 수행 할 수 있습니다.

1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry: 
    ls * $entry 
4. grep your command in that output.

쉘은 env var 경로에 나열된 경우에만 명령을 실행합니다.


1

그것은 당신이 사용하는 쉘에 달려 있다는 것을 의미합니다. 여기 내가 보는 제약 조건이 있습니다.

  1. 셸과 동일한 프로세스에서 실행해야 찾을 수있는 명령에 영향을주는 별칭과 함수 및 변수를 포착 할 수 있습니다. EDITOR가 범위를 벗어날 수도 있지만 PATH 또는 EDITOR를 생각하십시오. 영향을 줄 수있는 익스포트되지 않은 변수가있을 수 있습니다.
  2. 그것은 쉘에 특정 적이거나 커널로 들어가는 것입니다. / proc / pid / enviorn 그리고 친구들은 충분한 정보를 가지고 있지 않습니다

ZSH를 사용하므로 여기에 zsh 답변이 있으며 다음 3 가지 작업을 수행합니다.

  1. 덤프 경로
  2. 별명을 덤프합니다.
  3. env에있는 함수를 덤프합니다.
  4. 그들을 정렬

여기있어:

feed_me() {
    (alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}

zsh를 사용한다면 그렇게해야합니다.


0

문제는 탭 완성이 경로를 검색하고 있지만 모든 명령이 경로에 있지 않다는 것입니다.

bash를 사용하여 경로에서 명령을 찾으려면 다음과 같이 할 수 있습니다.

x의 경우 echo $PATH | cut -d":" -f1; ls $ x; 끝난


0

bashrc 파일에 넣을 수있는 함수는 다음과 같습니다.

기능 명령 검색
{
   oldIFS = $ {IFS}
   IFS = ":"

   $ {PATH}의 p
   하다
      ls $ p | grep $ 1
   끝난

   수출 IFS = $ {oldIFS}
}

사용법 예 :

$ 명령 검색 그놈
gnome-audio-profiles-properties *
gnome-eject @
그놈 열쇠 고리 *
그놈 열쇠 고리 데몬 *
그놈 마운트 *
그놈 열기 *
그놈 사운드 레코더 *
gnome-text-editor @
gnome-umount @
그놈 볼륨 컨트롤 *
폴킷 그놈 인증 *
vim.gnome *
$

참고 : IFS는 bash가 문자열을 분할하는 데 사용하는 변수입니다.

이 작업을 수행하는 더 좋은 방법이있을 수 있습니다.


-1

어쩌면 내가 오해하고 있지만 Display All X 가능성을 얻을 때까지 Esc 키를 누르면 어떻게됩니까?


-2
compgen -c > list.txt && wc list.txt

1
이것이하는 일이나 작동 방식에 대한 간단한 설명을 추가해보십시오. 최소한 제안 된 솔루션을 추적하고 이해하기 위해 참조 링크 (일반적으로 관련 매뉴얼 페이지)를 지정하십시오.
TheCodeArtist

파일을 사용하는 것이 항상 좋은 옵션은 아닙니다. 필요한 경우 최소한 tmp 파일로 만듭니다 (보안에 문제가없는 경우)compgen -c > /tmp/list.txt && /tmp/wc list.txt
Gary

-3

왜 입력하지 않습니까?

seachstr

터미널에서.

껍질은 마치

seacrhstr: command not found 

편집하다:

좋아, 나는 답답한 바보이기 때문에 downvote를 가져 가라. 나는 단지 알고 싶다 :이 대답의 문제점 !!! 그 질문자는 말했다 :

명령을 사용할 수 있는지 확인하십시오.

명령을 입력하면 사용 가능한지 알려줍니다!.

아마 그 / 그녀는 의미 "명령을 실행 밖으로" 또는 것은 "스크립트에 포함하는" 하지만 난 그의 마음을 읽을 수 없습니다 (I 정기적으로 그냥 그가 입고 있다는 것입니다 수없는없는 마음 읽기 편향 )


4
formathdd명령이 있는지 알고 싶습니다 . 아 잠깐만, 나는 그것을 실행하고 참조하십시오. 사람. 감사합니다 :)
Jeffrey Jose

5
아마도 그렇게하는 것을 사용하는 것이 더 안전 할 것입니다.
danio

이것이 Super User가 아닌 Stack Overflow 라는 점을 감안할 때 프로그래밍 방식의 대답이 더 적합합니다.
Toby Speight

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