Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

もう手放せない!なくてはならないBashエイリアス10選

Bashエイリアスとは、既存のBashコマンドを新しいコマンドで補完したり上書きしたりする仕組みです。エイリアスを使えば、POSIXターミナルでの作業環境を自由にカスタマイズできます。通常は$HOME/.bashrc$HOME/.bash_aliases($HOME/.bashrcから読み込まれる必要があります)に定義します。

多くのディストリビューションでは、新規ユーザーアカウントのデフォルトの.bashrcファイルに、いくつかの定番エイリアスがあらかじめ登録されています。以下はBashエイリアスの基本構文を示すシンプルな例です。

alias ls='ls -F'
alias ll='ls -lh'

ただし、すべてのディストリビューションでエイリアスが事前設定されているわけではありません。手動でエイリアスを追加した場合は、現在のBashセッションに読み込む必要があります。

$ source ~/.bashrc

あるいは、ターミナルを一度閉じて開き直せば、設定ファイルが再読み込みされます。

これらのエイリアスをBash初期化スクリプトに定義しておけば、llと入力するだけでls -lと同じ結果が得られます。便利な機能ですが、これはエイリアスの可能性のごく一部にすぎません。ここでは、一度使ったらもう手放せなくなる、厳選10個のBashエイリアスをご紹介します。

準備:まずは設定から

始める前に、~/.bash_aliasesというファイルを作成しましょう。

$ touch ~/.bash_aliases

次に、~/.bashrcに以下のコードが含まれていることを確認します。

if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

この記事のエイリアスを試したい場合は、.bash_aliasesファイルに入力し、source ~/.bashrcコマンドでBashセッションに読み込んでください。

1. ファイルサイズ順に並べ替える

GNOMEのNautilus、macOSのFinder、WindowsのエクスプローラーといったGUIファイルマネージャーからコンピューター生活を始めた方なら、ファイル一覧をサイズ順に並べ替える操作になじみがあるでしょう。ターミナルでも同じことはできますが、コマンドが少し長くなりがちです。

GNUシステムでは、次のエイリアスを設定に追加しましょう。

alias lt='ls --human-readable --size -1 -S --classify'

このエイリアスはltを、各項目のサイズを表示し、サイズ順にソートし、1列表示でファイル種別も示すlsコマンドに置き換えます。新しいエイリアスを読み込んで試してみましょう。

$ source ~/.bashrc
$ lt
total 344K
140K configure*
 44K aclocal.m4
 36K LICENSE
 32K config.status*
 24K Makefile
 24K Makefile.in
 12K config.log
8.0K README.md
4.0K info.slackermedia.Git-portal.json
4.0K git-portal.spec
4.0K flatpak.path.patch
4.0K Makefile.am*
4.0K dot-gitlab.ci.yml
4.0K configure.ac*
   0 autom4te.cache/
   0 share/
   0 bin/
   0 install-sh@
   0 compile@
   0 missing@
   0 COPYING@

macOSやBSDの場合、lsコマンドには同じオプションがないため、代わりにこちらのエイリアスを使います。

alias lt='du -sh * | sort -h'

このバージョンの出力結果は少し異なります。

$ du -sh * | sort -h
0       compile
0       COPYING
0       install-sh
0       missing
4.0K    configure.ac
4.0K    dot-gitlab.ci.yml
[...]
140K    configure
476K    autom4te.cache

実はLinuxでもこのコマンドは役立ちます。lsではディレクトリやシンボリックリンクがサイズ0として表示されるため、実際に知りたい情報と合わないことがあるからです。どちらを使うかはお好みで。

※このエイリアスのアイデアはBrad Alexander氏によるものです。

2. マウント済みドライブだけを表示する

mountコマンドはかつてとてもシンプルでした。1つのコマンドでコンピューター上のマウント済みファイルシステムの一覧を取得でき、ワークステーションにどんなドライブが接続されているかを確認するのに頻繁に使われていました。USBポートの数自体が多くはなかった時代は、出力が3〜4行を超えることも珍しく、結果は十分管理可能な量でした。

しかし今のコンピューターはもう少し複雑です。LVM、物理ドライブ、ネットワークストレージ、仮想ファイルシステムなどが絡み合い、mountの出力を解読するのは容易ではありません。

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)
[...]
/dev/nvme0n1p2 on /boot type ext4 (rw,relatime,seclabel)
/dev/sda1 on /run/media/seth/pocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)

