第三弾では、シェルが初見の人に必要な知識を扱います。ただ、まずは新しいLinuxの教科書を読むべきだと思います。$
文字が何を表すか分らなければ、尚更のことです。
シェルはbash
の前提で行きます。最近のMacはデフォルトでzsh
を入れているので、時代は変わるようですが……。
マニュアルなど
tldr
tldrは、非公式ですが最速のマニュアルです。コマンドの概略と、いくつかの例を見せてくれます。インストールしておくと良いでしょう。
新しいコマンドを見たときは、まずこれを引けば良いと思います。
man
man
は、コマンドの公式マニュアルをwebから取ってきて表示するコマンドです。しばしば詳しすぎるため、参照性は低いと思います。
man bash
では、bashシェルの文法が見られます。
日本語版のmanを入れる
方法? 要改稿。
less
manは、ページャ(閲覧用ソフト)としてless
を使用しています。重要な操作としては、
キー | 意味 | 解説/備考 |
---|---|---|
q | quit | 閉じます |
h | help | 操作法が見られます |
/ | search | n、Nで前後を検索 |
& | search all | 検索パタンを含む行を抽出します |
&
検索を終了するには、再び&
キーを押してから、Enterとすればいいです。
その他ヘルプの表示法
<command> --help
引数やオプションのリストが見られます。
help <built-in command>
built-inコマンド(シェルのソースに実装が書いてあるコマンド)のマニュアルです。--helpを渡した時と同じ表示が出ます。
操作法
ターミナル上のシェルの操作について。
補完 TAB
TAB
キーで、パスやコマンドの『補完』(自動入力)がされます。候補が複数ある場合は、補完は実行されません。(候補は、現在の入力内容によって絞られます)。二度押せば、すべての候補が表示されます。
履歴/コマンドの停止
特に停止は必須です。<C-x>
はCtrl+xを意味します。
操作 | 機能 |
---|---|
↑↓ | コマンド履歴の移動 |
<C-r> | 履歴の検索 |
<C-c> | コマンドの停止 |
なお、<C-z>
で実行中のプロセスを停止し、fg
コマンドで戻ってくることもできます。less、man、Vimなどで使えます。
historyコマンド
履歴番号とコマンドの内容を列挙します。!<履歴番号>
で、過去に実行したコマンドを再実行できます。
ショートカット/操作性
Macでは、EMacsと似たショートカットが設定されています。他の環境でも、set -o emacs
を実行すれば使えるはずです。
操作 | 機能 | 対応 | 機能 |
---|---|---|---|
C-a | 行頭へ | C-e | end 行末へ |
C-f | forward 右へ | C-b | backward 左へ |
C-d | delete | C-h | backspace |
C-k | 行末まで削除 | ||
C-n | next line 次の履歴 | C-p | previous line 前の履歴 |
実は、
set -o vi
とすると、vi(エディタ名)の操作性を利用できます。vimではないため、visual modeは利用できませんけれど。
setコマンドの実行は、後述の.bash_profile
に書けば、自動化できます。
予備知識
表記法
プロンプト$
(もしくは#
)
ユーザの入力待ちを意味する文字です。$
はユーザ、#
はルートアカウントを表します。プロンプトは、ユーザ名やディレクトリ位置を含むことが多いですが、このブログでは、常に省略して$
と表します。
高級なプロンプト
パスとコマンドで行を分けたり(二行プロンプト)、コマンドの入力後に改行が入るような表示もあります。時刻や作業状況を表示するものもあります。
配布されているものは、試すのが楽でしょう。
パス
記号 | 意味 |
---|---|
~/ |
ユーザのホームディレクトリ($HOME と同じ) |
./ |
現在のディレクトリ |
../ |
1つ上の階層(ディレクトリ) |
/ |
ルートディレクトリ |
ディレクトリ名の後にスラッシュを入れるかは任意です(これは一般的なPOSIX規格)。
隠しファイル
.
から名前が始まるファイルは、隠しファイルとして扱われます。
bashのsetコマンド
bashの設定は、環境変数、エイリアス、シェル関数、そしてsetコマンドで行います。
setは組み込みのコマンドで、色々できます。特にスクリプトを書くときに役立ちます。
bashの設定ファイル(飛ばしてもいいです)
存在しない場合は、自分で作って保存します。GUIのエディタを使っても良いですし、Vimなど、CLIのエディタに慣れてからでも構いません。
予備知識
rcファイルとは
run commandsファイルの略です。単にシェルコマンドのリストと思って良いでしょう。
書き換えたら、source ~/.bashrc
などとして、その場で反映できます。(~/.bashrc
が現在のシェルで実行されることで、設定が書き換わります)。
~/.bashrc
の設定によく使う機能を紹介します。
エイリアス(別名を付ける)
alias name='words'
シェル関数の定義
function() { .. ; }
(現在のシェルで実行されるシェル関数)
分割ファイルしたrcファイルの読み込み
source <file>
bashのrcファイル
~/.bash_profile
このファイルのコマンドは、シェルへの『ログイン』時に実行されます。詳しくは、man bash > INVOCATION に乗っています。
export
で環境変数を設定する場合、~/.bashrc
に書きます。
# ~/.basrc を『ログイン』時にも実行する(重要) source ~/.bashrc # プロンプト文字を <ディレクトリ名> $ と言う形式にする # 文字色0;32mは黄緑色 export PS1='\[\e[0;32m\]\w \[\e[0m\]\$ ' # 重複するコマンド履歴を自動削除(上キーで履歴を遡るのが便利になる) export HISTCONTROL=ignoredups
プロンプト文字の設定方
ANSIカラーコードに基づいて着色できます。配布されているプロンプト文字を利用するのも良いでしょう。
~/.bashrc
対話モードの非ログインシェルを起動する度に読み込まれます。上記の追記により、ログイン時(ターミナルの起動時)にも読み込まれるようになりました。
エイリアスやシェル関数をここに書きます。好みで設定してください。dotfilesで検索すれば、他の人の設定も見られます。
# ~/.bashrc # "$n": n番目の引数の内容 # "$@": 全ての引数 # command <some_command>: シェル関数を無視してコマンドを呼ぶ (詳しくはhelp commandを参照) # 無限ループを避ける場合などで有効 ##### man ##### # pagerを変更(manが使用する環境変数を設定する方法もある。詳しくは: man man) man() { command man -P 'command less -iNMR' "$@"; } # マニュアルの見出しを手に入れる man-table() { man "$@" | grep -v '^\s'; } ##### prompt string ##### # n: normal, s: short ps-n() { export PS1='\[\e[0;32m\]\w \[\e[0m\]\$ '; } ps-s() { export PS1='\$ '; } ##### source ##### alias src='source' src-b() { source ~/.bash_profile; } src-v() { source ~/.vimrc; } alias v='vim' v-src() { vim "$1"; source "$1"; } v-bash() { vim-src ~/.bashrc; } ##### cd を pushd にすり替える ##### cd() { command pushd "$@" > /dev/null; } # pushdの出力は捨てる pd() { command popd "$@"; } # pd: pop directory でディレクトリ位置を遡る cdh() { command dirs "$@"; } # ディレクトリ移動の履歴を表示 mkcd() { mkdir -p "$@" && cd "$@"; } .() { cd ../"$1"; } ..() { cd ../../"$1" } ...() { cd ../../../"$1"; } ....() { cd ../../../../"$1" } .....() { cd ../../../../../"$1"; } #### 閲覧用 ##### ls -F: classify (file, directory/, symblic_link@, executable*, のようになる) ls -G: enable colorized output s() { command ls -FG "$@"; } # ls: list ll() { command ls -FGAlh "$@" ; } # ll: list in long output # list directories lsd() { command ls -FGA "$@" | grep '/' | column; } # columnで複数列に整形 # list naturally (numerically) lsn() { command ls "$@" | sort -n | column; } # tree -N: 日本語対応 -C: 着色 (colorized) tree() { command tree -NC "$@"; } # less -R: 着色対応、-N: 行番号表示、-M: スクロール位置表示、-i: --ignora-case; 検索時に小文字を使うと、大文字と区別しない less() { command less -iNMR "$@"; } # grep colored grepc() { command grep --color=always "$@"; } ##### ディレクトリ移動 ##### # z というコマンドを入れると、ディレクトリ移動が楽になる。非常にオススメ # https://github.com/rupa/z # よりモダンなz.luaがおすすめ # https://github.com/skywind3000/z.lua