序章

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

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

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

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

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

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

  1. 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コマンドの多くは、いくつかのフォーマットとオプションを適用するときにさらに役立ちます。

1つについて話し合った ls 上記の例ですが、他にもたくさんあります。

作る 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

その他のエイリアス

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

alias mkdir="mkdir -p"

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

alias mkdir="mkdir -pv"

インターネットからファイルをダウンロードする場合 wget、ほとんどすべての状況で、あなたは合格したいと思うでしょう -c 問題が発生した場合にダウンロードを続行するためにフラグを立てます。 これで設定できます:

alias wget="wget -c"

grepのように簡単に履歴を検索できます history コマンドの出力。 これは、後でより複雑なリコールを実行するためのコマンド番号を提供するため、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以下に最適化するのが好きなので、ImageMagickパッケージを使用します(sudo apt-get install imagemagick まだ利用できない場合)と呼ばれるコマンドが含まれています mogrify それはまさにこれを行います。 私はこのコマンドを持っています ~/.bashrc ファイル:

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

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

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

  1. alias upload="sftp username@server.com</^>:/path/to/upload/directory<^>

Bash関数入門

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

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

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

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

  1. function function_name {
  2. command1
  3. <^>command2</^>
  4. }

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

  1. function_name () {
  2. command1
  3. command2
  4. }

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

  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エイリアスと関数を自由に共有してください。

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