便利なBashエイリアスと関数の紹介

提供:Dev Guides
移動先:案内検索

序章

コマンドラインで操作すればするほど、使用するコマンドの大部分が使用可能なコマンドの非常に小さなサブセットであることがわかります。 ほとんどのタスクは習慣的であり、毎日同じように実行できます。

最も一般的なコマンドユーティリティの多くのメーカーは、短縮名を使用して余分な入力を排除しようとしています(「list」の代わりに「ls」、「change-directory」の代わりに「cd」と入力して、毎日何回のキーストロークを節約できるか考えてみてください。 」)、これらは遍在していません。 さらに、多くの人は常に同じいくつかのオプションを有効にしてコマンドを実行します。

幸い、bashを使用すると、エイリアスとシェル関数を使用して、独自のショートカットと時間の節約を作成できます。 このガイドでは、これらを利用する方法について説明し、正しい方向に進むためのいくつかの有用な例を示します。

Bashエイリアスを宣言する方法

bashでエイリアスを宣言するのは非常に簡単です。 とても簡単なので、今すぐ試してみてください。

コマンドラインにこれらを入力するだけで、シェルセッションの間続くエイリアスを宣言できます。 構文は次のようになります。

alias alias_name="command_to_run"

隣接する要素と等号の間に間隔がないことに注意してください。 これはオプションではありません。 ここにスペースを入れると、コマンドが壊れます。

ここで、一般的なbashエイリアスを作成しましょう。 多くの人が頻繁に使用する慣用的なコマンドフレーズの1つは、ls -lhaまたはls -lhAです(2番目は現在および親のディレクトリリストを省略します)。 次のように入力すると、llという名前のショートカットを作成できます。

alias ll="ls -lhA"

これで、llと入力すると、隠しディレクトリを含む現在のディレクトリのリストが長い形式で取得されます。

ll

-rw-r--r-- 1 root root 3.0K Mar 20 18:03 .bash_history
-rw-r--r-- 1 root root 3.1K Apr 19  2012 .bashrc
drwx------ 2 root root 4.0K Oct 24 14:45 .cache
drwx------ 2 root root 4.0K Mar 20 18:00 .gnupg
-rw-r--r-- 1 root root    0 Oct 24 17:03 .mysql_history
-rw-r--r-- 1 root root  140 Apr 19  2012 .profile
drwx------ 2 root root 4.0K Oct 24 14:21 .ssh
-rw------- 1 root root 3.5K Mar 20 17:24 .viminfo

エイリアスを削除したい場合は、unaliasコマンドを使用してください。

unalias ll

エイリアスが削除されました。

引数なしでaliasコマンドを渡すことにより、構成されているすべてのエイリアスを一覧表示できます。

alias

エイリアスを一時的にバイパスするには(たとえば、lsls -aにエイリアスします)、次のように入力します。

\ls

これにより、エイリアスバージョンを使用せずに、パスにある通常のコマンドが呼び出されます。

設定を解除しなかった場合、llエイリアスは現在のシェルセッション全体で使用できますが、新しいターミナルウィンドウを開くと、これは使用できません。

これを永続的にするには、シェルセッションの開始時に読み取られるさまざまなファイルの1つにこれを追加する必要があります。 人気のある選択肢は、~/.bashrc~/.bash_profileです。 ファイルを開いて、そこにエイリアスを追加するだけです。

nano ~/.bashrc

下部または任意の場所に、コマンドラインで追加したエイリアスを追加します。 bashエイリアス専用のセクション全体を宣言するコメントを自由に追加してください。

#########
# Aliases
#########

alias ll="ls -lhA"

このエイリアスまたはバリエーションは、実際にはすでにファイルに含まれている可能性があります。 多くのディストリビューションには、いくつかの便利なエイリアスを含む一連の標準bash構成ファイルが付属しています。

ファイルを保存して閉じます。 追加したエイリアスは、次に新しいシェルセッションを開始したときに使用できるようになります。 ファイルに加えた変更をcurrentセッションに読み込むには、bashにファイルを今すぐ再読み込みするように指示します。

source ~/.bashrc

エイリアスの例

独自のエイリアスを作成する方法がわかったので、次に役立つ可能性のある人気のあるエイリアスについて説明します。 これらはWeb全体で見つけることができ、一部はディストリビューションのデフォルトのbash構成にも含まれている場合があります。

ナビゲーションとリスト

最も単純なLinuxコマンドの多くは、いくつかのフォーマットとオプションを適用するときにさらに役立ちます。

