Windows OSの最近のブログ記事

mklink コマンド (vista 以降)

いつの間にこんなコマンドが実装されてたんだろ?
fsutil hardlink create ... とかやらずにすむようになって少しありがたい。



C:>mklink /?
シンボリック リンクを作成します。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

    /D          ディレクトリのシンボリック リンクを作成します。既定では、
                ファイルのシンボリック リンクが作成されます。
    /H          シンボリック リンクではなく、ハード リンクを作成します。
    /J          ディレクトリ ジャンクションを作成します。
    リンク      新しいシンボリック リンク名を指定します。
    ターゲット  新しいリンクが参照するパス (相対または絶対)
                を指定します。
ちなみに msys の ln の usage は以下のとおり。

C:>ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
  or:  ln [OPTION]... TARGET                  (2nd form)
  or:  ln [OPTION]... TARGET... DIRECTORY     (3rd form)
  or:  ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
When creating hard links, each TARGET must exist.

Mandatory arguments to long options are mandatory for short options too.
      --backup[=CONTROL]      make a backup of each existing destination file
  -b                          like --backup but does not accept an argument
  -d, -F, --directory         allow the superuser to attempt to hard link
                                directories (note: will probably fail due to
                                system restrictions, even for the superuser)
  -f, --force                 remove existing destination files
  -n, --no-dereference        treat destination that is a symlink to a
                                directory as if it were a normal file
  -i, --interactive           prompt whether to remove destinations
  -s, --symbolic              make symbolic links instead of hard links
  -S, --suffix=SUFFIX         override the usual backup suffix
  -t, --target-directory=DIRECTORY  specify the DIRECTORY in which to create
                                the links
  -T, --no-target-directory   treat LINK_NAME as a normal file
  -v, --verbose               print name of each file before linking
      --disable-exe-magic     disable the cygwin magic that appends .exe
      --help     display this help and exit
      --version  output version information and exit

The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable.  Here are the values:

  none, off       never make backups (even if --backup is given)
  numbered, t     make numbered backups
  existing, nil   numbered if numbered backups exist, simple otherwise
  simple, never   always make simple backups

Report bugs to <bug-coreutils@gnu.org>.

eclipse + qt4.5

Vista SP2 にインストール。

用意したもの、以下のとおり。はっきりいってよくわかっていない。
eclipse-cpp-ganymede-SR2-win32.zip ... (1)
qt-sdk-win-opensource-2009.02.1.exe ...(2)
qt-eclipse-integration-win32-1.5.1.exe ... (3)

次も一応ダウンロードだけしといた。
qt-win-opensource-4.5.1-mingw.exe ... (4)
qt-creator-win-opensource-1.1.1.exe ... (5)

(1) を展開。 c:\opt\eclipse\ に置く。
このディレクトリにはほかのバージョンの eclipse も置かれているので
実行ファイル(exlipse.exe)の位置は"C:\opt\eclipse\eclipse\eclipse.exe"

(2) を実行。 c:\opt\Qt\2009.02 にインストール。
C:\Program files\ 以下にインストールするのがいいんだろうけどなんとなく変えてみた。

(3) を実行。 C:\opt\Trolltech\Eclipse にインストール。
Eclipse のインストレーションは C:\opt\eclipse\eclipse
MinGW のインストレーションは C:\opt\Qt\2009.02\mingw\bin
をそれぞれ指定。

(4),(5) は今日は使わなかった。

Eclipse を起動。
パスを追加する。メニュー(Window) (Preference) [QT]
Bin Path: C:\opt\Qt\2009.02\qt\bin
Include Path: C:\opt\Qt\2009.02\qt\include

で、コンパイルはできるけどデバッグと実行ができない。
なにが足らないんだろ。。。

--- 1時間後、
パス(C:\opt\Qt\2009.02\qt\bin)を通したらエクスプローラから直接実行はできた。
でもまだデバッグできない。

--- さらに1時間後、
http://lists.trolltech.com/qt-interest/2008-06/msg00543.html
を見つけてプロパティをいじる。
[ Debugger Tab - Main Tab ]のデバッガのパス変更と、
C:\opt\Qt\2009.02\mingw\bin\gdb.exe
[ Debugger Tab - Shared Libraries Tab ]のライブラリの追加。
C:\opt\Qt\2009.02\lib
で何とか動いたみたい。

DOS窓表示のレジストリ

