LinuC101

/proc ディレクトリ

/procディレクトリ配下には、Linuxカーネルが認識しているデバイスのうち、 デバイスの状態などの情報が格納されています。

リアルタイムな情報も格納されているため、監視システムでLinuxのcpuの状態やメモリ使用量などの監視をする際などに、監視システムの参照先となる事があります。

例えばcpuの情報は/proc/cpuinfo を参照する事でcpuの情報を確認する事ができます。
(lscpuコマンドでも cpuの情報を確認する事が可能です。)


/proc 配下には、cpuinfo以外にも下記のようなファイルが存在します。


/proc 配下は実際にこのようになっています。


数字のフォルダは「プロセスID」に紐付いており、

ディレクトリの中には、/proc配下と同じように状態を表すファイルが格納されています。

実行中のプロセスを「top」コマンドで表示させると、/proc配下の数字のディレクトリと、 プロセスID(PID)の数字とが紐付いているのがわかります。


PID 609のディレクトリ(firewalld のプロセスIDディレクトリ )の中の、statusファイルを参照すると下記のようにfirewalldの状態が表示されます。


【LinuC 101】udev

すべてのハードウェアはデバイスファイルとして抽象化され、デバイスファイルの読み書きによって、ハードウェアにアクセスします。
デバイスファイルはudevによって自動的に作成され、udevが作ったデバイスファイルは/dev配下に作成されます。


●デバイスの接続に必要なデバイスファイルは下記の流れで自動作成されます。

 
 ①新たにデバイスを接続すると、まずカーネルが認識します。
 ②カーネルがデバイス情報を検知し/sys配下にデバイス情報を作成 ※★1
 ③D-Busによってデバイス情報がudev(udevd)デーモンへ伝えられ、そのデバイス情報をudev(udevd)デーモンが参照し、/dev配下にデバイスファイルを作成する。※★2


※★1
カーネル内部のデータをアプリケーションが直接参照できないため sys fs(sys ファイルシステム)という、
動作中のカーネルの内部構造を仮想的なファイルシステムで表示させる仕組みで、 /sys ディレクトリ配下にデバイス名のついたディレクトリを作成し表示させ、アプリケーションから参照したり変更したりできるようになっています。


※★2
D-Bus(Desktop Bus)という、アプリケーション間で情報を交換するシステムが、デバイス情報をudev(udevd)デーモンに伝えます。


【LinuC 101】デバイスファイル

Linuxは、外部リソースをすべてファイルという概念で扱います。

デバイスを意味するファイルはデバイスファイルと呼ばれ、

2003年にリリースされたLinuxカーネル2.6 からは、udevという仕組みにより、

デバイスファイルを/dev以下に自動で作成してくれるようになりました。

udev はデーモンとして常駐しており、カーネルからのメッセージを受けて、

デバイスの存在を認識したり、デバイスがなくなったりしたときに、

デバイスファイルを作成したり消去したりします。

【LinuC 101】プロセスとデーモン(daemon)

Linuxサーバ上で動いているプログラムは全てプロセスとして管理されており、
プロセスには、Linuxが起動した後にメモリ上に常駐するプロセスと、
実行するときだけメモリ上に読み込まれて実行後すぐに終了するプロセスがあります。

メモリ上に常駐するプロセスは、Linuxが稼働するために必要なプログラムとして動作しており、
メモリ上に常駐するプロセスはデーモン(daemon) と 呼ばれます。
※デーモンの意味は,悪魔の「demon」ではなく守護神の「daemon」です。

メモリ上に常駐するプロセス(デーモン)に対して、
コマンドラインでユーザーが実行するプログラムなどが、
実行するときだけ動作するプロセスとなります。





後程、詳しく説明致しますが、
プロセスの表示にはコマンドps を使います。
下記では、コマンドps にオプションauxf を付けてコマンド実行しプロセスを表示しています。


また、プロセスは/proc 配下にプロセスディレクトリとして、
/proc/(プロセスID)ディレクトリの表記で保存され、
プロセスが終了すると、その /procプロセスディレクトリは消えます。

ディレクトやファイルの表示にはコマンドls を使います。
下記では、コマンドls にオプション-al を付けてコマンド実行し/proc/配下を表示しています。

/proc/(プロセスID)ディレクトリの、
プロセスディレクトリには下記のようなファイルが含まれています。
プロセスの詳細を調べる事ができますが、内容を編集したり削除してしまうと、
システムに影響がでる場合があるので、参照用として利用します。


cmdline      プロセスを開始したコマンド
cwd        プロセスのカレントワーキングディレクトリ(CWD)へのシンボリックリンク
exe       プロセスの実行ファイルへのシンボリックリンク
root       ルートディレクトリへのシンボリックリンク
cpu       各cpuでのCPUタイムと統計情報
environ     プロセスの環境変数の一覧
fd         プロセスが使用しているファイル・デバイスのファイル記述子
maps      プロセスのアドレス空間の状態
mem      プロセスのアドレス空間の内容
statm      プロセスのページ割り当て
stat        プロセスの状態
status      プロセスの状態(statより詳しい内容)



