Amarronの日記

iOSやMac、Web系の記事を書きます。

Linux 基礎

概要

Linux(CeontOS)について昔まとめた資料です。
基礎なので、入門者や初心者向きです。

目次

  1. Linuxの基礎知識
  2. Linuxの基本操作
  3. ファイルとディレクトリ
  4. シェルとコマンド操作
  5. ネットワーク
  6. ユーザー管理
  7. ソフトウェアのインストール
  8. システム管理
  9. Webサーバー

1.Linuxの基礎知識

Linuxとは

1991年にフィンランドの大学生だったリーナス・トーバルスが作成。 その後開発者が改良を加え実用的なOSへと進化していく。

LinuxとはOSの一種で、厳密にはカーネルのみがLinuxカーネルとは、OSの中核部分の事でカーネルにプログラムの実行ライブラリや、日常的に使うツール、コマンド、グラフィカルなユーザーインターフェースを追加してOSとして使えるようになる。

ディストリビューション

カーネルに様々なソフトウェアをまとめたのがディストリビューション。 (多数のオープンソフトウェアや商用ソフトウェアを組み合わせ、1つのOS製品としてまとめあげたもの)

  • サーバーソフトウェア:webサーバー、メールサーバー、DNSサーバー、ファイルサーバー
  • クライアントソフト:オフィスソフト、ブラウザ
  • GUIX Windows System、ウィンドウマネージャー
  • シェル、コマンド、ライブラリ
  • Linuxカーネル

ディストリビューションの代表的な系統は3つ

系統 ディストリビューション 代表的パッケージ
Red Hat Fedora,Red Hat Enterprise Linux,CentOS RPM
Debian Debian GNU/Linux,Ubuntu,Linux Mint,Edubuntu Debian
その他 Slackware,opemSUSE,SUSE Linux Enterprise,Tiny Core Linux

※パッケージについては、7.ソフトウェアのインストールを参照

2.Linuxの基本操作

ユーザー

大きく分けて3つのユーザーがある

  • 管理ユーザ:システムの変更や実行、再起動など管理権限を持つ(root)(#で表記される)
  • システムユーザー:システムプログラムを実行するための専用アカウント(apache,DB等サービスのアカウント)
  • 一般ユーザー:作業用アカウント、通常は一般ユーザーでログインして他ではログインしない($で表記される)

※詳しくは6.ユーザー管理参照

コマンド

コマンドの正体はプログラム・ファイル。 シェル自身にもコマンドをもいくつかのコマンドをもっている。(内部コマンド、調べるにはtypeコマンドで内部コマンドか判断出来る。)

コマンド [オプション] [引数]

  • ファイル操作系コマンド
概要 コマンド 備考
ファイルの種類確認 file [ファイル名]
最初の1画面だけ表示される less [ファイル名]
所有者変更 chown [-R] [所有者] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
所有グループ変更 chgrp [-R] [所グループ] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
所有者所有グループ変更 chown [-R] [所有者:所有グループ] [ファイル名] ルート権限、Rオプションを変更すると配下のファイルも全て変更される
ファイルを探す find [ディレクトリ] [オプション] 例) find ~/ -name "hogehoge.txt"
ファイルの末尾を表示 tail [オプション] 例) tail -n 3 "hogehoge.txt"(下から3行)
tail -f "hogehoge.txt"(監視し常に最新を表示する)
  • その他
概要 コマンド 備考
使用中のシェルの確認 ps
ネットワークの再起動 /etc/init.d/network restart

変数・エイリアス

  • 変数

変数名=値
(変数に値を設定)
echo $変数名
(変数の値を確認)

  • 環境変数(定義したシェル上に加え、子シェルも変数が参照できる)

export 変数名
環境変数に設定)
printenv
環境変数の閲覧)

alias [エイリアス='コマンド [オプション 引数]']
エイリアスの設定)
unalias エイリアス
エイリアスの削除)

chkconfig サービス名 [on|off]

3.ファイルとディレクトリ

ファイルの種類

