世界を動かす技術を、日本語で。

現代のLinuxツール

概要

UNIXやLinuxの コマンドライン ツールの 近代的代替 や、便利な リソース を紹介。 CLIツールの 新世代版 や、 補助ツールGUIアプリ も網羅。 各ツールの 特徴や用途 を簡潔にまとめて解説。 初心者から上級者 まで役立つ情報をリスト形式で整理。 効率化や快適性 を重視したツール選定。

その他リソース

  • modern unix
    • UNIXコマンドの 近代的・高速・使いやすい代替ツール
  • book of secret knowledge
    • 各種 チートシート・ツール・ノウハウ のまとめ
  • awesome linux software
    • Linuxアプリ の厳選リスト
  • archlinux utilities
    • Arch Linux 向けユーティリティの 包括的リスト と説明

CLI置き換えツール

  • bat
    • cat のクローン、 シンタックスハイライトgit連携 対応
  • exa
    • ls/tree の近代的代替、メンテナンス終了
  • eza
    • exa フォークの ls/tree、活発な開発
  • lsd
    • 次世代 ls後方互換 あり
  • delta
    • git/diff 出力用の ビューワ
  • ncdu
    • duncurses で直感的に表示
  • dust
    • Rust製 のより直感的な du 代替
  • duf
    • より優れた df 代替
  • broot
    • tree よりも強力な ナビゲーション 機能
  • fd
    • find のシンプル・高速・ユーザーフレンドリー版
  • ripgrep
    • gitignore を考慮した 超高速grep
  • ag (The Silver Searcher)
    • ack に似た 高速コード検索
  • fzf
    • 汎用 コマンドラインファジーファインダー
  • bfs
    • 幅優先探索 を使った find 代替
  • mcfly
    • シェル履歴を インタラクティブに検索
  • choose
    • cut/awk の人間工学的&高速な代替
  • jq
    • JSON データ用の sed
  • sd
    • 直感的な find/replace CLI、 sed 代替
  • bottom
    • クロスプラットフォームな グラフィカルプロセス/システムモニター
  • glances
    • top/htop の代替
  • gtop
    • ターミナル用 システムモニターダッシュボード
  • hyperfine
    • コマンドラインベンチマーク ツール
  • gping
    • グラフ表示 付きの ping
  • procs
    • ps のRust製代替
  • httpie
    • API時代 に適した近代的CLI HTTPクライアント
  • curlie
    • curl のパワーと httpie の使いやすさを融合
  • xh
    • httpie のパフォーマンス重視代替
  • zoxide
    • cd コマンドのスマート化、 z に着想
  • micro
    • 近代的な ターミナルテキストエディタ
  • nnn
    • 高速・軽量な ターミナルファイルマネージャー

新しいCLIツール

  • up
    • ライブプレビュー 付きパイプライン構築

ヘルプツール

  • ManKier
    • 簡潔で美しいmanページ を提供
  • explain shell
    • シェルコマンドを わかりやすく解説
  • tldr
    • 実用例中心 の簡潔なmanページ
  • tealdeer
    • tldr の高速Rust実装
  • explainshell
    • コマンド引数を ヘルプテキスト にマッチ
  • cheat.sh
    • tldrページ も統合した統一チートシート

GUIツール

  • baobab
    • GUIの ディスク使用量アナライザー
  • stacer
    • GUIの システム最適化・モニタリング ツール

Hackerたちの意見

二つ目のアイテムは、ls/treeの現代的な置き換えらしいけど、「メンテナンスされてない」って、全然「現代的」には思えないな…

良いオープンソースって、今はコミュニティによってフォークされてるんだよね。たった一人のメンテナーだけじゃなくて。eza: https://github.com/eza-community/eza

文字通り、次の行でその置き換えのezaが挙げられてるよ。

逆に、それこそが「現代的」って感じだよね。これらのツールがいつメンテナンスされなくなるのか気になるな。Coreutilsは、問題があっても、リストにある多くのツールの作者が生まれる前からメンテナンスされてるし。

それがリンディ効果ってやつだね。古いツール、例えばlsはもう長い間使われてるから生き残ってるけど、現代のツールは長く続かないことが多い。未来の寿命は現在の年齢に比例するんだよね。

表に「どんな問題を解決するのか」っていう追加の列があればいいのに。あ、あと「Rustで書かれている」ってのはカウントしないからね。

