ip コマンドでネットワーク通信量を確認する

先日スマートフォンのテザリングを利用して利用量を確認するのに ifconfig コマンドを利用して確認しました.しかしこのコマンドはそろそろ使わないようにして ip コマンドで確認したいところ.ということで ip コマンドでの確認方法を調べました.


続きを読む

cpu情報を表示するcpufetch

cpufetchというscreenfetchインスパイアな感じのcpu情報表示ツールを見かけたので試してみました.

$ git clone https://github.com/Dr-Noob/cpufetch
$ cd cpufetch
$ make
$ ./cpufetch -s retro

                               ################
                       #######                #######
                  ####                              ####
              ###                                     ####    Name:              Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
         ###                                             ###  Microarchitecture: Ivy Bridge
         ###                                             ###  Technology:        22nm
      #                    ###                ###        ###  Max Frequency:     3.300 GHz
    ##   ###   #########   ######   ######    ###        ###  Cores:             2 cores (4 threads)
   ##    ###   ###    ###  ###    ####  ####  ###        ###  AVX:               AVX
  ##     ###   ###    ###  ###    ###    ###  ###       ###   FMA:               No
 ##      ###   ###    ###  ###    ##########  ###     ####    L1i Size:          32KB (64KB Total)
 ##      ###   ###    ###  ###    ###         ###   #####     L1d Size:          32KB (64KB Total)
 ##       ##   ###    ###   #####  #########   ##  ###        L2 Size:           256KB (512KB Total)
 ###                                                          L3 Size:           3MB
  ###                                                         Peak Performance:  52.80 GFLOP/s
  ####                                        ####
    #####                               ##########
      ##########               ################
          ###############################

標準のスタイルでテキストで貼り付けると真っ白になるので retro です.通常の実行結果は以下に.

続きを読む

Rust製のCLI電子メールクライアントのHimaraya

Rust製のCLI電子メールクライアントのHimarayaというものを見かけたので少し試してみました.

Himarayaは単体ではCLIのクライアントでバッチ的に利用できます.VIm/Neovimのプラグインを使うとTUIで直感的に操作できるようになるようです.
Windows/macOS/Linux(amd64)はリリースページからバイナリが入手できます.今回はLinux amd64環境で試しました.

$ wget https://github.com/soywod/himalaya/releases/download/v0.2.2/himalaya-linux.tar.gz (1)
$ tar tvf ./himalaya-linux.tar.gz (2)
-rwxr-xr-x runner/docker 9090192 2021-04-05 00:50 himalaya.exe
$ tar xf ./himalaya-linux.tar.gz (3)
$ sudo install -m 755 ./himalaya.exe /usr/local/bin/himaraya (4)
$ rm ./himalaya.exe
$ mkdir ~/.config/himalaya (5)
$ vi ~/.config/himalaya/config.toml (6)
$ cat ~/.config/himalaya/config.toml
name = "Kenichiro Matohara"
downloads-dir = "~/.config/himalaya/gmail/"
signature = "Regards,"

[matoken_gmail]
default = true
email = "matoken@gmail.com"

imap-host = "imap.gmail.com"
imap-port = 993
imap-login = "matoken@gmail.com"
imap-passwd-cmd = "gpg2 --no-tty -q -d ~/.msmtp-password-gmail2.gpg"

smtp-host = "smtp.gmail.com"
smtp-port = 487
smtp-login = "matoken@gmail.com"
smtp-passwd-cmd = "gpg2 --no-tty -q -d ~/.msmtp-password-gmail2.gpg"
  1. Linuxリリースバイナリのダウンロード
  2. アーカイブの内容確認
  3. アーカイブの展開
  4. /usr/local/binhimaraya として導入
  5. 設定ファイルディレクトリの作成
  6. 設定ファイル作成

