徒然いずみの備忘録

徒然なるままを備忘録

【IT】シェルスクリプト

シェルスクリプトは便利なので、おさらいしてみた。

シェルの種類

シェルは沢山の種類がある。なるべく、POSIX準拠にすることで移植性が高まる。

シェルの確認方法

どのシェルをログインユーザが使っているのかを確認方法は、2種類ある。

パスワードファイルに含まれるシェルを確認

# grep root /etc/passwd
root:*:0:0:System Administrator:/var/root:/bin/sh

fingerコマンドによるシェルの確認

# finger root | grep Shell
Directory: /var/root                    Shell: /bin/sh

シェルの確認

サーバにインストールされているシェルの確認方法は、以下である。

# cat -n /etc/shells
     1    /bin/bash
     2    /bin/csh
     3    /bin/ksh
     4    /bin/sh
     5    /bin/tcsh
     6    /bin/zsh

シェルの変更

シェルの変更は、chshコマンドで実施する。

# chsh -s /bin/zsh

プロセスの入出力

プロセスの前後には入力と出力があり、0,1,2で表現される。

標準入力(0)→プロセス→標準出力(1)
                                        →標準エラー出力(2)

これらをコマンドで表現すると以下になる。

  • < :標準入力
  • /> :標準出力
  • 2> :標準エラー出力
  • 2>&1:標準出力&標準エラー出力標準エラー出力に、標準出力をコピーするという意味)
  • />> :リダイレクト(ファイルの中身を削除せずに出力結果を記録)
  • << :ヒアドキュメント(ヒアドキュメント後に入力した文字列を入力する前の文字列が入力文字と解釈される)

ジョブの実行と停止

プロセスをパイプで繋げたものをジョブと言います。ジョブは停止,フォアグランド,バックグラウンドの3種類の操作が可能である。

  1. 停止:Ctrl+z ←ジョブの停止が可能。その際にジョブIDが数値で表示される。
  2. フォアグランド:fg ←コマンドラインの操作が出来ない状態でジョブが実行される。ジョブIDを指定して実行。
  3. バックグランド:bg ←コマンドラインの操作が出来る状態でジョブが実行される。ジョブIDを指定して実行。

bashが読込むファイル

シェルは3種類の起動モードがあり、それぞれで読込むファイルが異なる。

ログインシェル

起動方法は、以下の通り。

# sudo su -
# bash --login
# ssh user@host

読み込み順序は、以下の通り。

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile ※.bash_profileの中で、.bashrcを読込んでいることが多い。

インタラクティブシェル

起動方法は、以下の通り。

# sudo su
# bash
# ssh user@host /path/to/command

読み込み順序は、以下の通り。

  1. /etc/bash.bashrc
  2. ~/.bashrc

インタラクティブでないシェル

起動方法は、以下の通りです。

# su user -c /path/to/command
# bash -c /path/to/command

※この場合はファイルの読み込みはない。

コマンドラインのショートカット

便利なのでできるだけ覚えておきたいショートカット。

  • Ctrl-a:行頭へ移動
  • Ctrl-e:行頭へ移動
  • Alt-b:一単語左へ移動
  • Alt-e:一単語右へ移動
  • Ctrl-w:カーソルのある位置の一単語をカット。単語内の場合は単語先頭まで削除。
  • Ctrl-k:カーソルより右にある文字を全てカット。
  • Ctrl-u:カーソルより左にある文字を全てカット。
  • Ctrl-y:カットして保持している文字をペースト。
  • Ctrl-l:clearコマンドと同じ処理。

展開

いくつかの展開方法がある。

パス名の展開

  • *:任意の文字列
  • ?:任意の一文字
  • [ ]:囲まれた中の任意の文字列

チルダ展開

ブレース展開

  • {文字列,文字列,…}:,堺に文字列を組み合わせて出力される

小技集

記号を含むファイルを作成してしまって消えないT_T

# rm -- -help

引数が多すぎてエラーになってしまうT_T

# ls | xargs mv -t ../

Linuxでは引数の最大値が設定されている。これは「getconf ARG_MAX」で確認が可能である。 xargsを利用することで、パイプで受取った対象ファイルを分割実行してくれています。(なので-tをオプション付与)

とりあえず、疲れたのでこんなところでおしまい。