多くのエントリーにはこの詳細が含まれてるよね。例えば「シンタックスハイライト付き」とか「ncursesインターフェース」とか「もっと直感的」とか。確かに「Rustで書かれてる」とか「現代的」とか「より良い」ってのはあんまり役に立たないよね!

「Rustで書かれてる」って、マジで笑った。ほんとに。昔、大企業で働いてた時に開発チームが自社製品を説明してたんだけど、競合と何が違うのか聞いたら、「うちはGoで書かれてます」って返ってきた。#顔Palm

GPL以外のライセンスを使うのはカウントされないよ。

そのツールの多くはWindowsでも使えるから、そこが気に入ってる。

この記事は2023年のものだけど、ほとんどの「現代的なツール」は、半分くらいはもう新しくてキラキラした流行りの置き換えがあるんじゃないかな。

ここにはたくさんのツールがあるね。半分でも十分価値があるよ。

逆だと思うな。これらのツールのほとんどは、実際には非常に強力なGNUツールの再発明に過ぎないと思う。少し時間をかければ、その良さがわかるはず。

これらは客観的には優れているかもしれないけど(試したわけじゃないけど)、OSのインストールを変えたり、VMを設定したり、どこかにSSHしたりする時に、これを好むのは終わらない苦労だって気づいたよ。新しい環境ごとにこれを設定したくないし、個人のパソコンではこれと従来のものを混ぜて使うのも嫌だな。クラシックなツールを学んで、しっかり使いこなせば、もっと楽になるよ。

Unixがずっと出荷してきたものにこだわるべきだと言いたかったんだけど、GNUってその考えをすでに破ってるよね?

「クラシックなツールを学んで、しっかり使いこなせば、人生がずっと楽になる。」 それには同意だけど、だからって代替手段を使ったり学んだりするのを止める理由にはならないよね。利用可能なものに基づいて、自分の好きな選択肢を使えばいいと思う。プログラミング言語やグラフィックアプリケーションみたいなものには当てはまらないかもしれないけど、ページャーみたいなものなら、簡単に切り替えられるはずだよ。

いくつかのツールはUXがすごく良いから好きだけど、毎回Unixボックスにインストールするのはripgrepだけだね。

自分のマシンでほとんどの時間を過ごす人もいるよね。便利さのメリットは大きいし、クラシックなツールを十分に知ってれば、他のサーバーで作業する時のためにはそれで十分だと思う。みんなが毎日たくさんの異なるサーバーに手動でログインするシステム管理者ってわけじゃないし。

「OSのインストールを変更したらapt-get/pacman/dnf/brew installが必要になる」 そうだね、OSを変えるなら、これらのツールやお気に入りのブラウザ、テキストエディタもインストールしなきゃいけないよね。 > 「どこでもSSHで接続する」 SSHで接続するとGUIがないから、GUIツールを使わない理由にはならないよね。 > 「個人のコンピュータではこれらを混ぜて使って、他では伝統的なものを使う」 本当に問題が見えないな。いくつかのツールは便利だし、なくても大丈夫だけどね。例えばbatはcatの代わりにはならないし、ただシンタックスハイライト付きでデータを出力するだけだから、あってもなくてもいいかな。

Nixが好きな理由の一つは、基本的にどこでも動くからなんだ。ホストOSがLinuxかmacOSなら問題なし。これだけの環境があれば十分だし、Nixをインストールするのにrootアクセスも必要ないんだ。いろんな方法でrootレスでインストールできるからね。でも、もしNixが使えない状況になったとしても、クラシックなツールは全然使えるよ。どっちか一つってわけじゃないし、両方使えるからね。

中には、インストールするのにちょっとした手間があっても、それだけの価値があるものもあるよ。クラシックなツールはよく知ってるけど、fdとripgrepは毎回使いたい。

既存のツールの代わりになる「現代的」なツールは使うことが多いね。例えば、lsをezaにエイリアスして、カスタム設定スクリプトの一部にしてる。ezaはほとんどのシナリオでlsのように動くよ。自分が管理してて、設定が自分好みの環境にいるときは、ちょっとおしゃれなlsが使えるし、いいデフォルトがある。別の環境にいるときは、特に考えなくてもlsが使えるし、筋肉の記憶も同じだから、何も失ってない。標準のツールセットとは全然違う動きをするツールがあるなら、それを使う前に本当に役立つかどうかを考えなきゃいけないね。