設定ファイルは README.md にgmailの例が書かれているので,imap4/smtpの場合はそのまま真似すると良さそうです.
設定ファイルのパスワード部分の imap-passwd-cmd , smtp-passwd-cmd は平分でも書けるようですが,コマンドが書けるのでmsmtpで使っているgpg2のものを使いました.opensslなども使えます.パスワードマネージャを使っても良さそうです.

$ himaraya list

UID    |FLAGS |SUBJECT                                           |SENDER                     |DATE
403387 |       |[oss-security] CVE-2021-29136: umoci: malicious … |Aleksa Sarai               |2021-04-06 11:13:14
403386 |       |[oss-security] Django: CVE-2021-28658: Potential… |Mariusz Felisiak           |2021-04-06 09:10:32
403385 |       |Ingress Damage Report: Entities attacked by taar… |Niantic Project Operations |2021-04-06 07:52:16
403384 |       |Ingress Damage Report: Entities attacked by taar… |Niantic Project Operations |2021-04-06 07:52:14
403383 |       |Ingress Damage Report: Entities attacked by taar… |Niantic Project Operations |2021-04-06 07:52:15
403382 |      |CPUのコアを増やせば、コア間の通信が増え処理速度が上がらないのではありませんか?         |Quoraダイ
ジェスト                |2021-04-06 06:35:23
403381 |      |In October, you had 4.8K users visit your websit… |Google Analytics           |2021-04-05 22:44:18
403380 |      |Daily activity summary for Nextcloud              |Nextcloud                  |2021-04-05 21:30:06
403379 |       |Re: [oss-security] Risk of local privilege escal… |Leo Famulari               |2021-04-05 20:20:55
403378 |       |Re: [oss-security] Risk of local privilege escal… |Leo Famulari               |2021-04-05 20:19:15

いくつかのコマンドを使いバッチ的にメールボックスを操作できます.しかし普通のMUAとして使うには面倒です.

Vim/Neovimのプラグインを使うとTUIで利用できるらしいので試してみます.

Note
※前提条件として,vim-plugが使える状態になっている必要があります.
junegunn/vim-plug: Minimalist Vim Plugin Manager
$ echo "Plug 'soywod/himalaya', {'rtp': 'vim'}" >> ~/.vimrc

Vimの設定ファイルの ~/.vimrc にHimaraya pluginを追記します.
vimを起動して, :PlugInstall を実行してHimaraya Pluginを導入します.

その後,Vimの中で :Himaraya で起動します.

Himarayaの設定ができていればそのままTUIで使えるようになります :)

今の時点ではあまり使いやすくはなくAlpineやMutt/NeoMuttのほうが良さそうです.でも開発も活発そうなのでこれからに期待したいです.

ところで名前の Himaraya は山つながりで Alpine のインスパイアなのでしょうか?

環境
$ himalaya --version
himalaya 0.2.2
$ dpkg-query -W vim gpg
gpg     2.2.27-1
vim     2:8.2.2434-3
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ arch
x86_64

dnsクエリをスパイする dnspeep

dnspeep というRust製のdnsのクエリ内容を表示するプログラムを知ったので少し試してみました.

GitHubのReleaseページにLinux x86_64とmacOS x86_64のバイナリが置いてあるのでその環境だとそれをダウンロードして会伊藤するだけで使えます.他の環境では cargo build すればいいのかな?

$ wget https://github.com/jvns/dnspeep/releases/download/v0.1.1/dnspeep-linux.tar.gz
$ tar tvf ./dnspeep-linux.tar.gz
-rwxr-xr-x runner/docker 5570536 2021-04-02 06:20 dnspeep
$ file dnspeep
dnspeep: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a917041c223b18db709ff3c563ee1a6a3c82ba6e, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ./dnspeep -h|xsel
Usage: ./dnspeep [options]

Options:
    -p, --port PORT     port number to listen on
    -f, --file FILENAME read packets from pcap file
    -h, --help          print this help menu

What the output columns mean:
   query:     DNS query type (A, CNAME, etc)
   name:      Hostname the DNS query is requesting
   server IP: IP address of the DNS server the query was made to
   response:  Responses from the Answer section of the DNS response (or "<no response>" if none was found).
              Multiple responses are separated by commas.

