コース内容#
シェル & ターミナル & コンソール#
- shell:シェル、ソフトウェア、ユーザーにインターフェースを提供
- console:コンソール、作業台
- terminal:対話デバイス
- 本質的にはファイル
- stdin、stdout、stderr はそれぞれ 0、1、2 のファイルに対応
- 0、1、2 はファイルディスクリプタで、どのプロセスを開いてもこの 3 つのファイルが開かれる
- echo $0:出力 - zsh、入力元が zsh であることを示す
- stdout、stderr の出力リダイレクト:1 > ファイル、2 > ファイル
console と terminal の概念はメインフレームに由来し、console は特別な terminal と見なすことができる。現在使われているのは一般的に拡張された意味で、通常は混用される。
Linux ヘルプシステム#
- 2 つのオンライン文書:man (一般的)、info
- man マニュアルモジュール
| コード | 意味 | 例 |
|:----|:----|:----|:----|:----|
|1 | シェルコマンドまたは実行可能ファイル | man 1 ls|
|2 | カーネルが提供する関数とツール | man 2 reboot|
|3 | ライブラリ関数 [ほとんどの C の関数ライブラリ、C++、Python は含まれない...]|man 3 readdir|
|4 | デバイスファイルの説明 [通常は /dev]|man 4 null|
|5 | 設定ファイルまたはファイル形式 [例:/etc/passwd]|man 5 interfaces|
|6 | ゲーム | man 6 lol|
|7 | 慣習とプロトコル [例:Linux ファイルシステム、ネットワークプロトコル]|man 7 tcp|
|8 | システム管理者コマンド [通常は root 用]|man 8 reboot|
|9 | カーネルルーチン [非標準ルーチン]| |
|o | 古い文書 | |
|n | 新しい文書 | |
|l | ローカル文書 | |
- man マニュアルが提供する Example👉ベストプラクティスを学ぶ
- ❗ 小技、コマンドが複数のモジュールに存在する可能性がある
- キーワード検索:man -k reboot
- 正確な検索:man -f reboot
zsh#
ワイルドカード#
- ? 任意の 1 文字
- * 任意の数の任意の文字
- []、{}
ワイルドカード | 意味 |
---|---|
[123] | 123 の中の任意の 1 文字にマッチ |
[1-3] | 1-3 の中の任意の 1 文字にマッチ |
[0-9a-zA-Z] | すべての数字、大文字、小文字の中の任意の 1 文字にマッチ |
[!(1-3)] | 1-3 以外の任意の 1 文字にマッチ、bash では括弧なしでも可能 |
{"a","ab",...} | "a" または "ab"(またはそれ以上) のいずれかの文字列にマッチ、空白は不可、少なくとも 2 つの要素が必要 |
タスク管理#
- & コマンドの後に付けることでバックグラウンドで実行
- 終了するには?
- ① fg→ctrl + c
- ② kill タスク ID (実行中に見ることができる)
- ③ pkill 名前でマッチ (注意:権限が高すぎると誤削除の可能性)
- kill を入力すると、ターミナルの入力と出力が混在するが、実際には異なるファイルから来ている:#0、#1
- 終了するには?
- ; コマンドの間に置くことで順次実行
- && 論理 AND、ショートサーキット原則に注意
- || 論理 OR、ロングサーキット原則に注意
- ` ` コマンド置換子 (注意:このキーは esc の下にある)
- その中のコマンドを優先的に実行し、結果を親コマンドに渡す
- ctrl + z タスクを一時停止し、少なくとも CPU リソースを解放
- メモリが解放されるかどうか:基盤がどう置換するかによるが、一般的にはメモリ不足の際にスワップ領域に置換される
- sleep コマンドに似ている
- bg、fg、jobs:詳細は『Linux 入門及び使用』ノートまとめ ——3.Linux 基礎知識 —— プロセス関連を参照
リダイレクト#
- [コマンド] >/>> [ファイル]
- 注意:>> は内容を追加し、> は内容を元のファイルに上書き
- [コマンド] < [ファイル]
- ファイルの内容をコマンドの入力として渡す
- <<
- 入力時にファイルの終わりを指定するために使用
-
- ここで EOF と 000 は単なる文字列で、特別な意味はない
-
- 入力時にファイルの終わりを指定するために使用
エスケープシーケンス#
- ハードエスケープ
- シングルクォートで囲む ' '
- どんな文字でも、見たままの通り
- 【注意】囲みの中にシングルクォートを含めることはできない
- ソフトエスケープ
- ダブルクォートで囲む " "
- 特定のシェルメタキャラクター($ は変数値の置換、` はコマンド置換、\ は単一文字のエスケープ)を除き、他は見たままの通り
- バックスラッシュ
- エスケープ、直後に続くメタキャラクターやワイルドカードの特別な意味を取り除く
追加知識#
- 変数呼び出し:$Var は ${Var} と等価
- ただし後者の方が標準的で、$ の作用範囲を規定し、変数名に特殊文字が含まれることによる問題を回避できる
ヒント#
- ls --time=[atime、ctime] -l は、デフォルトの変更時間ではなく、アクセス時間 atime または権限変更時間 ctime を表示することができる
- 注意:-l と組み合わせて使用
- 空白を含むファイル名に対して、zsh は誤解を招く可能性がある、以下のように:
-
- ここでシングルクォートは空白を囲むためのもので、実際には存在しない!
- 一括削除する場合は、sudo rm -i *\ *
- ここで -i を使用して確認モードを有効にしている、なぜならこの * と \ は人を恐れさせるから
-