Quantcast
Channel: 俺的備忘録 〜なんかいろいろ〜
Viewing all 1028 articles
Browse latest View live

サーバ大量構築時のキモ ~Windows 8.1/Windows Server 2012 R2でSysprepを実行する~

$
0
0

今回は、前回作成した応答ファイルを利用してsysprepを実行する。
といっても、特に難しい事はしない。

クローン元のマシンで、以下のコマンドを実行すればいいだけだ。

C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /quiet /unattend:C:\Untitled.xml

 

20150710_000006

 

後は、再起動したら自動的に設定等が削除されイメージが一般化される。

絵で見てわかるWindowsインフラの仕組み 絵で見てわかるWindowsインフラの仕組み

Linuxでファイルコピー時に進捗状況を確認する6つの方法

$
0
0

Linuxで普通にcpコマンドを利用していると、そのコピーの進捗状況がわからない事が多い。
コピーの進捗状況を調べるには、どうすればよいのだろうか?

1.cp実行時に「-v」オプションを用いる

正確な進捗状況(各ファイルごとに何%までコピーが完了したか)はわからないが、「どのファイルまではコピーが完了したか」を把握するのであれば、cpコマンドで「-v」オプションを利用することで、今どのファイルをコピーしているのかが把握出来る。

20150711_000003

 

2.cvコマンドを利用する

以前こちらで紹介したcvコマンドを利用することで、マシン上で実行されているcp,mvの進捗状況を確認することが出来る。

cv

20150711_000000

 

「-M」オプションを付与することで、モニタモードで監視することも出来る。

cv -M

20150711_000002

 

ただ、cpをフロントで実行している場合、別途ターミナルをアップする必要があるので注意。
バックグラウンドで実行させているならば、これで進捗状況を監視することが可能だ。

3.cpコマンドの代わりにrsyncコマンドを利用する

cpコマンドを実行する代わりに、rsyncコマンドを用いる事で、進捗状況を画面上に出力することが可能だ。

rsync -av --progress コピー元 コピー先

20150711_000006

4.cpコマンドの代わりにpvコマンドを利用する

cpコマンドの代わりに、pvコマンドを利用することで、cpプロセス全体の進捗状況を確認することが出来る。

pv コピー元 > コピー先

20150711_000009

 

5.cpコマンドの代わりにvcp、gcpコマンドを利用する

cpコマンドの代わりに、vcp、gcpコマンドという、進捗状況を出力するコマンドを利用する方法もある。

vcp -Rv コピー元 コピー先

20150711_000018

 

dbus-launch gcp -rv コピー元 コピー先

20150711_000023

 

6.強化版のcpコマンド・mvコマンドを利用する

以前にこちらの記事でも触れたが、LinuxのCoreutilsのソースに有志の作成したパッチを当てることで、既存のcpコマンド、mvコマンドにプログレスバーの出力オプションを付け加える事も出来る。

20140807_000002

 

Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック) Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック)

cpやdd実行時のファイルの読み取り・書き込み進捗を確認出来る『showspeed』

$
0
0

以前、cpやmvの進捗状況を確認出来る『cv』コマンドを紹介したが、今回はそれによく似たコマンド『showspeed』を紹介する。
cvコマンドとの違いは、『showspeed』はプロセスの読み取りと書き込みの速度を確認することが出来る点だ。

今回は、CentOS 7でこのコマンドをインストール、動作をさせてみる。

1.前提パッケージのインストール

まず、以下のコマンドで『showspeed』の前提パッケージをインストールする。

yum install libaio libaio-devel perl-Data-Dumper

 

2.『showspeed』のインストール

前提となるパッケージをインストールできたら、次は『showspeed』のインストールを行う。
以下のコマンドを実行する。

git clone https://github.com/jnweiger/showspeed
cd showspeed
cp ./showspeed.pl /usr/bin/showspeed

 

これで、『showspeed』のインストールは完了した。

3.『showspeed』を実行する

それでは、実際に『showspeed』を実行してみよう。
『showspeed』は、以下のようにコマンドを実行する。

showspeed 実行しているコマンド

 

cpコマンドで適当なファイルをコピーし、cpコマンドでの読み取り、書き込みをモニタリングした結果が以下。

20150711_000039

[root@test-centos7 showspeed]# cp /tmp/test6 /tmp/test7 &
[1] 5513
[root@test-centos7 showspeed]# showspeed cp
cp looks like a process name. pid=5513 matches av0=cp.
p/5513/fd/3r /tmp/test6  25MB/s (29%, 299MB)  0m:29
p/5513/fd/4w /tmp/test7  22MB/s (331MB)
p/5513/fd/3r /tmp/test6  13MB/s (34%, 351MB)  0m:53
p/5513/fd/4w /tmp/test7  66MB/s (450MB)
p/5513/fd/3r /tmp/test6  48MB/s (51%, 0.5GB)  0m:29
p/5513/fd/3r /tmp/test6 2.6MB/s (51%, 0.5GB)  0m:34
p/5513/fd/3r /tmp/test6  45MB/s (58%, 0.6GB)  0m:23
p/5513/fd/3r /tmp/test6  54MB/s (66%, 0.7GB)  0m:15
p/5513/fd/3r /tmp/test6  28MB/s (70%, 0.7GB)  0m:13
p/5513/fd/3r /tmp/test6  19MB/s (73%, 0.7GB)  0m:12
p/5513/fd/3r /tmp/test6  76MB/s (84%, 0.9GB)  0m:06
p/5513/fd/3r /tmp/test6  32MB/s (88%, 0.9GB)  0m:04
p/5513/fd/3r /tmp/test6 2.4MB/s (89%, 0.9GB)  0m:04
p/5513/fd/3r /tmp/test6  56MB/s (97%, 1.0GB)  0m:01
[1]+  終了                  cp -i /tmp/test6 /tmp/test7
[root@test-centos7 showspeed]#

 

確かに、ファイルコピー時の読み取り・書き込みの確認を行う事が出来た。

 

新しいLinuxの教科書 新しいLinuxの教科書

WebページからGUIでApacheの設定を編集できる『ApacheGUI』

$
0
0

あまり頻度は多くないかも知れないが、リバースプロキシとして利用しているApacheの設定を変えるときなどにWebページ上からApacheの設定を編集したいときもある。
そんな時は、今回紹介する『ApacheGUI』を入れてみてはどうだろうか。このパッケージは、httpd.confやhttpdサービスの状態などについて、WEBページから操作するJava製のツールだ。

今回は、このパッケージをCentOS 7上にインストールし、実際にApacheの設定を行ってみる事にする。
なお、OSにはすでにLAMP環境がインストール済である状態。

1.『ApacheGUI』のインストール

まずは、以下のコマンドでOpenJDKのインストールを行う。

yum install java-1.7.0-openjdk

 

OpenJDKインストール後、以下のコマンドで『ApacheGUI』のインストールを行う。

wget http://downloads.sourceforge.net/project/apachegui/1.10-Linux-Solaris-Mac/ApacheGUI-1.10.0.tar.gz
tar xzvf ApacheGUI-1.10.0.tar.gz
mv ApacheGUI /opt
cd /opt/ApacheGUI/bin
./run.sh

 

これで『ApacheGUI』が起動する。
デフォルトだと、ポート9999を利用する設定になっている。

2.『ApacheGUI』へアクセスする

さて、それでは実際に『ApacheGUI』を利用してみよう。
ブラウザから、「http://サーバのIPアドレス:9999/ApacheGUI」にアクセスすると、以下のような画面が表示される。

回接続時は、『ApacheGUI』で管理するhttpdのインスタンスPATHについて設定が必要になっているので、まずhttpdはパッケージインストールかソースインストールかを選択する。
とりあえず、今回はパッケージインストールを選択する。

20150711_000042

 

すると、次にパッケージインストール時の設定項目が出力される。
パッケージインストールであれば、それぞれ以下の内容で設定すると良いだろう。

  • Server Root: /etc/httpd
  • Primary Configuration File: /etc/httpd/conf/httpd.conf
  • Configuration Directory: /etc/httpd
  • Log Directory: /var/log/httpd
  • Modules Directory: /etc/httpd/modules
  • Binary File: /usr/sbin/apachectl
  • Username: 『ApacheGUI』へのログインユーザ名
  • Password: 『ApacheGUI』へのログインパスワード
  • Password: 『ApacheGUI』へのログインパスワード(再入力)

20150711_000044

 

設定が完了すると、『ApacheGUI』のログイン画面に移行するので、先ほど設定したログインユーザ名・パスワードを用いてログインする。

20150711_000045

ログイン後の画面がこちら。
この画面から、各種設定画面に移動していく。

20150711_000048

 

こちらは、httpd.confの設定編集画面。
もう少しGUIに特化した設定画面かと思ったが、直接エディタからhttpd.confを編集するタイプのようだ。

20150711_000050

 

DocumentRoot配下のファイル編集エディタの画面。

20150711_000051

 

その他、この画面上から各ログの確認を行う事ができるなど、ssh接続を制限する必要がある場合に使えるパッケージだ。

 

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus) サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

cpコマンドで覚えておきたい使い方9個

$
0
0

LinuxやUNIXを使う上で、ほぼ必ず利用するcpコマンド。
今回は、このcpコマンドで覚えておきたい使い方を9個紹介する。

1.基本的な使い方

今更言うまでもない気がするが、基本的なコマンドの実行方法は以下の通りだ。

cp コピー元ファイル コピー先PATH

20150711_000052

 

2.ディレクトリごとコピーする

ファイル単位ではなくディレクトリごとコピーする場合は、「-r」オプションを付与する。

cp -r コピー元ディレクトリ コピー先ディレクトリ

20150711_000053

 

3.複数のファイルを個別に指定してコピーする

複数のファイルを個別に指定してコピーする場合は、以下のようにコマンドを実行する。

cp コピー元ファイル1 コピー元ファイル2 コピー元ファイル3 .... コピー先PATH

20150711_000054

 

4.ファイル上書き時に上書き保存をするか否かを確認するプロンプト表示を行わせる

ファイルのコピーを行う際、コピー先PATHにもし同名のファイルが合った場合はコピーするかどうかを聞くようにしたい。
そんなときは、「-i」オプションを付与することで対応可能だ。

(最近のディストリビューションであれば、基本的にはエイリアスで設定済…のはず)

cp -i コピー元ファイル コピー先PATH

20150712_000006

 

