『新しいLinuxの教科書』 学習メモ
Ch01 Linuxを使ってみよう
- About Linux
- VM構築手順
- ゲストOS
- ホストキー(right ctrl key)でマウスカーソルをVMの外に出す
- OSのインストール手順
- ログインログアウト、シャットダウン
- usernameでユーザを特定
- CLIの意味
- 効率
- 本質的
- 連携〇
- 自動化
- logout : exit
- su → shutdown -r now でreboot
- または、/sbin/shutdown -h now
- または、Ubuntuではsudo shutdown -h now
- あまりシャットダウンはしない。重いコマンド。
Ch02 What is shell?
- カーネル : OSの中核。CPUメモリなどのハードウェアの管理や、コマンド実行のプロセス管理も行う。
- シェル : カーネルのインタフェースとなるソフト。カーネルを包む殻。
- $ (cmd) は一般ユーザ。# (cmd)はルート。
- ログイン時に初めに起動するshell : ログインshell
- echo $SHELL
- /bin/bash
- echo $SHELL
- shell script
- shellの種類
- bashのメリット
- ターミナル(端末)
- コンピュータへのI/O(keyboard/screen)のためのハードウェア
- ソフトウェアが実装したターミナルエミュレータを使う
- 例:Tera Term
- about software license
Ch03 Shellの便利な機能
- cmd lineの編集
- ctrl + b(C-b) : カーソルを1つ戻す ←→ C-f
- C-a : 行頭 ←→ C-e
- Alt(Esc) + b : 単語1つ分戻す ←→ Alt + f
- 文字の削除
- Backspace = C-h, Delete = C-d, C-w : 後方に1単語分del
- カットとヤンク
- Ctrl + k : cursolから行末del
- Ctrl + u : cursolから行頭del
- Ctrl + y : cutした内容を挿入
- In trouble
- 画面表示をロック : C-s ↔ C-q : ロック解除
- cmdの強制終了 : C-c
- Ctrl + keyの入力を「key」で表す
- 補完
- Tab
- Tab + Tab : 候補リスト
- cmd history
- C-p,C-n
- C-r : incremental search
- 1文字ごとにhistoryをsearch
- Enterでrun、Escでcmd line に表示、C-gで破棄
- 文字コードの変換
Ch04 file, directory
- すべてがfileで表現
- Linuxのdir構造
- 「/」 : root dir
- system全体で1つのdir treeのみ持つ
- /varなどに2台目のdiscをmountする。
- FHS(Filesystem Hierarchy Standard)
- /bin : normal user / adminともに使うコマンドの実行ファイルを置く。システムの動作に重要な最小の数のファイルのみ置く。
- /dev : device file を格納。discやkeyboardなどのハードウェアをファイルとして扱えるように用意されたfile
- /etc : 設定ファイルを置くdir。欠くアプリケーションに加え、Linux自体の設定ファイルもある。Linuxの管理・運用に重要なdir。
- /home : userごとのhomedir。usernameがdir name。
- /sbin : admin向けのコマンドの実行ファイルを置く。
- /tmp : 一時ファイルを置く。永続保有×。
- /usr : 各アプリケーションと付随するfileを置く。内部にroot dir配下と似た構造を持つ。実行ファイル、ドキュメント、ライブラリなどが追加アプリケーションインストールで置かれる。
- /var : 変化する(variable)データを置くためのdir。アプリケーションが作るデータ、ログ、e-mailなど。容量の管理重要。
- current dir, pwd
- 作業前のpwdが重要。
- 絶対パス、相対パス
- dirの移動
- ls
- 複数の引数も〇
- : 任意の文字列
- ? : 任意の1文字
- *, ?はパス名展開
- option
- -l : show detail
- -a : show hidden files
- -F : show fileの種類
- 通常:なし
- dir: /
- 実行可能ファイル:*
- シンボリックリンク: @
- cmd's options
- ls -aF / : コマンド オプション 引数
- 引数をとるオプション
- long option e.g. --quote-name
- 一意に特定できれば省略可 e.g. --quote
- arg : --width 30 / --width=30 どちらも可
Ch05 file操作の基本
- mkdir
- Linux内部では、dirもfileの一種。 → filenameとdirnameの重複は×。
- 深いdirを一度に作る : mkdir -p .../.../...
- touch (filename1) (filename2) ...
- 上書き、削除がなく安全
- rm, rmdir
- rm -r dir1 で、再帰的にdir tree を削除。
- rm -i : 確認msg
- 削除前は要確認
- rmdirは、空のdirのみ削除できる
- cat option filename
- fileを連結して表示も〇 : cat (filename1) (filename2)
- con[cat]nate の cat
- cat -n (filename) : line noを表示
- 引数なし → キーボードから受け付ける。C-dで抜ける。
- less (option) (filename) : 1画面ごとに表示
- spaceかf : 次、 b : 前、j : 1行次 、k : 1行前、 q : 終了
- file内検索はvimと同じ
- cp (option) (元) ... (先)
- -i をつけて上書きチェック
- -r でdirをコピー
- mv (option) (元) ... (先)
- -i をつけて上書きチェック
- dir の mv は -r 不要。
- ln (option) (link元) (linkname)
- hard link : 1つのファイルの実体に複数の名前
- rmはファイル名だけ削除する。
- symbolic link : link先のパス名を書いた小さな特殊ファイル
- → ln -s (link元) (filename)
- multi versionのプログラムを共存させられる
- latest → v1.0.1
- multi versionのプログラムを共存させられる
- hard link : 1つのファイルの実体に複数の名前
Ch06 探す、調べる
- fileを探す
- cmdの使い方を調べる。
- --help
- man (cmd) → online manual を表示。--helpより詳細。
- 基本はmanを参照する。
- man -k (keyword) でキーワードからマニュアルを検索
- セクションナンバー : man (sec no.) (name)
- man -wa (name) : どのセクションに含まれているかわかる。
- cmdを探す。
- echo $PATH : $PATHでsearch PATHと呼ぶ
- which (option) (cmd)
- -a : すべての実行ファイルの場所が分かる。
- 日本語ドキュメントと英語ドキュメント
- LANG = ja-JP.UTF-8 cat --help
- LANG = C
Ch07 Text Editor
- txt vs bin
- txtのメリット
- 専用アプリ不要
- 互換性〇
- txtを使うcmd多い
- txtのメリット
- vimのstart/end
- カーソル移動
- 文字削除 : x
- カーソルの右に入力 : a
- カーソル移動
- 行番号での移動 : 100G
Ch08 bashの設定
- alias
- typeでchack
- \ls : ignore alias
- bashのオプション
- set -o/+o (option name) : -oがon, +oがoff
- shopt -s/-u () : 詳細な設定可能だが、setの方が歴史ある。
- shell変数
- PS1 : プロンプトの表示設定
- PATHの追加
- shell変数(2回目)
- 外部/組込コマンド
- shell変数/環境変数
- bashの設定ファイル
- bashのコンフィグファイルの設定手順
- source (config file) で反映
- 例示
- bashのコンフィグファイルの設定手順
Ch09 ファイルパーミッション、スーパーユーザ
- Linux : 1マシンにマルチユーザが同時にログイン
- オーナーとグループ
- ls -l
- オーナー、グループ、他のユーザの権限
- dirのパーミッション(rwx)
- ファイル削除の可不可も決める
- chmod (ugoa)(+-=)(rwx) (filename) 8進数での指定も〇
- super userの扱い
- システム自体への影響
- su - で、super userの環境に初期化して切り替える
- /etc/sudoersでsudoを管理。
- wheel : システム管理グループ
- visudo
- sudoが〇。suは△。
- tmux : ターミナルmux。1つの端末内に複数の仮想端末を作成して管理する。
Ch10 process, job
- process : メモリ中で実行中のプログラム
- コマンドを実行したとき、ディスクから実行ファイルを読みだしてメモリに格納。
- 既存のprocessをベースにして新しいprocessを作成。
- process id による一意な操作。
- ps xf
- shellごとのjob
- job制御
- Ctrl + z : 中断
- jobs (-l)
- fg (%(job no.))
- current job
- bg (%(job no.))
- cmd line の末に&で、バックグラウンド実行ができる。
- job, process の終了
- Ctrl + c, kill %(job no.)
- kill (process no.)
- signalの送信
- process間通信
Ch11 std in/out とpipeline
- std in/out/err
- redirect : std in/out 先を変える。
- <, >, 2>
- 汎用性〇
- 2>&1 : out & err
- >> , set -o noclobber で、上書き防止。
- redirect : std in/out 先を変える。
- pipeline
- tmp file 不要。
- 部品を組み合わせて複雑な処理。
- std in, outを扱うコマンドをまとめて、フィルタと呼ぶ。
- du (option) (file/dir) | sort -n
Ch12 テキスト処理
- wc (option) (file/dir name)
- sort
- -k, -n, -r
- uniq : 連続した重複行を削除。
- sort () | uniq
- -c : count
- sort () | uniq -c | sort -rn
- cut -d (区切り文字) -f (field no.) (filename)
- 区切りのデフォルトはtab
- tr (置換前) (置換後)
- tr a-z A-Z
- 1文字単位の文字置換
- fileに対しては、パイプかredirect
- tr -d (削除文字)
- tail ←→ head
- tail -n 1 ()
- tail -f () : fileへの追記を監視。
- diff (option) (元) (先)
- 変更種別をa,c,dで表現。
- diff -u () () : unified format
- 差分をパッチとして使用。
- 元ファイルと差分ファイルから、変更後のファイルの復元可能。
Ch13 正規表現
- 位置にマッチするメタ文字。
- ^, $
- 繰り返しを示すメタ文字。
- *
- 拡張正規表現 : -E
- +, ?, {m, n} : m回以上n回以下の繰り返し
- その他のメタ文字
- () : 正規表現をグループ化
- (Wine){2,}
- | : OR
- (Vodka|Wine)
- () : 正規表現をグループ化
- grep (option) (ptn) (filename)
- -n, -i, -v
- ''でパス名展開を回避
- 文字にマッチするメタ文字
- ., [], [^]
- \ : escape
- softwareのサポート機関とアップデート
Ch14 高度なテキスト処理
Ch15 shell script
Ch16 shell scriptの基礎知識
- \で改行。|でも可。
- comment : #
- 変数 : $をつける。
- 変数名を区切る : ${}
- quoting
- singleは変数を展開しない。
- doubleは変数を展開する。
- コマンド置換
- filename=$(date '+%Y-%m-%d')
- 引数と位置パラメータ
- $@ : 位置パラメータがそれぞれ文字列として展開。
- $⋆ : 引数全体を1つの文字列に展開。
- 制御構造
if [cmd]; then ... fi
- [] : 組込コマンド
- $?でコマンドの結果
- -q : quiet mode
- test≒[]
- 文字列比較
- -n str1 : str1が空文字列でない
- -z str1 : str1が空文字列である
- 整数のみ比較
- -eqなど
- file属性の評価
- -eなど
- 演算子の結合
- cmd1 &&, || cmd2
- cmd1の結果でcmd2の実行有無を決定
- cmd1 &&, || cmd2
- 終了status
- exit (status)でstatusを明示
- for文
- for $var in "$@" : in以降は省略可
- case文
- |で複数パターン
- while文
- $(())で、文字列を算術式として扱う。
- shell function
- 使う位置より前で定義する。
- 引数の扱い。$0のみ元のshell script名をそのまま保持。$1以降は関数の引数で上書き。
Ch17 shell scriptを活用しよう
- local変数
- 絶対パスからファイル名を取得
- ${変数名##ptn}
- パラメタ展開
- IFS(Internal Field Separator)の設定
IFS='(改行) '
- lsは出力先を自動判定
- ファイルに出力するときは自動で1ファイル1行になる。
- xargs (cmd) : stdinをcmdの引数として受け取る
- find . -type f -name '*.txt' | xargs ls -l
- 引数がないときはhelpを表示する。
- basename : パスからファイル名を取り出す。
- helpとして記載したヒアドキュメントはstdinに渡している(cat <<)。
- file評価
- std err
- echo "(contents)" 1>&2 の後でexit 2
- zshの使い方
Ch18 アーカイブと圧縮
- アーカイブ(書庫)と圧縮の違い
- {m..n} : ブレース展開
- touch dir1/file-{1..5}.txt
- tar cf (先) (元)
- tarは古くから利用されているコマンドで、今も使われている。
- optionに-なし
- tf () : 内容確認。tはlistのt
- xf () : xはextractのx
- file属性を保持する。要権限。
- gzip (元) ←→ gzip -d ()
- bzip2 : gzipと同じ扱い方
- gzipよりも圧縮率が高く、データ量を小さくできる。
- tarではjオプションを使う。
- xzもある。
- zip -rq (先) (元)
- Linuxのデスクトップ環境
Ch19 バージョン管理システム
- gitの始め方
- repositoryとworktree
- add, commit, status, diff
- log message
- log
- object名の省略
- indexとworktree
- diffはindexとworktreeの比較
- --cachedで、indexとrepositoryの比較
- HEAD : repositoryとworktreeの比較
- add -u, -A
- checkout HEAD .
- git revert (objectname)
- git branch
- checkout featurename
- merge
- branch -d
- repositoryのbackup
- git push (target repository) (org branch):(target branch) : branchは同じなら(repository)でok
- git clone (org repository)
- git remote add (alias) (repository path) : aliasは通常origin
- git remote -v
- git fetch (repository)
- remote 追跡ブランチ
- git merge origin/master
- git pull origin master
- git fetch + git mergeと同じ
- 共同作業のワークフロー、競合の解消
- man git
Ch20 software package
- package : 1つのアーカイブされたファイル
- yum @ RPM
- Advanced Packaging Tool(APT) ←→ RPM
- apt-get (option) (cmd) (package name) : apt-cacheもある
- apt-get remove/purge (package name)
- apt-cache search ( search word )
- aptitudeでgetもcacheも〇
- apt-cache show (package name)