Linuxのシェル のバックアップ(No.1)


Linuxのシェル

シェルの種類

  • Bourneシェル
    • UNIXの標準的なシェル
  • bash
    • Linuxディストリビューションの標準的なシェル
    • Bourneシェルを改良したもの
  • Kornシェル
    • Bourneシェルを拡張したもの
  • Cシェル
  • Zシェル

シェル について

ログインシェル

  • ログイン直後に起動されるシェルのこと
  • ユーザのログインシェルの確認
    cat /etc/passwd | grep <user-name>

その他

  • chsh ※デフォルトのシェルを変更
  • 利用可能なシェルの確認
    cat /etc/shells

シェルの操作

  • コマンドの入力途中の操作
    • 補完機能
      Tab ※入力補完を表示
    • カーソル移動
      Ctl + A ※行頭に移動
      Ctl + E ※行末に移動
    • コマンドラインの編集
      Ctl + D ※カーソルの1文字を削除
      Ctl + H ※カーソルの左の1文字を削除
      Ctl + L ※画面をクリアしてカレント行を再表示
  • コマンドを実行中の操作
    • 実行制御
      Ctl + C ※処理を中断
      Ctl + Z ※処理を一時停止
      Ctl + S ※画面への出力を停止し、キー入力を無効にする
      Ctl + Q ※画面への出力を再開し、キー入力を有効にする
  • ディレクトリの指定
    • ~ ※ホームディレクトリ
      cd ~
    • ~[ユーザ名] ※指定したユーザ名のホームディレクトリ
      cd ~root
    • . ※カレントディレクトリ
      df .
    • .. ※1つ上のディレクトリ
      cd ..
  • コマンドの実行(単独)
    • 環境変数PATHに指定されたディレクトリに存在するコマンド(プログラム)
      <command>
    • カレントディレクトリに存在するコマンド
      ./<command>
    • フルパスを指定して実行
      /<dir-path>/<command>
  • コマンドの実行(複数) ※区切り文字で繋げる
    • ; ※1番目のコマンドの実行結果に関係なく2番目のコマンドを実行する
      pwd;ls
    • && ※1番目のコマンドが正常終了した場合のみ、2番目のコマンドを実行する
      ls test.txt && cat test.txt
    • || ※1番目のコマンドが正常終了しなかった場合のみ、2番目のコマンドを実行する
      ls test.txt || touch test.txt
  • コマンドの実行(複数) ※括弧で複数のコマンドをひとまとまりとして扱う
    • () ※新たにシェルを起動して実行する
      (hostname;whoami) >> temp.log
      
      TEMP=origin
      (TEMP=edited;echo $TEMP) ※"edited"が出力
      echo $TEMP ※"origin"が出力
    • {} ※現在のシェル内でコマンドを実行する
      { hostname;whoami; } >> temp.log ※カッコとコマンドの間にスペースが必要、コマンドの末尾に;(セミコロン)が必要
  • 引用符と文字列の扱い
    • ' (単一引用符、シングルクォーテーション)
      • 全て文字列として解釈する
      • 変数の記載も文字列として解釈される(変数の値が出力されない)
        DATE=`date +%Y%m%d`
        echo '$DATE' ※"$DATE"が出力される
    • " (二重引用符、ダブルクォーテーション)
      • 文字列として解釈する
      • 変数の記載は変数として解釈される(変数の値が出力される)
      • バッククォーテーション(`)でコマンドが記載されていれば、コマンドの実行結果が展開される
        DATE=`date +%Y%m%d`
        echo "today is $DATE" ※$DATEの部分は日付が出力される
        echo "today is \$DATE" ※\(エスケープ文字)で$DATEは変数ではなく文字列として扱われる
        
        echo "today is `date + %Y%m%d`" ※コマンドの実行結果(日付)が出力される
        echo "today is $(date + %Y%m%d)" ※コマンドの実行結果(日付)が出力される(可読性を考慮するとこちらの記述を推奨)

エイリアス

alias

  • エイリアスを登録
    alias <command>
  • 登録されているエイリアスを確認
    alias <command>='<register-command>'

unalias

  • エイリアスを解除
    unalias <command>

その他

  • エイリアスを無効にしてコマンドを実行
    \<command>

コマンド履歴の操作

  • 直近の履歴を遡って表示
    • カーソルキー操作
      ↑ ※遡って表示
      ↓ ※逆順で表示
    • ショートカットキー操作
      Ctl + p ※遡って表示
      Ctl + n ※逆順で表示
  • 直近の履歴を文字列検索して表示
    • ショートカットキー操作
      Ctl + R ※押下後に入力した文字列から直近のコマンドを検索し、再度押下すると遡って検索する。Enter押下でコマンドを実行
  • 履歴を使ってコマンドを実行
    • !<履歴番号> ※指定した履歴番号のコマンドを実行
    • !<string> ※指定した文字列で始まる直近のコマンドを実行
    • !?<string> ※指定した文字列を含む直近のコマンドを実行
    • !! ※直前のコマンドを実行

コマンド履歴の操作(Linuxコマンド)

history

  • history <件数>
    history ※直近の環境変数HISTSIZE に設定された件数を出力
    history 10 ※直近の10件を出力

シェルのオプション機能

  • 有効/無効
    • set -o <option-name> ※有効
    • set +o <option-name> ※無効
  • 設定の状態を表示
    • set -o ※On/Offで表示
    • set +o ※現在の設定状態をコマンドで表示

関数

function

  • 独自の関数を定義する
    • function 関数名() { <command>; }
    • 関数名() { <command>; }
      関数名()
      {
          <command>
      }
  • 定義されている関数の確認
    set ※一覧の後ろの方に表示される
    declare -f <関数名> ※指定した関数の定義を表示
    declare -f ※定義されている関数の定義を一覧表示
    declare -F ※定義されている関数の関数名を一覧表示
  • 定義されている関数の削除
    unset <>

シェルスクリプト

関連用語