非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

Linuxコマンド ps

実行中のプロセスを表示する。
プロセスとはプログラムが動作している最小の単位

すべてのプロセスを詳細表示

ps aux
  • a 他のユーザーが実行しているプロセスも表示
  • u 開始時刻と実行ユーザ名を表示
  • x 制御端末のないプロセスの情報も表示

表示項目の詳細

項目名 内容
USER プロセスを所有しているユーザーの名前
PID 各プロセスに割り当てられている一意のID
%CPU CPUの使用率(%)
%MEM 物理メモリ量
VSZ 仮想メモリサイズ(キロバイト)
RSS 物理メモリサイズ(キロバイト)
TTY 制御端末(ない場合は?)
STAT 状態
START 起動時刻
TIME 累積したCPU時間
COMMAND 実行しているコマンド

STATの詳細

記号 内容
D 割り込み不可能のスリープ状態
R 実行中または実行可能状態
S 割り込み可能なスリープ状態
T 停止またはトレース中
W ページング状態
X 死んだ状態
Z ゾンビプロセス
  • スリープ状態
    • イベントかリソースを待っている状態
  • 割り込み可能な待機中のプロセス
    • シグナルによって割り込みをかけるもの
  • 割り込み不可な待機中のプロセス
    • 直接ハードウェアの状態に依存するかたちで待機しているため、どのような状況でも割り込みを掛けられないもの。

STATの添え字

記号 内容
優先度の高いプロセス
N 優先度の低いプロセス
L 実メモリのページをロックして利用している
s セッションリーダー
l マルチスレッド化されている
+ フォアグラウンドのプロセスグループに含まれている

シグナル

プロセス間で連絡を取り合うための仕組み

ファイルシステムとは

ファイルシステムまわりについて調べてみた

ファイルシステムとは

ハードディスクなどの記憶装置にデータを記録する方式

人間にわかりやすいファイルというものに抽象化、可視化し、データを永続的に管理しやすくするという役目

inode(アイノード)

  • Unixファイルシステムで使用されているデータ構造
  • ファイルの実データが格納されている位置やファイル・サイズ,変更時刻などの管理情報を含む

作成方法

ファイルが作られると、そのファイルに関する情報を記録するためinodeが作られる
全てのファイルは、物理的にinodeにリンクされている。

確認の仕方

df -i
stat -L test.txt

その他

作成に上限があるため、容量があってもファイル作成できない場合がある
VFSの抽象化の仕組みの基本単位として提供されている

VFS(Virtual File System)

ハードリンク、シンボリック

UNIXでは、ファイルに対してリンクを作成できる

作成について

下記のコマンドで作成できる。
ls −al で見た際、ハードリンクの場合はリンク数が増えている
−sでシンボリック作成

ln (-s) リンク元ファイル リンク先ファイル

シンボリックリンク

  • ファイルの本体の位置情報を保管しているファイル
  • 本体とは完全に区別されるため、本体が削除されたらエラーとなってしまう
  • ハードリンクと異なり制限がなくファイルやディレクトリにも作成できる
  • ファイルシステム上に0バイトのファイルが出現する

ハードリンク

  • ファイルに複数の名前を割り当てる機能
  • 実体ファイルの削除ができる
  • 複数存在しても同じ扱いで、すべてのリンクを削除しないと実体は削除されない
  • 異なるファイルシステムやディレクトリにはリンクできない

ファイル階層標準(FHS)

  • Filesystem Hierarchy Standard
  • Linuxと他のUNIX系オペレーティングシステムでの主なディレクトリとその内容を定めたもの
  • ディレクトリ構成を示したファイルの標準化仕様書

ディレクトリ構造

全てのファイルとディレクトリはルートディレクトリ "/" の下に置かれる。

3つの構成

・システムに必須のファイル
・システムには必須ではないファイル
・動的に変化するファイル

ファイルシステムの特徴

EXT3

third extended file system。ディスクファイルシステム
Linuxで広く使用されているファイルシステムの一つで、ext2ファイルシステムジャーナリング機能(データ変更をトランザクションとして管理する機能)を追加したもの。ext2より復旧速度が上がった。

ZFS