それはUNIXの哲学に反すると思う。ツールは「一つのことをうまくやる」っていうのが基本だから、優れた代替品が出てきたら置き換えられるべきだよね。シンプルなユーティリティの本質ってそこだと思う。まずはクラシックなツールを学ぶのが大事だし、それはキャリアにとって大きな投資だけど、新しい代替品も学ぶべきだよ。batやezaにはあまり興味ないけど、fd(findの代替)やsd(sedの代替)みたいなツールは本当に時間を節約できるよ。

初めてUnixアカウントを取った時、私はGnu emacsの文化にいて、1989年から2005年くらいまでemacsを使ってた。viに切り替えることにした理由は3つあって、(1) GUIエディタを主に使ってる文化とあまり衝突しないようにするため、^Sがemacsとは全然違うことに使われてるから、(2) vimはカット&ペーストを壊す継続文字を入れないから、(3) emacsがインストールされてない壊れたマシンを助けることが多かったから、緊急時にすでにインストールされているエディタを頼りにできるのは助かる。 [1] 友達が「ウォードダイヤル」して、地元の電話番号を全部かけて、BBSにそのリストを投稿した時のことは忘れられない。いくつかの番号には「uucp/uucp」でログインできたんだ。ベルのセキュリティは彼が地域の電話を全部かけたことを知ってたと思うけど、彼の親がサービスを測定してたから、請求の問題を処理させることにしたんじゃないかな。

基本的にターミナルに住んでるんだけど、これらのツールはどれも自分には関係ない問題を解決するためのもので、しかも自分のシステムにはインストールされてない。なのに、なぜか何万ものGitHubスターが付いてる。正直、何が起こってるのか全然わからない。

コアのUnixツールセットは本当に優れてるから、それだけで十分やっていけるよ。これらのツールの多くは確かに良いけど、必須ではないし、デフォルトでは広く利用可能ってわけでもないよ。

どうやら「RustやGoで書き直せ」っていう人たちに人気みたいだね。つまり、もうクールな仲間には入れないってことだ。

俺は基本的にターミナルに住んでる。でも、これらのツールは全部、俺が抱えてない問題の解決策を提供してくれるし、俺のシステムにはインストールされてないし、なぜか何万ものGitHubスターが付いてる。 > 本当に何が起こってるのか分からない。俺は音楽ライブラリに住んでるけど、ポップアーティストは全部、俺が好きじゃない曲を提供してるし、ライブラリにも入ってないし、なぜか何百万枚もアルバムが売れてる。ほんとに何が起こってるのか分からない。冗談はさておき、これらのツールを使ったことある?俺はvimを使う理由が分からなかったけど、実際に試してみたら理解できたよ。

ちょっと気になったんだけど、隠しファイル(例えば.git)を無視して、特定のファイル拡張子だけをマッチさせるように再帰的にgrepするにはどうすればいいの?(例えば、rg -g '*.foo' barみたいに。)俺もコマンドラインをよく使うけど、これが一番よく使うコマンドの一つで、Unixの組み込みツールで優雅にやる方法が分からないんだ。(同じように、正規表現やグロブにマッチするファイルを見つける質問もあるんだけど、明らかに欲しくないものは無視して、例えばfd '.foo.*'みたいに。)

jqを使わずに大きなJSONファイルをフィルタリングして変換するにはどうすればいい?

ターミナルで一日中何してるの?ツールセットを改善したいって思わないの?自分でツールを全部作ってるの?

fzfを使ったことないの?それじゃターミナルでの生活は厳しいね。直接実行するのはあんまり便利じゃないけど、ほとんどのシェルにはfzfサポートのプラグインがあって、Ctrl+Rでbash_history(またはfish_historyとか)をファジー検索できるし、Ctrl+Tで現在のディレクトリ内のファイルをファジー検索できるよ。

リストにはjqが含まれてるね。正直、jqが解決する問題には一度も直面したくないけど、まあ、ここにいるわけで。ripgrepはインストールしてるけど、テキストエディタの統合を通じてしか使ってない。fzfはアドホックなTUIを作るのに便利だよね。fdは意味があるかもしれない(findより速いって聞いたけど)、でもfindの使い方はもう十分知ってるし。記事にある「次世代のls」系のツールはちょっと混乱するね。