この問題を解決するために、次のようなエイリアスを試してみましょう。

alias mnt="mount | awk -F' ' '{ printf \"%s\t%s\n\",\$1,\$3; }' | column -t | egrep ^/dev/ | sort"

このエイリアスはawkmountの出力を列ごとに解析し、本当に知りたい情報(マウントされているのはどんなファイルシステムではなく、どんなハードドライブか)だけに絞り込みます。

$ mnt
/dev/mapper/fedora-root  /
/dev/nvme0n1p1           /boot/efi
/dev/nvme0n1p2           /boot
/dev/sda1                /run/media/seth/pocket
/dev/sdc1                /run/media/seth/trip

macOSではmountコマンドの出力がそれほど冗長ではないため、エイリアスは不要かもしれません。ただ、簡潔なレポートが好みなら、こちらを試してみてください。

alias mnt='mount | grep -E ^/dev | column -t'

3. コマンド履歴をgrepで検索する

ターミナルである操作方法を編み出して「絶対に忘れないぞ」と心に誓ったのに、1時間後にはすっかり忘れてしまった——そんな経験は誰にでもあるはずです。

Bash履歴の検索は、誰もがときどき行う作業です。検索したい内容が正確にわかっているならCtrl+Rで履歴を逆方向検索できますが、探したいコマンドをうろ覚えしか思い出せないこともあります。

そんな作業を少し楽にしてくれるのが、このエイリアスです。

alias gh='history|grep'

使用例はこちら。

$ gh bash
482 cat ~/.bashrc | grep _alias
498 emacs ~/.bashrc
530 emacs ~/.bash_aliases
531 source ~/.bashrc

4. 更新日時順に並べ替える

毎週月曜日のことです。会社に着いて、パソコンの前に座り、ターミナルを開いたところで「先週の金曜日、何をしていたんだっけ?」と気づく。そんなときに必要なのは、最近更新されたファイルを一覧表示するエイリアスです。

lsコマンドを使えば、作業を再開する場所を見つけるためのエイリアスを作れます。

alias left='ls -t -1'

出力はシンプルですが、必要なら--longオプションで拡張できます。このエイリアスの出力は次のようになります。

$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml

5. ファイル数を数える

ディレクトリ内のファイル数を知りたいとき、その答えとなるのはUNIXコマンド構築の最も古典的な例のひとつです。lsコマンドでファイルを一覧表示し、-1オプションで出力を1列に制御し、その出力をwc(ワードカウント)コマンドにパイプして行数を数えます。

小さなシステム部品を組み合わせてユーザー自身がソリューションを構築できる、というUNIX哲学の見事な実演です。ただし、1日に何度も実行するには入力が長すぎるうえ、-Rオプションなしではディレクトリの中のディレクトリには対応できず、-Rを付けると余分な行が出力に混ざって計算が台無しになってしまいます。

そこで、このプロセスを簡単にしてくれるのが次のエイリアスです。

alias count='find . -type f | wc -l'

これはディレクトリ自体は無視しますが、ディレクトリの中身までは無視しません。プロジェクトフォルダに2つのディレクトリがあり、それぞれに2つのファイルが含まれている場合、プロジェクト全体のファイル数は4なので、このエイリアスは4を返します。

$ ls
foo   bar
$ count
4

6. Python仮想環境をすばやく作成する

Pythonでコーディングをしていますか?

頻繁に書いていますか?

そうであればご存じの通り、Python仮想環境の作成には最低でも53回のキーストロークが必要です。

49回も多すぎますね。しかし、vevaという2つの新しいエイリアスで簡単に解決できます。

alias ve='python3 -m venv ./venv'
alias va='source ./venv/bin/activate'

veを実行すると、Python3の標準的な仮想環境ファイルシステムを含むvenvという新しいディレクトリが作成されます。vaエイリアスは、現在のシェルでその環境を有効化します。

$ cd my-project
$ ve 
$ va
(venv) $ 

7. コピーにプログレスバーを追加する

プログレスバーは不正確さで悪名高く、よく笑いものにされます。それでも、心の奥底では誰もが欲しがっているものです。UNIXのcpコマンドにはプログレスバーがありませんが、詳細表示のための-vオプションがあり、コピー中の各ファイル名をターミナルに表示してくれます。なかなか良い裏技ですが、大きなファイルを1つコピーしているときに「あとどれくらいか」を知りたい場合には不向きです。