Linuxに限らずですが、システムを触っていると、
役目を終えているのにプロセスが終了せず、
メモリを開放してくれないプロセスについて対応する場面が出てくると思います。
そんな状態のプロセスを「ゾンビプロセス」や「孤児プロセス」と言ったりします。

【LinuC 101】絶対パス(absolute path)と相対パス(relative path)

Linuxのディレクトリ構造は、一番上の「/」を頂点として階層構造となっています。

このルートディレクトリ「/」を起点にして階層を順番に下って
ディレクトリ や ファイル の場所を表すを方法を、
絶対パス(フルパス)と言います

絶対パスはルートディレクトリ 「/」 からの場所で表記するので、
誰から見ても同じ場所にたどりつくことができます。

そして、絶対パスに対して、現在作業中のディレクトリから、
目的のディレクトリまたはファイルまでの経路を表す、
相対パスというものがあります。

相対パスは作業しているディレクトリからのパスなので、
作業ディレクトリが変わると相対パスのスタート地点も変わり、
表記するパスも変わります。

また、相対的パスを表すために、以下の記号が用意されています。

記号   |   意味
——————————————————————–
.     |    現在のディレクトリ
..     |   上の階層のディレクトリ
~    |    (チルダ) ホームディレクトリ


上の階層のディレクトリを指す .. を使った例を下記に紹介します。



【LinuC 101】カレントディレクトリ

Linuxでは、GUI(Graphical User Interface)環境とCUI(Character User Interface)環境があります。

GUIはWindowsなどと同じようなデスクトップ環境で、CUIはコマンドラインの環境となります。
また、CUI環境は「CLI(Command Line Interface)」と呼ばれることもあります。

仕事で使う事になると、CUI環境で使う場面の方が多いと思いますし、
LinuCの勉強もCUI環境で問題ないです。

コマンドを入力する場所を「コマンドライン」と呼び、

下記の画像のコマンドラインの「[root@alpha ~]#」の部分は、

デフォルトでは「”ユーザー名”+”@”+”ホスト名”+”カレントディレクトリ”+”$”」となっています。

※rootユーザーの場合は、$が#になります。

CUI環境では、 現在のディレクトリを意識する必要があり、
現在のディレクトリ(作業中のディレクトリ)の事を 、
カレントディレクトリ(Current Directory)といい、
コマンドラインでは、下記のうように表示されます。

※ ~ は チルダ と読みます。
 チルダはホームディレクトリの事を指します。

rootユーザーのホームディレクトリはrootディレクトリになりますので、
rootユーザーのチルダは、rootディレクトリの事を指します。

カレントディレクトリを変更するときは、コマンドcdで変更します。


チルダを使ってカレントディレクトリをホームディレクトリに移動する事もできます。

下記は、チルダを使って、/etc から /root へカレントディレクトリを移動しています。



通常、rootユーザー以外のホームディレクトリは、homeディレクトリの中に格納されます。
また、ログイン直後のカレントディレクトリはそのユーザーのホームディレクトリです。

ログイン直後は必ずカレントディレクトリがチルダ表示
 通常は、チルダ = ホームディレクトリ
※※ユーザー作成時に作業ディレクトリの指定もできる為、通常としましたが、理由がなければユーザー作成時にユーザー名と同じ名前のディレクトリが作成されて、そこがホームディレクトリになります。

rootユーザーでログインした場合は、カレントディレクトリがrootディレクトリになっており、
その他のユーザーでログインした場合は、
そのユーザーのホームディレクトリが、カレントディレクトリとなります。

現在のカレントディレクトリの確認は、コマンドpwdで確認できます。

【LinuC 101】ディレクトリの用途

Linuxにはディストリビューションが多数存在しておりますが、

標準仕様を定めた文章があるので、

ディストリビューション間の違いによる混乱を防げるようになっています。


その標準仕様の中に、どんなファイルを、

どのディレクトリに置くべきかが記載されている文章があり、

必須とされるディレクトリと、

必須ではないオプション扱いのディレクトリがあります。


必須とされるディレクトリには、

Linuxの起動に必要なファイルが入ったディレクトリで、

それ以外の、起動後に利用されるファイルや、

ユーザーが利用するファイルが入ったディレクトリは、

必須ではないディレクトリとされています。



■「/」配下の必須ディレクトリ

/boot/
読み:ブート
由来:boot loader
用途:システムブート時に必要となるLinux カーネルなどの静的ファイルを格納

/dev/
読み:デブ
由来: device
用途:接続されたデバイスを表すファイルを格納。システムの入ったハードディスクドライブの情報などは/dev/に格納されますので起動時に必須となります。

/etc/
読み:エトセ
由来:et cetera  
用途:マシン固有のシステム構成ファイルや、マシン固有の設定ファイルなど、 システム全体に関わる設定ファイルを格納

/lib/
読み: リブ
由来: library
用途:必須の共有ライブラリ(/bin/や/sbin/に含まれるバイナリファイルを実行するために必要なライブラリ)とカーネルモジュールを格納

/media/
読み:メディア
由来: media
用途:CD-ROMやDVD-ROMなど、光学ドライブメディアのマウントで使用される情報の格納

