web-dev-qa-db-ja.com

利用可能なすべてのコマンドとエリアスを一覧表示するLinuxコマンド

このターミナルセッションで使用可能なすべてのコマンドとエイリアスを一覧表示するLinuxコマンドはありますか?

あなたが 'a'をタイプしてタブを押したように、しかしアルファベットのすべての文字に対して。または 'alias'を実行しながらコマンドを返す。

どうして?以下を実行して、コマンドが利用可能かどうか確認したいです。

ListAllCommands | grep searchstr
255
ack

Bash(1)組み込みのcompgenを使うことができます。

  • compgen -cはあなたが実行できるすべてのコマンドをリストします。
  • compgen -aはあなたが実行することができるすべてのエイリアスをリストします。
  • compgen -bはあなたが実行することができるすべてのビルトインをリストします。
  • compgen -kは実行可能なすべてのキーワードをリストします。
  • compgen -A functionはあなたが実行することができるすべての機能をリストします。
  • compgen -A function -abckは一度にすべての上記をリストします。

あなたが生成できる他の補完についてはmanページをチェックしてください。

あなたの質問に直接答えるには:

compgen -ac | grep searchstr

あなたが欲しいものをするべきです。

563
camh

.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
}
38
Ants Aasma

そこには

type -a mycommand

mycommandが使用される$ PATH内のすべてのエイリアスとコマンドを一覧表示するcommand。コマンドがいくつかの種類で存在するかどうかを確認するために使用できます。それ以外は...おそらく$ PATHとすべてのエイリアスを解析するスクリプトがいくつかありますが、そのようなスクリプトはわかりません。

25
sunny256

"which searchstr"を使用してください。バイナリのパス、またはエイリアスの場合はエイリアス設定を返します。

編集:エイリアスのリストを探しているなら、あなたは使うことができます:

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

どちらのPATH検索でも、あなたが好むと答えてください。あなたがbashを使っていると仮定します。

6
Aaron

その他のコマンドは組み込みシステムではうまくいきませんでした。bashやもっと完全なバージョンのxargsが必要だからです(busyboxは限られていました)。

以下のコマンドはどんなUnix風システムでも動作するはずです。

フォルダ別に一覧表示:

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

すべてのコマンドを名前順にリストします

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

このスクリプトを試してください。

#!/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
5
victor hugo

Macユーザーの場合(findに-executableがない、xargsに-dがない):

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

コマンドに関連付けられているキーワードに基づいてコマンドを一覧表示すると便利です。

使用方法:man -k "your keyword"

気軽に組み合わせてください:| grep "another Word"

たとえば、テキストエディタを探すには、次のように入力します。man -k editor | grep text

3
Finch

これは、すべての実行可能ファイルのリストエイリアスを表示する解決策です。 xargs -dを持たないシステム(Mac 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
Adam Rosenfield

ALT-を押してみますか? (Altと疑問符を同時に)。 1〜2秒かけてリストを作成します。 bashで動作するはずです。

2
Igor Krivokon

すべてのコマンドを一覧表示するためのショートカットメソッド。端末を開いて2回--- "tab"ボタンを押してください。それは端末内のすべてのコマンドを表示する

2
denny

別の方法として、コマンドの便利なリストと簡単な説明を(コマンドにmanページが含まれていれば、ほとんどの場合に)表示できます。

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

結果はソートされていないように見えるので、長いリストを探しているなら、|を投げることができます。並べ替え|真ん中に入り、次にless/more/mostのようにそれをページャにパイプします。アラ:

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

これは、名前に "Zip"が含まれているすべてのコマンド、またはその短い説明がソートされたリストを返し、 "less"ページャをパンプします。 ( "less"を$ PAGERに置き換えてデフォルトのページャを使うこともできます。)

2
Katastic Voyage

あなたはいつでも次のことができます。

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
OscarRyz

それはあなたが使用しているシェルに依存しているということです。これが私が見ている制約です。

  1. あなたが見つけることができるコマンドに影響を与えるエイリアスや関数、変数を捕らえるためにあなたのシェルと同じプロセスで実行されなければなりません。あなたは物事に影響を与える可能性のある未エクスポートの変数を持つことができます。
  2. それはシェル固有のものか、あなたがカーネルに入っているか、/ proc/pid/enviornと友達には十分な情報がありません。

私はZSHを使っているので、ここにzshの答えがあります、それは以下の3つのことをします:

  1. ダンプパス
  2. 別名をダンプします
  3. 環境内にある関数をダンプします。
  4. それらをソートします

ここにあります:

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

あなたがzshを使うなら、これはそれをするべきです。

1
ms4720

問題は、タブ補完があなたのパスを検索しているが、すべてのコマンドがあなたのパスにないことです。

Bashを使用してパス内のコマンドを見つけるには、次のようにします。

echo $PATH | cut -d":" -f1のxの場合。 ls $ xを行います。終わった

0
nikudesu

これがあなたのbashrcファイルに入れることができる関数です:

関数command-search 
 {
 oldIFS = $ {IFS} 
 IFS = ":" 
 
 {PATH} 
 do 
 ls $ p | grep $ 1 
 done 
 
 export IFS = $ {oldIFS} 
} 

使用例

 $ command-search gnome 
 gnome-audio-profiles-properties * 
 gnome-eject @ 
 gnome-keyring * 
 gnome-keyring- daemon * 
 gnome-mount * 
 gnome-open * 
 gnome-sound-recording * 
 gnome-text-editor @ 
 gnome-umount @ 
 gnome-volume-control * 
 polkit-gnome-authorization * 
 vim.gnome * 
 $ 

FYI:IFSはbashが文字列を分割するために使用する変数です。

確かにこれを行うにはいくつかのより良い方法があるかもしれません。

0
Craig Wright