$ sudo ./dnspeep
query name                           server IP            response
A     tweetdeck.twitter.com.         192.168.1.102        CNAME: td.twitter.com., A: 104.244.42.132, A: 104.244.42.4, A: 104.244.42.68, A: 104.244.42.196
  :

libpcapからパケットを引っ張ってdnsのクエリを整形して出力しているようです.こんな感じでtcpdumpでもいいのですが,dnsに特化しているのでオプションとか覚えなくていいのはいいですね.

$ sudo tcpdump -i eth0 udp port 53 or tcp port 53
環境

dnspeep v0.1.1

$ dpkg-query -W libpcap0.8 tcpdump
libpcap0.8:amd64        1.10.0-2
libpcap0.8:i386 1.10.0-2
tcpdump 4.99.0-2
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ arch
x86_64

カレンダーをWebhooksでDiscordに投稿

以下の記事でDavCalやGoogleカレンダーをコマンドラインで閲覧できるようになりました.

せっかくなのでDiscordにも毎朝その日のイベントを投稿するようにしてみます.

DiscordはWebhooksを使ってかんたんにメッセージを投稿することが出来ます.

投稿したいチャンネルの⚙アイコン「チャンネルの編集」から「連携サービス」→「ウェブフック」から操作できます.
新しいウェブフックを作成し,投稿チャンネルを確認して「ウェブフックURLをコピー」でWebhooks URLを入手します.

curlで投稿テストをしてみます.

$ curl -X POST -H "Content-Type: application/json" \
  -d '{"username": "ボット", "content": "こんにちは🤖"}' \
  'https://ptb.discord.com/api/webhooks/826777625053495306/QZoG2LLZOFlsKO_Auf1IQcXHVFozlgU37EGO9bhQKAifzZ0VAkyIYuQjRSzuOvC7U1gR'

Discord bot

これで投稿できました :)

Discordにメッセージを投稿できるようになったので,以下のエントリで書いた khal コマンドで今日1日分の予定タイトルを入手してDiscordに投稿するようにしてみます.

以下の適当なScriptを用意しました.

2021-04-01 編集)
イベントがない日にも投稿してしまっていたのを修正&Bashismだったのをshで動くよう修正

#!/bin/sh
# khalコマンドで今日の予定を入手してDiscordにpostする
# https://matoken.org/blog/2021/03/31/post-your-calendar-to-discord-with-webhooks/

# DiscordのWebhook URL
# 以下のURLを参考に入手して設定する
# https://support.discord.com/hc/ja/articles/228383668-%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB-Webhooks%E3%81%B8%E3%81%AE%E5%BA%8F%E7%AB%A0
DISCORD_WEBHOOK='https://ptb.discord.com/api/webhooks/…………'

# khal
#   list -> 一覧表示
#   --format "{title}" -> タイトルだけ表示
#   today -> 今日から
#   today -> 今日まで
# sed -> jsonの改行形式に変換
CAL=$(khal list --format "{title}" today today | sed -z -e "s/\n/\\\\\\\\n/g")

# イベントのない日は投稿せず終了
if [ "${CAL}" = 'No events\\n' ]
then
  echo "${CAL}"
  exit
fi

MSG=$(printf '{"username": "今日のイベント📅", "content": "%s"}\n' "${CAL}")
echo "$MSG"

# Discord WebHock でKagolug の#random へpost
curl -X POST -H "Content-Type: application/json" \
	-d "${MSG}" \
	"${DISCORD_WEBHOOK}"

試しに実行すると投稿されました.

手動で叩くのは面倒すぎるので自動実行するようにcrontabに登録しておきます.

$ crontab -l | grep calpost
58 4 * * *      /home/matoken/bin/calpost.sh 2>&1 > /home/matoken/tmp/cron/calpost.sh.log

毎日04:58に実行するようにしました.

