#author("2024-12-12T11:09:44+09:00","default:k1rou","k1rou") #author("2025-01-02T14:10:37+09:00","default:k1rou","k1rou") *Linuxのシェル [#xa62f4cd] *シェルの種類 [#gaf9a5d7] **Bシェル系 [#aabee4f9] -sh --B Shell --Bourne Shell --UNIXの標準的なシェル -[[bash]] --Bourne-Again Shell --Linuxディストリビューションの標準的なシェル --shを改良したもの -ash --shのBSDライセンス版 -dash --ashのLinux移植版 -ksh --Korn Shell --shを拡張したもの --IBM AIXのデフォルトシェル **Cシェル系 [#p5a2dc49] -csh --C Shell --[[BSD]]系UNIXで採用されている **その他 [#w583d9ec] -[[zsh]] --Z Shell --機能が豊富なシェル *プロンプトの記号 [#y1d4f606] -# --rootユーザ -$ --一般ユーザ:bash、sh、ksh -% --一般ユーザ:zsh、tcsh、csh *シェル について [#x282a9f2] **ログインシェル [#s8a3982e] -ログイン直後に起動されるシェルのこと -ユーザのログインシェルの確認 cat /etc/passwd | grep <user-name> echo $SHELL **組み込みコマンド [#s2c9fbc3] -ビルトインコマンド -/usr/sbin や/usr/bin に存在しないコマンド -if, for while, set, export など -help で組み込みコマンドの一覧が表示される **その他 [#kc7c3d41] -chsh ※デフォルトのシェルを変更 -利用可能なシェルの確認 cat /etc/shells *シェルの操作 [#s322cda3] **コマンドの入力途中の操作 [#s073d834] -補完機能 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 + _ ※直前の操作前の状態に戻す **コマンドを実行中の操作 [#ofec13fb] -実行制御 Ctl + C ※処理を中断 Ctl + Z ※処理を一時停止 Ctl + S ※画面への出力を停止し、キー入力を無効にする Ctl + Q ※画面への出力を再開し、キー入力を有効にする **ディレクトリの指定 [#j9167e95] -~ ※ホームディレクトリ cd ~ -~[ユーザ名] ※指定したユーザ名のホームディレクトリ cd ~root sudo ls ~root ※実行したユーザーがsudoを利用できるか確認 -~- ※直前のディレクトリ cd ~- -. ※カレントディレクトリ df . -.. ※1つ上のディレクトリ cd .. **コマンドの実行(単独) [#z6fc879c] -環境変数PATHに指定されたディレクトリに存在するコマンド(プログラム) <command> -カレントディレクトリに存在するコマンド ./<command> -フルパスを指定して実行 /<dir-path>/<command> **コマンドの実行(複数) ※区切り文字で繋げる [#q8b93265] -; ※1番目のコマンドの実行結果に関係なく2番目のコマンドを実行する pwd;ls -&& ※1番目のコマンドが正常終了した場合のみ、2番目のコマンドを実行する ls test.txt && cat test.txt -|| ※1番目のコマンドが正常終了しなかった場合のみ、2番目のコマンドを実行する ls test.txt || touch test.txt **コマンドの実行(複数) ※括弧で複数のコマンドをひとまとまりとして扱う [#s4693f7a] -() ※新たにシェルを起動して実行する (hostname;whoami) >> temp.log TEMP=origin (TEMP=edited;echo $TEMP) ※"edited"が出力 echo $TEMP ※"origin"が出力 -{} ※現在のシェル内でコマンドを実行する { hostname;whoami; } >> temp.log ※カッコとコマンドの間にスペースが必要、コマンドの末尾に;(セミコロン)が必要 **引用符と文字列の扱い [#dd71ea2b] -' (単一引用符、シングルクォーテーション) --全て文字列として解釈する --変数の記載も文字列として解釈される(変数の値が出力されない) 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)" ※コマンドの実行結果(日付)が出力される(可読性を考慮するとこちらの記述を推奨) *エイリアス [#sec9a171] **alias [#n55bcc0d] -エイリアスを登録 alias <command> -登録されているエイリアスを確認 alias <command>='<register-command>' **unalias [#vc09e97f] -エイリアスを解除 unalias <command> **その他 [#ma5357a7] -エイリアスを無効にしてコマンドを実行 \<command> *コマンド履歴の操作 [#i8b087d5] -直近の履歴を遡って表示 --カーソルキー操作 ↑ ※遡って表示 ↓ ※逆順で表示 --ショートカットキー操作 Ctl + p ※遡って表示 Ctl + n ※逆順で表示 -直近の履歴を文字列検索して表示 --ショートカットキー操作 Ctl + R ※押下後に入力した文字列から直近のコマンドを検索し、再度押下すると遡って検索する。Enter押下でコマンドを実行 -履歴を使ってコマンドを実行 --!<履歴番号> ※指定した履歴番号のコマンドを実行 --!<string> ※指定した文字列で始まる直近のコマンドを実行 --!?<string> ※指定した文字列を含む直近のコマンドを実行 --!! ※直前のコマンドを実行 *コマンド履歴の操作(Linuxコマンド) [#xf322274] **history [#w022ef2f] -history <件数> history ※直近の環境変数HISTSIZE に設定された件数を出力 history 10 ※直近の10件を出力 *コマンド履歴の操作(インクリメンタルサーチモード) [#h44a47d7] -Ctl + R --インクリメンタルサーチモードに移る --次のコマンドを検索 -Enter --検出したコマンドを実行 -Esc --検出したコマンドを表示した状態でインクリメンタルサーチモードを終了 --その後、コマンドを編集して実行など *シェルのオプション機能 [#yd4d5aa7] -有効/無効 --set -o <option-name> ※有効 --set +o <option-name> ※無効 -設定の状態を表示 --set -o ※On/Offで表示 --set +o ※現在の設定状態をコマンドで表示 *関数 [#f083880c] **function [#y15acfdb] -独自の関数を定義する --function 関数名() { <command>; } --関数名() { <command>; } 関数名() { <command> } -定義されている関数の確認 set ※一覧の後ろの方に表示される declare -f <関数名> ※指定した関数の定義を表示 declare -f ※定義されている関数の定義を一覧表示 declare -F ※定義されている関数の関数名を一覧表示 -定義されている関数の削除 unset <> *シェルスクリプト [#y650ae70] -「[[シェルスクリプト]]」参照 -「[[シェルスクリプト(bash)]]」参照 *設定ファイル [#r3a24b58] **/etc/passwd [#p01fcf69] ***構成 [#c4cc3c4f] -ユーザ名 -パスワード("x"はシャドーパスワード) -ユーザID -グループID -コメント -ホームディレクトリ -ログインシェル **/etc/shadow [#eb29d589] -シャドウファイル **構成 [#i4ade315] -ユーザ名 -パスワード --構成 ---$ハッシュ関数(1:MD5、2 or 2a:Blowfish、5:SHA-256、6:SHA-512) ---$ソルト ---$ハッシュ値 --*:未設定 --!!:アカウントロック -最終更新日 -次回変更可能になるまでの日数 -有効期限(過ぎると変更必須) -期限切れの警告日(期限何日前に警告するか) -無効化までの連続非ログイン日数 -アカウント失効までの連続非ログイン日数 -フラグ **/etc/shells [#dcf77358] -利用可能なシェル *デフォルトシェル [#e5a89b8a] **macOS [#a6ff4155] -Mojave 以前は bash -Catalina 以降は zsh *セキュリティ関連 [#be812c7c] -Shellshock --Bashの[[脆弱性]] *関連サイト [#q05ff0fb] -/bin/false と /sbin/nologin と /etc/shells について~ https://littlebuddha.hatenadiary.org/entry/20090805/1249457771 -さくらのクラウドシェル - さくらインターネット~ https://www.sakura.ad.jp/services/cloudshell/ -Macの「ターミナル」のキーボードショートカット -Apple~ https://support.apple.com/ja-jp/guide/terminal/trmlshtcts/mac *関連用語 [#n74f29c4] -[[Linuxコマンド]] -[[ハッシュテーブル]]