Linuxを体系的に学ぶノート

📢 この記事は gemini-3-flash-preview によって翻訳されました

この記事は Hiyoung によって執筆されたよ。

元の記事: https://blog.hiyoung.xyz/2022/08/01/84a03702e5a9/

(参考動画:https://www.bilibili.com/video/BV1WY4y1H7d3?p=1 )

一、基礎編

1.1 Linuxファイルシステムのディレクトリ構造

Linuxファイルシステムのディレクトリ構造 出典:菜鳥教程 (Runoob)

図の中の小さな矢印は、そのファイルの実際の場所が別の場所にあることを示しているよ。

  • /bin: binはBinaries(バイナリ)の略で、このディレクトリには最も頻繁に使用されるコマンドが格納されているよ。
  • /boot:
    ここにはLinuxを起動する際に使用されるコアファイルが置かれているよ。接続ファイルやイメージファイルも含まれるんだ。
  • /dev :
    devはDevice(デバイス)の略。このディレクトリにはLinuxの外部デバイスが置かれているよ。Linuxではデバイスへのアクセス方法とファイルへのアクセス方法は同じなんだ。
  • /etc:
    etcはEtcetera(エトセトラ)の略。このディレクトリは、システム管理に必要なすべての設定ファイルとサブディレクトリを格納するために使われるよ。
  • /home:
    ユーザーのホームディレクトリだね。Linuxでは各ユーザーに自分のディレクトリが割り当てられていて、通常はユーザーのアカウント名がディレクトリ名になるよ(上の図のalice、bob、eveのようにね)。
  • /lib:
    libはLibrary(ライブラリ)の略。このディレクトリには、システムで最も基本的な動的リンク共有ライブラリが格納されているよ。WindowsでいうDLLファイルみたいな役割だね。ほとんどすべてのアプリケーションがこれらの共有ライブラリを必要とするんだ。
  • /lost+found:
    このディレクトリは通常は空だけど、システムが不正に終了した後に、いくつかのファイルがここに置かれることがあるよ。
  • /media:
    LinuxシステムはUSBメモリや光学ドライブなどのデバイスを自動的に識別するんだ。識別されると、Linuxはそのデバイスをこのディレクトリの下にマウントするよ。
  • /mnt:
    システムが提供しているこのディレクトリは、ユーザーが他の一時的なファイルシステムをマウントするためのものだよ。光学ドライブを /mnt/ にマウントして、そのディレクトリに入れば中身を確認できるってわけ。
  • /opt:
    optはoptional(オプション)の略。これはホストに追加でインストールするソフトウェアを置くためのディレクトリだよ。例えばORACLEデータベースをインストールするならここに入れることができるね。デフォルトは空だよ。
  • /proc:
    procはProcesses(プロセス)の略。/procは擬似ファイルシステム(仮想ファイルシステム)の一種で、現在のカーネルの実行状態に関する一連の特殊なファイルを格納しているよ。このディレクトリは仮想的なもので、システムメモリの構成を反映しているんだ。ここを直接覗くことでシステム情報を取得できるよ。
    このディレクトリの内容はハードディスク上ではなくメモリ上にあるんだ。中の特定のファイルを直接修正することもできるよ。例えば、次のコマンドでホストへのpingをブロックして、他の人が自分のマシンにpingできないように設定したりできるんだ:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:
    このディレクトリはシステム管理者、つまりスーパーユーザー(特権ユーザー)のホームディレクトリだよ。
  • /sbin:
    sはSuper Userの意味で、Superuser Binaries(スーパーユーザー用バイナリ)の略。ここにはシステム管理者が使用するシステム管理プログラムが格納されているよ。
  • /selinux:
    このディレクトリはRedhat/CentOS特有のもの。SELinuxはWindowsのファイアウォールのようなセキュリティ機構だけど、仕組みはかなり複雑だよ。このディレクトリにはSELinux関連のファイルが置かれているんだ。
  • /srv:
    このディレクトリには、いくつかのサービスが起動した後に必要となるデータが格納されるよ。
  • /sys:これはLinux 2.6カーネルの大きな変更点の一つ。このディレクトリには、2.6カーネルで新しく登場したsysfsというファイルシステムがインストールされているよ。sysfsは、プロセス情報のproc、デバイス情報のdevfs、擬似端末のdevptsという3つのファイルシステムの情報を統合したものなんだ。このファイルシステムはカーネルデバイスツリーを直感的に反映しているよ。カーネルオブジェクトが作成されると、対応するファイルやディレクトリもカーネルオブジェクトサブシステム内に作成されるんだ。
  • /tmp:
    tmpはtemporary(一時的)の略。このディレクトリは一時的なファイルを置くために使われるよ。
  • /usr:
    usrはunix shared resources(共有リソース)の略。これは非常に重要なディレクトリで、ユーザーの多くのアプリケーションやファイルがここに置かれているよ。Windowsの Program Files ディレクトリみたいなものだね。
  • /usr/bin:
    システムユーザーが使用するアプリケーション。
  • /usr/sbin:
    スーパーユーザーが使用する、より高度な管理プログラムやシステムデーモン。
  • /usr/src:
    カーネルソースコードのデフォルトの配置場所。
  • /var:
    varはvariable(変数)の略。このディレクトリには、絶えず拡張され続けるものが格納されているよ。頻繁に修正されるディレクトリはここに入れるのが一般的だね。各種ログファイルも含まれるよ。
  • /run:
    一時的なファイルシステムで、システム起動時からの情報を保存しているよ。システムを再起動すると、このディレクトリ内のファイルは削除されるかクリアされる必要があるんだ。もしシステムに /var/run ディレクトリがあるなら、それは /run を指すようにしておくべきだね。

1.2 ファイルの基本属性

1.2.1 基本属性

Linuxでは、最初の文字がそのファイルがディレクトリなのか、普通のファイルなのか、あるいはリンクファイルなのかを表しているよ。

  • d であればディレクトリ
  • – であればファイル
  • l であればリンクファイル (link file)
  • b であればデバイスファイル内のストレージインターフェースデバイス(ランダムアクセス可能デバイス)
  • c であればデバイスファイル内のシリアルポートデバイス(キーボードやマウスなど、一方向の読み取りデバイス)

続く文字は3つで1セットになっていて、すべて rwx の3つのパラメータの組み合わせなんだ。r は読み取り可能 (read)、w は書き込み可能 (write)、x は実行可能 (execute) を表しているよ。この3つの権限の位置は固定で、権限がない場合はマイナス記号 – が表示されるんだ。

システム学習Linuxノート_3

各ファイルの属性は、左側の最初の部分にある10文字で決まるよ(下の図のようにね)。

システム学習Linuxノート_4

左から右に 0-9 の数字で表すとこうなるよ。

第0位はファイルタイプ。第 1-3 位は所有者(そのファイルのオーナー)が持つ権限。第4-6位は所有グループ(オーナーと同じグループのユーザー)が持つ権限。第7-9位はその他のユーザーが持つ権限。

その中で、第 1, 4, 7 位は読み取り権限。r なら権限あり、– なら権限なし。

第 2, 5, 8 位は書き込み権限。w なら権限あり、– なら権限なし。第 3, 6, 9 位は実行権限。x なら権限あり、– なら権限なし。

1.2.2 Linuxファイルの所有者とグループ

1、chgrp:ファイルグループを変更する

構文:

1
chgrp [-R] グループ名 ファイル名

パラメータオプション

  • -R:ファイルグループを再帰的に変更する。つまり、あるディレクトリのグループを変更する際、-Rを付ければ、そのディレクトリ下のすべてのファイルのグループも変更されるよ。

2、chown:ファイル所有者を変更する(同時にグループも変更可能)

構文:

1
2
chown [–R] 所有者名 ファイル名
chown [-R] 所有者名:グループ名 ファイル名

/root ディレクトリ(~)に移動して、install.log の所有者を bin アカウントに変更する例:

1
2
3
4
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log

install.log の所有者とグループを root に戻す例:

1
2
3
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

3、chmod:ファイルの9つの属性を変更する

Linuxのファイル属性の設定方法には、数字による方法と記号による方法の2種類があるよ。

Linuxファイルの基本権限は9つあって、owner/group/others (所有者/グループ/その他) の3つの身分それぞれに read/write/execute の権限があるんだ。

さっきのデータを復習しよう。ファイルの権限文字が -rwxrwxrwx の場合、この9つの権限は3つずつセットになっているよね!数字を使って各権限を表すことができるんだけど、それぞれのスコア対応表は以下の通りだよ:

  • r: 4
  • w: 2
  • x: 1

各身分 (owner/group/others) ごとの3つの権限 (r/w/x) のスコアを合算するんだ。例えば、権限が -rwxrwx— の場合、スコアはこうなるよ:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others = — = 0+0+0 = 0

だから、権限を変更する時、そのファイルの権限数字は 770 になるんだ。権限変更コマンド chmod の構文はこんな感じ:

1
chmod [-R] xyz ファイルまたはディレクトリ

オプションとパラメータ:

  • xyz : さっき説明した数字タイプの権限属性で、rwx の数値の合計だよ。
  • -R : 再帰的 (recursive) に変更を適用する。サブディレクトリ内のすべてのファイルも一緒に変更されるよ。

例えば、.bashrc というファイルのすべての権限を有効にしたい場合、コマンドはこうなるよ:

1
2
3
4
5
[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

もし権限を -rwxr-xr– にしたいなら?スコアは

\[4+2+1\]\[4+0+1\]\[4+0+0\]

=754 になるね。

4、記号タイプによるファイル権限の変更

もう一つの変更方法があるよ。これまでの紹介からわかる通り、基本的には9つの権限が3つのグループに分かれているよね:

  • user:ユーザー
  • group:グループ
  • others:その他

そこで、u, g, o を使ってこれら3つの身分の権限を表すことができるんだ。

さらに、a は all(すべての身分)を表すよ。読み書きの権限は r, w, x と書けるから、下の表のような感じで使えるよ:

| chmod | u g o a | +(追加) -(削除) =(設定) | r w x | ファイルまたはディレクトリ | |---|---|---|---|---|

もしファイル権限を -rwxr-xr– に設定したいなら、chmod u=rwx,g=rx,o=r ファイル名 とすれば設定できるよ:

1
2
3
4
5
6
touch test1    // test1 ファイルを作成
ls -al test1    // test1 のデフォルト権限を確認
#-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
chmod u=rwx,g=rx,o=r  test1    // test1 の権限を修正
ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1

特定の権限だけを外して、他の権限は変えたくない場合はどうするかって?例えば、全員の実行権限を外したいならこうするよ:

1
2
3
chmod  a-x test1
ls -al test1
#-rw-r--r-- 1 root root 0 Nov 15 10:32 test1

1.3 vimテキスト編集

1.3.1 vimの3つのモード

基本的に vi/vim は3つのモードに分かれているよ。コマンドモード、編集モード、そして**一般モード(末行モード)**だね。

システム学習Linuxノート_5

1.3.2 vimショートカットコマンド

外部サイトを参考にしてみて:https://www.runoob.com/linux/linux-vim.html

1.4 ネットワーク設定

1.4.1 VMwareの3つのネットワーク接続モード

ブリッジモード:仮想マシンが直接外部ネットワークに接続されるよ(外部から見える状態)。ホストがブリッジ(橋渡し)の役割をして、仮想マシンはホストと同じ立場でルーターから独立したIPアドレスを割り当てられるんだ。

NATモード:ホストと仮想マシンで専用のネットワークを構築して、NATを使って仮想マシンのIP変換を行うよ(外部からは直接は見えない)。この時、仮想マシンだけで一つのローカルネットワーク(LAN)を構成するから、ホストと仮想マシンは同じネットワークセグメントにはいなくて直接通信できないんだ。そこで、仮想のネットワークカード(VMnet8)を使って、仮想マシンがいるLANに接続する仕組みになっているよ。

ホスト専用モード:このモードは仮想マシンとホストの間だけで通信させるもので、インターネットには接続しないよ。

システム学習Linuxノート_6 システム学習Linuxノート_7

1.4.2 静的IPの設定

サイト内の記事を参考にしてね:仮想マシンで静的IPを設定する(CentOSの例)

1.4.3 ホスト名の設定

1
2
3
4
5
6
7
8
9
hostname #現在のホスト名を確認

vim /etc/hostname  #ホスト名を修正
#修正後に再起動すれば新しいホスト名が表示されるよ

#方法二 

hostnamectl set-hostname ... 
#即座に反映されるよ
1
2
#hostsファイルを修正
vim /etc/hosts

1.5 システム管理

1.5.1 service サービス管理

実行中のプログラムやコマンドのことを「プロセス」と呼ぶんだ。

起動後にずっと存在し続け、メモリに常駐しているプロセスのことを、一般的に「サービス」と呼ぶよ。

1
2
3
systemctl start|stop|restart|status サービス名 #基本構文

/usr/lib/systemd/system/    #サービスが置かれているディレクトリ
This post is licensed under CC BY-NC-SA 4.0 by the author.