この投稿について
まとめノートをどこからでも見れるようにするため、途中ですが投稿します。
投稿後に、ちょっとずつよくしていきます。
リンクは、まだリンク先を作っていないものも含まれています。
※勉強中ノートなので、間違った情報流しているかもしれません。
絵で見てわかるLinux OSアーキテクチャ
PCを組み立てるときに、cpuやメモリなどを配置しますが、これを読み込んだり連携するのがカーネル。
図を見ると、
- CPUと連携しつつ、Process managementがあり、
- RAMと連携しつつ、Memory management,
- HDD,SSD等と連携しつつ、File system,
- 各種端末とDevice drivers,
- Network adopterとNetwork
というように、ハードと対応するコンポーネントがカーネルに用意されており、
それらをユーザスペース側のアプリケーションからシステムコールで呼び出してハードを使い、これらを連携して仕事を行っているようです。
(ちなみに、 shellはユーザスペース側にいる ようです)
File system
Windows脳のままLinuxを見るとファイルシステムがわかりませんでしたが、これらの図を見て、なるほどと思いました。
Windowsだとパーティション毎にドライブを割り当てるけれど、
Linuxはルートファイルシステムを持ち、ルートファイルシステムが各パーティションのファイルシステムにマウントする形で連携して1つのファイルシステムとして使えるということだと理解しました。
ルートファイルシステム
-
ルートディレクトリ(/)と同一のパーティションに存在するファイルシステム
-
他のすべてのファイルシステムにマウントしている(自分がしていない)ファイルシステム
-
ブートで使われるファイルシステム
- /bin システムに必要なコマンド、プログラムが含まれている
- /sbin システムに必要なコマンド、プログラムが含まれている
- /etc 各種設定
- /lib ライブラリ
- /dev デバイスファイル
パーティション
1つのディスクを論理的に分けた区画。
BIOSベース
- 基本パーティション 1つのディスクに4つまで(MBR方式)。128まで(GPT) /dev/sda1〜/dev/sda4
- 拡張パーティション 内部に論理パーティションをもつ基本パーティション。基本パーティションのうち1つだけ選択できる。
- 論理パーティション /dev5〜.
UEFIベース
- EFIシステムパーティション 他のパーティションの管理など
- 基本パーティション1
- 基本パーティション2
- 基本パーティション..
ファイルシステムの種類
ext系
多くのディストリビューションで採用されている。
- ext2: Linux標準
- ext3: ext2 + ジャーナリング機能
- ext4: ext3を機能拡張
XFS系
RHL7で標準となっているジャーナリングファイルシステム。
FHS
ファイルとiノードとディレクトリ
ファイルシステム周りの操作
パーティションを管理する
・fdisk
・gdisk
・parted
ファイルシステムを作成する
・mkfs
・mke2fs(etx2,etx3,etx4)
・mkswap(スワップ領域作成)
ディスクの利用状況確認
・df <-- ディスク/iノードの利用状況確認
・du <-- ディレクトリの容量確認
ファイルシステムをチェックする <-- unmount / 読み取り専用にしておく
・fsck
・e2fsck
ファイルシステムの管理
・tune2fs
・dumpe2fs
XFSファイルシステムを管理する
・mkfs.xfs
・xfs_info
・xfs_db
・xfs_check
・xfs_admin
・xfs_fsr
ファイルシステムをマウント・アンマウントする
・/etc/fstab
・/etc/mtab
・mount
・unmount
ファイルシステムの利用容量制限をかける(quota)
・quotacheck
・quotaon / quotaoff
・edquota
・repquota
システムとコマンド
cpu情報を確認する
cat /proc/cpuinfo
メモリの利用状況を調べる
free
システムの稼働時間を調べる
- uptime
システムのアーキテクチャやOSを調べる
- uname
デバイス/usb
-
lspci
-
lsusb
-
lsmod
-
デバイスドライバのロード
-
必要な情報をカーネルに読み込む
------ ブート ----------------------------
ブートローダ(ブートマネージャ) = GRUB
GRUB Legacy / GRUB2
MBR
SysVinit
systemd
ランレベル
ブートローダGRUBをインストールする
・grub-install /dev/sda
ブートローダの設定をする
・vi /boot/grub/menu.lst
・vi /boot/grub/grub.cfg
・grub-mkconfig
ブートオプションの指定
・起動時にEを押す
・オプションを選ぶ
起動時のイベントを確認する
・dmesg
・cat /var/log/messsages
・cat /var/log/dmesg
・cat /var/log/boot.log
シャットダウンと再起動
・shutdown
ランレベルの確認と変更
・runlevel
・init
・wall (他のユーザへ警告メッセージ)
・ls /etc/rc3.d
サービスの管理
・systemctl
--- 共有ライブラリ ---------
共有ライブラリ ( /lib , /usr/lib )
/etc/ld.so.conf, etc/ld.so.cache, 環境変数LD_LIBRARY_PATH
必要な共有ライブラリの確認
・ldd コマンド (ldd /bin/cat)
共有ライブラリの変更を反映する
・ldconfig
--- パッケージ管理 ----------
----- debian --------
パッケージ名の命名規則
・dpkg
・apt-get
・apt-cache
・aptitude
----- RPM -----------
パッケージ名の命名規則
・rpm
・yum
・yumdownloader
-----ファイル / ディレクトリ / リンク -------
ファイル / ディレクトリ / iファイル
シンボリックリンク / ハードリンク
メタキャラ(*,?,[],{})
ファイルを探す
・find
・locate
・updatedb
ファイルの圧縮、回答
・gzip
・gunzip
・bzip2
・bunzip2
・xz
アーカイブを作成する
・tar
アーカイブファイルにコピーしたり、そこからファイルをコピーする
・cpio
ファイルをコピーする
・cp
・dd
リンクを作成する
・ln
リンクをコピーする
・cp -d
その他
・ls
・cp
・mv
・mkdir
・rmdir
・touch
・file
-----テキスト操作----
正規表現
・cat
・nl
・od
・head
・tail
・cut
・join
・paste
・tr
・sort
・split
・uniq
・pr
・fmt
・expand
・unexpand
・wc
・xargs
・grep <-- 拡張正規表現が使える(-E)
・egrep <-- 拡張正規表現が使える
・sed <-- 非破壊的 (d,s,yコマンド)
-------ファイルやディレクトリの権限まわり-------------
権限のアーキテクチャ
権限を確認する
・ls -l / ls -ld
権限を変更する
・chmod (SUID, SGID, StickeyBit)
デフォルトマスクを確認する
・umask
ファイルの所有者を変更する
・chown
グループを変更する
・chgrp
----- プロセス -----------
プロセス
実行中のプロセスを確認する
・ps
・pgrep
・pstree (ps -f)
・top
プロセスの終了
・kill
・killall
・pkill
プロセスの実行優先度を確認する
・ps -l (PRI列)
コマンド実行時に優先度を指定する
・nice -n -10 (コマンド)
実行中プロセスの優先度変更
・renice
----- シェル ------------------------
シェル / カーネル
環境変数(主なものだけでよい)
内部コマンド / 外部コマンド (シェルに組み込み / 独立したPG)
コマンドの実行方法
引用符 '' ""(変数展開) ``(コマンド展開)
whatisデータベース
標準入出力
処理を中止 / 一時停止
・Ctrl + C / Ctrl + Z
画面をロック / ロック解除
・Ctrl + S / Ctrl + Q
端末内で仮想端末を作成する
・screen
変数を定義して、確認する
・key=value
・echo $key
変数を削除する
・unset key
環境変数を一覧表示する
・env
・printenv
・set <-- 環境変数とシェル変数を両方表示できる
外部コマンドを実行できるように環境変数PATHに通す
PATH=$PATH:/opt/bin (/opt/bin を通した)
コマンドの履歴を確認する
・history
・↑ / Ctrl + p
・↓ / Ctrl + n
・!文字列
・!?文字列
・!!
・!履歴番号
コマンドの実行方法
・;
・&&
・||
・!履歴番号
・(;)
・{;}
ページャーでみる
・less <-- 操作方法
コマンドについて調べる
・which
・whereis
・type
・man <-- manページ見出し、セクション
・whatis (man -f) <-- 完全一致
・apropos (man -k) <-- 部分一致
キーワード検索用データベースを作成する
・makewhatis
実行結果を標準出力とファイルに出力する
・tee
ヒアドキュメントで入力する
・cat > sample.txt <<EOF
----- ジョブ in シェル --------------
ジョブ
バックグランドで実行する
・&
・nohup
実行中のジョブを確認する
・jobs
ジョブのモードを変更する
・Ctrl + Z <-- 一時停止
・bg <-- バックグランドへ
・fg <-- フォアグラウンドへ
------ vi エディタ -----
viの使い方を覚える
・vimtour