/mnt/
読み:マウント
由来: mount
用途:NFSファイルシステム(共有フォルダなど)の一時的なマウントで使用される情報の格納

/opt/
読み: オプト
由来: option
用途:オプションのソフトパッケージや、追加プログラムのインストールファイルなど、 パッケージ管理ツール以外でインストールしたディレクトリ構造になっているアプリケーションを格納

/sbin/
読み:エスビン
由来: system binaries
用途:mountやshutdownなどの、管理者(rootユーザー)のみが実行可能なシステム管理コマンドの格納

/bin/
読み:ビン
由来: binaries
用途:一般ユーザーでも実行可能な基本的なコマンドの格納

/srv/
読み:エスアールブイ
由来:served
用途:HTTP、FTPなどの特定のサービス用のデータファイルを格納

/tmp/
読み:テンプ
由来: temporary files
用途:一時ファイルなどの、一時的に使用する作業用ファイルを格納。格納したディレクトリ及びファイルは、リブート(再起動)をすると保持されずに消える。

/usr/
読み: ユーザ
由来: User Services and Routines 又は User
用途: 全ユーザーが使用するアプリケーションソフトウェアやライブラリ群を読み取り専用の共有ファイルとして格納。多くのブログラムがサブディレクトリに使用している為、複数のサブディレクトリが配置され、構造が複雑になっています。


■オプションディレクトリ

/var/
読み:バー
由来: variable
用途:ログファイルなどの格納。読み書き可能なディレクトリなので、システムやアプリケーションがログファイル、ロックファイル、一時ファイルなどの格納に使用しています。

/proc/
読み:プロック
由来: process
用途: プロセスやメモリーなどのリソース情報を、仮想的なファイルで格納。実行中のプロセスはサブディレクトリとして存在し、ディレクトリ名(数字)はプロセスIDを意味します。

/home/
読み:ホーム
由来:home directory
用途: 一般ユーザーごとのホームディレクトリを格納。一般ユーザーごとのディレクトリが作成され、自由に利用できます。

/root/
読み:ルート  
用途:rootユーザーのホームディレクトリ。管理者(root)のホームディレクトリなので、頂点の「/」(ルートディレクトリ)とは違います。


■Linuxの標準仕様を定めたもの
LSB(Linux Standard Base)
http://refspecs.linuxfoundation.org/lsb.shtml


■ディレクトリの用途やどのようなファイルをどのディレクトリに配置すべきかを定めたもの
FHS(Filesystem Hierarchy Standard)
http://www.pathname.com/fhs/

【LinuC 101】ディレクトリ構造

Windowsではファイルやフォルダの場所の パスの一番上は

C:やD:のようなハードディスクのドライブ名(ドライブレター)になっており、

ハードディスクやDVDドライブなどを増設する度に

E:やF:などのようにパスの一番上が増えていきますが、

Linuxでは、パスの一番上は「/」であり、増える事や変わる事はなく、

一番上は「/」のみ存在しています。


また、Windowsで言うフォルダの事をLinuxではディレクトリと言い、

一番上の階層の「/」をルートディレクト(略してルート)と言います。


Linuxでファイルやディレクトリのパスを考える際は、

Linuxのディレクトリ構造が、一番上の「/」を頂点として

階層構造となっている事を 意識する必要があります。

 

【LinuC 101】ディストリビューション

LinuxはOS(基本ソフト)の核となる部分のみです。
その為、利用するには目的に応じてプログラムを集め、
環境を構築する必要があり、使うには難易度がすごく高くなっていました。
そんな状況から、ユーザーが手軽に使えるようにするために、
企業やユーザーコミュニティーなどが中心となって必要なプログラムを集め、
実用的な環境を構築できるようにして導入パッケージとして配布しているものが、
Linuxのディストリビューションです。

現在、ディストリビューションは数百種類ありますが、パッケージ管理の違いによって系統と呼ばれるものに分類されており、3つの大きな系統があります。

【LinuC 101】ハードウェアの構成

 

◆CPU

Central Processing Unitの略です。

計算や処理などを実行しており、処理能力はクロック周波数とコア数で判断されます。

 

・クロック周波数

 1.0GHzや、2.2GHzのように、「Hz」単位で表記されているもので、 周波数が高いほど、1コア当たりの処理速度も高くなります。

 

・コア数

 CPUの中にコアがいくつ搭載されているかを表します。

クアッドコアであれば、処理をするプロセッサが4つとなります。

コアが多いほど同時に処理(並列処理)できる数が多くなります。

 

◆メモリ

CPUの作業領域として使われ、主記憶装置と呼ばれます。

メモリに記憶されるデータは一時的なもので、シャットダウンすると消えてしまいます。

※ハードディスクが主と思われがちですが、コンピュータの構成ではCPUの観点でメモリが主となります。

 

◆ハードディスク

ハードディスクはデータを保存するための装置で、補助記憶装置と呼ばれます。

外付タイプと、内蔵タイプがあります。

近年はハードディスクドライブ(HDD)以外に、 ソリッドステートドライブ(SSD)も補助記憶装置として使われるようになりました。