表記 概要 備考
- 通常ファイル テキストファイルとバイナリファイルがある
d ディレクトリ
l リンクファイル
b 特殊ファイル(ブロックデバイスファイル) 接続されているハードウェアも全てファイルとして抽象化して扱う。例えば、プリンターを表すデバイスファイルに文字列を書き込むとプリンターが印刷されて出力されたり
c 特殊ファイル(キャラクタデバイス) 接続されているハードウェアも全てファイルとして抽象化して扱う。例えば、プリンターを表すデバイスファイルに文字列を書き込むとプリンターが印刷されて出力されたり
lsでの例
-rw-rw-r--  1 vagrant vagrant  151  6月 30 15:26 2013 test.html
  ①   ②   ③    ④   ⑤      ⑥       ⑦
①ファイルモード(一番左はファイルの種類)
②リンク数
③ファイルの所有者
④ファイルの所有グループ
⑤ファイルサイズ
⑥最終更新日
⑦ファイル名

ファイルシステム(ディスクファイルシステム)

ファイルを保存する物理的な装置には、ハードディスク、SSDUSBメモリ、ネットワークドライブ等様々ものがある。 それらに記録されたファイルを管理する仕組みをファイルシステムという。 主なファイルシステムは次の通り。

  • ext4Linuxの標準で使われる
  • XFS:LinuxUNIXで使われる(堅牢性の高い)
  • FAT/VFAT:SDカードで使われる
  • NTFS:Windowsで使われる
  • ISO9600:CD-ROMで使われる
  • UDF:DVDで使われる

ディレクトリ構成

/ 概要
bin 一般ユーザーが実行できる基本的なコマンド
boot システムの起動に必要なファイル
dev デバイスファイル
etc システム設定ファイル
home ユーザーのホームディレクトリ
lib ライブラリ
lost+foumd 破損した
media DVDなどをマウントする場所
proc プロセス情報
root rootユーザー用ホームディレクトリ
sbin rootユーザーが実行できるシステム管理コマンド
tmp 一時的なファイル置き場
usr 各種プログラムやライブラリ、ドキュメント等
var ログファイル等更新されるファイル類

4.シェルとコマンド操作

シェル

コマンドを通してLinuxを利用する際に、ユーザーとLinuxの間を仲介しているプログラムをシェルという。 (ログイン時のデフォルトは/etc/passwdファイルで設定されている)

  • 主なシェル
シェル 概要
sh(Bourne Shell) UNIXの標準シェル。最低限の機能しか持たない
bash(Bourne Again Shell) shを改良して大幅に機能を拡張したシェル
tsh(TENEX C Shell) csh(C言語によく似た文法を使えるシェル)を拡張したシェル
ksh(Korn Shell) shを改良して大幅に機能を拡張したシェル
zsh(Z Shell) ksh,bash,tcshのいいところ取りをしたような高機能シェル
  • bashの主な内部コマンド
コマンド 概要 備考
alias エイリアスの作成
unalias エイリアスの解除
cd カレントディレクトリの変更
pwd カレントディレクトのパスを表示
echo 引数を表示
export 環境変数を設定
history コマンド履歴を表示 「!履歴番号」でその履歴のコマンドが実行される
kill プロセスにシグナルを送る 詳しくは8.システム管理参照
exit シェルの終了
  • bashの主なキー操作
コマンド 概要
[Ctrl]+[A] カーソルを行の先頭へ移動
[Ctrl]+[E] カーソルを行の末尾へ移動
[Ctrl]+[D] カーソル部分を1文字削除
[Ctrl]+[H] カーソルの左側を1文字削除
[Ctrl]+[L] 画面をクリア
[Ctrl]+[S] 画面への出力を停止
[Ctrl]+[Q] 画面への出力を再開
[Ctrl]+[C] 実行中のコマンドを中断

コマンドの入出力

入出力は次の3つ

  • 標準入力(入力元はキーボード)
  • 標準出力(出力先は端末画面)
  • 標準エラー出力(出力先は端末画面)

リダイレクト