いろんなネットワークのサーバーにログインすることが多いけど、カスタムツールを使う価値はほとんどないね。90%のシステムには使えないから。追加でインストールするツールは限られてて、デフォルトのansible-configに入れてるから、すぐにシステムに反映されるけど、リストは短くまとめるようにしてる。管理してるシステムの95%はdebianかubuntuだから、ほぼ同じベースラインを使うし、ackやetckeeper、vim、pv、dstatみたいなツールを追加してる。

emacsをOSとして使うのは、システムにあるものに慣れるのにいい理由の一つだね。「GNUは私のオペレーティングシステム、linuxはただのカーネル」っていうのもその通り。私も長いことlinuxを管理してるから、君の意見には賛成だよ。だから、誰かがlinuxを学んでるって言ったら、まず「info」ってターミナルに打ち込んで、全部読んでみろって言うんだ。それで90%の管理者より先に進めるから。言わないけど、その理由は、ビルトインのツールが何かを知っておくことが、モジュール化されたスクリプトを書く上で重要だからだよ。もちろん、昔はシステムにviしかなかったし、nanoすらデフォルトじゃなかったけど、今はidempotentなci/cd設定をやってるから、好きなtuiエディタを追加するのは簡単なはず。

「サーバー」がキーワードだね。あのページに載ってるツールのいくつかは、一般的なsysadminユーティリティの少し「改善」されたバージョンに過ぎないから、確かにそれはあまり価値がないかも。でも、プログラミングをする少数のマシンにインストールするような本当に開発ツールもあるから、それは価値があるかもしれない。私が特に気になるのは、ripgrep(本当に優れた再帰的grepツール)、jq(JSONプロセッサ - 標準のunixツールキットには代替がない)、hyperfine(ベンチマーク)だね。

「~としての誰か」とかいう投稿の relevance は何なの?これらのツールがあなたの厳選したリモートコンピュータにインストールするツールリストに合わないからって、誰も気にしないよ。これらはローカルコンピュータにインストールして、いくつかの利点を享受すればいいじゃん。

またこのサイトを個人のメールボックスと混同してるね。ここは公共の掲示板だから、見えるメッセージは特にあなたのために書かれたわけじゃないよ - このブログ投稿も含めて。

これらのアプリをリモートセッションに持ち込むためのツールやSSH拡張ってあるのかな?そんなこと可能なの?小さいファイルサイズのツールを一時フォルダに入れて使うっていうのは考えられるけど、自動化もできそうだよね。それってセキュリティ的に問題あるのかな?これらのツールはリモートセッションが持ってる以上の権限が必要だったりする?もしかして、これらのアプリのポータビリティが主な問題なのかな?これは確かに多くの人が感じてることだと思うし(私もそう感じたことあるし)、実際に可能なの?

こういうリストはいつも楽しみだな。多くの人が少なくとも一つか二つはこれらのツールを取り入れられると思う。私の場合は、ripgrepとjqがそう。前者はgrepの代わりに使えるし、後者は解決したい問題を解決してくれる。リストの他のツールも試してみるつもり。lsdとdustは特に気になるね。みんなが少しずつツールを改善していくのを見るのが楽しい。新しいツールが自分には役立たなくても、その努力には感謝してる。どれも素晴らしいツールだよ。ちょっとした現代的な工夫を加えて、素晴らしいツールをさらに良くしてくれる。頑張ってくれた人たちに感謝!コミュニティが確実に良くなってるよ。

多くのlinux管理者がそんなリストを持ってると思う。私のは特に、できるだけGPL化することを意識して作ってる。でも、このikrima.devのフォーマットはすごく好きだな!他の情報も素晴らしいし、ざっと見る価値があるよ。

deltaは試したことないけど、diffにはdifftasticを推してるよ:https://difftastic.wilfred.me.uk/ これは純粋な文字ベースのdiffよりも大幅に改善されてる。

一つのチームが一貫したデザイン(パラメータ、色、テーブルなど)で開発した現代的なスイートなツールがあればいいなと思う。

このリストを読みたいけど、カラースキームが今まで見た中で最もアクセスしづらい。暗い灰色がかった青のテキストに、暗い灰色の背景に暗い青灰色のハイライト。すごいね。もしここに新米デザイナーがいるなら、これを避けるべき例のリストに加えておいてね。