環境
$ dpkg-query -W vdirsyncer khal curl bash
bash    5.0-4
curl    7.64.0-4+deb10u1
khal    1:0.9.10-1.1
vdirsyncer      0.16.7-2
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

カレンダーのDavCalをコマンドラインに出力したい

何らかの日程を決めるときに未来の日程を見ながら決めたいことがあります.
Webベースでいいかと思ったのですが,特に低解像度だとタイトルの一部しか表示されずよくわかりません.コピーペーストしてEtherPadなどに貼るといいですが時間がかかるし面倒です.
DavCalなどの情報を範囲指定して表示出来ると便利そうだなと思いました.

はじめはコマンドを叩いて範囲指定して表示するようなものがないかと思ったのですが見つかりませんでした.少し面倒ですが, vdirsyncer でリモートのカレンダーをローカルにコピーして khal コマンドで表示するようにしてみました.

Vdirsyncer の導入と設定

Vdirsyncer はカレンダーとコンタクトをローカルと同期できるソフトウェアです.これでリモートのDavCal の情報をローカルに同期します.

$ sudo apt install vdirsyncer (1)
$ mkdir ~/.config/vdirsyncer
$ vi ~/.config/vdirsyncer/config (2)
$ cat ~/.config/vdirsyncer/config
[general]
status_path = "~/.vdirsyncer/status/"

[pair my_calendars]
a = "my_calendars_local"
b = "my_calendars_remote"
collections = null
metadata = ["color"]

[storage my_calendars_local]
type = "filesystem"
path = "~/.calendars/"
fileext = ".ics"

[storage my_calendars_remote]
type = "caldav"
url = "https://files.matoken.org/remote.php/dav/public-calendars/YW5gc6gMG8tC63AH?export"
  1. Vdirsyncer の導入
  2. 設定ファイル作成

これでとりあえず Vdirsyncer を導入して,リモートの CalDav 形式のカレンダーをローカルのストレージに同期できます.
設定ファイルは以下のページを参考にしました.相互同期はせず,リモートのデータをローカルに同期するだけの動作のつもりです.

$ vdirsyncer discover my_calendars (1)
Discovering collections for pair my_calendars
my_calendars_local:
my_calendars_remote:
  - "YW5gc6gMG8tC63AH" ("onlin_event (matoken)")
warning: No collection "YW5gc6gMG8tC63AH" found for storage my_calendars_local.
Should vdirsyncer attempt to create it? [y/N]: y
Saved for my_calendars: collections = ["YW5gc6gMG8tC63AH"]
$ vdirsyncer sync (2)
Syncing my_calendars/YW5gc6gMG8tC63AH
Copying (uploading) item 05f764a4-8c30-46ed-a0fe-62c67d3975a8 to my_calendars_local/YW5gc6gMG8tC63AH
Copying (uploading) item 1acc3691-a12b-4534-a4e2-6ee6213ecff1 to my_calendars_local/YW5gc6gMG8tC63AH
Copying (uploading) item 202e727b-0431-40b5-8008-9ada1269c7c8 to my_calendars_local/YW5gc6gMG8tC63AH
Copying (uploading) item 2312a403-b2e6-4716-9c6f-45aa94519654 to my_calendars_local/YW5gc6gMG8tC63AH
  :
$ ls ~/.calendars/YW5gc6gMG8tC63AH/ | head (3)
05f764a4-8c30-46ed-a0fe-62c67d3975a8.ics
1acc3691-a12b-4534-a4e2-6ee6213ecff1.ics
202e727b-0431-40b5-8008-9ada1269c7c8.ics
2312a403-b2e6-4716-9c6f-45aa94519654.ics
263c2df9-ad9b-40d5-a946-614af7bc10ae.ics
29cbecc8-0b88-41da-b7d0-0c71062eb6b4.ics
2c66d40f-f5bd-4a67-bfb9-9bbb0258a966.ics
2e81f5bd-1aad-435a-bfa4-4a3ebe75e489.ics
30d41952-4dc3-4f10-bb6d-3311593f1d25.ics
3335be8d-9dd6-4b5e-81e9-a292d56fa17e.ics
  1. 設定を探索して初期化.設定を作ったときに実行.
  2. カレンダーを同期.定期的に実行.
  3. 同期されたデータが .ics ファイルとして作られているのを確認.

