ことはじめ
Linuxに関するいろいろなことをまとめてあるサイトを見つけたので、自分に有益な部分だけをまとめて行きたいと思う。
参考文献
俺が思うLinux中級者向けのコマンド達
中級者というか、今の時点で俺が知らない、もしくは使いこなせていないコマンドって感じかな。
find
ファイルを検索する。
find <検索パス> -name <ファイル名>
ファイル名の一部 的にやるのもだいぶいいと思うけど。
useradd
新規ユーザの作成
id
ユーザの確認
stress
dmesg
lsmod
ロード済みのカーネルモジュール一覧を表示する
ちなみに、カーネルモジュールとは「カーネルの機能を拡張するためのバイナリファイルです。 例としては、ディスク・ネットワークカード等をLinuxカーネルで使用可能にするためのデバイスドライバなどがあります。 デバイスドライバは各ハードウェアベンダーから提供されることが多いです。
初期のUNIX系OSでは新しいハードウェアを使うにはカーネルの再構築が必要でしたが、 現在のLinuxカーネルは、必要ありません。 起動時に常駐カーネルがメモリにロードされ、必要に応じてロード・アンロードが出来るようになっています。 です。いつか自分でも自作してみたいきはだいぶしていますねー。
modprobe
カーネルモジュールのロード、アンロードを行うコマンド 「カーネルモジュールとは、Linuxカーネルの機能の一部を、カーネル本体とは別にロード、アンロードできるように分離したサイズの小さいバイナリファイルです。多くの場合、ハードウェアにアクセスし、操作するためのドライバ部分がカーネルモジュールとなっています。
ドライバ自体をカーネルに組み込む古い方式では、ハードウェア構成を変更した場合に、カーネルの再構築が必要になります。現在では、ほとんどのドライバがモジュールとして提供されているため、ハードウェア構成変更後は、必要なカーネルモジュールをロードしてカーネルに組み込むだけで対応できるようになっています。
modprobeは、モジュールの依存関係を確認し、必要なモジュールがあれば同時に組み込むといった処理も行います。モジュールの組み込みには内部的に「insmod」コマンドを用いており、取り外しでは「rmmod」コマンドを使っています。 」 ってことですね。
FHS (Filesystem Hierarchy Standard)について
/bin
コマンドファイルが入っている。すべてのユーザが利用するコマンドが保存されているディレクトリ。lsとか、echoとか。 ここに入っているコマンド全部覚えておいて損はないと思いますけどね。
bash fusermount netcat su
bunzip2 grep netstat sync
busybox gunzip networkctl systemctl
bzcat gzexe nisdomainname systemd
bzcmp gzip ntfs-3g systemd-ask-password
bzdiff hciconfig ntfs-3g.probe systemd-escape
bzegrep hostname ntfscat systemd-hwdb
bzexe ip ntfscluster systemd-inhibit
bzfgrep journalctl ntfscmp systemd-machine-id-setup
bzgrep kbd_mode ntfsfallocate systemd-notify
bzip2 keyctl ntfsfix systemd-sysusers
bzip2recover kill ntfsinfo systemd-tmpfiles
bzless kmod ntfsls systemd-tty-ask-password-agent
bzmore less ntfsmove tar
cat lessecho ntfsrecover tempfile
chgrp lessfile ntfssecaudit touch
chmod lesskey ntfstruncate true
chown lesspipe ntfsusermap udevadm
chvt ln ntfswipe ulockmgr_server
con2fbmap loadkeys openvt umount
cp login pidof uname
cpio loginctl ping uncompress
dash lowntfs-3g ping4 unicode_start
date ls ping6 vdir
dd lsblk ps wdctl
df lsmod pwd which
dir mkdir rbash ypdomainname
dmesg mknod readlink zcat
dnsdomainname mktemp red zcmp
domainname modeline2fb rm zdiff
dumpkeys more rmdir zegrep
echo mount rnano zfgrep
ed mountpoint run-parts zforce
egrep mt sed zgrep
false mt-gnu setfont zless
fbset mv setupcon zmore
fgconsole nano sh znew
fgrep nc sleep
findmnt nc.openbsd ss
fuser nc.traditional stty
/lib
共有ライブラリを保存するディレクトリです。 共有ライブラリが何なのかわかる?
ビルド ≒ コードをコンパイルしてオブジェクトファイルの生成 + ライブラリのリンク
なわけだけれど、ライブラリにはスタティックリンクとシェアードリンクの2種類があると。で、共有ライブラリのリンクはさらに、
1. 実行形式のメモリへのロード時にリンクされる、動的リンクライブラリ
2. 必要に応じてメモリへロード、リンクされる、動的ローディング
の二つがある。
<br>
なるほど、静的リンクってのは、ライブラリをリンクして実行ファイルを作るときにライブラリバイナリも実行ファイルに組み込む。これは、ある静的ライブラリが何回も使われるとき、システムのメモリ上に同じバイナリが何個も存在することになるので冗長、無駄が多いですよね。
<br>
この、「冗長で無駄が多くなってしまう」という問題を解決するのが共有ライブラリですね。
動的リンクライブラリを使っているバイナリは、ファイルシステム上ではまだライブラリがリンクされていない状態で保存されています。実行時にメモリにロードされるときにはじめて、ライブラリがメモリ上に展開されて、リンクされるんですね。しかもそのライブラリを使うバイナリが他にも存在するときは、異なるバイナリがメモリ上で同じライブラリのbinaryを参照するということで、ライブラリを共有しているから共有ライブラリ、と呼ばれるんですね。
<br>
さらに、必要に応じてメモリにライブラリをロードするのが動的ろ―ディングですね。
て感じですね。共有ライブラリが入っています。よろしくお願いします。
/root
rootユーザのホームディレクトいr
/sbin
ルートユーザが実行するコマンドを保存
/usr
マシン間で共有可能なファイル
/var
サイズが変化するファイル。ログとかはここに置くよね。
package管理システムについて
ここはかなり大事だと思う。
そもそもpackageとは?
パッケージとは、ソフトウェアの実行に必要なファイルをまとめたものです。
具体的には、
1. 実行ファイル
2. ライブラリ
3. モジュール
4. 設定ファイル
等
ちょっと一瞬ライブラリについて語りたいと思う
ライブラリとは、「再利用可能な形でまとめたプログラム ライブラリ単体では動かない」わけです。システムライブラリってのは、アプリケーションがカーネルを呼び出すためのライブラリです。これは、glibcに入っています。そう、システムコールはここに入っているんですね。
リポジトリとは
packageの保管場所 (配布サイトのこと) iosでいうapp store、windowsでいう窓の杜。
package管理システムの機能
packageの依存関係を自動で解決してくれるのがこれなんです。いいね。
systemdについて
systemdとは、Linuxの起動処理 (init) やサービスの管理を行うソフトウェア一式。 initはカーネルが最初に起動するプロセスで、すべてのプロセスの親。まあ、神ってことや。
ユニットについて
ユニットとは、一つのサービスとそれに関する起動処理などをまとめたもの。次の情報をカプセル化する。
・システムサービス
・ソケットのリッスン
・init システムに関連するその他のオブジェクト
まあ、systemdにデーモン起動をお願いするために必要な設定って感じですね。
ユニットのタイプ
1. サービスユニット
2. ターゲットユニット
3.
まあいっぱいありますね。
ユニットファイルの場所
ファイルの書き方
下に一例を示しておきます。
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target
[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=multi-user.target
まあこんな感じね。 まあただ、最近はベアメタルでサービスを動かすことも少ない というのもdockerを使うからだよね。Docker-composeがこれに相当するのかな?そんな気がしますね。
デバイスに関して
デバイスとは、まあ、コンピュータにつながった機械だと考えていいと。
udevについて
udevはデバイスファイルを作成するためのルール?的なもの。 特定のディレクトリに*.rulesってファイルを作ると、/dev/以下にデバイスファイルができる。まあ、これについては今度でいいでしょう。
LVMについて
LVM とは、複数のストレージを、1つのボリューム (連続した記憶領域) と扱える機能です。
これは便利な機能ですねーーー。だいぶ便利な機能だと思います。
プロセス間通信 (IPS)について
inter process communicationってことだね。はい。 めっちゃめちゃ種類があるってことだよね。俺が知ってるのは、パイプとソケット、ドメインソケットだけだな。
1. パイプ
2. 名前付きパイプ
3. シグナル
4. メッセージキュー
5. セマフォ
6. 共有メモリ
7. メモリマップ度ファイル
8. ソケット
9. ドメインソケット