『新しいLinuxの教科書』 学習メモ

Ch01 Linuxを使ってみよう

  • About Linux
    • Linux カーネル: ハードウェア制御を行うソフトウェアのみ含む。
      • distribution: basicalなコマンド群やアプリケーションなどを含め、ユーザがそのまま使えるようパッケージングしたもの
  • 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
  • shell script
  • shellの種類
    • sh
      • cshtcsh : Xshell script
      • bash : shと後方互換〇、対話型操作〇、shell script〇
        • zsh : 多機能。初心者には向かない。
  • bashのメリット
  • ターミナル(端末)
    • コンピュータへのI/O(keyboard/screen)のためのハードウェア
    • ソフトウェアが実装したターミナルエミュレータを使う
      • 例:Tera Term
  • about software license
    • GNU GPL : 派生物もソースを公開する義務あり。

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で破棄
  • 文字コードの変換
    • iconv -f EUC-JP-t UTF-8 (filename)
    • printenv → LANGをcheck
    • ASCII : alphabet, 記号, 制御文字
    • UTF-8(Unicode) : 日本語なども〇

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の移動
    • pwd, cd, ls
    • cmd line args, e.g. cd /usr/local
    • tab補完
    • 「cd」のみ(または「cd ~」、~:チルダ) → home dirへ移る。
  • ls
    • 複数の引数も〇
      • : 任意の文字列
    • ? : 任意の1文字
      • *, ?はパス名展開
    • option
      • -l : show detail
      • -a : show hidden files
      • -F : show fileの種類
  • 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

Ch06 探す、調べる

  • fileを探す
    • find (search start dir デフォルトは全ファイルとディレクトリ) (search condition) (action デフォルトは -print)
      • defaultで再帰的にfind
      • -name : 大小文字区別 、 -inameは区別しない
        • *や?をつけるときは''をつける。パス名展開でないことを示す。
      • -type
        • f : normal file
        • d : dir
        • l : symbolic link
      • 条件の結合 : -a ←and
    • locate : 専用DBから検索するためとても高速
      • locate --version → sudo apt-get install mlocate
        • sudo updatedb
      • locate (option) (search ptn)
      • ただし作ったばかりのファイルなどはDBに登録されていないため検索不可。
      • locate '*.sed'
      • -i / --ignore-case : 大小文字区別なし
      • -b / --basename : ファイル名のみ
      • multi 指定 : OR
      • -A / --all : AND
  • 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多い
  • 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) で反映
      • 例示

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
    • -なしはBSDオプション。ありはUNIXオプション。
  • 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 で、上書き防止。
  • 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 正規表現

  • 位置にマッチするメタ文字。
    • ^, $
  • 繰り返しを示すメタ文字。
  • その他のメタ文字
    • () : 正規表現をグループ化
      • (Wine){2,}
    • | : OR
      • (Vodka|Wine)
  • grep (option) (ptn) (filename)
    • -n, -i, -v
    • ''でパス名展開を回避
  • 文字にマッチするメタ文字
    • ., [], [^]
    • \ : escape
  • softwareのサポート機関とアップデート

Ch14 高度なテキスト処理

  • sed : Stream Editor。非対話型エディタ
    • sed (option) (script) (file)
      • script : address + cmd
        • cmd
          • d : delete
          • p : print
          • s : substitute
      • $ : last line
      • 正規表現でのアドレス指定
      • sed -n 1p () :1行目のみ表示。-nとpの組み合わせ。
      • sed 's/aaa/bbb/flg' ()
        • flg
          • g : 見つかったすべての文字列を置換
          • p : 置換された行を表示
      • -r : 拡張正規表現
      • 後方参照 : ( ) → \1
      • 1,3s/aaa/bbb/flg : 1,3はアドレス
      • sの後ろが区切り文字になる
        • !, %
  • awk 'ptn {action}' (filename)
    • ptnなし→全レコード
    • field 変数
    • パターン指定
    • action 省略 : {print $0}となる
    • -F, : Fの後の文字を区切りに指定する。
    • ENDブロック内のアクションは、すべての入力ファイルを処理し終えてから最後に実行。
    • -fで、awkファイルとして保存したスクリプトを実行。

Ch15 shell script

  • shebang
    • #!/bin/bash → $ /bin/bash ./homesize.sh のように実行する。
  • sourceでの実行
  • sourceでサーチパスから探させない。 : shopt -u sourcepath
  • sshdで公開鍵認証のみ許可

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の実行有無を決定
    • 終了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 ()
    • gzipは、圧縮や展開を行う。歴史が古く圧縮率は低いが、高速さと互換性のためよく使われている。
    • -cでstdout + pipe, redirect
    • tar czf/xzf でtar+gzを扱える。
    • ()を-にすると、標準出力に出力
      • ssh test@server1 'tar czf 0 dir1' | tar xzf - : sshでリモートにファイルをコピー
  • bzip2 : gzipと同じ扱い方
    • gzipよりも圧縮率が高く、データ量を小さくできる。
    • tarではjオプションを使う。
    • xzもある。
  • zip -rq (先) (元)
    • アーカイブと圧縮を同時に行う。複数のファイルやディレクトリをまとめて1つのファイルに圧縮〇。
    • Linuxではあまり使われない。zip, unzipコマンドがそれぞれ必要。
    • -eでパスワード
  • 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
    • yum (option) (cmd) (package name)
    • 自動で依存性解決
    • yum erase/remove (package name)
    • yum search ( search word )
    • yum info ( search word)
  • Advanced Packaging Tool(APT) ←→ RPM
    • apt-get (option) (cmd) (package name) : apt-cacheもある
    • apt-get remove/purge (package name)
    • apt-cache search ( search word )
    • apt-cache show (package name)

Appendix

  • sshをサポートしているterminal emurator
  • port forwarding @ Virtual Box
  • info (cmd)
    • nodeの移動 : np,],[
    • 操作
  • Linuxでの日本語入力について