なお、このオプション無しに上書きをしない場合は、「-n」オプションを用いる。
これと似たオプションで、タイムスタンプが新しい場合のみコピーをする「-u」オプションというものも存在している。

5.強制的に上書きコピーする

コピー先に同名のファイルが合った場合、強制的に上書きするならば、「-f」オプションを利用する。
「-f」オプションを付けても上書きするかどうか聞かれる場合は、コマンドの頭に「\」を付け加える。

●通常時

cp -f コピー元ファイル コピー先PATH

 

●上書きの有無を聞かれる場合

\cp -f コピー元ファイル コピー先PATH

 

20150712_000000

6.上書き時にバックアップを取得する

cpコマンドでファイルをコピーする際、上書き時にバックアップを取得させる場合は、「–backup」オプションを付与する。
バックアップしたファイルは、「ファイル名~」として作成される。

cp --backup コピー元ファイル コピー先PATH

20150712_000001

 

バックアップしたファイルの後ろにつく記号は、「–suffix」で設定することができる。
以下のように指定すると、バックアップファイル名は「ファイル名_YYYYMMDD」となる。

cp --backup --suffix=_$(date +%Y%m%d) コピー元ファイル コピー先PATH

20150712_000002

 

番号付きのバックアップを取得することもできる。

cp --backup=numbered コピー元ファイル コピー先PATH

20150712_000004

 

7.権限やオーナー、グループを保持したままコピーする

権限やオーナー、グループを保持したままコピーをする場合は、「-p」オプションを指定する。

cp -p コピー元ファイル コピー先PATH

20150712_000005

 

8.シンボリックリンク・ハードリンクを作成する

cpコマンドで、シンボリックリンク・ハードリンクを作成することも出来る。
シンボリックリンクを作成する場合は「-s」を、ハードリンクを作成する場合は「-l」オプションを付与する。

●シンボリックリンクの作成

cp -s コピー元ファイル コピー先PATH

 

●ハードリンクの作成

cp -l コピー元ファイル コピー先PATH

20150712_000007

 

9.コピーの詳細情報を出力する

「-v」を付与することで、コピーについて詳細な内容を出力する事ができる。

cp -v コピー元ファイル コピー先PATH

20150712_000008

 

Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック) Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック)

Sublime Text 2 or 3で拡張子ごとに開くSyntaxを指定する

$
0
0

Sublime Text を使っていると、特定の拡張子とSyntaxハイライトの設定を紐付けて置きたくなる。
そんな時は、以下のフォルダにあるSyntaxの設定ファイルを編集すると良いだろう。

C:\Users\<ユーザー名>\AppData\Roaming\Sublime Text 2\Packages\User\

 

まだファイルが作成されていない場合は、Sublime TextでそのSyntaxに設定した上で「Preferences -> Setting – More -> Syntax Specific – Default」から開くことで編集出来る。

設定ファイルでのSyntaxハイライトの紐付け方だが、以下のように記述する。

{
"extensions":
    [
    "拡張子"
    ]
}

 

紐付けたい拡張子が複数ある場合(たとえば、shとbashとkshはすべてbashのSyntaxハイライトで開きたいなど)については、以下のように記述していく。

{
"extensions":
    [
    "sh",
    "bash",
    "ksh"
    ]
}

 

Web制作者のためのSublime Textの教科書 Web制作者のためのSublime Textの教科書

topコマンドで覚えておきたい使い方14個

$
0
0

topコマンドといえば、よくLinuxのパフォーマンス状態をモニタリングするために利用されているコマンドだ。
今回は、そんなtopコマンドで覚えておきたい使い方14個を紹介する。

なお、検証で使用したtopコマンドはCentOS 7 で利用している「procps-ng version 3.3.9」のものとなっている。

1.基本的な使い方

基本的には、オプション無しで以下のようにコマンドを実行する。

top

 

20150629_000002

top - 07:21:06 up 4 days, 17 min,  4 users,  load average: 0.00, 0.00, 0.00
Tasks: 186 total,   1 running, 185 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3926176k total,  1642168k used,  2284008k free,   143240k buffers
Swap:  6160376k total,        0k used,  6160376k free,   923260k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 19348 1528 1220 S  0.0  0.0   0:01.41 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.04 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.49 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.07 migration/1
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
   10 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/1
   11 root      20   0     0    0    0 S  0.0  0.0   0:00.02 events/0
   12 root      20   0     0    0    0 S  0.0  0.0   0:08.80 events/1
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuset
   14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper
   15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns
   16 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr
   17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm
   18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 sync_supers
   19 root      20   0     0    0    0 S  0.0  0.0   0:00.04 bdi-default
   20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0
   21 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/1
   22 root      20   0     0    0    0 S  0.0  0.0   0:00.46 kblockd/0
   23 root      20   0     0    0    0 S  0.0  0.0   0:01.11 kblockd/1
   24 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpid
   25 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify
   26 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_hotplug
   27 root      20   0     0    0    0 S  0.0  0.0   0:26.26 ata/0

 

それぞれの表示の意味について、上の5行分とそれ以降を分けて説明する。

1行目

top - 07:21:06 up 4 days, 17 min,  4 users,  load average: 0.00, 0.00, 0.00

uptimeと同じ内容が出力される。

  • 07:21:06 … 現在時刻
  • up 4 days, 17 min, … 稼働時間(4日と17分稼働)
  • 4 users … 現在のログインユーザ数(whoコマンドのユーザ数と同数)
  • load average: 0.00, 0.00, 0.00 … 時間あたりの待機タスク数(1分間、5分間、15分間)

2行目

Tasks: 186 total,   1 running, 185 sleeping,   0 stopped,   0 zombie

タスクの状態が出力される。

  • Tasks: 186 total … タスクの合計
  • 1 running … 稼働中のタスク数
  • 185 sleeping … 待機中のタスク数
  • 0 stopped … 停止中のタスク数
  • 0 zombie … ゾンビタスク数

3行目

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

CPUの状態を出力する。

  • 0.0%us … ユーザプロセスの使用時間
  • 0.0%sy … システムプロセスの使用時間
  • 0.0%ni … 実行優先度を変更したユーザプロセスの使用時間
  • 100.0%id … アイドル状態の時間
  • 0.0%wa … I/Oの終了待をしている時間
  • 0.0%hi … ハードウェア割込み要求での使用時間
  • 0.0%si … ソフトウェア割込み要求での使用時間
  • 0.0%st … OS仮想化利用時に、ほかの仮想CPUの計算で待たされた時間

4行目

Mem:   3926176k total,  1642168k used,  2284008k free,   143240k buffers

メモリーの状態を出力する。

  • 3926176k total … メモリーの合計容量
  • 1642168k used … 使用中のメモリー容量
  • 2284008k free … 未使用のメモリー容量
  • 143240k buffers … バッファとして使用されているメモリー容量

5行目

Swap:  6160376k total,        0k used,  6160376k free,   923260k cached

スワップ領域の状態を出力する。

  • 6160376k total … スワップ領域の合計容量
  • 0k used … 使用中のスワップ領域の容量
  • 6160376k free … 未使用のスワップ領域の容量
  • 923260k cached … キャッシュされているスワップ領域の容量

7行目以降

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 19348 1528 1220 S  0.0  0.0   0:01.41 init

7行目以降は、実行中の各プロセスの状態を表している。

  • PID … プロセスID
  • USER … プロセスの実行ユーザ
  • PR … プロセスの静的優先度(値が低い方が優先度が高い)
  • NI … プロセスの相対優先度(0を基準とし、-20(優先度高) ~ 19(優先度低)で表している)
  • VIRT … プロセスの仮想メモリーサイズ(スワップアウトしたメモリー使用量を加えたメモリー容量)
  • RES … プロセスの使用しているメモリー容量(物理メモリー容量)
  • SHR … プロセスの使用している共有メモリー容量
  • S … プロセスの状態
  • %CPU … CPU使用率
  • %MEM … 物理メモリー使用率
  • TIME+ … プロセスの実行時間
  • COMMAND … プロセスで実行されているコマンド

 

出力されるS(プロセスの状態)のステータスの種類は、以下のようになっている。

  • S … スリープ
  • T … 停止中
  • D … 割り込み不可(sleep)
  • N … ナイス値がプラスの状態
  • < … ナイス値がマイナスの状態
  • R … 実行中
  • Z … ゾンビ状態
  • W … スワップアウト状態

2.情報が更新される間隔を指定する

topコマンドは通常3秒毎に表示を更新している。
この間隔を調整する場合は、topコマンド実行時に「-d」オプションで指定してやるといいだろう。

top -d 更新間隔(秒)

 

なお、topコマンド実行中でもこの更新間隔は指定出来る。
実行中の画面上で「d」もしくは「s」キーを押下すると、「Change delay from 3.0 to」という表記が出るので、そこで秒数を指定すればいい。

20150717_000001

3.実行されているコマンドの内容をフルパスにする

実行されているコマンドの内容をフルパスで出力させる場合は、「-c」オプションを付与する。

top -c

 

なお、topコマンド実行中でも切り替えは可能。
実行中の画面上で「c」キーを押下すると、以下のように画面が切り替わる。

<切り替え前>

20150717_000002

 

<切り替え後>

20150717_000003

4.表示させるプロセスのユーザ(uid)を指定する

「-u」もしくは「-U」オプションを指定することで、表示させるプロセスの実行ユーザを指定することが出来る。

top -u ユーザ名

 

もちろん、topコマンド実行中でも切り替えは可能。
実行中の画面上で「u」キーを押下すると、「Which user (blank for all)」という表示が出るので、そこに監視したいユーザ名を入力する。

<切り替え前>

20150717_000004

 

<切り替え後>

20150717_000005

5.表示されているプロセスをソートする

表示されているプロセスをソートする場合は、ソートする内容に応じて、実行画面上で以下のようにキーを押下する。

CPU順 Shift + p
メモリー順 Shift + m
実行時間順 Shift + t

 

その他、CentOS 7でインストールされているtopコマンドでは、「Shift + <>」でソートする列を切り替える事が可能だ。
なお、CentOS 6等の場合は、「Shift + O」でソート業を切り替えることが出来る。

20150717_000007

6.実行しているプロセスをツリー状に出力させる

これは、最近のバージョンのものに追加された機能のようだが、top画面実行中に「Shift + V」を実行することで、プロセスをツリー状に表示することが出来る。
(CentOS 6のtopコマンドでは利用出来なかった)

20150717_000006