カレンダーがローカルに同期されました :)
vdirsyncer sync は定期的に実行して同期するようにします.

$ crontab -l | grep 'vdirsyncer sync'
4 4 * * *       chronic vdirsyncer sync

crontab に設定して1日1回同期するようにしました.
chronic を挟んでいますが,これはmoreutils のコマンドの1つで,正常終了時にはメッセージを出力しないというものです.エラー時だけメールが飛ぶはず.

khalの導入と設定

カレンダーの同期は出来ましたが,icsファイルがあるだけなので閲覧が不便です.閲覧するために khal コマンドを利用します.

$ sudo sudo apt install khal
$ mkdir ~/.config/khal
$ vi ~/.config/khal/config
$ cat ~/.config/khal/config
[calendars]
  [[event]]

    path = ~/.calendars/YW5gc6gMG8tC63AH/
    readonly = True

[locale]
timeformat = %H:%M
dateformat = %Y-%m-%d
longdateformat = %Y-%m-%d
datetimeformat = %Y-%m-%d %H:%M
longdatetimeformat = %Y-%m-%d %H:%M

khalを導入して設定を書いてみました.pathは Vdirsyncer で同期された場所を指定します.
この状態でkhalを叩くとこんな感じで表示されました.

$ khal
    Mo Tu We Th Fr Sa Su     Tomorrow, 2021-03-31
Mar  1  2  3  4  5  6  7     20:00-21:30 TechLION vol.37 〜TechLION出演者に聞く、この1年とこの10年。そして未来〜 :: # 視聴方法  本イベントはYouTubeにて配信します  視聴URLは決まり次第掲載します  #
     8  9 10 11 12 13 14     プログラム  2011年3月に旗揚げしたTechLIONが10周年を迎えるにあたり、記念試合をオンラインイベントとして行います。   ト
ークセッションでは、これまでTechLIONに出演してくださった皆さんに、IT業界の最近の状況、
    15 16 17 18 19 20 21     10年間の変化、今後の予想などをお聞きします。事前に実施したアンケート結果を見ながらMCの2名が進行しますが、回答によっ
ては出演者の方もトークにご参加いただきます。
    22 23 24 25 26 27 28     TechLION旗揚げ記念日でもある3月31日の夜、お酒を片手にお楽しみください!    * 出演:これまでのTechLIONにご出演の皆さ
ん   * MC:法林浩之、馮富久  # 開催概要    * 名称:TechLION
Apr 29 30 31  1  2  3  4     vol.37 〜TechLION出演者に聞く、この1年とこの10年。そして未来〜   * 主催:チームTechLION   * 協賛:USP研究所、技術評
論社   * 後援:日本UNIXユーザ会   *
     5  6  7  8  9 10 11     日時:2021年3月31日(水) 20:00開演、21:30終了予定   * 場所:オンライン (YouTubeにて配信)   * 料金:無料   * 公式タグ
:techlion   * 問い合わせ先:チームTechLION
    12 13 14 15 16 17 18     (E-mail:staff[at]techlion.jp)  # イベント詳細  https://techlion.jp/vol37
    19 20 21 22 23 24 25     https://techlion.connpass.com/event/205623/
May 26 27 28 29 30  1  2
     3  4  5  6  7  8  9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
Jun 31  1  2  3  4  5  6

ikhalコマンドを使うとダンプではなく,tuiのhalが起動してインタラクティブに操作できます.

ikhal

ちょっと冗長なので --format "title}" でタイトルだけ表示するようにしてみました.

$ khal list --format "{title}"
Tomorrow, 2021-03-31
TechLION vol.37 〜TechLION出演者に聞く、この1年とこの10年。そして未来〜

