今回は、前回作成した応答ファイルを利用してsysprepを実行する。
といっても、特に難しい事はしない。
クローン元のマシンで、以下のコマンドを実行すればいいだけだ。
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /quiet /unattend:C:\Untitled.xml
後は、再起動したら自動的に設定等が削除されイメージが一般化される。

今回は、前回作成した応答ファイルを利用してsysprepを実行する。
といっても、特に難しい事はしない。
クローン元のマシンで、以下のコマンドを実行すればいいだけだ。
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown /quiet /unattend:C:\Untitled.xml
後は、再起動したら自動的に設定等が削除されイメージが一般化される。
Linuxで普通にcpコマンドを利用していると、そのコピーの進捗状況がわからない事が多い。
コピーの進捗状況を調べるには、どうすればよいのだろうか?
正確な進捗状況(各ファイルごとに何%までコピーが完了したか)はわからないが、「どのファイルまではコピーが完了したか」を把握するのであれば、cpコマンドで「-v」オプションを利用することで、今どのファイルをコピーしているのかが把握出来る。
以前こちらで紹介したcvコマンドを利用することで、マシン上で実行されているcp,mvの進捗状況を確認することが出来る。
cv
「-M」オプションを付与することで、モニタモードで監視することも出来る。
cv -M
ただ、cpをフロントで実行している場合、別途ターミナルをアップする必要があるので注意。
バックグラウンドで実行させているならば、これで進捗状況を監視することが可能だ。
cpコマンドを実行する代わりに、rsyncコマンドを用いる事で、進捗状況を画面上に出力することが可能だ。
rsync -av --progress コピー元 コピー先
cpコマンドの代わりに、pvコマンドを利用することで、cpプロセス全体の進捗状況を確認することが出来る。
pv コピー元 > コピー先
cpコマンドの代わりに、vcp、gcpコマンドという、進捗状況を出力するコマンドを利用する方法もある。
vcp -Rv コピー元 コピー先
dbus-launch gcp -rv コピー元 コピー先
以前にこちらの記事でも触れたが、LinuxのCoreutilsのソースに有志の作成したパッチを当てることで、既存のcpコマンド、mvコマンドにプログレスバーの出力オプションを付け加える事も出来る。
以前、cpやmvの進捗状況を確認出来る『cv』コマンドを紹介したが、今回はそれによく似たコマンド『showspeed』を紹介する。
cvコマンドとの違いは、『showspeed』はプロセスの読み取りと書き込みの速度を確認することが出来る点だ。
今回は、CentOS 7でこのコマンドをインストール、動作をさせてみる。
まず、以下のコマンドで『showspeed』の前提パッケージをインストールする。
yum install libaio libaio-devel perl-Data-Dumper
前提となるパッケージをインストールできたら、次は『showspeed』のインストールを行う。
以下のコマンドを実行する。
git clone https://github.com/jnweiger/showspeed cd showspeed cp ./showspeed.pl /usr/bin/showspeed
これで、『showspeed』のインストールは完了した。
それでは、実際に『showspeed』を実行してみよう。
『showspeed』は、以下のようにコマンドを実行する。
showspeed 実行しているコマンド
cpコマンドで適当なファイルをコピーし、cpコマンドでの読み取り、書き込みをモニタリングした結果が以下。
[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]#
確かに、ファイルコピー時の読み取り・書き込みの確認を行う事が出来た。
あまり頻度は多くないかも知れないが、リバースプロキシとして利用しているApacheの設定を変えるときなどにWebページ上からApacheの設定を編集したいときもある。
そんな時は、今回紹介する『ApacheGUI』を入れてみてはどうだろうか。このパッケージは、httpd.confやhttpdサービスの状態などについて、WEBページから操作するJava製のツールだ。
今回は、このパッケージをCentOS 7上にインストールし、実際にApacheの設定を行ってみる事にする。
なお、OSにはすでにLAMP環境がインストール済である状態。
まずは、以下のコマンドで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を利用する設定になっている。
さて、それでは実際に『ApacheGUI』を利用してみよう。
ブラウザから、「http://サーバのIPアドレス:9999/ApacheGUI」にアクセスすると、以下のような画面が表示される。
回接続時は、『ApacheGUI』で管理するhttpdのインスタンスPATHについて設定が必要になっているので、まずhttpdはパッケージインストールかソースインストールかを選択する。
とりあえず、今回はパッケージインストールを選択する。
すると、次にパッケージインストール時の設定項目が出力される。
パッケージインストールであれば、それぞれ以下の内容で設定すると良いだろう。
設定が完了すると、『ApacheGUI』のログイン画面に移行するので、先ほど設定したログインユーザ名・パスワードを用いてログインする。
ログイン後の画面がこちら。
この画面から、各種設定画面に移動していく。
こちらは、httpd.confの設定編集画面。
もう少しGUIに特化した設定画面かと思ったが、直接エディタからhttpd.confを編集するタイプのようだ。
DocumentRoot配下のファイル編集エディタの画面。
その他、この画面上から各ログの確認を行う事ができるなど、ssh接続を制限する必要がある場合に使えるパッケージだ。
LinuxやUNIXを使う上で、ほぼ必ず利用するcpコマンド。
今回は、このcpコマンドで覚えておきたい使い方を9個紹介する。
今更言うまでもない気がするが、基本的なコマンドの実行方法は以下の通りだ。
cp コピー元ファイル コピー先PATH
ファイル単位ではなくディレクトリごとコピーする場合は、「-r」オプションを付与する。
cp -r コピー元ディレクトリ コピー先ディレクトリ
複数のファイルを個別に指定してコピーする場合は、以下のようにコマンドを実行する。
cp コピー元ファイル1 コピー元ファイル2 コピー元ファイル3 .... コピー先PATH
ファイルのコピーを行う際、コピー先PATHにもし同名のファイルが合った場合はコピーするかどうかを聞くようにしたい。
そんなときは、「-i」オプションを付与することで対応可能だ。
(最近のディストリビューションであれば、基本的にはエイリアスで設定済…のはず)
cp -i コピー元ファイル コピー先PATH
なお、このオプション無しに上書きをしない場合は、「-n」オプションを用いる。
これと似たオプションで、タイムスタンプが新しい場合のみコピーをする「-u」オプションというものも存在している。
コピー先に同名のファイルが合った場合、強制的に上書きするならば、「-f」オプションを利用する。
「-f」オプションを付けても上書きするかどうか聞かれる場合は、コマンドの頭に「\」を付け加える。
●通常時
cp -f コピー元ファイル コピー先PATH
●上書きの有無を聞かれる場合
\cp -f コピー元ファイル コピー先PATH
cpコマンドでファイルをコピーする際、上書き時にバックアップを取得させる場合は、「–backup」オプションを付与する。
バックアップしたファイルは、「ファイル名~」として作成される。
cp --backup コピー元ファイル コピー先PATH
バックアップしたファイルの後ろにつく記号は、「–suffix」で設定することができる。
以下のように指定すると、バックアップファイル名は「ファイル名_YYYYMMDD」となる。
cp --backup --suffix=_$(date +%Y%m%d) コピー元ファイル コピー先PATH
番号付きのバックアップを取得することもできる。
cp --backup=numbered コピー元ファイル コピー先PATH
権限やオーナー、グループを保持したままコピーをする場合は、「-p」オプションを指定する。
cp -p コピー元ファイル コピー先PATH
cpコマンドで、シンボリックリンク・ハードリンクを作成することも出来る。
シンボリックリンクを作成する場合は「-s」を、ハードリンクを作成する場合は「-l」オプションを付与する。
●シンボリックリンクの作成
cp -s コピー元ファイル コピー先PATH
●ハードリンクの作成
cp -l コピー元ファイル コピー先PATH
「-v」を付与することで、コピーについて詳細な内容を出力する事ができる。
cp -v コピー元ファイル コピー先PATH
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" ] }
topコマンドといえば、よくLinuxのパフォーマンス状態をモニタリングするために利用されているコマンドだ。
今回は、そんなtopコマンドで覚えておきたい使い方14個を紹介する。
なお、検証で使用したtopコマンドはCentOS 7 で利用している「procps-ng version 3.3.9」のものとなっている。
基本的には、オプション無しで以下のようにコマンドを実行する。
top
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行分とそれ以降を分けて説明する。
top - 07:21:06 up 4 days, 17 min, 4 users, load average: 0.00, 0.00, 0.00
uptimeと同じ内容が出力される。
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
CPUの状態を出力する。
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
7行目以降は、実行中の各プロセスの状態を表している。
出力されるS(プロセスの状態)のステータスの種類は、以下のようになっている。
topコマンドは通常3秒毎に表示を更新している。
この間隔を調整する場合は、topコマンド実行時に「-d」オプションで指定してやるといいだろう。
top -d 更新間隔(秒)
なお、topコマンド実行中でもこの更新間隔は指定出来る。
実行中の画面上で「d」もしくは「s」キーを押下すると、「Change delay from 3.0 to」という表記が出るので、そこで秒数を指定すればいい。
実行されているコマンドの内容をフルパスで出力させる場合は、「-c」オプションを付与する。
top -c
なお、topコマンド実行中でも切り替えは可能。
実行中の画面上で「c」キーを押下すると、以下のように画面が切り替わる。
<切り替え前>
<切り替え後>
「-u」もしくは「-U」オプションを指定することで、表示させるプロセスの実行ユーザを指定することが出来る。
top -u ユーザ名
もちろん、topコマンド実行中でも切り替えは可能。
実行中の画面上で「u」キーを押下すると、「Which user (blank for all)」という表示が出るので、そこに監視したいユーザ名を入力する。
<切り替え前>
<切り替え後>
表示されているプロセスをソートする場合は、ソートする内容に応じて、実行画面上で以下のようにキーを押下する。
CPU順 | Shift + p |
メモリー順 | Shift + m |
実行時間順 | Shift + t |
その他、CentOS 7でインストールされているtopコマンドでは、「Shift + <>」でソートする列を切り替える事が可能だ。
なお、CentOS 6等の場合は、「Shift + O」でソート業を切り替えることが出来る。
これは、最近のバージョンのものに追加された機能のようだが、top画面実行中に「Shift + V」を実行することで、プロセスをツリー状に表示することが出来る。
(CentOS 6のtopコマンドでは利用出来なかった)
「-c」と組み合わせて利用すると、より詳細な情報がわかる。
top画面実行中に「z」キーを押下することで、画面をハイライト表示させることが出来る。
(無論、htopほどキレイに表示されるわけではないが)
「Shift + z」キーを利用すると、より詳細な設定を行う事が可能だ。
topコマンド実行中に「k」キーを実行することで、指定したPIDのプロセスをkillすることが出来る。
「PID to signal/kill」という表示がされるので、そこにkillしたいプロセスIDを入力する。
topコマンド実行中に「r」キーを実行することで、指定したPIDのnice値を変更することが出来る。
「PID to renice」という表示がされるので、そこにreniceをしたいプロセスIDを入力、次の画面で変更する値を入力する。
topコマンド実行時に「-n」オプションを実行することで、topコマンドの画面更新回数を制限することが出来る。
top -n 画面更新回数
topコマンド実行時に「-b」オプションを指定することで、コマンドをbatchモードで実行させることが出来る。
topコマンドの出力結果をテキストファイルに出力する際などに有効だろう。
top -b
topコマンド実行中に「1」キーを押下することで、CPU全体でサマリーされていた使用率をコア数ごとに表示させることができる。
topコマンド実行中に「Shift + A」を押下することで、プロセスの実行ステータスを複数ウィンドウに切り分ける事ができる。
プロセスウィンドウの操作の切り替えは、「a」キーを押下すると行える。
topコマンドのヘッダは、コマンド実行中に表示/非表示を切り替える事が出来る。
1行目 | l |
2-3行目 | t |
4-5行目 | m |
ヘッダ全部消すと、こんな感じになる。
というわけで、今回はtopコマンドで覚えていると便利な使い方を紹介した。
まだまだあまり知られていない使い方がたくさんあると思うので、把握でき次第追記していこう。
仕事で、データベースのバックアップスクリプトの実行時間、負荷の関係からPostgreSQLでデータベースごとのファイル容量を調べる事があったので、念のため残しておく。
PostgreSQLでは、データベースごとの容量を調べる方法として幾つかの方法が用意されている。
一番カンタンな確認の仕方が、psqlで用意されている「\l+」コマンドの実行だろう。
通常、「\l」でデータベースの一覧が表示されるのだが、これに+を付け足すとデータベースサイズなどの情報も出力させることが出来る。
以下のような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;
前回、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;
これで、データベースごとの容量を確認することが出来る。
LinuxやUNIXにおいて、ディスクの空き容量を確認するのにまず利用されるdfコマンド。
今回は、このdfコマンドで覚えていると便利な使い方を紹介する。
基本的な使い方だが、以下のように引数無しで実行することでマウントしているファイルシステムの全体の容量や使用している容量、空き容量について確認することが出来る。
df
[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
「-h」オプションを付与することにより、容量表示を人間が見やすいようにしてくれる。
df -h
[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」を指定して表示させることも可能だ。
「-T」オプションを付与すると、システムタイプを表示させることが出来る。
df -T
[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
普通に引数としてマウントポイントやデバイスを指定する事で、関連する情報が出力される。
df マウントポイント(or デバイスファイル)
[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
「-t」オプションを指定することで、コマンド実行により表示されるシステムタイプを制限することが可能となっている。
df -t システムタイプ
[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
フォルダごとの容量を確認したい時に役立つコマンドといえば、duコマンドだ。
今回は、そんなduコマンドで覚えておきたい使い方について紹介する。
基本的には、以下のようにコマンドを実行することで、カレントディレクトリ配下の各ディレクトリのブロックサイズを表示してくれる。
du
[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
ここで注意したいのが、出力されるのはあくまでも「ブロックサイズ」、それもKB単位だということ。
フォルダ配下のファイルサイズの合計ではないので注意。
さて、先ほど説明したが、duコマンドでは標準だとブロックサイズで容量が表示される。
大体のファイルシステムだとブロックサイズの最小単位を4096バイト(4.0KB)としているので、たとえ1バイトのファイルしか使っていなくても4.0KBの領域を使っている事になってしまう。
これだと正確なフォルダの容量を確認出来ないので、正確な値を知りたい場合は、出力される容量のサイズをバイト単位にする必要がある。
バイト単位での出力には、「-b」オプションを付与すれば良い。
du -b
[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 .
オプション無しの場合、KB単位(かつブロックサイズ)での表示となるが、この表示だと非常に分かりにくい。
「-h」オプションを付与することで、人間が読みやすい単位で表示させる事が出来る。
du -h
[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
[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 .
「-c」オプションを付与すると、出力結果の末尾にフォルダの合計サイズを出力させることができる。
du -c
[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
[root@dctest01 work]# pwd /work [root@dctest01 work]# du -s 2540 .
duコマンドといえばフォルダ単位での容量を出力するコマンドなのだが、実はファイル単位でも結果を出力することが可能だ。
それには、「-a」オプションを付与する。
du -a
ただ、ディレクトリの除外が出来ない事を考えると、容量の大きいファイルを探す場合はfindコマンドを使う方が良いだろう。
duコマンドは、標準だと指定したPATHの配下にある全てのディレクトリを表示してしまう。
これを1階層のみ表示させるといった指定をする場合は、「-d」オプションを利用する。
du -d 表示させる階層
[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 .
「–time」オプションを付与することで、ディレクトリの更新日時を表示させることも出来る。
du --time
[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やUNIXでパフォーマンスを監視する際にはお約束とも言えるvmstatコマンド。
どの現場でもよく使われるものだが、今回はこのコマンドで覚えておきたい使い方を紹介する。
なお、この内容はCentOS 7にてバンドルされている「procps-ng 3.3.9」のバージョンのものを用いている。
オプション無しで実行すると、以下のように現時点でのパフォーマンス情報が出力される。
vmstat
[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
それぞれの表示の内容は、以下のようになっている。
r(実行待ちプロセス数)がある場合、CPUの処理が追いついていないか、そのプロセスを実行しているプログラム自体の問題によって実行順が回ってきていないプロセスが存在する事になる。
b(処理停止プロセス数)がある場合、例えばディスクやネットワークのIO待ちをしていたが、プログラムの実行順番が来てしまったプロセスがあることになる。
どちらにしても、このプロセスの実行者からすれば処理が遅く感じられる可能性が高いので、少し注意した方がいい値。
なお、一般的に動作時間が長くなるにつれて、このcache容量が大きくなっていく傾向があるが、これはLinuxで動作を早く行わせるためにディスクなどから事前にデータを読み込んでいるだけなので、あまり気にしなくて良い。
swpdの値も、後述するsi、soが頻繁に増減している状態でなければパフォーマンスにそこまで影響があるわけではない。
もしもこの項目が頻繁に動いているようであれば、パフォーマンスに悪影響を与えている可能性が高いので注意。基本的には、どちらの値も可能な限り0である状態がいい。
(swpdの容量が多くても、この項目があまり変動していないようであれば影響が大きくない)
複数のHDDがある場合でも、その合計の値で出力される(HDDごとに値が出力されない)ので注意。
デバイス・パーティションごとのIO値を確認する場合は、後述する「-d」や「-p」オプションで確認すると良いだろう。
引数として間隔(秒単位)を指定することで、その間隔ごとにパフォーマンス情報を出力させることができる。
vmstat 実行間隔(秒)
この実行間隔を指定してコマンドを実行すると、出力結果にヘッダーが定期的(コマンド実行時のウィンドウサイズによって行数が変動する)に挟まれてしまう。
邪魔であれば、「-n」オプションを付与することでヘッダーを最初の1回(実行時に最初に挿入される分)のみに抑える事ができる。
vmstat -n 実行回数
なお、実行回数の後ろに更に数字を引数として与える事で、実行回数も指定することができる。
vmstat 実行間隔(秒) 実行回数
「-a」オプションを付与することで、メモリキャッシュのアクティブ(利用中で、開放できない領域)/非アクティブ(最後に利用されてから一定時間が経過したため、すぐに廃棄できる領域)の内訳を確認することができる。
vmstat -a
[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」がかわりに表示されている。
activeのメモリはすぐには利用できないので、free + inactの値が利用可能なメモリ容量だと考えるといいだろう。
「-t」オプションを付与することで、出力されるパフォーマンス情報にタイムスタンプを付与することができる。
vmstat -t
[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
通常、vmstatで表示される容量の単位はKB(キロバイト)となっているのだが、「-S」オプションでk(キロバイト)、m(メガバイト)を切り替える事もできる。
vmstat -S (k or m)
[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
「-s」オプションを付与すると、各種情報をその詳細な名称とともにリスト形式で出力させることができる。
vmstat -s
[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
「-m」オプションを使用することで、メモリのslabの(slabinfo)情報について出力させることができる。
vmstat -m
[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
vmstatでは、「-d」オプションでデバイスごとの統計情報を出力させることができる。
vmstat -d
[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
それぞれの項目の意味を、以下に記述する。
この項目の値は起動時からの計測なので、リアルタイムでの性能計測には不向きなので注意。
残念ながら各デバイスごとに出力を絞る機能はついていないため、必要であればgrepと組み合わせると良いだろう。
vmstat -nd 実行間隔(秒) | grep -e ^disk- -e デバイス名
なお、「-D」オプションを使用することで、全てのデバイスを統計してのステータスを表示させることもできる。
vmstat -D
[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 対象パーティション(デバイスファイル)
[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
それぞれの項目の意味は以下。
パフォーマンス情報を出力させる際、ちょっと見にくいなと思ったら、「-w」オプションで横に広く表示させる事ができる。
vmstat -w
[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コマンド。
以外と、普通に実行するのと「-F」でのリアルタイムでのログ監視以外はあまり知られてないのではなかろうか。
今回は、そんなtailコマンドで覚えているとちょっと役に立つ使い方を紹介する。
基本的には、以下のようにコマンドを実行することで指定したファイルの末尾から行(デフォルトでは10行)を抽出して表示してくれる。
tail ファイルPATH
[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.
tailコマンドでデフォルトで表示される行数は10行だが、それを指定することができる。
tail -行数 ファイルPATH
[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
これはよく利用される機能だと思う。
「-F(-fでも動作的には同じ)」を指定することで、ファイルに追記されると同時にコンソール上でも表示してくれる。
tail -F ファイルPATH
特定の文字列を含む行のみを出力させたい場合は、grepと組み合わせて利用すると良いだろう。
tail -F ファイルPATH | grep 抽出条件
なお、特定のプロセスが終了した場合、監視を終了させることもできる。
tail -F ファイルPATH --pid=対象のプロセスのpid
tailコマンドでは、複数のファイルを指定することでそれらを同時に表示させることができる。
tail ファイルPATH1 ファイルPATH2 ...
「-F」と組み合わせて使用することもできる。
その場合、追記があった場合は以下のように出力される。
同じファイルを見ているかのようにする(ヘッダーにファイル名を出力させないようにする)場合は、「-q」オプションと組み合わせて使用すると良いだろう。
tail -Fq ファイルPATH1 ファイルPATH2 ...
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などでプロセスをファイルがつかんでいなければ、これを疑うのが良いだろう。
以前、ソースからインストールしたパッケージの管理ツール『porg』を紹介したが、今回はこれの前身である『paco』から『porg』へのパッケージの管理情報の移行手順について記述していく。
まず、すでに環境内にはpacoがインストール済で、管理しているパッケージがある状態とする。
まずは、事前にporgをインストールする必要がある。
インストール手順についてはこちらを参照してもらいたい。
porgのインストール完了後、以下のコマンドを実行することでpacoのパッケージ情報をporgに移行させる。
paco2porg
[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
[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: そのようなファイルやディレクトリはありません
コマンドの実行時間を計測する際によく使用されるtimeコマンドだが、これはbashの組み込みコマンドのため、外部ファイルへの書き出しができない。
こうなると、nohupなどでコマンドの実行時間をログに記録させて放置したくても、ファイルに書き出せないため放置することが難しくなる。
そんな時は、bashの組み込みコマンドとしてのtimeではなく、GNU timeを利用するといいだろう。
GNU timeは、それぞれのディストリビューションのパッケージ管理ソフトからインストールする。
●Debian/Ubuntuの場合
apt-get install time
●RHEL系の場合
yum install time
後は、以下のようにコマンドを実行する事でコマンドの実行時間を計測、その内容をログに書き出す事ができる。
/usr/bin/time -ao 計測時間を出力するファイル 実行するコマンド
[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やUNIXで、コマンドちょっと組み合わせて利用する際、非常に役に立つxargsコマンド。
今回は、このxargsコマンドで覚えておきたい使い方・組み合わせについて紹介する。
まず、そもそもこのコマンドはどういう使い方をするのか。
基本的には、以下のようにパイプでつなぐことで前のコマンド(コマンド1)で取得した値(標準出力)を利用してxargsで指定した別のコマンド(コマンド2)に引数として渡して実行させる事ができるコマンドだ。
コマンド1 | xargs コマンド2
[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
xargsで指定されたコマンドの実行内容を表示させるには、「-t」オプションを付与する。
コマンド1 | xargs -t コマンド2
[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」に出力させるといった事も可能だ。
[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
「-n」オプションを指定することで、xargsで実行するコマンド一行にいくつまで引数を渡すのか指定することができる。
コマンド1 | xargs -n 引数の数 コマンド2
[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」オプションで引数を指定してあげると良いだろう。
通常、ただxargsでコマンドを指定した場合、渡された引数はそのまま処理されるが、例えばファイル名の末尾に何か文字列を付け加えたりしたい事もあるだろう。
そんなときは、「-I」オプションを使用し、コマンドで引数を明示的に使用すればいい。通常は、「{}」で引数の使用を表している。
コマンド1 | xargs -I{} コマンド2 {}
例えば「/work」フォルダ配下にあるファイルに対し、元のファイル名の後ろに「.bk」という文字列を付け足してコピーする場合、以下のようにする。
find /work -type f | xargs -t -I{} cp {} {}.bk
[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
「-p」オプションを使用する事で、xargsで生成したコマンドを本当に実行するかどうかを確認させる事が出来る。
コマンド1 | xargs -p コマンド2
[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
xargsで実行させるコマンドを、複数のプロセスを同時に立ち上げて実行させる場合、「-P」オプションを利用する。
コマンド1 | xargs -P 最大プロセス数 コマンド2
通常、xargsでコマンドに渡される引数はスペース区切りとなっているが、「-d」オプションを指定することでその区切り文字を変更することができる。
コマンド1 | xargs -d区切り文字 コマンド2
例えば、以下のようにコマンドを実行することで、カンマ区切りとして引数を渡す事ができる。
[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
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
find PATH -type f -name 'ファイル名' | xargs -n 1 -I{} grep '検索キーワード' {}
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
CSVファイルの内容を元にchmodを実行する場合は、以下のようにコマンドを実行する。
awk -F, '{ print $1" " $4 }' /root/test.lst | xargs -t -n 1 -d'\n' -I{} sh -c 'eval chmod {}'
[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
同じく、CSVファイルの情報を元にchownを実行する場合は、以下のようにコマンドを実行する。
awk -F, '{ print $2":"$3" " $4 }' /root/test.lst | xargs -t -n 1 -d'\n' -I{} sh -c 'eval chown {}'
[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だけでも実現できそうな気もするけど…
とりあえず、当座はこれでいいかなぁ。
オプション無しだと、cpコマンドではディレクトリ構造ごと(サブディレクトリを含めた状態で)コピーすることはできない。
もしディレクトリ構造とセットでコピーしたい場合は、「–parents」オプションを利用すると良いだろう。
cp --parents コピー元ファイル コピー先PATH
[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
バックアップや既存のサーバへの設定変更時のファイル保管など、日付名のディレクトリというのは良く利用されると思う。
今回は、そんな日付ディレクトリをコマンドプロンプト上で一行で生成する。
コマンドプロンプトから日付ディレクトリをワンライナーで生成する場合は、以下のようにコマンドを実行すると良いだろう。
for /f "tokens=1-3 delims=/" %a in ("%date%") do mkdir "%a%b%c"