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

なしでは生きていけないBashエイリアス

Bashエイリアスは、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の結果を取得します 、および lsと入力すると 昔ながらのの出力の代わりに、 ls。

これらのエイリアスは便利ですが、可能なことのほんの一部にすぎません。これがBashエイリアスのトップ10です。一度試してみると、これなしでは生きていけません。

最初に設定

始める前に、〜/ .bash_aliasesというファイルを作成します :

$ touch ~/.bash_aliases

次に、このコードが〜/ .bashrcに表示されていることを確認します ファイル:

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

この記事のエイリアスのいずれかを自分で試してみたい場合は、それらを .bash_aliasesに入力してください。 ファイルを作成し、 source〜/ .bashrcを使用してBashセッションにロードします。 コマンド。

ファイルサイズで並べ替え

GNOMEのNautilus、MacOSのFinder、WindowsのExplorerなどのGUIファイルマネージャーを使用してコンピューティングライフを開始した場合は、ファイルのリストをサイズで並べ替えるのに慣れているでしょう。ターミナルでも同じことができますが、正確には簡潔ではありません。

このエイリアスをGNUシステムの構成に追加します:

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

このエイリアスはltを置き換えます 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
4.0K    flatpak.path.patch
4.0K    git-portal.spec
4.0K    info.slackermedia.Git-portal.json
4.0K    Makefile.am
8.0K    README.md
12K     config.log
16K     bin
24K     Makefile
24K     Makefile.in
32K     config.status
36K     LICENSE
44K     aclocal.m4
60K     share
140K    configure
476K    autom4te.cache

実際、Linuxでも、 であるため、このコマンドは便利です。 lsを使用する ディレクトリとシンボリックリンクのサイズが0としてリストされますが、これは実際に必要な情報ではない可能性があります。それはあなたの選択です。

このエイリアスのアイデアを提供してくれたBradAlexanderに感謝します。

マウントされたドライブのみを表示

マウント コマンドはとても単純でした。 1つのコマンドで、コンピューターにマウントされているすべてのファイルシステムのリストを取得でき、ワークステーションに接続されているドライブの概要を示すために頻繁に使用されていました。ほとんどのコンピュータにはそれ以上のUSBポートがないため、3つまたは4つ以上のエントリが表示されたのは印象的でした。そのため、結果は管理しやすくなりました。

コンピューターはもう少し複雑になり、LVM、物理ドライブ、ネットワークストレージ、仮想ファイルシステムの間で、マウントの結果が得られます。 解析が難しい場合があります:

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)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
[...]
/dev/nvme0n1p2 on /boot type ext4 (rw,relatime,seclabel)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
[...]
gvfsd-fuse on /run/user/100977/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)
/dev/sda1 on /run/media/seth/pocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
/dev/sdc1 on /run/media/seth/trip type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

この問題を解決するには、次のようなエイリアスを試してください。

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

このエイリアスはawkを使用します マウントの出力を解析します 列ごとに、出力をおそらく探しているもの(ファイルシステムではなくハードドライブがマウントされているもの)に減らします:

$ 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では、マウント コマンドはひどく冗長な出力を提供しないため、エイリアスはやり過ぎかもしれません。ただし、簡潔なレポートが必要な場合は、次のことを試してください。

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

結果:

$ mnt
/dev/disk1s1  on  /                (apfs,  local,  journaled)
/dev/disk1s4  on  /private/var/vm  (apfs,  local,  noexec,     journaled,  noatime,  nobrowse)
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
変更時間で並べ替え

それは毎週月曜日に起こります。あなたは仕事に取り掛かり、コンピューターの前に座り、ターミナルを開き、先週の金曜日に何をしていたかを忘れていることに気づきます。必要なのは、最近変更されたファイルを一覧表示するためのエイリアスです。

lsを使用できます 中断したところを見つけるのに役立つエイリアスを作成するコマンド:

alias left='ls -t -1'

出力は単純ですが、- longで拡張できます。 必要に応じてオプション。リストされているエイリアスは、これを表示します:

$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml
ファイルを数える

ディレクトリにあるファイルの数を知る必要がある場合、解決策はUNIXコマンド構築の最も古典的な例の1つです。 lsを使用してファイルを一覧表示します。 コマンドで、出力を -1で1列のみになるように制御します オプションを選択し、その出力を wcにパイプします (word count)コマンドを使用して、単一ファイルの行数をカウントします。