今日だけや,今日から7日間など範囲指定も出来ます.

$ khal list --format "{title}" today today (1)
$ khal list --format "{title}" today 7days (2)
$ khal list --format "{title}" 2021-03-01 2021-03-31 (3)
$ faketime 2021-03-03 khal list --format "{title}" today (4)
  1. 今日から今日まで表示
  2. 今日から7日間表示
  3. 03/01〜03/31まで表示
  4. faketimeで03/03としてkhalを実行

URLも表示したいけど,あっても.icsのDiscriptionの中などなのでちょっと面倒そうなので今回は諦めました.必要なときはカレンダーを参照することにします.

複数のカレンダーの設定

2つ目のカレンダーを登録してみます.次は日本の休日カレンダーを登録してみます.

~/.config/vdirsyncer/config に以下の設定を追記します.

[pair holiday_calendars]
a = "holiday_calendars_local"
b = "holiday_calendars_remote"
collections = null
metadata = ["color"]

[storage holiday_calendars_local]
type = "filesystem"
path = "~/.calendars/holiday_calendars/"
fileext = ".ics"

[storage holiday_calendars_remote]
type = "http"
url = "https://www.google.com/calendar/ical/ja.japanese%23holiday%40group.v.calendar.google.com/public/basic.ics"

設定反映してカレンダーを同期します.

$ vdirsyncer discover holiday_calendars
$ vdirsyncer sync holiday_calendars

次にkhalの設定です.
~/.config/khal/config[calendars] セクションに以下の設定を追記します.

  [[holiday]]
    path = ~/.calendars/holiday_calendars/
    readonly = True

この状態でkhalを実行してみると祝日も表示されるようになりました :)

$ khal list --format "{title}" 2021-03-20 1days
Saturday, 2021-03-20
春分の日
NBUG 2021年3月例会[第250回例会]
Kernel/VM探検隊online part2

ということで当初思っていたより少し面倒でしたが,とりあえずやりたいことが出来るようになりました :)

環境

$ dpkg-query -W vdirsyncer khal faketime
faketime        0.9.7-3
khal    1:0.9.10-1.1
vdirsyncer      0.16.7-2
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

標準入力の結果をシームレスに選択してクリップボードにコピーする「yank」

ターミナルからの標準入力の結果をシームレスに選択してクリップボードにコピーしてくれる yank というコマンドを知りました.

yankは各種環境のパッケージが用意されています.
Debian sid amd64 / Ubuntu 21,04 amd64 / Raspberry Pi OS buster armhf では yank というパッケージで提供されているのでこれを導入します.

$ sudo apt install yank (1)
$ yank (2)
bash: yank: command not found
$ dpkg -L yank | grep bin/ (3)
/usr/bin/yank-cli
  1. yank パッケージを導入
  2. yankコマンドが見つからない
  3. Debian系では名前空間の衝突のためにコマンド名が yank-cli になっている.

とりあえず導入できましたが,Debian環境だと yank コマンドが見つかりません.他のパッケージと名前が競合してしまっているので yank-cli として提供されているようです.

The binary is installed at /usr/bin/yank-cli due to a naming conflict.

— ‘https://github.com/mptre/yank
$ apt-file search /bin/yank
emboss: /usr/bin/yank
yank: /usr/bin/yank-cli

競合しているのはなんds楼と検索してみると emboss というパッケージのようです.

ヨーロッパ分子生物学オープンソフトウェアスイート
EMBOSS は、分子生物学のユーザコミュニティ (例: EMBnet) のために開発された オープンソースな解析用ソフトウェアパッケージです。このソフトウェアを 使うことで、様々なフォーマットで書かれたデータを自動的に処理したり、 ウェブから配列データを透過的に取得したりもできます。また、このパッケージには 拡張ライブラリが含まれているので、真のオープンソース精神に則って ソフトウェアを開発しリリースできるプラットフォームです。 さらに、EMBOSS は様々な配列解析用パッケージやツールとシームレスに 統合されています。EMBOSS は、長く続いた商用パッケージソフトウェアへの流れを 断ち切ったのです。

