こちらは「NJC Advent Calendar 2018」の17日目の記事です。
#はじめに
まず、HP-UXとはヒューレット・パッカード・エンタープライズ(HPE)社製(旧ヒューレット・パッカード)のUNIXオペレーティングシステムのことです。
・「Linuxは知ってるけどUNIXって??」
・「HP-UXのことを少しでも知っておきたい」
ということを意識した記事にしたいと思います。
UNIXサーバの全般について記載したいですが、HP-UX(バージョンは11iv3)の運用に触れます。
なかなかHP-UXサーバを運用する機会はないと思いますが、運用するにあたり基礎知識や運用コマンドを中心にまとめたいと思います。
#UnixとLinuxの違いって?
UnixとLinuxって似ています。(GUIではなくCUI、コマンドがほぼ一緒、安定性がある、なんていったって軽い!!)
しかし、UnixとLinuxはまったく別のOSです。大きな違いは以下2点。
・ Unixは企業が開発して、知的財産権が企業に属している。
※商標の所有者(The Open Group)から認証を受けたシステムのみが「UNIX」と位置付けられる。
主なOS:HP-UX、Solaris、macOSなど
・ Linuxはオープンソースソフトウェアで無料な上、配布や改変も自由。
※LinuxはUnixを参考にして0から作ったものです。(UNIXは著作権があり、機能バージョンアップが自由に出来ない為。) ちなみにLinuxを作ったリーナス・トーバルズさんはGitも作っていますね。
歴史を簡単に表した以下の図が分かりやすいです。ウィキペディアより引用
#HP-UXのディレクトリ構造は?
ディレクトリ、Windowsでいうとフォルダになりますが、Windowsのように_C:_、_D:_ではなくUNIXやLinuxは全て/(root)ディレクトリを起点として全てのディレクトリ、ファイルがルートディレクトリの配下にはいる以下のようなツリー階層型となります。
LinuxやUnix系OSはFHS(Filesystem Hierarchy Standard)をベースにしているのでどのOSを使おうとも初期の階層は似ています。厳密にはUNIXはFHSには準拠していないので違いますが、基の考え方はUNIXからきているのでほぼ一緒です。
Filesystem Hierarchy Standard
Filesystem Hierarchy Standard(ファイルシステム・ヒエラルキー・スタンダード、FHS、ファイルシステム階層標準)は、Linuxを含むUNIX系オペレーティングシステムでの主なディレクトリとその内容を定めたものである。大部分において、BSD系のディレクトリ階層を基にして拡張し定式化している。
ウィキペディアより引用
また、HP-UX(というよりもUnix系OS全般)では、物理的なハードディスクドライブを複数まとめてVG (ボリュームグループ)を構成します。この中から論理ボリューム(lvol)を切り出し、HP-UXシステム上のディレクトリにマウントして使用します。(論理ボリューム毎にサイズを決定します。)DVD/CDも同様に、HP-UXシステム上のディレクトリにマウントして使用します。※下図参照
ここでは初期構築時に自動で作成される階層を紹介します。
ディレクトリ | 説明 |
---|---|
/ | ルートディレクトリ |
/dev | Deviceの意味 デバイス特殊ファイルが配置されます。 デバイス(装置〈ハードウエア〉)を ファイルとして扱う為。 ※CPUやdiskなど |
/etc | Et Ceteraの意味 • ネットワークの構成 • マウント対象とするファイルシステムの設定 • ユーザーとグループの定義 • 論理ボリュームの定義 |
/etc/opt/product | オプション・製品をインストールすると 製品構成情報の多くはここに配置されます。 ※productが製品名となる |
/home | ユーザアカウントのホームディレクトリです。 ※unixユーザなら/home/unixとなる。 ログイン起動時に読み込まれる.profileなどの ファイルがある。 |
/opt | Optionの意味 アプリケーションインストール用となる ディレクトリです。 |
/sbin | System Binary fileの意味 システム管理用コマンドのバイナリファイル などが配置されています。 |
/stand | カーネル用のディレクトリとなります。 |
/tmp | Temporaryの意味 一時的なファイルが配置されています。 |
/usr | User Services and Routinesの意味 共有可能なユーザコマンド、ライブラリなどの ためのディレクトリとなります。 |
/var | Variationsの意味 ログファイル、ダンプファイルなどのための ディレクトリとなります。 |
#Unixの運用コマンド集
##基本的なコマンド
運用時によく使用するコマンドとオプションをまとめます。
###■ ファイル・ディレクトリ操作
##pwd
・よく使う度:★★★★★
・「present working directory」の略
・自分が今いるディレクトリを知ることは大事です
$ pwd
/opt/product
##cd
・よく使う度:★★★★★
・「change directory」の略
・他のディレクトリに移動するときに使います
# ホームディレクトリに移動
$ cd
# ひとつ上のディレクトリに移動
$ cd ../
# /opt/productに移動
$ cd /opt/product
# 直前のディレクトリに戻る
$ cd -
##ls
・よく使う度:★★★★★
・「list」の略
・ディレクトリに存在するディレクトリやファイルを一覧で表示します
# 現在のディレクトリのファイルを一覧表示
$ ls
app lost+found bin
net core nohup.out
data1 opt data2
sbin dev stand
etc tmp home
usr SD_CDROM lib
var
# 現在ディレクトリの隠しファイルを含めて一覧表示
$ ls -a
. app lost+found
.. bin net
core nohup.out data1
opt data2 sbin
.rhosts dev stand
.rnd etc tmp
.sw home usr
SD_CDROM lib var
# 現在ディレクトリの詳細情報を一覧表示
$ ls -l
合計 50646
drwxr-xr-x 18 root root 8192 12月 5日 10:48 .
drwxr-xr-x 18 root root 8192 12月 5日 10:48 ..
-rw-r----- 1 root sys 112 8月 27日 2013年 .rhosts
-rw------- 1 root sys 1024 7月 19日 2013年 .rnd
drwxr-xr-x 6 root sys 96 7月 19日 2013年 .sw
drwxrwxrwx 2 root sys 96 7月 20日 2013年 SD_CDROM
drwxrwxrwx 10 root root 1024 4月 21日 2014年 app
lr-xr-xr-x 1 bin bin 8 8月 27日 2013年 bin -> /usr/bin
-rw------- 1 root sys 3508464 8月 22日 2013年 core
drwxrwxrwx 10 root root 1024 4月 21日 2014年 data1
drwxrwxrwx 6 root root 1024 2月 2日 2014年 data2
dr-xr-xr-x 24 bin bin 8192 10月 31日 2017年 dev
dr-xr-xr-x 41 bin bin 8192 10月 31日 2017年 etc
drwxr-xr-x 11 root root 8192 4月 20日 2015年 home
lr-xr-xr-x 1 bin bin 8 8月 27日 2013年 lib -> /usr/lib
drwxr-xr-x 2 root root 96 7月 19日 2013年 lost+found
dr-xr-xr-x 1 root root 1 10月 31日 2017年 net
dr-xr-xr-x 103 bin bin 8192 5月 26日 2014年 opt
dr-xr-xr-x 16 bin bin 8192 4月 21日 2014年 sbin
dr-xr-xr-x 9 bin bin 8192 10月 31日 2017年 stand
drwxrwxrwt 9 root root 8192 12月 5日 11:55 tmp
dr-xr-xr-x 23 bin bin 8192 11月 12日 2013年 usr
dr-xr-xr-x 31 bin bin 8192 11月 12日 2013年 var
※「$ ll」でも同様、「$ ls -la」のように隠しファイルも表示させたいときは組み合わせることも可能
※補足(ファイル属性について)
上記「$ ls -l」結果のでファイルの属性情報を表示しています。
それぞれ、ファイルの種類と許可権限、ハードリンク数、所有者とグループ名、ファイルサイズ、タイムスタンプ、ファイル名となります。
その中でファイルの種類と許可権限(パーミッション)を補足します。
① ファイルの種類:「-:ファイル」「d:ディレクトリ」「l:シンボリックリンク」
※ハードリンク・シンボリックリンクの説明はこちらを参照下さい。
② 所有者(User)の権限
③ グループ(Group)の権限
④ 他人(Others)の権限
※権限(パーミッション)は「読み出しの許可」「書き込みの許可」「実行の許可」があり、それぞれ「読み出し(r)」
「書き込み(w)」「実行許可(x)」を示しています。「-」の場合は、該当する許可がありません。
##mkdir
・よく使う度:★★★
・「make directory」の略
・ディレクトリを新規作成します
# sampleディレクトリを作成
$ mkdir sample
# 中間ディレクトリも合わせて作成
$ mkdir sample/sample1
# パーミッションを指定しディレクトリを作成
$ mkdir -m 777 sample
※補足(パーミッションについて)
パーミッションについては、数値で指定することができます。
数値(モード) | アルファベット | 権限 |
---|---|---|
4 | r | 読み出し |
2 | w | 書き込み |
1 | x | 実行 |
0 | - | 許可なし |
上記の数値の合計を「所有者」「グループ」「他人」の順でそれぞれ入力することでパーミッションを付与します。
例えば「777」の指定なら以下の許可となります。
・所有者 :「読み出し」「書き込み」「実行」
・グループ:「読み出し」「書き込み」「実行」
・他人 :「読み出し」「書き込み」「実行」
(表示上はdrwxrwxrwx)
また、「740」の指定なら
・所有者 :「読み出し」「書き込み」「実行」
・グループ:「読み出し」
・他人 :なし
となります。
(表示上はdrwxr‐‐‐‐‐)
##rmdir
・よく使う度:★★★
・「remove directory」の略
・空のディレクトリを削除します
# sampleディレクトリを削除
$ rmdir sample
# 削除すると親ディレクトリも空になる場合、親ディレクトリも一緒に削除
$ mkdir -p sample/sample1
※sampleとsample1が同時に削除される。(空の場合)
##cp
・よく使う度:★★★★
・「copy」の略
・ファイルやディレクトリをコピーします
# 同一ディレクトリに名前を変更してコピー
$ cp sample.txt sample_201812.txt
# 別のディレクトリに名前を変えずにコピー
$ cp sample.txt sample/sample1
# 全てのテキストファイルを別のディレクトリにコピー
$ cp *.txt sample/sample1
# ディレクトリを再帰的にコピー
$ cp -R sample2 sample/sample1
##mv
・よく使う度:★★★★
・「move」の略
・ファイルやディレクトリを移動します
# 同一ディレクトリに名前を変更して移動(ファイル名を変更)
$ mv sample.txt sample_201812.txt
# 別のディレクトリに名前を変えずに移動
$ mv sample.txt sample/sample1
##rm
・よく使う度:★★★
・「remove」の略
・ファイルやディレクトリを削除します
# ファイルを削除
$ rm sample.txt
# 全てのテキストファイルを削除
$ cp *.txt
# ディレクトリを削除
$ rm -r sample/sample1
##find
・よく使う度:★★★
・ファイルやディレクトリを検索します
# sample.txtをsampleディレクトリ以下から検索
$ find sample -name sample.txt
/sample/sample1/sample.txt
# sampleが頭に付くファイル・ディレクトリをsampleディレクトリ以下から検索
$ find sample* -name sample.txt
/sample/sample1
/sample/sample1/sample.txt
/sample/sample2
# sample以下から60日以上前に更新されたtxt形式のファイルを検索
$ find sample -name "*.txt" -atime +60
/sample/sample1/test.txt
/sample/sample2/test2.txt
# sample以下からuser1が作成したファイル・ディレクトリを検索
$ find sample -user user1
/sample/sample1/test.txt
/sample/sample2/test2.txt
※「-ls」オプションを使用するとファイル属性を含めた情報が表示されます。
##touch
・よく使う度:★★
・ファイルの更新日時の変更や空ファイルを作成します(主に空ファイルを作成するのに使用)
# ファイルのタイムスタンプを現在の時間に変更
$ touch sample.txt
# 空のファイルを作成(ファイルが存在していない場合)
$ touch sample.txt
###■パーミッション
##chmod
・よく使う度:★★★★
・「change mode」の略
・ファイルやディレクトリのアクセス権限を変更します
# ファイルのアクセス権を変更
$ chmod 744 sample.txt
# 全てのテキストファイルのアクセス権を変更
$ chmod 740 *.txt
# ディレクトリのアクセス権と中のファイル・ディレクトリの権限も再帰的に変更
$ chmod -R 700 sample1
※数値については、上述した補足(パーミッションについて)を参照して下さい。
##chown
・よく使う度:★★★★
・「change owner」の略
・ファイルやディレクトリの所有者を変更します
# ファイルの所有者をuserに変更
$ chown user sample.txt
# ディレクトリの所有者と中のファイル・ディレクトリの所有者も再帰的に変更
$ chown -R user sample1
# ファイルの所有者をuserに変更し、グループをusergroupに変更
$ chown user:usergroup sample.txt
###■運用コマンド(各種情報の表示など)
##top
・よく使う度:★★★★★
・プロセス一覧をリアルタイムで表示します。デフォルトではCPU使用率の高いプロセスから表示します。
$ top
System: HPUXSV Wed Dec 5 10:20:38 2018
Load averages: 0.18, 0.19, 0.20
463 processes: 387 sleeping, 76 running
Cpu states:
CPU LOAD USER NICE SYS IDLE BLOCK SWAIT INTR SSYS
0 0.17 57.4% 0.0% 3.0% 39.6% 0.0% 0.0% 0.0% 0.0%
2 0.20 22.8% 0.0% 3.0% 74.3% 0.0% 0.0% 0.0% 0.0%
4 0.19 31.7% 0.0% 5.9% 62.4% 0.0% 0.0% 0.0% 0.0%
6 0.17 33.0% 0.0% 7.0% 60.0% 0.0% 0.0% 0.0% 0.0%
--- ---- ----- ----- ----- ----- ----- ----- ----- -----
avg 0.18 37.0% 0.0% 4.0% 59.0% 0.0% 0.0% 0.0% 0.0%
System Page Size: 4Kbytes
Memory: 6476440K (4000936K) real, 9430388K (6248476K) virtual, 20137084K free P
age# 1/52
CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND
6 ? 6193 user 152 20 853M 610M run 35741:59 11.96 11.94 java
4 ? 6519 user 154 20 77432K 17048K sleep 293:53 2.00 1.99 postgres:
6 ? 6195 user 152 20 2532M 2380M run 28825:19 0.98 0.98 java
6 ? 11994 user 168 20 5516K 608K sleep 0:00 0.55 0.47 csh
0 ? 3124 root 168 20 15804K 1204K sleep 2461:09 0.45 0.45 utild
4 ? 6289 user 154 20 61404K 3964K sleep 178:36 0.35 0.35 postgres:
2 ? 6162 user 152 20 576M 418M run 25052:29 0.26 0.26 java
※qで終了します
※補足(topコマンドの項目の意味について)
■各項目の意味
・Load average:
過去1分、5分、15分の間のload average(run queueにたまっていたプロセス数)
・process:
sleeping -sleep状態になっているプロセスの数
running -現在run状態のプロセスの数
・Cpu Status:
Load averageとCPUがそれぞれ何の目的で使用されたかの時間の割合を表示
CPU - 過去1分のLoad average
USER - user processがuser modeでの実行に使用した割合
NICE - user processがuser modeでの実行に使用した割合(nice設定されたもの)
SYS - user processsがkernel modeで実行した割合
IDLE - 何もしていなかった割合
BLOCK- spinlockによってblockされていた割合
SWAIT- kernel semaphoreによってblockされていた割合
INTR - Interruptを実行していた割合
SSYS - kernel processがkernel modeでの実行に使用した割合
・Memory:
real - system上の全プロセスのtext,data,stack領域に使用されている実メモリ上領域
()の中はアクティブな状態のプロセスが使用している物理メモリの合計
virtual- system上の全プロセスのtext,data,stack領域に使用されている仮想メモリ上領域
free - 未使用の実メモリ上の領域
・process list:
TTY - プロセスの制御端末
PID - プロセスID
USERNAME - プロセスの実行ユーザ名
PRI - プロセスのプライオリティ
NI - NICE値
SIZE - プロセスのprivate領域の合計値
RES - プロセスに割り当てられている実メモリの量
STATE - プロセスの状態
TIME - プロセスがCPUを使用した時間の合計
%WCPU - 加重CPU使用率(processのschedulingに使用)
%CPU - 単純CPU使用率(この値が高いものより表示)
COMMAND - 実行中のコマンド名
##bdf
・よく使う度:★★★★★
・ディスクの使用状況を表示します。(HP-UXのみ、他のUNIX系はdfコマンドを使用)
$ bdf
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lvol3 4194304 309288 3854784 7% /
/dev/vg00/lvol1 2097152 376208 1707560 18% /stand
/dev/vg00/lvol9 16777216 6815568 9885320 41% /var
/dev/vg00/lvol10 8388608 19165 7846488 0% /var/adm/crash
/dev/vg00/lvol8 16777216 5326480 11361312 32% /usr
/dev/vg00/lvol7 2097152 44672 2036648 2% /tmp
/dev/vg00/lvol6 16777216 6271224 10424088 38% /opt
/dev/vg00/lvol5 2097152 55600 2025696 3% /home
/dev/vg00/lvol4 40861696 5564508 33106840 14% /app
/dev/vg01/lvol1 1073725440 9953656 997286523 1% /data1
/dev/vg02/lvol1 1073725440 190567197 827960932 19% /data2
※kbytes:ファイルシステム内の使用可能容量の合計
※used:使用されている容量
※avail:使用可能容量
##grep
・よく使う度:★★★★
・「global regular expression print」の略
・テキストファイル中から、正規表現に一致する行を検索して出力します
$ vi sample.txt
"sample.txt" 5行,36文字
1 apple
2 melon
3 orange
4 cherry
5 plum
# sample.txtから「a」という文字を検索
$ grep 'a' sample.txt
1 apple
3 orange
# and条件をつける
$ grep 'a' sample.txt | grep 'g'
3 orange
※|は「パイプ」といい、コマンドを繋げることができます
##ps
・よく使う度:★★★★
・「process status」の略
・実行中のプロセスを表示します。トラブル時は意外と使用します
# 自分が実行しているプロセス一覧を表示
$ ps
PID TTY TIME COMMAND
15072 pts/te 0:00 ps
15035 pts/te 0:00 telnetd
15041 pts/te 0:00 sh
# 他のユーザが実行しているプロセスを含め一覧(親子プロセス)を表示
$ ps -ef
UID PID PPID C STIME TTY TIME COMMAND
root 0 0 0 12月 22 ? 10:52 swapper
root 1 0 0 12月 22 ? 58:16 init
root 13 0 0 12月 22 ? 0:00 net_str_cached
root 12 0 0 12月 22 ? 0:00 usbhubd
root 11 0 0 12月 22 ? 2:02 escsid
root 10 0 0 12月 22 ? 0:00 ttisr
root 9 0 0 12月 22 ? 12:22 ksyncer_daemon
root 8 0 0 12月 22 ? 0:00 ioconfigd
root 7 0 0 12月 22 ? 0:00 kai_daemon
root 6 0 0 12月 22 ? 483:11 kmemdaemon
root 5 0 0 12月 22 ? 0:00 signald
root 14 0 0 12月 22 ? 0:00 net_str_cached
root 23 0 0 12月 22 ? 0:29 lvm_kt_proc
# grepと組み合わせることで確認したいプロセスをピンポイントで表示
$ ps -ef | grep hul
root 8173 1 0 Apr 8 ? 6:40 ./hulsndd
root 8246 1 0 Apr 8 ? 0:00 ./hulrcvd
##(運用編)注意が必要なコマンド
運用時に使用する際に注意が必要なコマンド及び注意内容をまとめます。
コマンド | コマンド概要 | 注意事項 |
---|---|---|
arp | アドレス変換の表示と制御 | 変更前に"-a"オプションで現在の状態を確認する。 |
cat | ファイルの連結、コピー、および出力 | 連結先のディレクトリに十分な空き容量があることを事前に確認する。 |
chmod | アクセスパーミッションの変更 | 変更前に"ls -l"で現在の設定を確認する。 |
chown | 所有者またはグループの変更 | 変更前に"ls -l"で現在の設定を確認する。 |
compact | ファイルの圧縮、展開、出力および連結 | ・コピー先のファイルが存在しないことを事前に確認する。存在する場合は、上書きによる影響範囲を事前に確認する。 ・コピー先のディレクトリに十分な空き容量があることを事前に確認する。 |
compress | データの圧縮および展開 | ・圧縮元ファイルが削除されることによる影響範囲を事前に確認する。 ・圧縮先に十分な空き容量があることを事前に確認する。 |
cp | ファイルおよびディレクトリサブツリーのコピー | コピー先のディレクトリに十分な空き容量があることを事前に確認する。 |
kill | シグナルをプロセスに送信、プロセス強制終了 | psコマンドにより、対象プロセスを特定した後に実行する。 |
mv | ファイルおよびディレクトリの移動または名称変更 | ・移動先のディレクトリに十分な空き容量があることを事前に確認する。 ・作業前にバックアップ可能か確認する。 |
rm | ファイルまたはディレクトリの削除 | ・"-r"オプションは使用せず、ディレクトリ削除はrmdirを使用する。 ・作業前にバックアップ可能か確認する。 |
vi | スクリーン指向の (ビジュアル) テキストエディター | 編集前にバックアップを取得する。 |
##(運用編)極力使用しない方がよいコマンド
調べると普通に使っている場合があるので注意!!
(あくまで運用でミスをしないようにするために個人的に使用しないほうがよいと判断していたコマンドです。
必要に応じて使用する場面はあります。)
コマンド | コマンド概要 | 注意事項 |
---|---|---|
date | 日時の表示と設定 | 日時の確認が必要な場合は、"sar 1 1`を使用する。 |
hostname | 現在のホストシステム名の設定または表示 | ホスト名は、ログイン時のメッセージで確認する。 |
ifconfig | ネットワークインタフェースのパラメータの設定 | ・NIC設定状況確認は、lanscan、netstatを使用する。 ・設定は、ネットワーク関連ファイルを修正し、サーバを再起動し反映する。 |
killall | 全アクティブプロセスの抹消 | psコマンドで対象のプロセスを確認した上でkillコマンドを使用する。 |
reboot | システムのリブート | ・各サービスの終了処理が終わらない場合に使用する。 ・通常は、"shutdown -r -y 0"を使用する。 |
uname | コンピュータシステムの情報の表示とノード名(システム名)の設定 | 参照用の"-a"オプションのみ使用する。 |
#まとめ
特にコマンドはOS特有のものもあります。
慣れれば色々と試したくなりますが、影響がないことをよく見極めた上で使用することをお薦めします。