これは、UNIX哲学により、ユーザーが小さなシステムコンポーネントを使用して独自のソリューションを構築する方法の見事なデモンストレーションです。このコマンドの組み合わせは、1日に数回実行する場合にも入力が多く、 -Rを使用しないとディレクトリのディレクトリに対して正確に機能しません。 オプション。出力に新しい行を導入し、演習を役に立たなくします。

代わりに、このエイリアスによりプロセスが簡単になります:

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

これは、ディレクトリを無視してファイルをカウントしますが、はカウントしません ディレクトリの内容。プロジェクトフォルダに2つのディレクトリがあり、それぞれに2つのファイルが含まれている場合、プロジェクト全体に4つのファイルがあるため、エイリアスは4つを返します。

$ ls
foo   bar
$ count
4

Python仮想環境を作成する

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

Pythonでたくさんコーディングしますか?

そうした場合、Python仮想環境を作成するには、少なくとも53回のキーストロークが必要であることがわかります。

49回多すぎますが、ve<と呼ばれる2つの新しいエイリアスで簡単に回避できます。 / strong> およびva

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

veを実行しています venvという名前の新しいディレクトリを作成します 、Python3の通常の仮想環境ファイルシステムが含まれています。 va エイリアスは現在のシェルの環境をアクティブにします:

$ cd my-project
$ ve
$ va
(venv) $
コピープログレスバーを追加

プログレスバーは不正確であるため、誰もが楽しんでいます。それでも、深く、私たちは皆、それらを望んでいるようです。 UNIXのcp コマンドにはプログレスバーはありませんが、 -vがあります 冗長性のオプション。これは、端末にコピーされる各ファイルの名前をエコーすることを意味します。これはかなり良いハックですが、1つの大きなファイルをコピーしていて、まだ転送されていないファイルの量を示したい場合は、あまりうまく機能しません。

pv コマンドはコピー中に進行状況バーを提供しますが、デフォルトのアプリケーションとしては一般的ではありません。一方、 rsync コマンドは、利用可能なほぼすべてのPOSIXシステムのデフォルトのインストールに含まれており、リモートとローカルの両方でファイルをコピーする最も賢い方法の1つとして広く認識されています。

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

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)
>

このコマンドを使用することの興味深い副作用は、 rsync -rなしでファイルとディレクトリの両方をコピーします cpにフラグを立てる そうでなければ必要になるでしょう。

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

rmは使用しないでください 指図。 rm マニュアルにもそう書かれています:

警告 :「rm」を使用してファイルを削除すると、通常、そのファイルの内容を復元できます。コンテンツが本当に回復不能であることをさらに保証したい場合は、「シュレッド」の使用を検討してください。

ファイルを削除する場合は、デスクトップを使用する場合と同じように、ファイルをゴミ箱に移動する必要があります。

ゴミ箱はファイルシステム内のアクセス可能な実際の場所であるため、POSIXを使用するとこれが簡単になります。その場所は、プラットフォームによって異なる場合があります。FreeDesktopでは、ゴミ箱は〜/ .local / share / Trashにあります。 、MacOSでは〜/。ゴミ箱 、いずれにしても、ファイルを完全に消去する準備ができるまで、見えないようにしたいファイルを配置するディレクトリにすぎません。

この単純なエイリアスは、端末からゴミ箱にファイルを投げ込む方法を提供します:

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

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

$ ls 
foo  bar
$ tcn foo
$ ls
bar

これでファイルは「なくなりました」が、冷た​​い汗でまだ必要であることに気付くまでです。その時点で、システムのゴミ箱からファイルをレスキューできます。必ずバッシュとmvをチップしてください 途中で開発者。

注: より堅牢なゴミ箱が必要な場合 FreeDesktopへの準拠を強化したコマンド。Trashyを参照してください。

Gitワークフローを簡素化する

誰もが独自のワークフローを持っていますが、通常、何があっても反復的なタスクがあります。定期的にGitを使用している場合は、かなり頻繁に繰り返されるシーケンスが存在する可能性があります。マスターブランチに戻って、日中に何度も最新の変更をプルしていることに気付くかもしれません。あるいは、タグを作成してからリモートにプッシュしていることに気付くかもしれません。あるいは、まったく別のことかもしれません。

タイピングに飽きてきたGitの呪文に関係なく、Bashエイリアスを使用すると痛みを和らげることができる場合があります。引数をフックに渡す機能のおかげで、Gitには豊富な内省コマンドのセットがあり、Bashで不思議な偉業を実行する必要がなくなります。