ずいぶん以前からウィンドウズをインストールするたびに追加するレジストリ。
Vista でも有効だった。

 HKEY_CLASSES_ROOT$Folder$shell$shell.reg 
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Folder\shell\shell] @="コマンドシェル(&S)" [HKEY_CLASSES_ROOT\Folder\shell\shell\command] @="cmd.exe /k cd \"%L\""

Vista に apache2をインストールした後php5をインストールする。
このとき欲張って Extentions をすべて指定したりしないこと。

データベース関係をはじめとした DLL が足りないので起動できなくなる。
自分が使う拡張だけに絞ること。

PEARも指定するとうまくいかない。

--- このようなメッセージがいっぱい出てくる ---
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\opt\\PHP\\ext\\php_exif.dll' - PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\opt\\PHP\\ext\\php_fdf.dll' - PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\opt\\PHP\\ext\\php_interbase.dll' -
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\opt\\PHP\\ext\\php_mcrypt.dll' - PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\opt\\PHP\\ext\\php_mhash.dll' -
...
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
Cannot find module (TCP-MIB): At line 0 in (none)
...
PHP Notice: Constant XML_ELEMENT_NODE already defined in Unknown on line 0
PHP Notice: Constant XML_ATTRIBUTE_NODE already defined in Unknown on line 0
PHP Notice: Constant XML_TEXT_NODE already defined in Unknown on line 0
...

インストール時に指定しなかった拡張は php.ini の最後のほうでコメントアウトされているので
必要になったときにコメントをはずせばいい。

apache は Skype に注意

Vista にいろいろとアプリをインストールしていて嵌ったポイント

skype をインストールした後に apache 2.2 をインストールしようとすると失敗する。
なんと skype が 80番ポートを握ってしまうのが原因。
普通のユーザーならHTTPサーバーなど起てないし80なら企業やホテルの防火壁でも
開いていることが多いだろうから便利なのだろうけど。ちょっと酷いんじゃない。

参考ページ: http://g2s.livedoor.biz/archives/51175437.html?1244254368

C:¥>fsutil
---- サポートされるコマンド ----

behavior ファイル システムの挙動の制御
dirty ボリュームの dirty ビットの管理
file ファイルに固有のコマンド
fsinfo ファイル システム情報
hardlink ハードリンクの管理
objectid オブジェクト ID の管理
quota クォータの管理
reparsepoint 再解析ポイントの管理
sparse スパース ファイルの制御
usn USN の管理
volume ボリュームの管理

C:¥>fsutil behavior
---- サポートされる BEHAVIOR コマンド ----

query ファイル システムの挙動パラメータの照会
set ファイル システムの挙動パラメータの変更

C:¥>fsutil behavior query
使用法 : fsutil behavior query <オプション>

<オプション>

disable8dot3
allowextchar
disablelastaccess
quotanotify
mftzone

C:¥>fsutil behavior set
使用法 : fsutil behavior set <オプション> <値>

<オプション> <値>

disable8dot3 1 | 0
allowextchar 1 | 0
disablelastaccess 1 | 0
quotanotify 1 秒から 4294967295 秒
mftzone 1 から 4

C:¥>fsutil dirty
---- サポートされる DIRTY コマンド ----

query dirty ビットの照会
set dirty ビットの設定

C:¥>fsutil dirty query
使用法 : fsutil dirty query <ボリュームパス名>
例 : fsutil dirty query C:

C:¥>fsutil dirty set
使用法 : fsutil dirty set <ボリュームパス名>
例 : fsutil dirty set C:

C:¥>fsutil file
---- サポートされる FILE コマンド ----

findbysid セキュリティ識別子でファイルを検索
queryallocranges ファイルに割り当てられた範囲の照会
setshortname ファイルの短い名前の設定
setvaliddata ファイルの有効なデータ長の設定
setzerodata ファイルのゼロ データの設定
createnew 指定されたサイズの新しいファイルを作成

C:¥>fsutil file findbysid
使用法 : fsutil file findbysid <ユーザー> <ディレクトリ>
例 : fsutil file findbysid scottb C:¥users

C:¥>fsutil file queryallocranges
使用法 : fsutil file queryallocranges offset=<val> length=<val> <ファイル名>
offset : ファイルのオフセット、照会する範囲の開始点
length : 範囲のサイズ (バイト)
例 : fsutil file queryallocranges offset=1024 length=64 C:¥Temp¥sample.txt

