Help us understand the problem. What is going on with this article?

ArchLinux の pacman で、うる覚えの導入済みパッケージを楽に探したい

More than 3 years have passed since last update.

概要

例えば、ネットワーク関係の、とある機能に問題が生じ

「えーと、あの、ネットワーク関連のパッケージ... 何を使っていたっけ?」

という状況下で当該パッケージを探し当てたい。

  • とある機能を実現するには選択肢が複数存在する
  • 自分が何を選択したのか完全に失念
  • 当然、パッケージ名は不明

目標

  • 曖昧なワードから、インストール済みのパッケージを検索したい
  • 問題解決の為に当該パッケージの詳細も表示したい
  • 割とよくあるので手軽に済ませたい

今まで

検索

インストール済みのパッケージ名と、その説明文を対象に network で検索する。

$ pacman -Qs network
local/パッケージ名 バージョン
    説明文
local/パッケージ名 バージョン
    説明文
local/パッケージ名 バージョン
    説明文

オプション等

$ pacman <オペレーション> [オプション] ...
  • -Q, --query (オペレーション): ローカルデータベースに問い合わせる
  • -s, --search <正規表現> (オプション): インストール済みパッケージの部分一致検索

詳細表示

先ほどのリストからパッケージ名を手入力で

$ pacman -Qii networkmanager
名前                   : networkmanager
バージョン             : 1.6.2-3
説明                   : Network connection manager and user applications
アーキテクチャ         : x86_64
URL                    : https://wiki.gnome.org/Projects/NetworkManager
ライセンス             : GPL2  LGPL2.1
グループ               : なし
提供                   : なし
... 以下略 ...
  • -i, --info <パッケージ名>: パッケージ情報の表示
    • -ii でバックアップファイル (/etc 以下に置かれる設定ファイルの類?)も表示。

問題点

  • 「検索」と「詳細表示」間の手入力が面倒
  • 「詳細表示」の結果、目当てのパッケージでは無かった場合に、やり直すのがストレスフル

解決策

  • 検索
  • 絞り込み&選択 (今回は peco を使う)
  • 詳細表示

をループさせる。

#! /bin/sh

set -eu

query="${1:-}"

while :; do
  # 検索及び選択

  # 端末上部に peco を表示
  # pkg_name="$(pacman -Qs "${query}" | peco --layout 'top-down')"

  # 端末下部に peco を表示
  pkg_name="$(pacman -Qs "${query}" | tac | peco --layout 'bottom-up')"

  # 空選択 -> 終了
  if [ -z "${pkg_name}" ]; then
    break
  fi

  # 選択した文字列が半角スペース4つで始まる場合は説明文
  # -> やり直し
  if [ -z "${pkg_name##    *}" ]; then
    continue
  fi

  # バージョン部分を削る
  pkg_name="${pkg_name%% *}"
  # ローカルデータベースの接頭辞を削る
  pkg_name="${pkg_name##local/}"

  # 詳細表示
  pacman -Qii "${pkg_name}" | less
done

これに適当なコマンド名を付けて、パスの通った場所に置く。

$ コマンド名 '適当なワード (正規表現可)'

検索結果を peco で選択すると less でパッケージの詳細が表示される。less を閉じると peco での選択に戻る。peco を閉じると終了。

※ パッケージ名と説明文で、2行を 1要素として扱いたいが peco では 1行に付き 1要素なので無理やり解決している。

query 未指定の場合、peco に「検索」部分も任せる事になるが、検索文字列によっては、説明文ばかりがヒットしてしまい使い物にならない。

参考

koyudoon
人生積んだクズ人間の末路
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away