「-c」と組み合わせて利用すると、より詳細な情報がわかる。

7.画面をハイライト表示させる

top画面実行中に「z」キーを押下することで、画面をハイライト表示させることが出来る。
(無論、htopほどキレイに表示されるわけではないが)

20150717_000009

 

「Shift + z」キーを利用すると、より詳細な設定を行う事が可能だ。

20150717_000010

8.プロセスをkillする

topコマンド実行中に「k」キーを実行することで、指定したPIDのプロセスをkillすることが出来る。
「PID to signal/kill」という表示がされるので、そこにkillしたいプロセスIDを入力する。

20150717_000012

9.プロセスを優先度を変更(renice)する

topコマンド実行中に「r」キーを実行することで、指定したPIDのnice値を変更することが出来る。
「PID to renice」という表示がされるので、そこにreniceをしたいプロセスIDを入力、次の画面で変更する値を入力する。

20150717_000014

10.topコマンドの画面更新回数を指定する

topコマンド実行時に「-n」オプションを実行することで、topコマンドの画面更新回数を制限することが出来る。

top -n 画面更新回数

11.topコマンドをbatchモードで実行する

topコマンド実行時に「-b」オプションを指定することで、コマンドをbatchモードで実行させることが出来る。
topコマンドの出力結果をテキストファイルに出力する際などに有効だろう。

top -b

12.CPUの使用率をコア数の数だけ出力させる

topコマンド実行中に「1」キーを押下することで、CPU全体でサマリーされていた使用率をコア数ごとに表示させることができる。

20150717_000015

13.プロセス表示を複数画面に分ける

topコマンド実行中に「Shift + A」を押下することで、プロセスの実行ステータスを複数ウィンドウに切り分ける事ができる。
プロセスウィンドウの操作の切り替えは、「a」キーを押下すると行える。

20150717_000017

14.topコマンドヘッダの表示/非表示を切り替える

topコマンドのヘッダは、コマンド実行中に表示/非表示を切り替える事が出来る。

1行目 l
2-3行目 t
4-5行目 m

ヘッダ全部消すと、こんな感じになる。

20150717_000018

 

というわけで、今回はtopコマンドで覚えていると便利な使い方を紹介した。
まだまだあまり知られていない使い方がたくさんあると思うので、把握でき次第追記していこう。

Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック) Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック)

PostgreSQLでデータベースごとの容量を確認する

$
0
0

仕事で、データベースのバックアップスクリプトの実行時間、負荷の関係からPostgreSQLでデータベースごとのファイル容量を調べる事があったので、念のため残しておく。
PostgreSQLでは、データベースごとの容量を調べる方法として幾つかの方法が用意されている。

1.「\l+」コマンドで確認する

一番カンタンな確認の仕方が、psqlで用意されている「\l+」コマンドの実行だろう。
通常、「\l」でデータベースの一覧が表示されるのだが、これに+を付け足すとデータベースサイズなどの情報も出力させることが出来る。

20150717_000020

2.SQLで情報を取得する

以下のようなSQLを実行することで、データベースの容量を取得することも出来る。

select t1.datname AS データベース名,
       pg_size_pretty(pg_database_size(t1.datname)) as データベースサイズ
from pg_database t1
order by pg_database_size(t1.datname) desc;

20150717_000021

 

内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus) 内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

MySQLでデータベースごとの容量を確認する

$
0
0

前回、PostgreSQLでのデータベースごとの容量確認方法について記述したので、今回はMySQLでの確認方法について。
MySQLでデータベースの容量を確認する場合は、以下のSQLを実行する。

SELECT table_schema "DB名",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DBサイズ(MB)"
FROM information_schema.tables
GROUP BY table_schema;

20150718_000001

 

これで、データベースごとの容量を確認することが出来る。

 

たった2日でわかるSQL MySQL対応 たった2日でわかるSQL MySQL対応

dfコマンドで覚えておきたい使い方5個

$
0
0

LinuxやUNIXにおいて、ディスクの空き容量を確認するのにまず利用されるdfコマンド。
今回は、このdfコマンドで覚えていると便利な使い方を紹介する。

1.基本的な使い方

基本的な使い方だが、以下のように引数無しで実行することでマウントしているファイルシステムの全体の容量や使用している容量、空き容量について確認することが出来る。

df

20150718_000002

[root@dctest01 ~]# df
ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/centos-root    28813572 7968592 20844980   28% /
devtmpfs                     934144       0   934144    0% /dev
tmpfs                        942788       0   942788    0% /dev/shm
tmpfs                        942788   91240   851548   10% /run
tmpfs                        942788       0   942788    0% /sys/fs/cgroup
/dev/sda1                    508588  171332   337256   34% /boot

2.容量を人間が見やすいように表示する

「-h」オプションを付与することにより、容量表示を人間が見やすいようにしてくれる。

df -h

20150718_000003

[root@dctest01 ~]# df
ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/centos-root    28813572 7968592 20844980   28% /
devtmpfs                     934144       0   934144    0% /dev
tmpfs                        942788       0   942788    0% /dev/shm
tmpfs                        942788   91240   851548   10% /run
tmpfs                        942788       0   942788    0% /sys/fs/cgroup
/dev/sda1                    508588  171332   337256   34% /boot
[root@dctest01 ~]# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    28G  7.6G   20G   28% /
devtmpfs                  913M     0  913M    0% /dev
tmpfs                     921M     0  921M    0% /dev/shm
tmpfs                     921M   90M  832M   10% /run
tmpfs                     921M     0  921M    0% /sys/fs/cgroup
/dev/sda1                 497M  168M  330M   34% /boot

なお、Kバイト単位であれば「-k」、Mバイト単位であれば「-m」を指定して表示させることも可能だ。

3.システムタイプを表示させる

「-T」オプションを付与すると、システムタイプを表示させることが出来る。

df -T

20150718_000004

[root@dctest01 ~]# df -Th
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root xfs         28G  7.7G   20G   28% /
devtmpfs                devtmpfs   913M     0  913M    0% /dev
tmpfs                   tmpfs      921M     0  921M    0% /dev/shm
tmpfs                   tmpfs      921M   90M  832M   10% /run
tmpfs                   tmpfs      921M     0  921M    0% /sys/fs/cgroup
/dev/sda1               xfs        497M  168M  330M   34% /boot

4.表示させるマウントポイント・デバイスを指定する

普通に引数としてマウントポイントやデバイスを指定する事で、関連する情報が出力される。

df マウントポイント(or デバイスファイル)

20150718_000005

[root@dctest01 ~]# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    28G  7.6G   20G   28% /
devtmpfs                  913M     0  913M    0% /dev
tmpfs                     921M     0  921M    0% /dev/shm
tmpfs                     921M   90M  832M   10% /run
tmpfs                     921M     0  921M    0% /sys/fs/cgroup
/dev/sda1                 497M  168M  330M   34% /boot
[root@dctest01 ~]#
[root@dctest01 ~]# # マウントポイントを指定
[root@dctest01 ~]# df -h /var
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    28G  7.7G   20G   28% /
[root@dctest01 ~]#
[root@dctest01 ~]# # デバイスファイルを指定
[root@dctest01 ~]# df -h /dev/sda1
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda1        497M  168M  330M   34% /boot

5.表示させるシステムタイプを制限する

「-t」オプションを指定することで、コマンド実行により表示されるシステムタイプを制限することが可能となっている。

df -t システムタイプ

20150718_000006

[root@dctest01 ~]# df -Th
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root xfs         28G  7.6G   20G   28% /
devtmpfs                devtmpfs   913M     0  913M    0% /dev
tmpfs                   tmpfs      921M     0  921M    0% /dev/shm
tmpfs                   tmpfs      921M   90M  832M   10% /run
tmpfs                   tmpfs      921M     0  921M    0% /sys/fs/cgroup
/dev/sda1               xfs        497M  168M  330M   34% /boot
[root@dctest01 ~]# df -Th -t xfs
ファイルシス            タイプ サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root xfs       28G  7.6G   20G   28% /
/dev/sda1               xfs      497M  168M  330M   34% /boot

 

Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック) Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック)

duコマンドで覚えておきたい使い方8個

$
0
0

フォルダごとの容量を確認したい時に役立つコマンドといえば、duコマンドだ。
今回は、そんなduコマンドで覚えておきたい使い方について紹介する。

1.基本的な使い方

基本的には、以下のようにコマンドを実行することで、カレントディレクトリ配下の各ディレクトリのブロックサイズを表示してくれる。

du

20150719_000000

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du
4       ./arp-scan/.git/refs/heads
0       ./arp-scan/.git/refs/tags
4       ./arp-scan/.git/refs/remotes/origin
4       ./arp-scan/.git/refs/remotes
8       ./arp-scan/.git/refs
0       ./arp-scan/.git/branches
44      ./arp-scan/.git/hooks
4       ./arp-scan/.git/info
1176    ./arp-scan/.git/objects/pack
0       ./arp-scan/.git/objects/info
1176    ./arp-scan/.git/objects
4       ./arp-scan/.git/logs/refs/remotes/origin
4       ./arp-scan/.git/logs/refs/remotes
4       ./arp-scan/.git/logs/refs/heads
8       ./arp-scan/.git/logs/refs
12      ./arp-scan/.git/logs
1272    ./arp-scan/.git
2532    ./arp-scan
4       ./tmp
2540    .

 

また、引数に対象PATHを指定することで、その配下のディレクトリ容量を確認することが出来る。

du 対象PATH

20150719_000004

 

ここで注意したいのが、出力されるのはあくまでも「ブロックサイズ」、それもKB単位だということ。
フォルダ配下のファイルサイズの合計ではないので注意。

2.ブロックサイズではなくバイト単位で出力させる

さて、先ほど説明したが、duコマンドでは標準だとブロックサイズで容量が表示される。
大体のファイルシステムだとブロックサイズの最小単位を4096バイト(4.0KB)としているので、たとえ1バイトのファイルしか使っていなくても4.0KBの領域を使っている事になってしまう。

これだと正確なフォルダの容量を確認出来ないので、正確な値を知りたい場合は、出力される容量のサイズをバイト単位にする必要がある。
バイト単位での出力には、「-b」オプションを付与すれば良い。

du -b