C:¥>fsutil file setshortname
使用法 : fsutil file setshortname <ファイル名> <shortname>
例 : fsutil file setshortname C:¥testfile.txt testfile

C:¥>fsutil file setvaliddata
使用法 : fsutil file setvaliddata <ファイル名> <datalength>
例 : fsutil file setvaliddata C:¥testfile.txt 4096

C:¥>fsutil file setzerodata
使用法 : fsutil file setzerodata offset=<val> length=<val> <ファイル名>
offset : ファイルのオフセット、ゼロに設定する範囲の開始点
length : ゼロの範囲の長さ (バイト)
例 : fsutil file setzerodata offset=100 length=150 C:¥Temp¥sample.txt

C:¥>fsutil file createnew
使用法 : fsutil file createnew <ファイル名> <長さ>
例 : fsutil file createnew C:¥testfile.txt 1000

C:¥>fsutil fsinfo
---- サポートされる FSINFO コマンド ----

drives ドライブをすべて一覧表示
drivetype ドライブの種類の照会
volumeinfo ボリューム情報の照会
ntfsinfo NTFS 固有のボリューム情報の照会
statistics ファイル システム統計情報の照会

C:¥>fsutil fsinfo drives

ドライブ: A:¥ C:¥ D:¥ E:¥

C:¥>fsutil fsinfo drivetype
使用法 : fsutil fsinfo drivetype <ボリュームパス名>
例 : fsutil fsinfo drivetype C:

C:¥>fsutil fsinfo volumeinfo
使用法 : fsutil fsinfo volumeinfo <ボリュームパス名>
例 : fsutil fsinfo volumeinfo C:¥

C:¥>fsutil fsinfo ntfsinfo
使用法 : fsutil fsinfo ntfsinfo <ボリュームパス名>
例 : fsutil fsinfo ntfsinfo C:

C:¥>fsutil fsinfo statistics
使用法 : fsutil fsinfo statistics <ボリュームパス名>
例 : fsutil fsinfo statistics C:

C:¥>fsutil hardlink
---- サポートされる HARDLINK コマンド ----

create ハードリンクの作成

C:¥>fsutil hardlink create
使用法 : fsutil hardlink create <新しいファイル名> <既存のファイル名>
例 : fsutil hardlink create c:¥foo.txt c:¥bar.txt

C:¥>fsutil objectid
---- サポートされる OBJECTID コマンド ----

query オブジェクト ID の照会
set オブジェクト ID の変更
delete オブジェクト ID の削除
create オブジェクト ID の作成

C:¥>fsutil objectid query
使用法 : fsutil objectid query <ファイル名>
例 : fsutil objectid query C:¥Temp¥sample.txt

C:¥>fsutil objectid set
使用法 : fsutil objectid set <ObjectId> <BirthVolumeId> <BirthObjectId> <DomainId> <ファイル名>
ObjectId : 32 桁の 16 進データ
BirthVolumeId : 32 桁の 16 進データ
BirthObjectId : 32 桁の 16 進データ
DomainId : 32 桁の 16 進データ
値はすべて次の形式の 16 進数でなければなりません 40dff02fc9b4d4118f120090273fa9fc
例 : fsutil objectid set 40dff02fc9b4d4118f120090273fa9fc
f86ad6865fe8d21183910008c709d19e
40dff02fc9b4d4118f120090273fa9fc
00000000000000000000000000000000 C:¥Temp¥sample.txt

C:¥>fsutil objectid delete
使用法 : fsutil objectid delete <ファイル名>
例 : fsutil objectid delete C:¥Temp¥sample.txt

C:¥>fsutil objectid create
使用法 : fsutil objectid create <ファイル名>
例 : fsutil objectid create C:¥Temp¥sample.txt

C:¥>fsutil quota
---- サポートされる QUOTA コマンド ----

disable クォータの追跡と強制の無効化
track クォータの追跡の有効化
enforce クォータの強制の有効化
violations クォータ違反の表示
modify ユーザーのディスク クォータの設定
query ディスク クォータの照会

C:¥>fsutil quota disable
使用法 : fsutil quota disable <ボリュームパス名>
例 : fsutil quota disable C:

C:¥>fsutil quota track
使用法 : fsutil quota track <ボリュームパス名>
例 : fsutil quota track C:

C:¥>fsutil quota enforce
使用法 : fsutil quota enforce <ボリュームパス名>
例 : fsutil quota enforce C:

C:¥>fsutil quota violations
System イベント ログを検索中...
Application イベント ログを検索中...
クォータ違反は検出されませんでした