pvコマンドはコピー中にプログレスバーを表示してくれますが、デフォルトアプリとしてインストールされていることは少ありません。一方、rsyncコマンドはほぼすべてのPOSIXシステムにデフォルトで含まれており、リモート・ローカル双方のファイルコピーにおいて最も賢い方法のひとつとして広く認められています。

さらに嬉しいことに、rsyncにはプログレスバーが組み込まれています。

alias cpv='rsync -ah --info=progress2'

このエイリアスの使い方はcpコマンドと同じです。

$ cpv bigfile.flac /run/media/seth/audio/
          3.83M 6%  213.15MB/s    0:00:00 (xfr#4, to-chk=0/4)

このコマンドの興味深い副作用として、cpでは-rフラグが必要な場面でも、rsyncはフラグなしでファイルもディレクトリもコピーできる点が挙げられます。

8. ファイル削除の事故から身を守る

rmコマンドは使うべきではありません。rmのマニュアル自身がそう述べています。

警告: 'rm'でファイルを削除しても、通常はそのファイルの内容を復元することが可能です。内容が本当に復元不可能であることをより確実にしたい場合は、'shred'の使用を検討してください。

ファイルを削除したいときは、デスクトップで行うのと同じように、ファイルをゴミ箱へ移動すべきです。

POSIXではこれが簡単に実現できます。ゴミ箱はファイルシステム上のアクセス可能な実在の場所だからです。その場所はプラットフォームによって異なります。FreeDesktop環境ではゴミ箱は~/.local/share/Trashに、macOSでは~/.Trashにありますが、いずれにせよ、完全に消去する準備ができるまでファイルを隠しておくための、ただのディレクトリにすぎません。

このシンプルなエイリアスを使えば、ターミナルからファイルをゴミ箱に放り込めます。

alias tcn='mv --force -t ~/.local/share/Trash '

このエイリアスは、あまり知られていないmvのフラグを利用しています。通常は移動対象ファイルを最初に指定する必要がありますが、このフラグにより、ファイルを最後の引数として指定できるようになります。これで新しいコマンドを使って、ファイルやフォルダをシステムのゴミ箱へ移動できます。

$ ls 
foo  bar
$ tcn foo
$ ls
bar 

これでファイルは「消えた」ように見えます。しかし、冷や汗とともに「やっぱり必要だった」と気づくまでの話です。そのときはシステムのゴミ箱からファイルを救い出せばOK。ついでにBashとmvの開発者たちに感謝を伝えることを忘れずに。

注: FreeDesktop準拠度の高い、より堅牢なTrashコマンドが必要な場合は、「Trashy」を参照してください。

9. Gitワークフローをシンプルにする

ワークフローは人それぞれですが、どんな場合でも繰り返し作業というものは存在します。Gitを日常的に使っているなら、同じ一連の操作を何度も繰り返していることがあるでしょう。日中何度もmasterブランチに戻って最新の変更をpullするとか、タグを作成してはリモートへpushするとか、あるいはまったく別の何かかもしれません。

入力するのが嫌になったGitのおまじないがあれば、Bashエイリアスでその苦痛をいくらか軽減できるはずです。Gitは引数をフックに渡せる機能のおかげもあり、豊富な内省的コマンドセットを持っており、Bashで無理やり実現するような芸当をする必要から解放してくれます。

たとえば、Bashだけでプロジェクトのトップレベルディレクトリ(Bashにとっては完全に恣意的な概念です。コンピューターの絶対的な最上位はルートディレクトリですから)を特定しようとすると苦労しますが、Gitはシンプルなクエリで自分のトップレベルを把握しています。Gitフックについて学べば、Bashにはわからないあらゆる情報を取得でき、それをBashエイリアス経由で活用できるようになります。

次のエイリアスは、現在プロジェクト内のどこで作業していても、Gitプロジェクトのトップレベルを見つけてそこへ移動し、masterブランチに切り替えてgit pullを実行するものです。

alias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git pull'

この種のエイリアスは万能ではありませんが、比較的シンプルなエイリアスでも、面倒なナビゲーションやコマンド入力、プロンプト待ちの時間を大幅に削減できることの実例となっています。

もっとシンプルで、おそらくより汎用的なエイリアスは、Gitプロジェクトのトップレベルへ戻るものです。プロジェクト作業中は、そのプロジェクトがいわば「一時的なホーム」ディレクトリになるからです。「ホーム」への帰還が、実際のホームディレクトリへの移動と同じくらい簡単であるべきです。それを実現するのがこちら。

alias cg='cd `git rev-parse --show-toplevel`'

これでcgコマンド一発で、どれほど深い階層に潜っていても、Gitプロジェクトの最上部へ戻れます。

10. ディレクトリ移動と内容表示を同時に

(伝えられるところによると)ある著名な科学者は、cdの後にlsを入力するギークたちが消費するエネルギーを活用すれば、地球のエネルギー問題の多くを解決できると提唱したそうです。

これがよくあるパターンなのも無理はありません。一般にディレクトリを移動するときは、周囲に何があるのかを見たい衝動や必要性があるからです。

しかし、コンピューターのディレクトリツリーを「歩き回る」ことは、スタート&ストップの反復である必要はありません。

これは少しごまかしで、厳密にはエイリアスではありませんが、Bash関数を探求する絶好の口実になります。エイリアスは素早い置き換えに最適ですが、Bashでは.bashrcファイル(または、エイリアスファイルと同じように.bashrcから読み込む別の関数ファイル)にローカル関数を追加できます。

モジュール性を保つため、~/.bash_functionsという新しいファイルを作成し、.bashrcから読み込ませましょう。

if [ -e $HOME/.bash_functions ]; then
    source $HOME/.bash_functions
fi

関数ファイルに、次のコードを追加します。

function cl() {
    DIR="$*";
        # 引数がなければホームへ
        if [ $# -lt 1 ]; then 
                DIR=$HOME;
    fi;
    builtin cd "${DIR}" && \
    # お好みのlsコマンドを使用
        ls -F --color=auto
}

関数をBashセッションに読み込んで、試してみましょう。

$ source ~/.bash_functions
$ cl Documents
foo bar baz
$ pwd
/home/seth/Documents
$ cl ..
Desktop  Documents  Downloads
[...]
$ pwd
/home/seth

関数はエイリアスよりもはるかに柔軟ですが、その柔軟性と引き換えに、コードが意図通りに動作することを保証する責任が伴います。エイリアスはシンプルであるべきなので、簡潔さを保ちつつ有用性を追求しましょう。Bashの挙動を本格的に変更したい場合は、PATH上の場所に保存した関数やカスタムシェルスクリプトを使用してください。

ちなみに、cdlsの連携をエイリアスで実現する賢いハックもいくつか存在します。根気さえあれば、謙虚なエイリアスでも可能性は無限大です。

さあ、エイリアスと関数の世界へ

環境を自分好みにカスタマイズすることこそがLinuxの楽しさであり、効率を高めることが人生を変えるLinuxライフへの第一歩です。まずはシンプルなエイリアスから始めて、徐々に関数へとステップアップしていきましょう。あなたにとって必須のエイリアスがあれば、ぜひコメント欄で共有してください!

  1. これなしではもう生きられない!? 1日も手放せないソーシャルネットワークアプリ上位7選【インフォグラフィック】

    信じようと信じまいと、私たちは今や誰もがソーシャルメディアの網の中にすっかり取り込まれています。それほどまでに、朝起きて真っ先にするのがコーヒーを淹れることでも歯ブラシを手に取ることでもなく、FacebookやInstagramのアカウントをチェックすることになっているのです。 まだ信じられないという方は、ぜひ自分のスマートフォンを開いて、インストールされているソーシャルメディアアプリの数を数えてみてください。ほら、納得いただけましたよね? SNSへの依存はここまで深まっている 失礼は承知の上でお話ししますが、これらのソーシャルネットワークが私たちの生活にどれほど欠かせないものになっているかは

  2. Androidのブロートウェアは削除できる?ルート化なしでシステムアプリをアンインストールする方法

    Android端末からブロートウェアを削除することはできるのでしょうか?また、そのためにはルート化が必要なのでしょうか?専用アプリは必要なのか?詳しく見ていきましょう。 この記事では、Androidのブロートウェアを削除するための簡単な方法をすべてご紹介します。さらに、ルート化せずにAndroidのシステムアプリをアンインストールできるのか、他のアプリをダウンロードせずにこれらのアプリを取り除けるのかについても解説します(Playストアや非Playストアのアプリについては、別の記事で紹介します)。 ただし、Androidのブロートウェアの削除方法に入る前に、まずブロートウェアとは何かを理解して