「コマンド > ファイル名」 入力元をキーボードからファイルへと切り替えたり、出力を端末画面からファイルに切り替えたりすることが出来る。 リダイレクトを使うと標準出力を任意のファイルに切り替える事ができる。

例) cal > calendar.txt (画面には実行結果が表示されずファイルへ実行結果が出力される) (「コマンド >> ファイル名」だと上書きではなく追記される) (「コマンド 2> ファイル名」だと標準エラーのみファイルに出力される)

myprog < data1
(自作プログラムmyprogに、ファイルdata1からデータを入力する)

パイプ

「コマンド1 | コマンド2」 あるコマンドの実行結果を、別のコマンドで処理出来る。

バックグラウンド実行

「コマンド &」 コマンドを実行しながら端末の操作が出来る

オンラインマニュアル

man [セクション番号] [コマンド名またはファイル名]

ヘルプより詳しい使い方が出力される。 オンラインといってもシステムにインストールされているのでネットワーク経由でどこかに見に行くわけではない。 (一般的に、/usr/share/man配下に格納されている) マニュアルはいくつかのカテゴリーに分類されていて、それをセクション(章)という。

セクション 概要
1 誰でも実行できる一般ユーザーコマンド
2 システムコールカーネルの関数)
3 ライブラリの関数
4 デバイスファイル
5 ファイルの書式
6 ゲーム
7 その他
8 システム管理コマンド
9 Linux独自のカーネルルーチン用ドキュメント

5.ネットワーク

ネットワークコマンド

  • ifconfig

ifconfig

コマンドの主な出力

項目 概要
HWaddr MACアドレス
inet addr IPアドレスIPV4
Bcast ブロードキャストマスク
Mask サブネットマスク
inet6 addr IPアドレス

ping [オプション] ホスト

ICMPパケットを送信し続けその結果を表示する。 反応が返ってくれば少なくともネットワークが繋がっていて接続先ホストも起動しているということが確認出来る。 (ICMP(Internet Control Message Protocol)とは、エラーメッセージや制御メッセージを伝えるためのプロトコル

netstat [オプション]

送信先や送信元のアプリケーションを区別するために使われる番号がポート番号。 開いているポート番号を確認すれば、ローカルホスト上で動作しているサーバーソフトウェアや、通信中のソフトウェアを確認できる。

主なオプション

オプション 概要
-a すべてのソケット情報を表示
-n アドレスやポートを数字で表示
-t TCPポートだけを表示
-u UDPポートだけを表示

主なポート番号

ポート番号 プロトコル 概要
20,21 FTP FTPサーバー(ファイル転送)
22 SSH SSHサーバー(安全なリモート接続)
23 telnet Telnetサーバー(リモート接続)
25 SMTP メールサーバー
53 DNS DNSサーバー
80 HTTP Webサーバー
110 POP3 メールサーバー
443 HTTPS Webサーバー(SSL

ネットワークの設定

  • 設定ファイル

/etc/sysconfig/network

主な設定項目

設定項目 概要
NETWORKING yesならネットワークサービスをシステム起動時に有効にする
HOSTNAME ホスト名
GATEWAY デフォルトゲートウェイ(ルータ)のIPアドレス
  • ネットワークの再起動コマンド

/etc/init.d/network restart

ファイルダウンロード

  • FTPでダウンロード

lftp 接続ホスト
(ホストに接続)
get ファイル名
(ファイルのダウンロード(mgetだと複数取得出来る))
quit
(lftpを終了)

  • HTTP接続でダウンロード

wget [-R] 接続URL
例) wget -r http://example.com/
-rを付与すると配下のファイルもget出来る

リモート接続

主にリモート接続にはSSH(Secure SHell)が使われます。 SSHクライアント⇔SSHサーバー (通信経路が暗号化されます)

  • SSHコマンド(sshでリモート接続)

ssh [ユーザー名@]接続ホスト

  • SCPコマンド(sshでファイルコピー)

scp [-r] コピー元 コピー先
例)scp sample.txt test.host.jp:/tmp
→sample.txtがホスト(test.host.jp)の/tmp直下にコピーされる

