/home/fff/の下をすべて圧縮したいが、/home/fff/xxxと/home/fff/yyyは除いて実行したい場合は以下のようにする。
$ tar cfvz fff.tar.gz
ls -1d /home/fff/* | egrep -v '/home/fff/(xxx|yyy)'
cfvzは順にアーカイブ作成、ファイル、冗長出力、gzipを意味する。cfvjとすればbz2を作成する。
/home/fff/の下をすべて圧縮したいが、/home/fff/xxxと/home/fff/yyyは除いて実行したい場合は以下のようにする。
$ tar cfvz fff.tar.gz
ls -1d /home/fff/* | egrep -v '/home/fff/(xxx|yyy)'
cfvzは順にアーカイブ作成、ファイル、冗長出力、gzipを意味する。cfvjとすればbz2を作成する。
このイベントを受けた段階では取得できないです。そこで考えられる対策は以下。
それにしてもなぜurlを渡す仕様にしなかったのか不思議だ。
/etc/sudoersを変更する。以下コマンドを実行する。
$ sudo visudo
ここで以下のように変更する。
変更前
%admin ALL=(ALL) ALL
変更後
%admin ALL=(ALL) NOPASSWD:ALL
これはadminグループに属しているユーザが、すべてのユーザとして、すべてのホストでコマンドをパスワードなしで実行できることを示す。デフォルトではインストール時に作成したアカウントはadminグループに属している。
/etc/fstabはハードディスクなどのデバイスとディレクトリとのマウント情報を記述するファイル。システム起動時に読み込まれ、このファイルの記述に基づいてマウントされる。よってこのファイルがおかしいとシステムがおかしくなる。
1行が1つのエントリになる。1エントリは6つのフィールドで構成される。各フィールドの詳細は左から順に以下のようになる。
マウントするデバイスやリモートファイルシステムを記述する。ここではハードディスクの場合を考える。
/dev/sda1
のように指定する。
デバイスを直接指定すると、ハードディスクの物理的構成が変わったときに、その変更に追従できなくなる。そこでハードディスクのボリュームラベルを指定すれば、この様な問題を回避できる。以下のように指定する。
LABEL=abc
現在のボリュームラベルはe2labelコマンドで確認できる。
# e2label /dev/sda1
UUIDは世界で常に一意になるID。これを指定すれば、ラベルを指定するよりもさらに一意性が高まる。以下のように指定する。
UUID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
現在のUUIDを調べるには以下のようにおこなう。
# dumpe2fs /dev/hda1|grep -i uuid
UUIDを設定するには、tune2fsコマンドを使う。UUIDはuuidgenコマンドを使って作成できる。
マウントするディレクトリを指定する。
ファイルシステムのタイプを指定する。通常のハードディスクの場合以下のようなものがある。
オプションを指定する。複数指定する場合はコンマで区切る。このオプションには一般オプションと第三フィールドで指定したファイルシステム専用のオプションを記述できる。
ext2はスーパーブロックにデフォルトオプションが記述してあり、ここでなにも書かなければそれが使われる。スーパーブロックの情報を見るにはdump2fsを使う。
詳細は省略。
dumpコマンドが使う。通常の場合、バックアップの対照とする場合1にする。
ブート時fsckが実行される必要があった場合参照される。0だとfsckしない。それ以外は1から順番に行われる。通常ルートファイルシステムを1とするようだ。(詳細不明)
perlやphpにあるpack,unpack関数はシリアライズとデシリアライズを行う関数です。シリアライズとは数値や文字列をバイナリ表現にすることで、デシリアライズはその逆です。シリアライズしたデータはネットワークに送ったり、保存したりしやすくなります。しかしシリアライズには常にいろいろな問題が付きまといます。
文字列をpackするには常に長さを固定して行います。以下の例は長さ10バイトでpackします。
$str = "abcd";
$b = pack("a10", $str);
“a10″のaは文字列を表し、10は長さを指定します。$strが10バイトより短ければ、残りの部分はnullでうめられます。”a10″の代わりに”A10″とすればスペースで埋められます。
文字列をunpackする。
$str = "abcd";
$b = pack("a10", $str);
$str2 = unpack("a10", $b);
上の例のように、packやunpackの最初の引数はどのようにシリアライズやデシリアライズするのかを指定します。しやしややこしいのは、この引数はpackとunpackで対照的でなく、しかもperlとPHPで挙動が違うことです。その上PHPにはまともなマニュアルがないのでここではperlを中心に考えます。上記の例だと$str2にはnullが6ついていて、$strと同じではありません。
そこでこの第一引数である型指定について、文字列に関してまとめると次のようになります。
packの”a10″ | : | 10バイトとってくる。残りはnullで埋める |
packの”A10″ | : | 10バイトとってくる。残りはスペースで埋める |
packの”Z10″ | : | “a10″と同じ |
unpackの”a10″ | : | 10バイトそのままとってくる。 |
unpackの”A10″ | : | 10バイトとってきてnullやスペースで埋まってるものを取り除く |
unpackの”Z10″ | : | 10バイトとってきて最初のnull以降を取り除く |
よって以下のようにすればいいはず。
$str = "abcd";
$b = pack("a10", $str);
$str2 = unpack("A10", $b);
しかしこれだと、以下のようにうまくいかなくなる場合もある。
$str = "abcd ";
$b = pack("a10", $str);
$str2 = unpack("A10", $b);
aやAやZはあんまり使わない方がいい?
つづく
vmwareのゲストOSの優先度は固定ではなく、ゲストOSの状態に応じて変えることができる。状態にはgrabbedとungrabbedの2種類あり、grabbedはゲストOS内でマウスが動くような状態、ungrabbedはそうじゃない状態のこと。
これは.vmxファイルで指定でき、通常は、あるいは指定が無いときは以下のようになっている。
priority.grabbed = "normal"
priority.ungrabbed = "normal"
これだとどちらの場合もプロセスの優先度は「通常」になる。ここで指定できる値は以下の3種類がある。
“idle” : 優先順位が低い
“normal” : 通常
“high” : 優先順位が高い
2つのゲストOSを同時に動かすとき、どちらの設定もnormalだと、動かすのがきつい場合、以下のように設定しておけば少しは楽になる。
priority.grabbed = "normal"
priority.ungrabbed = "idle"
こうすれば優先度が「通常」になるのは常にどちらか1つになる。
また以下のようにすれば、常に高い優先度で動かすことになる。
priority.grabbed = "high"
priority.ungrabbed = "high"
WEBサーバなどを動かしている場合は、このようにしておけば、ホストOSが忙しくなっても応答が遅くなりにくくなる。
実際に優先度を確認するには、タスクマネージャを起動し、[表示]→[列の選択]から[基本優先度]がチェックされているか確認し、vmware-vmx.exeの基本優先度を確認すればいい。
headコマンドはデフォルトでファイルや標準入力の最初の10行を表示する。
tailコマンドは最後の10行を表示する。
どちらも-nオプションを使えばこの10を任意の値に変更できる。そこでこの2つのコマンドを使えば、任意の行または任意の連続した範囲の行を出力できる。
あるコマンドの3行目を出力する。
$ command | head -n 3 | tail -n 1
あるコマンドの5~7行目を出力する。
$ command | head -n 7 | tail -n 3
Win32のTabControlにフォーカスを設定しない方法。
標準ではタブをクッリクするとフォーカスが設定されて、フォーカスレクトの四角が表示される。
タブコントロールのウインドウスタイルTCS_FOCUSNEVERを指定すればフォーカスが設定されないと思ったのだが、うまくいかなかった。フォーカスレクトが表示されてしまう。
そこで次に考えられるのがオーナードローにする方法だが、これだと全部自分で書かなければならなくなるのでやりたくない。
そこで、フック機能をつかって実現することができた。
SetWindowsHookExでWH_CBTを指定すれば、コールバック関数がHCBT_SETFOCUSで呼ばれる。ここで1を返せば、フォーカスをさせないことができる。
よって具体的な実装方法は以下のようになる。
コードの断片は以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
int CNofocustabDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; gHook = SetWindowsHookEx(WH_CBT, cbtHook, NULL, GetCurrentThreadId()); return 0; } void CNofocustabDlg::OnDestroy() { CDialog::OnDestroy(); UnhookWindowsHookEx(gHook); } LRESULT CALLBACK cbtHook(int nCode, WPARAM wParam, LPARAM lParam) { if ( nCode < 0 ) return CallNextHookEx(gHook, nCode, wParam, lParam); switch( nCode ) { case HCBT_SETFOCUS: { return ghTab != NULL && ghTab==(HWND)wParam; } break; } return CallNextHookEx(gHook, nCode, wParam, lParam); } |
phpMyAdminはMySQLをブラウザからいろいろできるツール。便利ですがインストールでいつもはまるのでインストールの方法を書いておきます。
なぜインストールではまることが多いかというと、クッキーが悪さをするからです。以下の手順の前にクッキーを削除してください。
1、phpMyAdminroot/configディレクトリがある場合は削除する。
2、phpMyAdminroot/config.inc.phpをつくり以下のようにする。MySQLServerRootPasswordの部分をMySQLのrootのパスに変える。
1 2 3 4 5 6 |
<?php $i = 0; $i++; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'MySQLServerRootPassword'; ?> |