なかなか熱そうなプロジェクトのようです.

使わないならalias等でyankに向けてもいいかもしれません.

とりあえず導入出来たので試してみます.

yank 01

$ apt-cache search yank | yank-cli
elpa-csv-mode - Emacs major mode for editing comma/char separated values
python3-readlike - GNU Readline-like line editing module
yank - interactively select and yank terminal output to stdout or xsel

apt-cache search の結果を yank で受けてカーソルなどで単語単位で移動してEnterで選択した部分をクリップボードにコピーします.
クリップボード貼付けをするとたしかにコピーされていました.
例えばパッケージ名をコピーして, $ sudo apt install \`xsel\` のようにして使うと便利そうです.

その他便利そうなオプションとして, -d があります.cutコマンドの-dと同じようにデリミタが指定できます.

$ nkf -w mntemsadext00_rct.csv | yank-cli -d,

こんな感じでcsvファイルに , を指定してあげると,各項目がコピーできます.

しかし,yankはページ跨ぎが出来ないようです.1ページ目のものしかコピーできません.こういう場合はyankに渡す前にフィルタしてあげるといいようです.grepや,昨日このblogで紹介したyankと同じ作者の「pick」もこういうときに便利です.

$ nkf -w mntemsadext00_rct.csv | grep 田代 | yank-cli -d,`
$ nkf -w mntemsadext00_rct.csv | pick | yank-cli -d,`

なにかの結果の一部が欲しいときに便利そうです.

環境1
$ dpkg-query -W yank pick
pick	2.0.2-1
yank	1.1.0-2
$ lsb_release -dr
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
$ uname -m
armv7l
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2
環境2
$ dpkg-query -W yank pick
pick	2.0.2-1.1
yank	1.2.0-1
$ lsb_release -dr
Description:	Debian GNU/Linux bullseye/sid
Release:	unstable
$ uname -m
x86_64

コマンドライン標準入力からあいまい検索が出来る「pick」

コマンドラインの標準入力をあいまい検索してその結果を主治力出来るpickというコマンドを知ったので試してみました.

たくさんの環境パッケージがあります.今回はDebian sid amd64とRaspberry Pi OS buster armhfで pick パッケージを導入しました.

$ sudo apt install pick (1)
$ ls ~/Downloads/*.pdf | wc -l (2)
181
$ ls ~/Downloads/*.pdf | pick | xargs -I{} xpdf "{}" (3)
rpi (4)
/home/matoken/Downloads/rpi_DATA_CM_3p0.pdf
/home/matoken/Downloads/rpi_MECH_3b_1p2.pdf
/home/matoken/Downloads/RPi-Camera-User-Manual.pdf
/home/matoken/Downloads/rpi_SCH_3b_1p2_reduced.pdf
/home/matoken/Downloads/rpi_SCH_4b_4p0_reduced.pdf
/home/matoken/Downloads/rpi_SCH_ZeroW_1p1_reduced.pdf
/home/matoken/Downloads/RPi_Pi Pico_Digital Edition.pdf
  1. pick パッケージ導入
  2. pdfファイルがたくさんある
  3. lsの結果をpickを挟んでxpdfに渡す
  4. 「rpi」とキーワードを入力することで絞り込まれる

pick 01

上下カーソル入力で結果を選択,Enterで確定.確定された行はSTDOUTに出力され,今回の例では xpdf で開かれる.

コマンド結果が多くて grep を繋いでいくみたいなときに pick を使うとインタラクティブに絞り込まれたりしてわかりやすいです.

似たものに sysboxchoose-stdin というものもあります.

環境1
$ dpkg-query -W pick
pick    2.0.2-1.1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64
環境2
$ dpkg-query -W pick
pick    2.0.2-1
$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ uname -m
armv7l
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2