6.ユーザー管理

ユーザー情報

  • ユーザー情報

/etc/passwd
(1ユーザーにつき1行で情報が格納される)

  • パスワード情報

/etc/shadow
(暗号化されたパスワード情報が格納される。rootユーザーのみ閲覧可能)

  • ユーザー切替え

su [ユーザー名]

  • UID(ユーザーに割り当てらた固有の数値)

id [ユーザー名]
uid=500(vagrant) gid=500(vagrant) 所属グループ=500(vagrant),10(wheel)

ユーザーとUIDの対応

ユーザー UID 備考
管理ユーザー 0
システムユーザー 1~99
一般ユーザー 100以上 CentOS等多くのディストリビューションでは500以上のUIDが使われている
  • グループ情報

/etc/group
(ユーザーは最低限1つのグループに所属しなけばいけない。
基本グループはプライマリーグループ、それ以外はサブグループと呼ぶ。
一般的なディストリビューションの場合、ユーザー追加時にユーザーと同じ名前のグループでプライマリーグループが設定される)

  • グループ情報確認

groups [ユーザー名]

ユーザー情報変更

  • ユーザー追加

useradd ユーザー名
(root権限が必要)

  • パスワード変更

passwd [ユーザー名]
(ユーザー名を省略すると自分のパスワード変更が出来る)

  • ユーザ削除

userdel [-r] ユーザー名
(-rオプションを指定すとホームディレクトリも一緒に削除される)

グループ情報変更

  • グルプ追加

groupadd グループ名

  • グループにユーザーを追加

usermod -G グループ名 ユーザー名

  • グループ削除

groupdel グループ名

ユーザー環境変更

ユーザーに関わる情報は、Linuxのシェル上では変数に保存される。

ユーザー環境に関わる主な変数

変数 概要
HOME ユーザーのホームディレクトリ
LANG ユーザーの言語環境
PATH コマンドを検索するディレクトリ
UID ユーザーID
USER ユーザー名

シェルは、ユーザーがログイン時にとくてのファイルを読み込むようになっている。 ユーザー環境を設定したい場合、その設定ファイルの定義を追加すればよい。 具体的には、/etc/profileファイルと~/.bash_profileファイルが読み込まれる。 /etc/profileは全ユーザー共通の設定で、~/.bash_profileはユーザー固有の設定。 (変更を出来るのは~/.bash_profileのみ)

7.ソフトウェアのインストール

パッケージ

パッケージとは、インターネットで配布されているソフトウェアを簡単にインストール出来るようにしたのもの。(ソフトウェアには実行ファイルやマニュアル、ドキュメントファイル、設定ファイル、関連ライブラリ等が含まれており、まとめてパッケージと呼ぶ) 大半のLinuxディストリビューションは、ソフトウェアをパッケージ単位で管理する。

  • RPMパッケージのファイルの見方

emacs-23.1-21.el6_2.3.x86_64.rpm

arch
(32ビット=i386,i586,i686、64ビット=x86_64)

  • 高度なパッケージ管理システム

rpmコマンドだけでは、管理者が手動で依存関係を解決しなければならなく管理が大変。 CentOSではYUMを使ってパッケージ管理が出来る。 YUMを使うとパッケージとその情報が蓄積されたインターネット上のリポジトリを利用し、必要なパッケージをインストールでき、依存関係も自動で解決してくれます。

yum [-y] サブコマンド

主なサブコマンド 概要
update システム(または指定したパッケージ)をアップデート
check-update アップデートされるパッケージ一覧表示
install 指定したパッケージのインストール
remove 指定したパッケージのアンインストール
list パッケージ一覧表示
info 指定したパッケージの情報を表示
serch パッケージを検索

8.システム管理

プロセスとデーモン

  • プロセス
    プログラムを実行すると、メモリが割り当てられCPUによって処理される事をプロセスと呼ぶ。 (Linuxは、複数ユーザーが同時操作する事を前提としておりマルチタスクのOSとして設計されている。同時にプログラムが実行されているように見えるのは、CPUの処理を細切れにしてごく短い時間で切り替えながら処理をしている)