ZettabyteFile System。トランザクションファイルシステム
Solaris(SunSoft社のUNIX系OS)のファイルシステムで、無限に近いデータを扱える。コピー・オン・ライト方式(書き換え時にコピーする)で、ジャーナルを使わない。

NTFS

NT File System。ディスクファイルシステム
windowsで利用される高機能ファイルシステム。暗号化もできる。
FAT(File Allocation Tables)もwindowsで使われている。この2択しかない

ジャーナル

データを変更する前に,ファイルの管理情報あるいはデータの変更内容を「ジャーナル」と呼ばれるログに同期的に(キャッシュを通さずに)書き込んでおく。

パーテーションとは

windows

物理的なハードディスクドライブを複数の論理的HDDに分ける事
分割された個々のパーティションはひとつの「ドライブ」として扱われ、それぞれが独立したフォルダ構成をもつ

Linux

ドワイブという概念はなく、ひとつのディレクトリ構造となる。下記のコマンドで確認できる

df -h

パーテーションを分割するメリット

バックアップ/アップデートが必要な場合に便利
障害が発生した際、最小限におさえられる
HDDを有効活用できる

デメリット

使用率に偏りができる可能性がある

追加したパッケージについて

構築中に入れたパッケージを調べた。

パッケージ

Linuxが採用しているアプリケーションの配布形態。

php

PHP本体

php-mysql

PHPからMySQLにアクセスするために必要

php-mbstring

日本語処理のためのに必要

mysql-server

MySqlサーバの本体

表示

初めて見たとき#と$が、何を指しているのかわからなかったのでメモ。
# システム管理者のroot権限で実行
$ 一般ユーザーで実行

LAMP環境構築その2

前回の続き。

mysqlインストール

設定ファイルの細かいところは、やはりあとで勉強しよう…。

# yum install -y mysql mysql-server    mysqlインストール
# vi /etc/my.cnf                       設定ファイル編集

[mysqld]
default-character-set=utf8             以下追加(文字コード設定)
character_set_server=utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

[client]
default-character-set=utf8
 
[mysqldump]
default-character-set=utf8

# /etc/rc.d/init.d/mysqld start        mysql起動
# chkconfig mysqld on                  自動起動設定

mysqlのパスワード設定

パスワードなしで入れてしまうので、パスワードを設定する。
上記で文字コードをUTF-8に設定したので、設定されているか確認する。

# mysql -u root                        rootでログイン

mysql> show variables like 'char%';    文字コード確認
mysql> select host,user,password from mysql.user;                       現在のユーザーを確認
mysql> set password for root@localhost = password('適当なパスワード');  パスワードを設定する
mysql> DELETE FROM mysql.user WHERE user='';                            不要なユーザを削除する
mysql> select host,user,password from mysql.user;                       パスワードが設定されているか再度確認する
mysql> \q                              一旦終了する

# mysql -u root                        パスワードなしで入れないことを確認
# mysql -u root -p                     先ほど設定したパスワードを入力して入れることを確認

また今度別のユーザー作ったりしようかな。

設定おわり

一通り設定完了。
後回しにしたいろいろはのちのち書いていこう。
次はframeworkでも入れてみようかな。

LAMP環境構築

いろいろ入れたので、そろそろLAMP環境を作ろうと思います。

apacheインストール

設定ファイルも編集。ドメインは特に指定してないので、今のところlocalhost
ドメインの設定はあとで。他の設定も後ほどやろう。

# yum -y install httpd
# vi /etc/httpd/conf/httpd.conf

#ServerTokens OS
ServerTokens Prd                                    # OS名を表示させない

#ServerName www.example.com:80
ServerName localhost:80                             # サーバー名指定。

#DirectoryIndex index.html index.html.var
DirectoryIndex index.html index.html.var index.php  # ディレクトリ名のみでアクセスできるファイルを追加

#ServerSignature on
ServerSignature off                                 # サーバー情報を表示させない

apacheテスト

動くことをとりあえず確認

# /etc/init.d/httpd start                          # Apache起動
# chkconfig httpd on                               # Apache自動起動するよう設定