たとえば、Bashでプロジェクトの最上位ディレクトリ(Bashに関する限り、コンピューターの絶対的な最上位はルートディレクトリであるため、これは完全に任意の指定です)を見つけるのに苦労するかもしれませんが、Git簡単なクエリでそのトップレベルを知っています。 Gitフックについて調べると、Bashが何も知らないあらゆる種類の情報を見つけることができますが、Bashエイリアスを使用してその情報を活用できます。

これは、現在作業しているプロジェクトのどこに関係なく、Gitプロジェクトのトップレベルを検索し、ディレクトリをそのプロジェクトに変更し、マスターブランチに変更して、Gitプルを実行するためのエイリアスです。

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

この種のエイリアスは、普遍的に役立つエイリアスではありませんが、比較的単純なエイリアスを使用すると、面倒なナビゲーション、コマンド、プロンプトの待機を大幅に削減できることを示しています。

より単純で、おそらくより普遍的なエイリアスは、Gitプロジェクトのトップレベルに戻ります。このエイリアスは、プロジェクトで作業しているときに、そのプロジェクトが多かれ少なかれ「一時的なホーム」ディレクトリになるため便利です。実際の家に行くのと同じくらい簡単に「家に帰る」必要があります。これを行うためのエイリアスは次のとおりです。

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

ここで、コマンド cg ディレクトリ構造の奥深くにいても、Gitプロジェクトのトップに移動します。

ディレクトリの変更とコンテンツの表示を同時に行う

cd と入力するオタクが消費するエネルギーを利用することで、地球のエネルギー問題の多くを解決できるということは、かつて(伝えられるところでは)一流の科学者によって提案されました。 続いてls

これは一般的なパターンです。一般に、ディレクトリを変更すると、周囲の状況を確認する衝動や必要性があるためです。

ただし、コンピュータのディレクトリツリーを「ウォーク」することは、開始と停止のプロセスである必要はありません。

これはエイリアスではないため、不正行為ですが、Bash関数を探索するための優れた言い訳です。エイリアスは迅速な置換に最適ですが、Bashでは .bashrcにローカル関数を追加できます ファイル(または .bashrcにロードする別の関数ファイル 、エイリアスファイルと同じように)

モジュール化を維持するには、〜/ .bash_functionsという新しいファイルを作成します 次に、 .bashrcを使用します ロードする:

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

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

function cl() {
    DIR="$*";
        # if no DIR given, go home
        if [ $# -lt 1 ]; then
                DIR=$HOME;
    fi;
    builtin cd "${DIR}" && \
    # use your preferred ls command
        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内の場所に保存されている関数またはカスタムシェルスクリプトを使用します。 。

記録のために、があります cdを実装するための巧妙なハック およびls エイリアスとしてシーケンスするので、十分な忍耐力があれば、謙虚なエイリアスを使用しても空が限界です。

エイリアシングと機能を開始

環境をカスタマイズすることがLinuxを楽しくし、効率を上げることがLinuxの人生を変えるものです。簡単なエイリアスから始めて、関数に移行し、コメントに必須のエイリアスを投稿してください!


  1. これなしでは生きていけない上位 7 つのソーシャル ネットワーク アプリ - インフォグラフィック

    信じられないかもしれませんが、私たちは皆、ソーシャル メディアのウェブに完全に巻き込まれています。はい、朝一番にすることは、Facebook と Instagram のアカウントをチェックすることです。コーヒーと歯ブラシを手に取る前であっても、これを最初に行います。それでも信じられない場合は、スマートフォンをチェックして、所有しているソーシャル メディア アプリの数を数えてください。えっ!ポイントを正当化しましたか? こちらもお読みください:知っておくべき 25 の Facebook のヒントとコツ これらのソーシャル ネットワークが私たちにとってどれほど重要であるかを知っているので、気分を害

  2. Android Bloatware を削除できるかできないか

    できれば、Android デバイスをルート化する必要がありますか?ブロートウェアを取り除くために他のアプリが必要ですか?調べてみましょうか Android ブロートウェアを削除できる簡単な方法をすべて試してみます。さて、このブログ全体を通して、root なしで Android システム アプリをアンインストールできるかどうか、および他のアプリをダウンロードせずにそのようなアプリを削除できるかどうかを調べます (そのような Play ストアと非 Play ストアがたくさんあるため)。アプリについては、他のブログで取り上げる予定です)。 ただし、Android ブロートウェア を取り除く方