ps [オプション]
(オプションを付けずに実行すると、端末上で実行されているプロセス一覧が表示される)
(オプションにa及びxを付けて実行すると、システム上で実行されているプロセス一覧が表示される(uを付けるとユーザーも表示される)

pstree
(プロセスの親子関係が確認できる)

kill [-[SIG]シグナル] PID
(プロセスにシグナルを送る)

psコマンドの例)
[root@localhost ~]## ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  19228  1508 ?        Ss   01:03   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    01:03   0:00 [kthreadd]

psコマンドの主な出力項目

項目 概要
USER 実行ユーザー
PID プロセスID
%CPU CPU利用率
%MEM メモリ利用率
TTY プロセスを実行した端末
STAT プロセスの状態
START プロセスの実行日
TIME 消費したCPU時間
COMMAND コマンドまたはプログラム名
killコマンドの例)
[vagrant@localhost ~]$ kill -TERM 1989

主なシグナル

シグナル シグナル番号 概要
HUP 1 ハングアップ(設定ファイルを再読み込みさせたいとき使う)
KILL 9 強制終了
TERM 15 通常終了
CONT 18 一時停止中のプロセス再開
STOP 19 一時停止
  • デーモン
    メモリに常駐しているプロセスをデーモンと呼ぶ。 一般的なデーモン起動を起動するサービスは/etc/init.d/に格納されている。
    (プロセスには、処理が終了すると消滅するものと、ずっとメモリ上に常駐し要求に応じてサービスを提供するものがあります。殆どのプロセスは前者で、システムサービスやサーバープログラムは後者となる。)

主な起動スクリプト

起動スクリプト 説明
/etc/init.d/network ネットワークサービス
/etc/init.d/crond 定期的な処置をするcronサービス
/etc/init.d/cups 印刷サービス
/etc/init.d/rsyslog シスログサービス
/etc/init.d/sshd SSHサーバー
/etc/init.d/postfix Postfixサーバー
/etc/init.d/httpd Apachサーバー

システム状況監視

topコマンドの例)
[vagrant@localhost ~]$ top

①top - 05:38:52 up  4:34,  1 user,  load average: 0.00, 0.00, 0.00
②Tasks: 111 total,   1 running, 110 sleeping,   0 stopped,   0 zombie
③Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
④Mem:    379532k total,   176224k used,   203308k free,    14520k buffers
⑤Swap:   786424k total,        0k used,   786424k free,    86204k cached

⑥  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
    1 root      20   0 19228 1508 1216 S  0.0  0.4   0:00.89 init  

①top - 05:38:52 up 4:34, 1 user, load average: 0.00, 0.00, 0.00 ロードアベレージは平均的なシステム負荷の値で、一般的にはCPU数(コア数)以下であれば問題なし。(例えば2コアでCPUを2つ搭載しているマシンでは、4.0を下回っていれば、システム負荷は高くない)

② Tasks: 111 total, 1 running, 110 sleeping, 0 stopped, 0 zombie 実行中のプロセス数が表示される

③Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st CPUの負荷状況が表示される

④Mem: 379532k total, 176224k used, 203308k free, 14520k buffers ⑤Swap: 786424k total, 0k used, 786424k free, 86204k cached メモリやスワップについて表示される。(詳しくはfreeコマンド参照)

⑥ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19228 1508 1216 S 0.0 0.4 0:00.89 init
個々のプロセスが表示される。 CPUやメモリを多く消費しているプロセスを確認すると良い。(CPU利用率=%CPU、メモリ占有率=%MEM)

デスク使用量監視

df [オプション]
ファイルシステムごとのディスク使用量や使用割合、空き容量を確認出来る)
(オプションにHを付けると見やすい単位で表示する)

メモリ監視

free [オプション]
(メモリの利用状況を確認できる)
(オプションにmを付けるとMバイト単位で表示する)

freeコマンドの例)
[vagrant@localhost ~]$ free -m
              total       used       free     shared    buffers     cached