http://192.168.xxx.xxx/にwindowsのブラウザからアクセス。
Apache 2 Test Pageの表示が出ることを確認。

phpをインストール

バージョン名が表示されることを確認。
設定も変更する。

# yum install -y php php-mbstring php-mysql
# php -v
# vi /etc/httpd/conf.d/php.conf

#AddType text/html .php
AddType application/x-httpd-php .php               # PHPスクリプトが動作するよう設定

# /etc/init.d/httpd restart                        # Apache再起動

phpを設定して表示を確認

ユーザーが編集できるように権限変更。
適当なファイルを置いて、動くか見てみる。

#chown hoge.group /var/www/html                    # Apacheのドキュメントルートの権限変更

出た!

php.iniの設定

だいたいの設定をする。セキュリティまわりはあとでまた、まとめようかな。

#vi /etc/php.ini

; error_reporting = E_ALL & ~E_DEPRECATED
error_reporting  =  E_ALL | E_STRICT              # エラーレベルを厳密にする

; display_errors = Off
display_errors = On                               # エラーを表示させる

;date.timezone =
date.timezone = Asia/Tokyo                        # タイムゾーンを設定

;mbstring.language = Japanese
mbstring.language = Japanese                      # マルチバイト文字の設定を日本語

;mbstring.internal_encoding = EUC-JP
 mbstring.internal_encoding = UTF-8               # 内部文字コードをUTF8

;expose_php = On
expose_php = Off                                  # バージョン表示OFF

;open_basedir =
open_basedir  = hoge                              # 参照する最も高いレベルのディレクトリを設定

;log_errors_max_len = 1024
log_errors_max_len = 4096                         # エラーログ制限を大きくしておく

;error_log = php_errors.log
error_log =                                       # ファイル名指定

;magic_quotes_gpc = Off
magic_quotes_gpc = On                             # 文字列がエスケープされないようにする


;default_charset = "iso-8859-1"
default_charset ="UTF-8"                          # 文字エンコーディングを設定

;session.hash_function = 0
session.hash_function = 1                         # sha1を使うように変更


# /etc/init.d/httpd restart                        # Apache再起動

長くなったので、mysqlとその他メモは次に書こう。
後でが多い気がする…。

PuTTYで公開鍵認証

パスワード認証に比べて突破されにくく安全とのことなので、設定する。

PuTTYgenで鍵ペアを作成

  1. PuTTYgenを開く
  2. 「生成する鍵の種類」を SSH-2 RSA
  3. 「生成する鍵のビット数」を 1024
  4. 「生成」ボタンを押す
  5. 画面内でマウスを、動かす
  6. 鍵のパスフレーズを設定する
  7. 「秘密鍵の保存」をする

Linuxの設定

ログインするユーザーのカレントディレクトリに.sshディレクトリを作成。
作成したディレクトリ内にファイル authorized_keys を作成する。
PuTTYgenの公開鍵をペーストする。
複数行になっている場合は1行にする

$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ vi athorized_keys
$ chmod 600 authorized_keys

設定ファイルの変更

コメントアウトをはずす

# vi /etc/ssh/sshd_config

Port 22
ServerKeyBits 1024
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile ~/.ssh/authorized_keys
PasswordAuthentication no

# /etc/rc.d/init.d/sshd restart                  再起動
# reboot

PuTTYの設定

  1. 設定画面で、接続>SSH>認証 をひらく
  2. 「認証のためのプライベートキーファイル」にさっき保存した秘密鍵を指定する
  3. ログインする
  4. 鍵のパスフレーズを入力

その他

何か server refused our key がよく出た。
権限とkeyの内容を落ち着いて最初から調べたら、何とかできた。

認証できたりできなかったりしてたのは、
気づいたら、ファイルを指定しておいたのに、空になっていた…。
ファイルが入ってなくて失敗してたようだ…。

システム起動時エラー

Linuxが起動しなくなったので、その時のメモ。
ファイルシステムのエラーでした。

  1. FAILEDが画面に出て、エラーが出る
  2. rootのパスワードを入力する
  3. 修復のコマンドを実行
  4. ひたすら y を押す
fsck -t ext3 /dev/エラーが出ているディレクトリ