上記のlsの例の1つについて説明しましたが、他にも多くの例があります。

lsを列に表示し、デフォルトでファイルタイプインジケーター(「/」などのディレクトリの終了)を表示します。

alias ls="ls -CF"

また、正しいコマンドを呼び出させるためのいくつかのタイプミスを予測することもできます。

alias sl="ls"

また、出力をlessにパイプして、長い形式の大きなディレクトリリストを表示するためのエイリアスを作成しましょう。

alias lsl="ls -lhFA | less"

lsから外れて、cdに役立つコマンドを試してみてはどうでしょうか。

スペースを忘れた場合でも、これは親ディレクトリに変更されます。

alias cd..="cd .."

..のエイリアスを作成して、cdの部分を完全に切り取ることもできます。

alias ..="cd .."

次のエイリアスを設定することで、現在のディレクトリ内のファイルを簡単に見つけることができます。

alias fhere="find . -name "

システムエイリアス

監視コマンドとシステム統計コマンドのいくつかはどうですか? 私は毎回同じオプションでこれらを呼び出すので、いくつかのエイリアスを作成したほうがよいでしょう。

これは、ファイルシステムタイプを含む人間が読める単位でディスク使用量を一覧表示し、下部に合計を出力します。

alias df="df -Tha --total"

優先するdu出力のエイリアスも追加することをお勧めします。

alias du="du -ach | sort -h"

freeの出力をより人間に優しいものにすることで、同じ方向に進み続けましょう。

alias free="free -mt"

リスティングプロセステーブルで多くのことができます。 デフォルトの出力を設定することから始めましょう:

alias ps="ps auxf"

プロセステーブルを検索可能にするのはどうですか。 プロセスで渡す引数を検索するエイリアスを作成できます。

alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"

ここで、探しているプロセス名を引数として呼び出すと、コンパクトな出力が得られます。

psg bash

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1001      5227  0.0  0.0  26320  3376 pts/0    Ss   16:29   0:00 bash

その他のエイリアス

よく使用するmkdirコマンドの一般的なオプションの1つは、必要な親ディレクトリを作成するための-pフラグです。 これをデフォルトにすることができます:

alias mkdir="mkdir -p"

その上に-vフラグを追加すると、ディレクトリが作成されるたびに通知されます。これにより、誤ってディレクトリが分岐する原因となったタイプミスがあったかどうかをすばやく認識できます。

alias mkdir="mkdir -pv"

wgetを使用してインターネットからファイルをダウンロードする場合、ほとんどの場合、問題が発生した場合にダウンロードを続行するには、-cフラグを渡す必要があります。 これで設定できます:

alias wget="wget -c"

historyコマンドの出力のgrepを使用するように、履歴を簡単に検索できます。 これは、後でより複雑なリコールを実行するためのコマンド番号を提供するため、CTRL-Rを使用して検索を逆にするよりも便利な場合があります。

alias histg="history | grep"

標準バージョンからより複雑なツールにアップグレードすることを好むシステムツールがいくつかあります。 これらは、必要なユーティリティをダウンロードした場合にのみ機能しますが、非常に役立ちます。 これらは他のエイリアスに影響を与える可能性があることに注意してください。

これは、従来のtopコマンドを、見た目がはるかに簡単で、複雑にすることなく並べ替え、検索、およびスクロールできる拡張バージョンに置き換えます。

alias top="htop"

同様の方法で、ncduコマンドをダウンロードできます。このコマンドは、ファイルとディレクトリのサイズをインタラクティブなncursesディスプレイに表示し、参照して簡単なファイルアクションを実行できます。

alias du="ncdu"

dfには、pydfと呼ばれるアップグレードされたユーティリティもあります。 色付きの出力とテキストベースの使用法バーを提供します。 このユーティリティがある場合は、デフォルトでこのユーティリティを使用できます。

alias df="pydf"

NATを使用するルーターの背後にいるときに、コマンドラインからパブリックIPアドレスが必要になったことがありますか? このようなものが役立つ可能性があります:

alias myip="curl http://ipecho.net/plain; echo"

私自身の目的のために、記事用にアップロードする画像を690px以下に最適化するのが好きなので、mogrifyというコマンドを含むImageMagickパッケージ(まだ利用できない場合はsudo apt-get install imagemagick)を使用します。それはまさにこれを行います。 ~/.bashrcファイルに次のコマンドがあります。

alias webify="mogrify -resize 690\> *.png"

これにより、現在のディレクトリ内のすべてのPNG画像のサイズが690pxより広い場合にのみ変更されます。