①Mem:           370        172        198          0         14         84
②-/+ buffers/cache:         73        297
③Swap:          767          0        767

// トータル370Mバイトのうち、172Mバイトが使われ、空きが198Mバイト
// しかし、一部バッファキャッシュに利用されているため、実際に使われているのは73Mバイト、空きは297Mバイトとなる。
// メモリに余裕があるためスワップは使用されていない

①Mem: 370 172 198 0 14 84 メモリの状況

②-/+ buffers/cache: 73 297 バッファキャッシュを引いた値 (空きメモリがあるとハードディスクへのアクセスを高速化するため、メモリの一部を利用する。これをバッファキャッシュという。 実際に使われているメモリは、バッファキャッシュの値を差をみる。)

③Swap: 767 0 767 スワップ状況 (メモリが不足すると一時的にディスクの一部を仮想メモリとして利用する。これをスワップという。 スワップが日常的に発生しているならメモリの増設が必要。)

freeコマンドの表示項目

項目 概要
Mem total 前メモリの合計
used 使用中のメモリ
free 空きメモリ
shared 未使用
buffers バッファ
cached キャッシュ
-/+ buffers/cache: used バッファキャッシュ以外に使われているメモリ
free バッファキャッシュを含めた空きメモリ
swap total スワップ領域の合計
used 使用中のスワップ領域
free 空きスワップ領域

ログ管理

/var/log
(システムやサービスプログラムの挙動、ユーザーのログイン状況等がログファイルに記録される)

主なログファイル

/var/log/ 概要
messages システム一般記録
scure 認証関連の記録
maillog メール関連の記録
cron cronによる自動処理の記録
rpmpkgs インストール済みRPMパッケージの記録

また、CentOSにはlogwatchというソフトウェアが用意されており、一日に一度重要な項目をメールにまとめてレポートを送ってくれる。

9.Webサーバー

Apache

Apache Projectによって開発されたWebサーバーソフト。

Apache代表的な機能

  • 静的なWebページの配信
    HTMLと画像のみで構成されたwebページ等
  • 動的なWebページの配信
    掲示板やECサイト等、ユーザーのアクションで表示が変わる
  • モジュール構成
    様々な機能がモジュールとして分割され必要に応じて本体に組み込み利用できる
  • SSl(Secure Socket Layer)
    暗号化された安全な通信の提供
  • ユーザ認証
    ユーザー名とパスワードを使って特定のユーザーのみ公開できる
  • ホスト認証
    特定のホスト名やドメインIPアドレスからのアクセスを拒否することができる
  • バーチャルホスト
    一台のWebサーバーで異なるドメインを持つ複数のWebサイトを運用できる

Apacheの設定

/etc/httpd/conf/httpd.conf
Apacheの設定ファイル)

httpd.confの内容

ディレクティブ 概要 詳細
ServerRoot 設定等のトップディレクトリ Apacheの設定ファイルが格納されているディレクトリを指定
Listen サーバーの待ち受けるポート番号 通常は80番ポートで待ち受けるため変更不要
Include 外部の設定ファイル httpd.conf以外の外部ファイルのサブ設定ファイルを指定
User Apacheの実行ユーザー デフォルトはApacheになっており、作成されたファイルもApache権限で読み取りできるようにする必要がある
Group Apacheの実行グループ
Server Admin サーバー管理者 サーバー管理者のメールアドレス
ServerName サーバー名
DocumentRoot ドキュメントルート webサイトのトップディレクトリ
DiretoryIndex インデックスファイルの指定 URLでファイル指定されなかった時に、インデックスファイルとして返すファイル名を指定

Apacheコマンド

httpd -t
httpd.confの構文チェック。「Syntax OK」と表示されたら構文上はミスはない) /etc/init.d/htppd start
(起動) /etc/init.d/htppd status
(確認) /etc/init.d/htppd stop
(停止)

おすすめ書籍

Linuxを全く分からなくても丁寧にわかりやすく解説されてます。
進み方も調度良く、分かりやすく書いてあるのでかなりオススメ!!