web-dev-qa-db-ja.com

特定のソフトウェアのパスを知る方法は?

コンテキスト:ログイン時にアプリケーションを自動的に起動させようとしています。このため、アプリケーションのpathを選択する必要があります。

enter image description here

すでに調べたパスは次のとおりです。

  • /sbin
  • /usr/sbin
  • /usr/local/bin
  • /usr/share/

これが役立つ場合、私が見つけようとしているアプリケーションは " ScreenCloud "と呼ばれ、Ubuntu Software Centerからダウンロードしました。

しかし、それを見つけることができません。特定のソフトウェアがどこにインストールされているかを知る方法はありますか?これを見つけたとしても、今後は同じ問題を避けたいと思います。

13
Ced

実行可能ファイルのパスを検索します

最善の方法

  • type executable

typeの優れた点について詳しくは、 この質問 をご覧ください。 (ありがとう、コメント!)

その他の方法

  • whereis executable
  • which executable

これらのコマンドは、PATH変数(echo $PATH)、したがって、それらは一部のケース(組み込み関数、エイリアス、またはbash関数など)では無効です。

16
Biggybi

次のコマンドを使用して、すべての$PATHディレクトリを一覧表示します。

echo $PATH | sed 's/:/\n/g'

次のコマンドを使用して、screencloudの完全パスを検索します。

for i in $(echo $PATH | sed 's/:/\n/g'); do find $i/screencloud* 2>@1; done

aptapt-get、またはUbuntuソフトウェアセンターを使用してパッケージをインストールした場合は、次のコマンドを使用して完全パスを検索できます。

dpkg -L screencloud | grep bin

this repository を使用したとすると、/usr/bin/screencloudを見つけることができるはずです。

完全なパスは次のとおりです。

/usr/bin/screencloud

または

/usr/bin/screencloud-*

ただし、質問で snapcraft store提供したリンク に従って使用した場合、パスは次のディレクトリの下になります。

/snap/bin

詳細

また、Ubuntuは大文字と小文字を区別するため、大文字を含まないすべて小文字を使用する必要があることを忘れないでください。

1
mchid

パスの内側または外側のコマンドの場所を見つける

システム情報をリストするプログラムunameの場所を検索するとします。トップレベルのコマンドが格納されているディレクトリを知りたい場合は、いくつかのオプションがあります。

$ which uname
/bin/uname

$ type -a uname
uname is /bin/uname

$ command -v uname
/bin/uname

$ locate uname
/bin/uname
    (... SNIP dozens of Windows files on C & D ...)
/usr/lib/klibc/bin/uname
/usr/lib/plainbox-provider-resource-generic/bin/uname_resource
/usr/share/man/man1/uname.1.gz
/usr/share/man/man2/oldolduname.2.gz
/usr/share/man/man2/olduname.2.gz
/usr/share/man/man2/uname.2.gz

利点を見つける

最後のオプションlocateは、コマンドプロンプトから実行されるプログラムだけでなく、unameを含むすべてのファイルを返します。

locateの利点は、コマンドを検索できることですnot in検索パス。 type -a(単純なtypeよりも優先)およびwhichは、検索パス内のコマンドのみを検索します。検索パスを表示するには、echo $PATHを使用します。

screencloudの起動方法 の例を見てみましょう。

試してみてください...

/opt/screencloud/screencloud.sh

locate screencloudコマンドはそれを見つけますが、which screencloudtype -a screencloudは見つかりません。

  • フルネームはscreencloud.shで、locateコマンドのみが部分一致で検索します。
  • /opt/screencloudはおそらく検索パスにありません。 whichおよびtypeは、検索パスで実行可能ファイルのみを検索します。

注:これは古い回答です。モダンScreenCloudはscreencloudで呼び出されます。

findコマンドに対するLocateの利点は、数百倍または数千倍も高速化できることです。また、find/から実行すると、locateでは発生しない多くの権限エラーが発生します。

欠点を見つける

今日プログラムをインストールしたばかりの場合は、Sudo updatedbを使用して、locateのデータベースを更新する必要があります。

1