Linuxのシェル

2023-06-22 (木) 20:24:17

Linuxのシェル

シェルの種類

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

プロンプトの記号

  • #
    • rootユーザ
  • $
    • 一般ユーザ:bash、sh、ksh
  • %
    • 一般ユーザ:zsh、tcsh、csh

シェル について

ログインシェル

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

その他

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

シェルの操作

コマンドの入力途中の操作

  • 補完機能
    Tab ※入力補完を表示
  • カーソル移動
    • 行頭・行末
      Ctl + A ※行頭
      Ctl + E ※行末
    • 1文字左・右
      Ctl + B ※1文字左
      Ctl + F ※1文字右
    • 1単語
      Alt + B ※1単語左(Esc + B)
      Alt + F ※1単語右(Esc + F)
  • コマンドラインの編集
    • 1文字を削除
      Ctl + D ※カーソルの1文字
      Ctl + H ※カーソルの左の1文字
      Ctl + / ※カーソルの左の1文字
    • カーソル位置から左・右の文字を全て削除
      Ctl + U ※カーソル位置から左の文字
      Ctl + K ※カーソル位置から右の文字
  • カーソル位置の単語の右部分を削除
    Alt + D ※カーソル位置の単語の右部分(Esc + D)
    • その他
      Ctl + L ※画面をクリアしてカレント行を再表示
      Ctl + _ ※直前の操作前の状態に戻す

コマンドを実行中の操作

  • 実行制御
    Ctl + C ※処理を中断
    Ctl + Z ※処理を一時停止
    Ctl + S ※画面への出力を停止し、キー入力を無効にする
    Ctl + Q ※画面への出力を再開し、キー入力を有効にする

ディレクトリの指定

  • ~ ※ホームディレクトリ
    cd ~
  • ~[ユーザ名] ※指定したユーザ名のホームディレクトリ
    cd ~root
  • ~- ※直前のディレクトリ
    cd ~-
  • . ※カレントディレクトリ
    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件を出力

コマンド履歴の操作(インクリメンタルサーチモード)

  • Ctl + R
    • インクリメンタルサーチモードに移る
    • 次のコマンドを検索
  • Enter
    • 検出したコマンドを実行
  • Esc
    • 検出したコマンドを表示した状態でインクリメンタルサーチモードを終了
    • その後、コマンドを編集して実行など

シェルのオプション機能

  • 有効/無効
    • 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 <>

シェルスクリプト

設定ファイル

/etc/passwd

構成

  • ユーザ名
  • パスワード("x"はシャドーパスワード)
  • ユーザID
  • グループID
  • コメント
  • ホームディレクトリ
  • ログインシェル

/etc/shadow

  • シャドウファイル

構成

  • ユーザ名
  • パスワード
    • 構成
      • $ハッシュ関数(1:MD5、2 or 2a:Blowfish、5:SHA-256、6:SHA-512)
      • $ソルト
      • $ハッシュ値
    • *:未設定
    • !!:アカウントロック
  • 最終更新日
  • 次回変更可能になるまでの日数
  • 有効期限(過ぎると変更必須)
  • 期限切れの警告日(期限何日前に警告するか)
  • 無効化までの連続非ログイン日数
  • アカウント失効までの連続非ログイン日数
  • フラグ

/etc/shells

  • 利用可能なシェル

デフォルトシェル

macOS

  • Mojave 以前は bash
  • Catalina 以降は zsh

セキュリティ関連

関連サイト

関連用語