20150719_000001

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du -b
60      ./arp-scan/.git/refs/heads
6       ./arp-scan/.git/refs/tags
49      ./arp-scan/.git/refs/remotes/origin
68      ./arp-scan/.git/refs/remotes
177     ./arp-scan/.git/refs
6       ./arp-scan/.git/branches
18884   ./arp-scan/.git/hooks
260     ./arp-scan/.git/info
1201046 ./arp-scan/.git/objects/pack
6       ./arp-scan/.git/objects/info
1201080 ./arp-scan/.git/objects
197     ./arp-scan/.git/logs/refs/remotes/origin
216     ./arp-scan/.git/logs/refs/remotes
199     ./arp-scan/.git/logs/refs/heads
447     ./arp-scan/.git/logs/refs
655     ./arp-scan/.git/logs
1231032 ./arp-scan/.git
2364646 ./arp-scan
4096    ./tmp
2369099 .

3.人間が読みやすい単位で表示させる

オプション無しの場合、KB単位(かつブロックサイズ)での表示となるが、この表示だと非常に分かりにくい。
「-h」オプションを付与することで、人間が読みやすい単位で表示させる事が出来る。

du -h

20150719_000002

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du -h
4.0K    ./arp-scan/.git/refs/heads
0       ./arp-scan/.git/refs/tags
4.0K    ./arp-scan/.git/refs/remotes/origin
4.0K    ./arp-scan/.git/refs/remotes
8.0K    ./arp-scan/.git/refs
0       ./arp-scan/.git/branches
44K     ./arp-scan/.git/hooks
4.0K    ./arp-scan/.git/info
1.2M    ./arp-scan/.git/objects/pack
0       ./arp-scan/.git/objects/info
1.2M    ./arp-scan/.git/objects
4.0K    ./arp-scan/.git/logs/refs/remotes/origin
4.0K    ./arp-scan/.git/logs/refs/remotes
4.0K    ./arp-scan/.git/logs/refs/heads
8.0K    ./arp-scan/.git/logs/refs
12K     ./arp-scan/.git/logs
1.3M    ./arp-scan/.git
2.5M    ./arp-scan
4.0K    ./tmp
2.5M    .

 

なお、ブロックサイズではなく、バイトサイズで更に単位を分かりやすく表示させる場合は、以下のようにコマンドを実行する。
オプションの順番が逆だと正常に動作しないので注意。

du -bh

20150719_000005

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du -bh
60      ./arp-scan/.git/refs/heads
6       ./arp-scan/.git/refs/tags
49      ./arp-scan/.git/refs/remotes/origin
68      ./arp-scan/.git/refs/remotes
177     ./arp-scan/.git/refs
6       ./arp-scan/.git/branches
19K     ./arp-scan/.git/hooks
260     ./arp-scan/.git/info
1.2M    ./arp-scan/.git/objects/pack
6       ./arp-scan/.git/objects/info
1.2M    ./arp-scan/.git/objects
197     ./arp-scan/.git/logs/refs/remotes/origin
216     ./arp-scan/.git/logs/refs/remotes
199     ./arp-scan/.git/logs/refs/heads
447     ./arp-scan/.git/logs/refs
655     ./arp-scan/.git/logs
1.2M    ./arp-scan/.git
2.3M    ./arp-scan
4.0K    ./tmp
2.3M    .

4.合計サイズを出力させる

「-c」オプションを付与すると、出力結果の末尾にフォルダの合計サイズを出力させることができる。

du -c

20150719_000006

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du -c
4       ./arp-scan/.git/refs/heads
0       ./arp-scan/.git/refs/tags
4       ./arp-scan/.git/refs/remotes/origin
4       ./arp-scan/.git/refs/remotes
8       ./arp-scan/.git/refs
0       ./arp-scan/.git/branches
44      ./arp-scan/.git/hooks
4       ./arp-scan/.git/info
1176    ./arp-scan/.git/objects/pack
0       ./arp-scan/.git/objects/info
1176    ./arp-scan/.git/objects
4       ./arp-scan/.git/logs/refs/remotes/origin
4       ./arp-scan/.git/logs/refs/remotes
4       ./arp-scan/.git/logs/refs/heads
8       ./arp-scan/.git/logs/refs
12      ./arp-scan/.git/logs
1272    ./arp-scan/.git
2532    ./arp-scan
4       ./tmp
2540    .
2540    合計

 

…まぁ、標準だと出力結果の最後にカレントディレクトリの配下全てを合計した容量が表示されるので、このオプションは他のオプションと組み合わせて使うものだと思ってもらいたい。
なお、指定したフォルダ配下のみを合計する場合は、「-s」オプションを付与する。

du -s

20150719_000007

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du -s
2540    .

6.ファイル単位で結果を出力する

duコマンドといえばフォルダ単位での容量を出力するコマンドなのだが、実はファイル単位でも結果を出力することが可能だ。
それには、「-a」オプションを付与する。

du -a

20150719_000008

 

ただ、ディレクトリの除外が出来ない事を考えると、容量の大きいファイルを探す場合はfindコマンドを使う方が良いだろう。

7.出力させる階層を指定する

duコマンドは、標準だと指定したPATHの配下にある全てのディレクトリを表示してしまう。
これを1階層のみ表示させるといった指定をする場合は、「-d」オプションを利用する。

du -d 表示させる階層

20150719_000009

[root@dctest01 work]# pwd
/work
[root@dctest01 work]# du
4       ./arp-scan/.git/refs/heads
0       ./arp-scan/.git/refs/tags
4       ./arp-scan/.git/refs/remotes/origin
4       ./arp-scan/.git/refs/remotes
8       ./arp-scan/.git/refs
0       ./arp-scan/.git/branches
44      ./arp-scan/.git/hooks
4       ./arp-scan/.git/info
1176    ./arp-scan/.git/objects/pack
0       ./arp-scan/.git/objects/info
1176    ./arp-scan/.git/objects
4       ./arp-scan/.git/logs/refs/remotes/origin
4       ./arp-scan/.git/logs/refs/remotes
4       ./arp-scan/.git/logs/refs/heads
8       ./arp-scan/.git/logs/refs
12      ./arp-scan/.git/logs
1272    ./arp-scan/.git
2532    ./arp-scan
4       ./tmp
2540    .
[root@dctest01 work]# du -d 1
2532    ./arp-scan
4       ./tmp
2540    .

8.ディレクトリの更新日時を表示させる

「–time」オプションを付与することで、ディレクトリの更新日時を表示させることも出来る。

du --time

20150719_000010

[root@dctest01 work]# du --time
4       2015-04-23 20:14        ./arp-scan/.git/refs/heads
0       2015-04-23 20:14        ./arp-scan/.git/refs/tags
4       2015-04-23 20:14        ./arp-scan/.git/refs/remotes/origin
4       2015-04-23 20:14        ./arp-scan/.git/refs/remotes
8       2015-04-23 20:14        ./arp-scan/.git/refs
0       2015-04-23 20:14        ./arp-scan/.git/branches
44      2015-04-23 20:14        ./arp-scan/.git/hooks
4       2015-04-23 20:14        ./arp-scan/.git/info
1176    2015-04-23 20:14        ./arp-scan/.git/objects/pack
0       2015-04-23 20:14        ./arp-scan/.git/objects/info
1176    2015-04-23 20:14        ./arp-scan/.git/objects
4       2015-04-23 20:14        ./arp-scan/.git/logs/refs/remotes/origin
4       2015-04-23 20:14        ./arp-scan/.git/logs/refs/remotes
4       2015-04-23 20:14        ./arp-scan/.git/logs/refs/heads
8       2015-04-23 20:14        ./arp-scan/.git/logs/refs
12      2015-04-23 20:14        ./arp-scan/.git/logs
1272    2015-04-23 20:14        ./arp-scan/.git
2532    2015-04-23 20:14        ./arp-scan
4       2015-04-29 19:53        ./tmp
2540    2015-06-22 23:50        .

 

Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック) Linuxシステムコールプログラミング (エッセンシャルソフトウェアガイドブック)

vmstatコマンドで覚えておきたい使い方8個

$
0
0

LinuxやUNIXでパフォーマンスを監視する際にはお約束とも言えるvmstatコマンド。
どの現場でもよく使われるものだが、今回はこのコマンドで覚えておきたい使い方を紹介する。

なお、この内容はCentOS 7にてバンドルされている「procps-ng 3.3.9」のバージョンのものを用いている。

1.基本的な使い方

オプション無しで実行すると、以下のように現時点でのパフォーマンス情報が出力される。

vmstat

20150719_000000