C:¥>fsutil quota modify
使用法 : fsutil quota modify <ボリュームパス名> <しきい値> <制限> <ユーザー>
例 : fsutil quota modify c: 3000 5000 domain¥user

C:¥>fsutil quota query
使用法 : fsutil quota query <ボリュームパス名>
例 : fsutil quota query C:

C:¥>fsutil reparsepoint
---- サポートされる REPARSEPOINT コマンド ----

query 再解析ポイントの照会
delete 再解析ポイントの削除

C:¥>fsutil reparsepoint query
使用法 : fsutil reparsepoint query <ファイル名>
例 : fsutil reparsepoint query C:¥Server

C:¥>fsutil reparsepoint delete
使用法 : fsutil reparsepoint delete <ファイル名>
例 : fsutil reparsepoint delete C:¥Server

C:¥>fsutil sparse
---- サポートされる SPARSE コマンド ----

setflag スパースに設定
queryflag スパースの照会
queryrange 範囲の照会
setrange スパース範囲の設定

C:¥>fsutil sparse setflag
使用法 : fsutil sparse setflag <ファイル名>
例 : fsutil sparse setflag C:¥Temp¥sample.txt

C:¥>fsutil sparse queryflag
使用法 : fsutil sparse queryflag <ファイル名>
例 : fsutil sparse queryflag C:¥Temp¥sample.txt

C:¥>fsutil sparse queryrange
使用法 : fsutil sparse queryrange <ファイル名>
例 : fsutil sparse queryrange C:¥Temp¥sample.txt

C:¥>fsutil sparse setrange
使用法 : fsutil sparse setrange <ファイル名> <開始オフセット> <長さ>
例 : fsutil sparse setrange C:¥Temp¥sample.txt 65536 131072

C:¥>fsutil usn
---- サポートされる USN コマンド ----

createjournal USN ジャーナルの作成
deletejournal USN ジャーナルの削除
enumdata USN データの列挙
queryjournal ボリュームの USN データの照会
readdata ファイルの USN データの読み取り

C:¥>fsutil usn createjournal
使用法 : fsutil usn createjournal m=<max-value> a=<alloc-delta> <ボリュームパス名>
例 : fsutil usn createjournal m=1000 a=100 C:

C:¥>fsutil usn deletejournal
使用法 : fsutil usn deletejournal <フラグ> <ボリュームパス名>
<フラグ>
/D : Delete
/N : Notify
Eg : usn deletejournal /D C:

C:¥>fsutil usn enumdata
使用法 : fsutil usn enumdata <file ref#> <lowUsn> <highUsn> <ボリュームパス名>
例 : fsutil usn enumdata 1 0 1 C:¥

C:¥>fsutil usn queryjournal
使用法 : fsutil usn queryjournal <ボリュームパス名>
例 : fsutil usn queryjournal C:

C:¥>fsutil usn readdata
使用法 : fsutil usn readdata <ファイル名>
例 : fsutil usn readdata C:¥Temp¥sample.txt

C:¥>fsutil volume
---- サポートされる VOLUME コマンド ----

dismount ボリュームのマウント解除
diskfree ボリュームの空き領域の照会

C:¥>fsutil volume dismount
使用法 : fsutil volume dismount <ボリュームパス名>
例 : fsutil volume dismount C:

C:¥>fsutil volume diskfree
使用法 : fsutil volume diskfree <ボリュームパス名>
例 : fsutil volume diskfree C:

コマンドラインでファイル名を指定する際に デスクトップ にあるファイルを指定しようとすると、
"C:\Documents and Settings\user-name\デスクトップ\filename.ext" と全角でパスを指定しなければならない。
面倒なので"デスクトップ" を "Desktop" に変えておくと
"C:\Documents and Settings\user-name\Desktop\filename.ext" で入力が楽になる。

    変更方法:
  1. レジストリエディタで次のレジストリを開く。 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders.reg
  2. Desktop の値を "%USERPROFILE%\デスクトップ" から "%USERPROFILE%\Desktop" に変える。
  3. レジストリエディタを終了し、Windows を再起動する。

蛇足:
"%USERPROFILE%\Desktop" の変わりにフルパスで別のユーザーのデスクトップを指定するとデスクトップの共有もできるはず。
ただしアクセス権の調整をちゃんとしておく必要があると思う。
(面倒なのでまだためしてないです)

連絡先

nakanohito