その後、それらをサーバーにアップロードする必要がある場合は、sftpを使用して接続し、特定のディレクトリに自動的に変更できます。

alias upload="sftp [email protected]</^>:/path/to/upload/directory<^>

Bash関数入門

エイリアスはすばやく簡単に実装できますが、範囲がかなり制限されています。 コマンドを連鎖させようとすると、特に実行時に指定された引数にうまくアクセスできないことがわかります。 エイリアスは、すべての関数の後で読み取られるため、非常に遅くなることもあります。

より堅牢で、bashエイリアスとフルシェルスクリプトの間のギャップを埋めるのに役立つエイリアスの代替手段があります。 これらはシェル関数と呼ばれます。 これらはエイリアスとほぼ同じように機能しますが、よりプログラム的であり、標準的な方法で入力を受け入れます。

これらは非常に多くの複雑な状況で使用でき、bashは完全なスクリプト言語であるため、ここでは詳細には説明しませんが、いくつかの基本的な例について説明します。

手始めに、bash構文を宣言する2つの基本的な方法があります。 最初のコマンドはfunctionコマンドを使用し、次のようになります。

function function_name {
    command1
    <^>command2</^>
}

もう1つの構文は、より「Cに似た」括弧のセットを使用します。

function_name () {
    command1
    command2
}

この2番目の形式を1行に圧縮し、コマンドをセミコロンで区切ることができます。 最後のコマンドの後にセミコロンが必要もあります。

function_name () { command1; command2; }

非常に便利なbash関数をデモンストレーションすることから始めましょう。 これはディレクトリを作成し、すぐにそのディレクトリに移動します。 これは通常、新しいディレクトリを作成するときに取るシーケンスとまったく同じです。

mcd () {
    mkdir -p $1
    cd $1
}

ここで、通常のmkdirコマンドの代わりにこの関数を使用して、作成後にディレクトリに自動変更する場合、次のようになります。

mcd test
pwd

/home/demouser/test

あなたが周りに見るであろう1つのクールな機能はextract機能です。 これは多くのユーティリティを組み合わせて、ほぼすべての圧縮ファイル形式を解凍できるようにします。 いくつかのバリエーションがありますが、これはここから来ています:

function extract {
 if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
    return 1
 else
    for n in $@
    do
      if [ -f "$n" ] ; then
          case "${n%,}" in
            *.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar) 
                         tar xvf "$n"       ;;
            *.lzma)      unlzma ./"$n"      ;;
            *.bz2)       bunzip2 ./"$n"     ;;
            *.rar)       unrar x -ad ./"$n" ;;
            *.gz)        gunzip ./"$n"      ;;
            *.zip)       unzip ./"$n"       ;;
            *.z)         uncompress ./"$n"  ;;
            *.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
                         7z x ./"$n"        ;;
            *.xz)        unxz ./"$n"        ;;
            *.exe)       cabextract ./"$n"  ;;
            *)
                         echo "extract: '$n' - unknown archive method"
                         return 1
                         ;;
          esac
      else
          echo "'$n' - file does not exist"
          return 1
      fi
    done
fi
}

この関数は最初の引数を取り、使用されるファイル拡張子に基づいて適切なユーティリティプログラムを呼び出します。

結論

このガイドが、独自のエイリアスとbash関数を作成するためのインスピレーションを与えてくれることを願っています。 これらを多用することで、シェルでの時間をより楽しく、より簡単にすることができます。

潜在的に破壊的な振る舞いで既存のコマンドを再定義することに注意することを忘れないでください。 反対のことをして、コマンドをより安全なバリアントにエイリアシングする(たとえば、再帰的に削除する前に常に確認を求める)場合でも、システムに依存するようになると、それがないシステムに初めてアクセスしたときに、再び噛み付く可能性があります。 。

エイリアスを作成するのに適している可能性のある候補を見つけるには、履歴を検索して最も一般的に使用されるコマンドを探すことをお勧めします。 here のワンライナーを使用すると、最もよく使用されるコマンドを確認できます。

history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10

 1   247  24.7%  cd
 2  112  11.2%  vim
 3  90   9%     exit
 4  72   7.2%   ls
 5  70   7%     xset
 6  56   5.6%   apt-get
 7  40   4%     vlc
 8  40   4%     rm
 9  38   3.8%   screen
10  27   2.7%   htop

このリストは、頻繁に使用するコマンドの開始点として簡単に使用できます。 コメントセクションで、お気に入りのbashエイリアスと関数を自由に共有してください。

ジャスティン・エリングウッド