[root@test-centos7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  80556    128 1391560    0    0     5     6    9    2  0  0 100  0  0

 

それぞれの表示の内容は、以下のようになっている。

procs

  • r … 実行待ち(プロセスが実行キューに入っている状態)になっているプロセス数
  • b … 本来は実行可能だが、何らかの理由によって処理が停止(スリープ)しているプロセス数

r(実行待ちプロセス数)がある場合、CPUの処理が追いついていないか、そのプロセスを実行しているプログラム自体の問題によって実行順が回ってきていないプロセスが存在する事になる。
b(処理停止プロセス数)がある場合、例えばディスクやネットワークのIO待ちをしていたが、プログラムの実行順番が来てしまったプロセスがあることになる。

どちらにしても、このプロセスの実行者からすれば処理が遅く感じられる可能性が高いので、少し注意した方がいい値。

memory

  • swpd … 使用されているスワップメモリー容量
  • free … 未使用のメモリー容量
  • buff … カーネルがバッファ領域として利用しているメモリー容量
  • cache … キャッシュとして用いられているメモリー容量

なお、一般的に動作時間が長くなるにつれて、このcache容量が大きくなっていく傾向があるが、これはLinuxで動作を早く行わせるためにディスクなどから事前にデータを読み込んでいるだけなので、あまり気にしなくて良い。
swpdの値も、後述するsi、soが頻繁に増減している状態でなければパフォーマンスにそこまで影響があるわけではない。

swap

  • si … スワップ領域に退避していたデータを物理メモリーに書き戻している(スワップイン)容量
  • so … 必要のないデータを物理メモリーからスワップ領域に書き込みしている(スワップアウト)容量

もしもこの項目が頻繁に動いているようであれば、パフォーマンスに悪影響を与えている可能性が高いので注意。基本的には、どちらの値も可能な限り0である状態がいい。
(swpdの容量が多くても、この項目があまり変動していないようであれば影響が大きくない)

io

  • bi … ブロックデバイス(HDDなど)からの読み取り容量
  • bo … ブロックデバイスへの書き込み容量

複数のHDDがある場合でも、その合計の値で出力される(HDDごとに値が出力されない)ので注意。
デバイス・パーティションごとのIO値を確認する場合は、後述する「-d」や「-p」オプションで確認すると良いだろう。

system

cpu

  • us … カーネルコード以外(OS以外。例えばphpやperlのスクリプトなど)の実行でCPUが使用された時間の割合
  • sy … カーネルコードの実行でCPUが使用された時間の割合
  • id … CPUがアイドル状態(何もしてない待機状態)だった際の時間の割合
  • wa … ディスク・ネットワークへのデータの入出力でIO待ちだった時間の割合
  • st … ゲストOSがリソース要求を行ったが、CPUリソースを割り当ててもらえなかった時間の割合

2.○秒ごとに定期実行させる

引数として間隔(秒単位)を指定することで、その間隔ごとにパフォーマンス情報を出力させることができる。

vmstat 実行間隔(秒)

20150720_000004

 

この実行間隔を指定してコマンドを実行すると、出力結果にヘッダーが定期的(コマンド実行時のウィンドウサイズによって行数が変動する)に挟まれてしまう。

20150720_000007

 

邪魔であれば、「-n」オプションを付与することでヘッダーを最初の1回(実行時に最初に挿入される分)のみに抑える事ができる。

vmstat -n 実行回数

 

なお、実行回数の後ろに更に数字を引数として与える事で、実行回数も指定することができる。

vmstat 実行間隔(秒) 実行回数

20150720_000006

3.メモリキャッシュのアクティブ/非アクティブ領域の内訳を確認する

「-a」オプションを付与することで、メモリキャッシュのアクティブ(利用中で、開放できない領域)/非アクティブ(最後に利用されてから一定時間が経過したため、すぐに廃棄できる領域)の内訳を確認することができる。

vmstat -a

20150720_000005

[root@test-centos7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  95740    128 1365428    0    0     4     6    9    4  0  0 100  0  0
[root@test-centos7 ~]#
[root@test-centos7 ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  95720 1273136 372676    0    0     4     6    9    4  0  0 100  0  0

 

比べて見るとわかるが、オプション無しとくらべて「buff」「cache」がなくなり、「inact」「active」がかわりに表示されている。

  • inact … 非アクティブ(最後に利用されてから一定時間が経過したため、内容をすぐに廃棄できる)な状態のメモリキャッシュの容量
  • active … アクティブ(何らかの形でシステムで利用中のため、開放できない)な状態のメモリキャッシュの容量

activeのメモリはすぐには利用できないので、free + inactの値が利用可能なメモリ容量だと考えるといいだろう。

4.パフォーマンス情報にタイムスタンプを付与する

「-t」オプションを付与することで、出力されるパフォーマンス情報にタイムスタンプを付与することができる。

vmstat -t

20150720_000009

[root@test-centos7 ~]# vmstat 1 -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 1  0      0  95740    128 1365432    0    0     4     6    9    4  0  0 100  0  0 2015-07-20 10:19:15
 0  0      0  95732    128 1365432    0    0     0     0   66  115  0  0 100  0  0 2015-07-20 10:19:16
 0  0      0  95732    128 1365432    0    0     0     0   54   95  0  0 100  0  0 2015-07-20 10:19:17
 0  0      0  95732    128 1365432    0    0     0     0   72  127  0  0 100  0  0 2015-07-20 10:19:18
 0  0      0  95572    128 1365432    0    0     0     0  117  192  0  0 99  0  0 2015-07-20 10:19:19
 0  0      0  95572    128 1365432    0    0     0     0   60  100  0  0 100  0  0 2015-07-20 10:19:20
 0  0      0  95608    128 1365432    0    0     0     0   58  107  0  0 100  0  0 2015-07-20 10:19:21
 0  0      0  95608    128 1365432    0    0     0     0   57  104  0  0 100  0  0 2015-07-20 10:19:22
 0  0      0  95608    128 1365432    0    0     0     0   62  107  0  0 100  0  0 2015-07-20 10:19:23
 0  0      0  95608    128 1365432    0    0     0     0   61  108  0  0 100  0  0 2015-07-20 10:19:24
 0  0      0  95608    128 1365432    0    0     0     0   53   95  0  0 100  0  0 2015-07-20 10:19:25

5.表示される容量の単位を切り替える

通常、vmstatで表示される容量の単位はKB(キロバイト)となっているのだが、「-S」オプションでk(キロバイト)、m(メガバイト)を切り替える事もできる。

vmstat -S (k or m)

20150720_000010

[root@test-centos7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  95824    128 1365432    0    0     4     6    9    4  0  0 100  0  0
[root@test-centos7 ~]#
[root@test-centos7 ~]# # キロバイト
[root@test-centos7 ~]# vmstat -S k
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  98250    131 1398202    0    0     4     6    9    4  0  0 100  0  0
[root@test-centos7 ~]#
[root@test-centos7 ~]# # メガバイト
[root@test-centos7 ~]# vmstat -S m
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0     98      0   1398    0    0     4     6    9    4  0  0 100  0  0

6.各種カウンターの統計情報を出力する

「-s」オプションを付与すると、各種情報をその詳細な名称とともにリスト形式で出力させることができる。

vmstat -s

20150720_000011

[root@test-centos7 ~]# vmstat -s
      1885468 K total memory
      1789744 K used memory
       372696 K active memory
      1273132 K inactive memory
        95724 K free memory
          128 K buffer memory
      1365432 K swap cache
      2113532 K total swap
            0 K used swap
      2113532 K free swap
        76349 non-nice user cpu ticks
          282 nice user cpu ticks
        71973 system cpu ticks
    379256851 idle cpu ticks
        31778 IO-wait cpu ticks
            7 IRQ cpu ticks
         4073 softirq cpu ticks
            0 stolen cpu ticks
     17023816 pages paged in
     21544483 pages paged out
            0 pages swapped in
            0 pages swapped out
     78935690 interrupts
    143253821 CPU context switches
   1435457229 boot time
        61294 forks

7.slabの使用状況を確認する

「-m」オプションを使用することで、メモリのslabの(slabinfo)情報について出力させることができる。

vmstat -m

20150720_000013

[root@test-centos7 ~]# vmstat -m -n
Cache                       Num  Total   Size  Pages
ccid2_hc_tx_sock              0      0   1280     12
xfs_dqtrx                     0      0    576     14
xfs_icr                       0      0    144     28
xfs_ili                    3855   4004    152     26
xfs_inode                  9888   9888   1024     16
xfs_efd_item                160    220    400     20
xfs_da_state                 32     32    488     16
xfs_btree_cur                38     38    208     19
xfs_log_ticket              396    396    184     22
scsi_cmd_cache              324    324    448     18
kcopyd_job                    0      0   3312      9
dm_uevent                     0      0   2608     12
dm_rq_target_io               0      0    424     19
UDPLITEv6                     0      0   1152     14
UDPv6                        28     28   1152     14
tw_sock_TCPv6                32     32    256     16
TCPv6                        48     48   2048     16
cfq_queue                   374    442    232     17
bsg_cmd                       0      0    312     13
mqueue_inode_cache           18     18    896     18
hugetlbfs_inode_cache        26     26    608     13
configfs_dir_cache           92     92     88     46
dquot                         0      0    256     16
pid_namespace                 0      0   2176     15
posix_timers_cache            0      0    248     16
UDP-Lite                      0      0   1024     16
ip_fib_trie                  73     73     56     73
RAW                         187    187    960     17
UDP                          32     32   1024     16
tw_sock_TCP                  32     32    256     16
TCP                          34     34   1920     17
blkdev_queue                 34     34   1920     17
blkdev_requests            1218   1218    384     21
blkdev_ioc                   78     78    104     39
fsnotify_event_holder    121210 121210     24    170
fsnotify_event              476    476    120     34
sock_inode_cache            252    252    640     12
net_namespace                 0      0   4224      7
shmem_inode_cache           871    912    680     12
Acpi-ParseExt              5152   5152     72     56
Acpi-Namespace             4488   4488     40    102
taskstats                    24     24    328     12
proc_inode_cache           1224   1224    656     12
sigqueue                     50     50    160     25
bdev_cache                   38     38    832     19
sysfs_dir_cache           17364  17676    112     36
inode_cache               10999  12324    592     13
dentry                    44692  46599    192     21
iint_cache                    0      0     80     51
selinux_inode_security    23118  26571     80     51
buffer_head              158636 159120    104     39
vm_area_struct             8098   8280    216     18
mm_struct                    80     80   1600     20
files_cache                  96     96    640     12
signal_cache                150    210   1152     14
sighand_cache               158    165   2112     15
task_xstate                 167    266    832     19
task_struct                 181    209   2912     11
anon_vma                   4928   4928     64     64
shared_policy_node         2210   2210     48     85
numa_policy                  15     15    264     15
radix_tree_node           20739  22232    584     14
idr_layer_cache             165    165   2112     15
dma-kmalloc-8192              0      0   8192      4
dma-kmalloc-4096              0      0   4096      8
dma-kmalloc-2048              0      0   2048     16
dma-kmalloc-1024              0      0   1024     16
dma-kmalloc-512              16     16    512     16
dma-kmalloc-256               0      0    256     16
dma-kmalloc-128               0      0    128     32
dma-kmalloc-64                0      0     64     64
dma-kmalloc-32                0      0     32    128
dma-kmalloc-16                0      0     16    256
dma-kmalloc-8                 0      0      8    512
dma-kmalloc-192               0      0    192     21
dma-kmalloc-96                0      0     96     42
kmalloc-8192                 41     68   8192      4
kmalloc-4096                218    232   4096      8
kmalloc-2048                318    352   2048     16
kmalloc-1024               1219   1344   1024     16
kmalloc-512                 538    816    512     16
kmalloc-256                3230   3712    256     16
kmalloc-192                2243   2667    192     21
kmalloc-128                2238   3008    128     32
kmalloc-96                 4318   4872     96     42
kmalloc-64                37954  39808     64     64
kmalloc-32               165515 167296     32    128
kmalloc-16                50944  50944     16    256
kmalloc-8                 83456  83456      8    512
kmem_cache_node             128    128     64     64
kmem_cache                   96     96    256     16

8.デバイス・パーティションの統計情報を出力させる

vmstatでは、「-d」オプションでデバイスごとの統計情報を出力させることができる。

vmstat -d

20150720_000014

[root@test-centos7 ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
fd0        2      0      16      85      0      0       0       0      0      0
sda   103345    837 34047617 1035927 500440  22513 43093959 6204752      0    862
sr0        0      0       0       0      0      0       0       0      0      0
dm-0     246      0    1968     721      0      0       0       0      0      0
dm-1  102522      0 34001881 1039381 521883      0 43089569 7236979      0    864

それぞれの項目の意味を、以下に記述する。

reads/writes

  • total … 読み込み/書き込みに成功した総数
  • merged … グループ化した読み込み/書き込みの数
  • sectors … 読み込み/書き込みに成功したセクタ数
  • ms … 読み込み/書き込みに使用した時間(ミリ秒)

この項目の値は起動時からの計測なので、リアルタイムでの性能計測には不向きなので注意。

IO

  • cur … 実行中のIO
  • s … IOに使用した時間(秒)

 

残念ながら各デバイスごとに出力を絞る機能はついていないため、必要であればgrepと組み合わせると良いだろう。

vmstat -nd 実行間隔(秒) | grep -e ^disk- -e デバイス名

20150720_000018

 

なお、「-D」オプションを使用することで、全てのデバイスを統計してのステータスを表示させることもできる。

vmstat -D

20150720_000019

[root@test-centos7 ~]# vmstat -D
            5 disks
            2 partitions
       206117 total reads
          837 merged reads
     68051546 read sectors
      2076216 milli reading
      1030952 writes
        22626 merged writes
     86263314 written sectors
     13458654 milli writing
            0 inprogress IO
         1730 milli spent IO

 

パーティションごとのIO値を取得する場合は、「-p」オプションを用いる。

vmstat -p 対象パーティション(デバイスファイル)

20150720_000022

[root@test-centos7 ~]# vmstat -p /dev/sda2
sda2          reads   read sectors  writes    requested writes
              101975   34004905     503730   43130448
[root@test-centos7 ~]# vmstat -p /dev/sda2 1
sda2          reads   read sectors  writes    requested writes
              101975   34004905     503730   43130448
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494
              101975   34004905     503735   43130494

それぞれの項目の意味は以下。

  • 指定したパーティションからの読み込み数
  • 指定したパーティションから読み出されたセクターの数
  • 指定したパーティションへの書き込み数
  • 指定したパーティションへの書き込み要求数

9.横に広く表示させる

パフォーマンス情報を出力させる際、ちょっと見にくいなと思ったら、「-w」オプションで横に広く表示させる事ができる。

vmstat -w

20150720_000023

[root@test-centos7 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  96364    128 1365472    0    0     4     6   10    4  0  0 100  0  0
[root@test-centos7 ~]#
[root@test-centos7 ~]# vmstat -w
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
 r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
 1  0            0        96364          128      1365472    0    0     4     6   10    4   0   0 100   0   0

 

絵で見てわかるシステムパフォーマンスの仕組み 絵で見てわかるシステムパフォーマンスの仕組み

tailコマンドで覚えておきたい使い方4個

$
0
0

ログを監視する際によく利用するtailコマンド。
以外と、普通に実行するのと「-F」でのリアルタイムでのログ監視以外はあまり知られてないのではなかろうか。

今回は、そんなtailコマンドで覚えているとちょっと役に立つ使い方を紹介する。

1.基本的な使い方

基本的には、以下のようにコマンドを実行することで指定したファイルの末尾から行(デフォルトでは10行)を抽出して表示してくれる。

tail ファイルPATH

20150720_000024

[root@test-centos7 ~]# tail /var/log/messages
Jul 20 18:59:15 test-centos7 root: aaa
Jul 20 19:00:01 test-centos7 systemd: Starting Session 562 of user root.
Jul 20 19:00:01 test-centos7 systemd: Started Session 562 of user root.
Jul 20 19:01:01 test-centos7 systemd: Starting Session 563 of user root.
Jul 20 19:01:01 test-centos7 systemd: Started Session 563 of user root.
Jul 20 19:07:43 test-centos7 systemd-logind: Removed session 561.
Jul 20 19:07:46 test-centos7 systemd-logind: New session 564 of user root.
Jul 20 19:07:46 test-centos7 systemd: Starting Session 564 of user root.
Jul 20 19:07:46 test-centos7 systemd: Started Session 564 of user root.
Jul 20 19:07:53 test-centos7 systemd-logind: Removed session 564.

2.出力される行数を指定する

tailコマンドでデフォルトで表示される行数は10行だが、それを指定することができる。

tail -行数 ファイルPATH

20150720_000025

[root@test-centos7 ~]# tail /var/log/messages
Jul 20 19:07:53 test-centos7 systemd-logind: Removed session 564.
Jul 20 19:10:01 test-centos7 systemd: Starting Session 565 of user root.
Jul 20 19:10:01 test-centos7 systemd: Started Session 565 of user root.
Jul 20 19:10:01 test-centos7 systemd: Failed to mark scope session-565.scope as abandoned : Stale file handle
Jul 20 19:16:03 test-centos7 systemd-logind: New session 566 of user root.
Jul 20 19:16:03 test-centos7 systemd: Starting Session 566 of user root.
Jul 20 19:16:03 test-centos7 systemd: Started Session 566 of user root.
Jul 20 19:16:07 test-centos7 root: aaa
Jul 20 19:16:09 test-centos7 root: aaa
Jul 20 19:16:10 test-centos7 root: aaa
[root@test-centos7 ~]# tail -5 /var/log/messages
Jul 20 19:16:03 test-centos7 systemd: Starting Session 566 of user root.
Jul 20 19:16:03 test-centos7 systemd: Started Session 566 of user root.
Jul 20 19:16:07 test-centos7 root: aaa
Jul 20 19:16:09 test-centos7 root: aaa
Jul 20 19:16:10 test-centos7 root: aaa

3.追記された行を自動的に表示させていく

これはよく利用される機能だと思う。
「-F(-fでも動作的には同じ)」を指定することで、ファイルに追記されると同時にコンソール上でも表示してくれる。

tail -F ファイルPATH

20150720_000001

 

特定の文字列を含む行のみを出力させたい場合は、grepと組み合わせて利用すると良いだろう。

tail -F ファイルPATH | grep 抽出条件

20150720_000002

 

なお、特定のプロセスが終了した場合、監視を終了させることもできる。

tail -F ファイルPATH --pid=対象のプロセスのpid

 

4.複数のファイルを同時に表示させる

tailコマンドでは、複数のファイルを指定することでそれらを同時に表示させることができる。

tail ファイルPATH1 ファイルPATH2 ...

20150720_000004

 

「-F」と組み合わせて使用することもできる。
その場合、追記があった場合は以下のように出力される。

20150720_000005

 

同じファイルを見ているかのようにする(ヘッダーにファイル名を出力させないようにする)場合は、「-q」オプションと組み合わせて使用すると良いだろう。

tail -Fq ファイルPATH1 ファイルPATH2 ...

20150720_000006

 

新しいLinuxの教科書 新しいLinuxの教科書

dfで使用容量がフルじゃないのにディスクの空き容量が0の時の対応

$
0
0

Linuxで容量ギリギリでディスクを使用していると、時折以下のようにディスクの空き容量がまだあるはずなのに0として扱われてしまう事がある。

[root@recserver ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_recserver-lv_root
                       50G  3.5G   44G   8% /
tmpfs                 3.7G     0  3.7G   0% /dev/shm
/dev/sdb1             485M   91M  369M  20% /boot
/dev/mapper/vg_recserver-lv_home
                      400G  216M  379G   1% /home
/dev/sda              2.7T  2.6T     0 100% /media/data1
/dev/sdc1             2.7T  2.3T  308G  89% /media/data2
[root@recserver ~]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/vg_recserver-lv_root
                      51606140   3566240  45418460   8% /
tmpfs                  3873168         0   3873168   0% /dev/shm
/dev/sdb1               495844     92601    377643  20% /boot
/dev/mapper/vg_recserver-lv_home
                     418786032    221144 397291700   1% /home
/dev/sda             2884285104 2746593496         0 100% /media/data1
/dev/sdc1            2884285068 2415734252 322037492  89% /media/data2

もちろん、特にファイルを削除しているわけではないので、プロセスがファイルを掴んでいるわけではない。
そんなときは、以下のコマンドでファイルシステムの予約ブロックサイズを確認すると良いだろう。もしこの予約ブロックの容量が大きい場合、そのせいで100%になってしまっている可能性がある。

tune2fs -l デバイスファイル
[root@recserver ~]# tune2fs -l /dev/sda
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   data
Last mounted on:          /media/data1
Filesystem UUID:          f4af203d-dfda-4135-b9e2-b81f728d4463
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              183148544
Block count:              732566646
Reserved block count:     36628332
Free blocks:              34422902
Free inodes:              183147718
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      849
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
RAID stride:              1
Flex block group size:    16
Filesystem created:       Sun Sep  2 00:25:35 2012
Last mount time:          Thu Jul 23 03:01:33 2015
Last write time:          Thu Jul 23 03:01:33 2015
Mount count:              44
Maximum mount count:      39
Last checked:             Sat Feb  8 00:40:06 2014
Check interval:           15552000 (6 months)
Next check after:         Thu Aug  7 00:40:06 2014
Lifetime writes:          36 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      b3fd5ff4-2b9a-4ed3-b960-ce27765b2280
Journal backup:           inode blocks

 

この予約ブロックの%を変える場合は、以下のようにコマンドを実行する。

tune2fs -m 予約ブロックのデバイスファイル全体での割合(%) デバイスファイル
[root@recserver ~]# tune2fs -m 1 /dev/sda
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 1% (7325666 blocks)
[root@recserver ~]# tune2fs -l /dev/sda
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   data
Last mounted on:          /media/data1
Filesystem UUID:          f4af203d-dfda-4135-b9e2-b81f728d4463
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              183148544
Block count:              732566646
Reserved block count:     7325666
Free blocks:              34422902
Free inodes:              183147718
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      849
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
RAID stride:              1
Flex block group size:    16
Filesystem created:       Sun Sep  2 00:25:35 2012
Last mount time:          Thu Jul 23 03:01:33 2015
Last write time:          Thu Jul 23 07:46:04 2015
Mount count:              44
Maximum mount count:      39
Last checked:             Sat Feb  8 00:40:06 2014
Check interval:           15552000 (6 months)
Next check after:         Thu Aug  7 00:40:06 2014
Lifetime writes:          36 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      b3fd5ff4-2b9a-4ed3-b960-ce27765b2280
Journal backup:           inode blocks
[root@recserver ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_recserver-lv_root
                       50G  3.5G   44G   8% /
tmpfs                 3.7G     0  3.7G   0% /dev/shm
/dev/sdb1             485M   91M  369M  20% /boot
/dev/mapper/vg_recserver-lv_home
                      400G  216M  379G   1% /home
/dev/sda              2.7T  2.6T  104G  97% /media/data1
/dev/sdc1             2.7T  2.3T  308G  89% /media/data2

 

もし、lsofなどでプロセスをファイルがつかんでいなければ、これを疑うのが良いだろう。

IT技術者なら知っておきたい ストレージの原則と技術 IT技術者なら知っておきたい ストレージの原則と技術

pacoからporgへアップグレードし、管理データの引き継ぎを行う

$
0
0

以前、ソースからインストールしたパッケージの管理ツール『porg』を紹介したが、今回はこれの前身である『paco』から『porg』へのパッケージの管理情報の移行手順について記述していく。

まず、すでに環境内にはpacoがインストール済で、管理しているパッケージがある状態とする。

20150724_000000

 

まずは、事前にporgをインストールする必要がある。
インストール手順についてはこちらを参照してもらいたい。

porgのインストール完了後、以下のコマンドを実行することでpacoのパッケージ情報をporgに移行させる。

paco2porg

20150724_000001

[root@test-centos7 porg-0.2]# paco -a
cv  paco-2.0.9
[root@test-centos7 porg-0.2]# porg -a
porg-0.2
[root@test-centos7 porg-0.2]# paco2porg
[root@test-centos7 porg-0.2]# porg -a
cv
paco-2.0.9
porg-0.2

pacoが不要になったのであれば、以下のコマンドでporgから削除する。

porg -r paco-2.0.9

20150724_000003

[root@test-centos7 porg-0.2]# paco -a
cv  paco-2.0.9
[root@test-centos7 porg-0.2]# porg -a
cv
paco-2.0.9
porg-0.2
[root@test-centos7 porg-0.2]# porg -r paco-2.0.9
Remove package 'paco-2.0.9' (y/N) ? y
[root@test-centos7 porg-0.2]# porg -a
cv
porg-0.2
[root@test-centos7 porg-0.2]# paco -a
-bash: /usr/local/bin/paco: そのようなファイルやディレクトリはありません

 

新しいLinuxの教科書 新しいLinuxの教科書

nohupでバックグラウンドジョブ化したコマンドの終了時間を標準出力でファイルに書き出す

$
0
0

コマンドの実行時間を計測する際によく使用されるtimeコマンドだが、これはbashの組み込みコマンドのため、外部ファイルへの書き出しができない。

20150725_000000

 

こうなると、nohupなどでコマンドの実行時間をログに記録させて放置したくても、ファイルに書き出せないため放置することが難しくなる。
そんな時は、bashの組み込みコマンドとしてのtimeではなく、GNU timeを利用するといいだろう。

GNU timeは、それぞれのディストリビューションのパッケージ管理ソフトからインストールする。

●Debian/Ubuntuの場合

apt-get install time

 

●RHEL系の場合

yum install time

後は、以下のようにコマンドを実行する事でコマンドの実行時間を計測、その内容をログに書き出す事ができる。

/usr/bin/time -ao 計測時間を出力するファイル 実行するコマンド

20150725_000002

[root@test-centos7 ~]# time cp -fv aaa bbb1 > time

real    0m0.005s
user    0m0.002s
sys     0m0.003s
[root@test-centos7 ~]# cat time
`aaa' -> `bbb1'
[root@test-centos7 ~]# /usr/bin/time -ao time cp -fv aaa bbb2 > time
[root@test-centos7 ~]# cat time
`aaa' -> `bbb2'
0.00user 0.00system 0:00.00elapsed 66%CPU (0avgtext+0avgdata 1172maxresident)k
0inputs+8outputs (0major+351minor)pagefaults 0swaps

 

「elapsed」という箇所が実行に要した時間となる。

Linuxコンテナー最新ツール Dockerを支える技術(日経BP Next ICT選書) 日経Linux技術解説書 Linuxコンテナー最新ツール Dockerを支える技術(日経BP Next ICT選書) 日経Linux技術解説書

xargsコマンドで覚えておきたい使い方・組み合わせ7個

$
0
0

LinuxやUNIXで、コマンドちょっと組み合わせて利用する際、非常に役に立つxargsコマンド。
今回は、このxargsコマンドで覚えておきたい使い方・組み合わせについて紹介する。

1.基本的な使い方

まず、そもそもこのコマンドはどういう使い方をするのか。
基本的には、以下のようにパイプでつなぐことで前のコマンド(コマンド1)で取得した値(標準出力)を利用してxargsで指定した別のコマンド(コマンド2)に引数として渡して実行させる事ができるコマンドだ。

コマンド1 | xargs コマンド2

20150725_000003

[root@test-centos7 ~]# find /work -type f
/work/test2.txt
/work/test.txt
/work/aaaaa.txt
/work/bbbbb.txt
/work/ccccc.txt
/work/ddddd.txt
/work/sample
/work/test.image
/work/test1
/work/test2
/work/aaaaa2.txt
/work/aaaaa3.txt
/work/ln_aaaaa2.txt
[root@test-centos7 ~]# find /work -type f | xargs ls
/work/aaaaa.txt   /work/ccccc.txt      /work/test.image  /work/test2.txt
/work/aaaaa2.txt  /work/ddddd.txt      /work/test.txt
/work/aaaaa3.txt  /work/ln_aaaaa2.txt  /work/test1
/work/bbbbb.txt   /work/sample         /work/test2

2.実行されるコマンド内容を表示させる

xargsで指定されたコマンドの実行内容を表示させるには、「-t」オプションを付与する。

コマンド1 | xargs -t コマンド2

20150725_000004

[root@test-centos7 ~]# find /work -type f | xargs ls
/work/aaaaa.txt   /work/ccccc.txt      /work/test.image  /work/test2.txt
/work/aaaaa2.txt  /work/ddddd.txt      /work/test.txt
/work/aaaaa3.txt  /work/ln_aaaaa2.txt  /work/test1
/work/bbbbb.txt   /work/sample         /work/test2
[root@test-centos7 ~]# find /work -type f | xargs -t ls
ls /work/test2.txt /work/test.txt /work/aaaaa.txt /work/bbbbb.txt /work/ccccc.txt /work/ddddd.txt /work/sample /work/test.image /work/test1 /work/test2 /work/aaaaa2.txt /work/aaaaa3.txt /work/ln_aaaaa2.txt
/work/aaaaa.txt   /work/ccccc.txt      /work/test.image  /work/test2.txt
/work/aaaaa2.txt  /work/ddddd.txt      /work/test.txt
/work/aaaaa3.txt  /work/ln_aaaaa2.txt  /work/test1
/work/bbbbb.txt   /work/sample         /work/test2

これで、xargsで実行されているコマンドがどういった形になっているかを確認することができる。

なお、この実行コマンドは標準エラー出力となっているため、実行コマンドのみ「test.cmd」、コマンドの実行結果のみ「test.lst」に出力させるといった事も可能だ。

20150726_000003

[root@test-centos7 ~]# find /work -type f | xargs -t ls
ls /work/test2.txt /work/test.txt /work/aaaaa.txt /work/bbbbb.txt /work/ccccc.txt /work/ddddd.txt /work/sample /work/test.image /work/test1 /work/test2 /work/aaaaa2.txt /work/aaaaa3.txt /work/ln_aaaaa2.txt
/work/aaaaa.txt   /work/bbbbb.txt  /work/ln_aaaaa2.txt  /work/test.txt  /work/test2.txt
/work/aaaaa2.txt  /work/ccccc.txt  /work/sample         /work/test1
/work/aaaaa3.txt  /work/ddddd.txt  /work/test.image     /work/test2
[root@test-centos7 ~]# find /work -type f | xargs -t ls > test.lst 2>test.cmd
[root@test-centos7 ~]# cat test.lst
/work/aaaaa.txt
/work/aaaaa2.txt
/work/aaaaa3.txt
/work/bbbbb.txt
/work/ccccc.txt
/work/ddddd.txt
/work/ln_aaaaa2.txt
/work/sample
/work/test.image
/work/test.txt
/work/test1
/work/test2
/work/test2.txt
[root@test-centos7 ~]# cat test.cmd
ls /work/test2.txt /work/test.txt /work/aaaaa.txt /work/bbbbb.txt /work/ccccc.txt /work/ddddd.txt /work/sample /work/test.image /work/test1 /work/test2 /work/aaaaa2.txt /work/aaaaa3.txt /work/ln_aaaaa2.txt

3.コマンドライン一行に引数をいくつ渡すか指定する

「-n」オプションを指定することで、xargsで実行するコマンド一行にいくつまで引数を渡すのか指定することができる。

コマンド1 | xargs -n 引数の数 コマンド2

20150726_000000

[root@test-centos7 ~]# find /work -type f | xargs -t ls
ls /work/test2.txt /work/test.txt /work/aaaaa.txt /work/bbbbb.txt /work/ccccc.txt /work/ddddd.txt /work/sample /work/test.image /work/test1 /work/test2 /work/aaaaa2.txt /work/aaaaa3.txt /work/ln_aaaaa2.txt
/work/aaaaa.txt   /work/ccccc.txt      /work/test.image  /work/test2.txt
/work/aaaaa2.txt  /work/ddddd.txt      /work/test.txt
/work/aaaaa3.txt  /work/ln_aaaaa2.txt  /work/test1
/work/bbbbb.txt   /work/sample         /work/test2
[root@test-centos7 ~]# find /work -type f | xargs -t -n 2 ls
ls /work/test2.txt /work/test.txt
/work/test.txt  /work/test2.txt
ls /work/aaaaa.txt /work/bbbbb.txt
/work/aaaaa.txt  /work/bbbbb.txt
ls /work/ccccc.txt /work/ddddd.txt
/work/ccccc.txt  /work/ddddd.txt
ls /work/sample /work/test.image
/work/sample  /work/test.image
ls /work/test1 /work/test2
/work/test1  /work/test2
ls /work/aaaaa2.txt /work/aaaaa3.txt
/work/aaaaa2.txt  /work/aaaaa3.txt
ls /work/ln_aaaaa2.txt
/work/ln_aaaaa2.txt

 

上記例のように、「-n」で指定しない場合はすべての引数がxargsで実行されるコマンドに渡される。
一行づつ処理を指せるならば、「-n」オプションで引数を指定してあげると良いだろう。

4.引数の値を明示的に利用する

通常、ただxargsでコマンドを指定した場合、渡された引数はそのまま処理されるが、例えばファイル名の末尾に何か文字列を付け加えたりしたい事もあるだろう。
そんなときは、「-I」オプションを使用し、コマンドで引数を明示的に使用すればいい。通常は、「{}」で引数の使用を表している。

コマンド1 | xargs -I{} コマンド2 {}

 

例えば「/work」フォルダ配下にあるファイルに対し、元のファイル名の後ろに「.bk」という文字列を付け足してコピーする場合、以下のようにする。

find /work -type f | xargs -t -I{} cp {} {}.bk

20150726_000002

[root@test-centos7 ~]# find /work -type f | xargs -t -I{} cp {} {}.bk
cp /work/test2.txt /work/test2.txt.bk
cp /work/test.txt /work/test.txt.bk
cp /work/aaaaa.txt /work/aaaaa.txt.bk
cp /work/bbbbb.txt /work/bbbbb.txt.bk
cp /work/ccccc.txt /work/ccccc.txt.bk
cp /work/ddddd.txt /work/ddddd.txt.bk
cp /work/sample /work/sample.bk
cp /work/test.image /work/test.image.bk
cp /work/test1 /work/test1.bk
cp /work/test2 /work/test2.bk
cp /work/aaaaa2.txt /work/aaaaa2.txt.bk
cp /work/aaaaa3.txt /work/aaaaa3.txt.bk
cp /work/ln_aaaaa2.txt /work/ln_aaaaa2.txt.bk

5.コマンドの実行をするかどうか質問させる

「-p」オプションを使用する事で、xargsで生成したコマンドを本当に実行するかどうかを確認させる事が出来る。

コマンド1 | xargs -p コマンド2

20150726_000009

[root@test-centos7 ~]# find /work -type f -name "*.bk" | xargs -p -n 1 rm
rm /work/test2.txt.bk ?...y
rm /work/test.txt.bk ?...y
rm /work/aaaaa.txt.bk ?...y
rm /work/bbbbb.txt.bk ?...y
rm /work/ccccc.txt.bk ?...y
rm /work/ddddd.txt.bk ?...y
rm /work/sample.bk ?...y
rm /work/test.image.bk ?...y
rm /work/test1.bk ?...y
rm /work/test2.bk ?...y
rm /work/aaaaa2.txt.bk ?...y
rm /work/aaaaa3.txt.bk ?...y
rm /work/ln_aaaaa2.txt.bk ?...y

6.複数プロセスを同時に実行させる

xargsで実行させるコマンドを、複数のプロセスを同時に立ち上げて実行させる場合、「-P」オプションを利用する。

コマンド1 | xargs -P 最大プロセス数 コマンド2

20150726_000010

7.引数の区切り文字を指定する

通常、xargsでコマンドに渡される引数はスペース区切りとなっているが、「-d」オプションを指定することでその区切り文字を変更することができる。

コマンド1 | xargs -d区切り文字 コマンド2

 

例えば、以下のようにコマンドを実行することで、カンマ区切りとして引数を渡す事ができる。

20150726_000011

[root@test-centos7 ~]# echo "a b c d e f" | xargs -t -n 1 echo
echo a
a
echo b
b
echo c
c
echo d
d
echo e
e
echo f
f
[root@test-centos7 ~]# echo "a b c,d e f" | xargs -t -n 1 -d, echo
echo a b c
a b c
echo d e f
d e f

番外編 ~findコマンドとの組み合わせ凡例~

xargsとよく組み合わせて利用されるfindコマンド。
このfindコマンドとの組み合わせで覚えておくと便利そうな判例を幾つか記述する。

特定のファイルのバックアップファイルを作成する

find PATH -type f -name 'ファイル名' | xargs -n 1 -I{} cp {} {}.bk

特定のファイルをバックアップディレクトリにコピーする

find PATH -type f -name 'ファイル名' | xargs -n 1 -I{} cp {} バックアップ先PATH

特定のファイルに対してのみgrepを行う

find PATH -type f -name 'ファイル名' | xargs -n 1 -I{} grep '検索キーワード' {}
シェルプログラミング実用テクニック シェルプログラミング実用テクニック

awkとxargs、evalを用いてcsv形式のファイルからchmod/chownを実行する

$
0
0

CSV形式で書かれているファイルにファイルPATH、オーナー、グループ、権限を書いておき、それを読みだしてワンライナーでchmod、chownを実行する方法を探していたが、とりあえず以下のようにすれば実現できることがわかった。

なお、ファイルの中身は以下のように書かれているとする。

[root@test-centos7 ~]# cat /root/test.lst
755,test,test,/work/aaaaa.txt
777,test,test,/work/aaaaa.txt.bk
666,test,test,/work/aaaaa2.txt
555,test,test,/work/aaaaa2.txt.bk
755,test,test,/work/aaaaa3.txt
775,test,test,/work/aaaaa3.txt.bk

1.chmodを実行する

CSVファイルの内容を元にchmodを実行する場合は、以下のようにコマンドを実行する。

awk -F, '{ print $1" " $4 }' /root/test.lst | xargs  -t -n 1 -d'\n' -I{} sh -c 'eval chmod {}'

20150726_000014

[root@test-centos7 ~]# awk -F, '{ print $1" " $4 }' /root/test.lst | xargs  -t -n 1 -d'\n' -I{} sh -c 'eval chmod {}'
sh -c eval chmod 755 /work/aaaaa.txt
sh -c eval chmod 777 /work/aaaaa.txt.bk
sh -c eval chmod 666 /work/aaaaa2.txt
sh -c eval chmod 555 /work/aaaaa2.txt.bk
sh -c eval chmod 755 /work/aaaaa3.txt
sh -c eval chmod 775 /work/aaaaa3.txt.bk
[root@test-centos7 ~]# ls -la /work/aaaaa*
-rwxr-xr-x. 1 test test 0  6月  6 12:14 /work/aaaaa.txt
-rwxrwxrwx. 1 test test 0  7月 26 11:28 /work/aaaaa.txt.bk
-rw-rw-rw-. 1 test test 0  7月 12 08:35 /work/aaaaa2.txt
-r-xr-xr-x. 1 test test 0  7月 26 11:28 /work/aaaaa2.txt.bk
-rwxr-xr-x. 1 test test 0  7月 11 19:31 /work/aaaaa3.txt
-rwxrwxr-x. 1 test test 0  7月 26 11:28 /work/aaaaa3.txt.bk

2.chownを実行する

同じく、CSVファイルの情報を元にchownを実行する場合は、以下のようにコマンドを実行する。

awk -F, '{ print $2":"$3" " $4 }' /root/test.lst | xargs  -t -n 1 -d'\n' -I{} sh -c 'eval chown {}'

20150726_000017

[root@test-centos7 ~]# awk -F, '{ print $2":"$3" " $4 }' /root/test.lst | xargs  -t -n 1 -d'\n' -I{} sh -c 'eval chown {}'
sh -c eval chown test:test /work/aaaaa.txt
sh -c eval chown test:test /work/aaaaa.txt.bk
sh -c eval chown root:root /work/aaaaa2.txt
sh -c eval chown apache:apache /work/aaaaa2.txt.bk
sh -c eval chown test:test /work/aaaaa3.txt
sh -c eval chown test:test /work/aaaaa3.txt.bk
[root@test-centos7 ~]# ls -la /work/aaaaa*
-rwxr-xr-x. 1 test   test   0  6月  6 12:14 /work/aaaaa.txt
-rwxrwxrwx. 1 test   test   0  7月 26 11:28 /work/aaaaa.txt.bk
-rw-rw-rw-. 1 root   root   0  7月 12 08:35 /work/aaaaa2.txt
-r-xr-xr-x. 1 apache apache 0  7月 26 11:28 /work/aaaaa2.txt.bk
-rwxr-xr-x. 1 test   test   0  7月 11 19:31 /work/aaaaa3.txt
-rwxrwxr-x. 1 test   test   0  7月 26 11:28 /work/aaaaa3.txt.bk

awkだけでも実現できそうな気もするけど…
とりあえず、当座はこれでいいかなぁ。

AWK実践入門 AWK実践入門

cpコマンドでディレクトリ構造を含めてコピーする

$
0
0

オプション無しだと、cpコマンドではディレクトリ構造ごと(サブディレクトリを含めた状態で)コピーすることはできない。
もしディレクトリ構造とセットでコピーしたい場合は、「–parents」オプションを利用すると良いだろう。

cp --parents コピー元ファイル コピー先PATH

20150729_000000

[root@test-centos7 ~]# cp /work/aaaaa.txt /bkup
[root@test-centos7 ~]# ls -la /bkup
合計 4
drwxr-xr-x.  2 root root   22  7月 29 05:49 .
drwxr-xr-x. 30 root root 4096  7月 29 05:48 ..
-rwxr-xr-x.  1 root root    0  7月 29 05:49 aaaaa.txt
[root@test-centos7 ~]# cp --parents /work/aaaaa.txt /bkup
[root@test-centos7 ~]# ls -la /bkup
合計 4
drwxr-xr-x.  3 root root   33  7月 29 05:49 .
drwxr-xr-x. 30 root root 4096  7月 29 05:48 ..
-rwxr-xr-x.  1 root root    0  7月 29 05:49 aaaaa.txt
drwxr-xr-x.  2 root root   22  7月 29 05:49 work
[root@test-centos7 ~]# ls -la /bkup/work
合計 0
drwxr-xr-x. 2 root root 22  7月 29 05:49 .
drwxr-xr-x. 3 root root 33  7月 29 05:49 ..
-rwxr-xr-x. 1 root root  0  7月 29 05:49 aaaaa.txt
すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集] すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集]

Windowsのコマンドプロンプトで日付ディレクトリを作成する

$
0
0

バックアップや既存のサーバへの設定変更時のファイル保管など、日付名のディレクトリというのは良く利用されると思う。
今回は、そんな日付ディレクトリをコマンドプロンプト上で一行で生成する。

コマンドプロンプトから日付ディレクトリをワンライナーで生成する場合は、以下のようにコマンドを実行すると良いだろう。

for /f "tokens=1-3 delims=/" %a in ("%date%") do mkdir "%a%b%c"

20150730-000001

絵で見てわかるWindowsインフラの仕組み 絵で見てわかるWindowsインフラの仕組み
Viewing all 1028 articles
Browse latest View live