Linuxのシェル の変更点


#author("2023-06-06T19:34:46+09:00","default:k1rou","k1rou")
#author("2023-06-22T20:24:17+09:00","default:k1rou","k1rou")
*Linuxのシェル [#xa62f4cd]

*シェルの種類 [#gaf9a5d7]
-Bourneシェル
--UNIXの標準的なシェル
-bash
--Linuxディストリビューションの標準的なシェル
--Bourneシェルを改良したもの
-Kornシェル
--Bourneシェルを拡張したもの
-Cシェル
-Zシェル

*プロンプトの記号 [#y1d4f606]
-#
--rootユーザ
-$
--一般ユーザ:bash、sh、ksh
-%
--一般ユーザ:zsh、tcsh、csh

*シェル について [#x282a9f2]
**ログインシェル [#s8a3982e]
-ログイン直後に起動されるシェルのこと
-ユーザのログインシェルの確認
 cat /etc/passwd | grep <user-name>
 echo $SHELL

**その他 [#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]
-&#126; ※ホームディレクトリ
 cd ~
-&#126;[ユーザ名] ※指定したユーザ名のホームディレクトリ
 cd ~root
-&#126;- ※直前のディレクトリ
 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/

*関連用語 [#n74f29c4]
-[[Linuxコマンド]]