Cygwin には Cygwin 環境の UNIX
エミュレーション部分を管理するために使われる、様々なコマンドラインユーティリティが存在します。
UNIX 上での対応するユーティリティの機能の大部分を反映するために、
これらはそれぞれ Cygwin に特化した形で書かれています。
オプション名は長い形式又は短い形式が共に利用可能です。
例えば、--help と -h
の機能は同等です。全ての Cygwin コマンドラインユーティリティは
--help と --version
オプションをサポートしています。
Usage: cygcheck [OPTIONS] [PROGRAM...] Check system information or PROGRAM library dependencies -c, --check-setup check packages installed via setup.exe -d, --dump-only no integrity checking of package contents (requires -c) -s, --sysinfo system information (not with -k) -v, --verbose verbose output (indented) (for -[cfls] or programs) -r, --registry registry search (requires -s) -k, --keycheck perform a keyboard check session (not with -[scfl]) -f, --find-package find installed packages containing files (not with -[cl]) -l, --list-package list the contents of installed packages (not with -[cf]) -h, --help give help about the info (not with -[cfl]) -V, --version output version information and exit
cygcheck プログラムは Cygwin プログラムの診断を行うユーティリティです。
もし dpkg や rpm を使い慣れていれば、cygcheck
も同じようにに利用出来ます(一番の違いは、インストールやアンインストールは
setup.exe が行うという点です。詳細については 項2.1. 「インターネットセットアップ」
を参照して下さい)。
-c オプションはインストール済みの Cygwin
パッケージのバージョンと状態をチェックします。
引数が指定されなかった場合は全てのパッケージの情報が出力されますが、
一つ以上のパッケージを指定した場合、cygcheck
は指定されたパッケージの情報だけを出力します。
「Incomplete」が出力されたパッケージは、
元々インストールされていたはずのファイルが失われてしまっていることを示しています。
このような場合は、setup.exe を利用してパッケージを再インストールして下さい。
失われたファイルを確認するには -v オプションを利用します。
もし個々のパッケージの状態を調べる必要はなく、cygcheck
をより高速に実行させたければ、オプション -d
を指定して下さい。この場合、cygcheck
は各パッケージの名前とバージョンだけを出力します。
一つ以上のプログラムをコマンドラインから指定した場合、cygcheck
はそれらのプログラムが依存している DLL
の名前を示すことによって、プログラムの実行時環境を診断します。
-s オプションを指定した場合、cygcheck
は一般的なシステム情報を出力します。-s
に加えて一つ以上のプログラムをコマンドラインに指定した場合、cygcheck
は両方の情報を出力します。
-f オプションはあるファイルがどのパッケージに所属しているかを調査し、-l
オプションはパッケージに含まれる全てのファイルの一覧を表示します。
例えば、/usr/bin/less
とそのパッケージについて調べるならば、次のようにします。
$ cygcheck.exe -f /usr/bin/less less-381-1 $ cygcheck.exe -l less /usr/bin/less.exe /usr/bin/lessecho.exe /usr/bin/lesskey.exe /usr/man/man1/less.1 /usr/man/man1/lesskey.1
例 3.3. cygcheck の利用方法の例
-h オプションは、レポート中の各セクションの先頭に追加の補助情報を出力します。
テーブルの行ヘッダも追加されます。
これは有用な情報ですが、レポートのサイズは若干大きくなります。
コンパクトなレポートを必要とする場合、あるいは全てについて既に知っている場合は、単にこれを取り除いて下さい。
-v オプションは出力をより詳細なものにします。
通常は必要とされない追加の情報、例えば
DLL の内部バージョン番号や再帰的な DLL の使用に関する追加情報、そして
PATH 中に含まれるディレクトリ中のあるファイルが、PATH
中に含まれる他のディレクトリ中にも存在しているかどうかなどが出力されます。
-r オプションは、Cygwin
プログラムに関連した情報を含むレジストリを
cygcheck に検索させます。
これらのレジストリエントリはその名称中に「Cygwin」を含むものです。
もしプライバシーにこだわるのであればこのレポートから情報を削除しても構いませんが、問題を解決する作業がより困難になるであろうということを覚えておいて下さい。
cygcheck プログラムは、トラブルシューティング用にあなたのシステムの情報が必要になった場合に、それを送るために利用されます。
このコマンドを実行するように要求された場合、電子メールで送信出来るように出力を保存して下さい。以下に例を示します。
C:\cygwin> cygcheck -s -v -r -h > cygcheck_output.txt
Usage: cygpath (-d|-m|-u|-w|-t TYPE) [-c HANDLE] [-f FILE] [options] NAME
cygpath [-ADHPSW]
Convert Unix and Windows format paths, or output system path information
Output type options:
-d, --dos print DOS (short) form of NAME (C:\PROGRA~1\)
-m, --mixed like --windows, but with regular slashes (C:/WINNT)
-M, --mode report on mode of file (currently binmode or textmode)
-u, --unix (default) print Unix form of NAME (/cygdrive/c/winnt)
-w, --windows print Windows form of NAME (C:\WINNT)
-t, --type TYPE print TYPE form: 'dos', 'mixed', 'unix', or 'windows'
Path conversion options:
-a, --absolute output absolute path
-l, --long-name print Windows long form of NAME (with -w, -m only)
-p, --path NAME is a PATH list (i.e., '/bin:/usr/bin')
-s, --short-name print DOS (short) form of NAME (with -w, -m only)
System information:
-A, --allusers use `All Users' instead of current user for -D, -P
-D, --desktop output `Desktop' directory and exit
-H, --homeroot output `Profiles' directory (home root) and exit
-P, --smprograms output Start Menu `Programs' directory and exit
-S, --sysdir output system directory and exit
-W, --windir output `Windows' directory and exit
cygpath プログラムは、
ネイティブの Windows ファイル名から Cygwin の POSIX スタイルのパス名への変換、
またはその逆の変換を行うためのユーティリティです。
Cygwin プログラムがネイティブの Windows
プログラムへとファイル名を渡す必要がある場合、又はネイティブの Windows
プログラムが Cygwin プログラムへとファイル名を渡すことが想定される場合に使用します。
また、cygpath は重要なシステムディレクトリの位置を、Windows
又は UNIX の形式の何れかで出力することも出来ます。
-u と -w は、
Windows 形式から UNIX(POSIX) 形式へと変換するのか
(-u)、或いは
UNIX(POSIX) 形式から Windows 形式へと変換するのか
(-w)を指示します。
DOS 形式(8.3 形式)のファイル名又はパス名を得るためには、-d
を利用して下さい。
-m オプションは Windows
形式で出力しますが、バックスラッシュの代わりにスラッシュを利用します。
このオプションは、バックスラッシュをエスケープ文字として利用するシェルスクリプト内で特に有用でしょう。
-w オプションに組み合わせるオプションとして、
通常形式(長い形式)を出力するための -l
と、DOS 形式(短い形式)を出力するための -s
オプションが利用出来ます。-d オプションは
-w と -s
の両方を指定した結果と同等です。
注意:
環境変数 CYGWIN の check_case
パラメータに strict
が設定されている場合、-l
オプションは動作しません。なぜなら、このモードでは Cygwin
は Windows の短いパスにマッチさせることが出来ないからです。
-p オプションは、
単独のファイル名ではなくパス形式の文字列へと変換することを意味します。
例えば、PATH 環境変数は Windows ではセミコロンで区切られていますが、
UNIX ではコロンで区切られています。
-p を使用することによって、
これらの形式の間の変換を行うように cygpath に指示出来ます。
-p オプションは単純なファイル名ではなく、パス形式の文字列を変換するために利用します。
例えば、PATH 環境変数は Windows ではセミコロンで区切られていますが、UNIX ではコロンで区切られています。
-p オプションを利用すれば、cygpath を利用して両方のフォーマットの変換を行うことが出来ます。
-i オプションは、引数としてファイル名が与えられなかった場合に、使用方法が出力されることを抑制します。
適切な形式に省略されうる変数を変換する Makefile
のルール内で利用することが出来ます。
cygpath の出力にはスペースが含まれる可能性があるので(例: C:\Program Files)、クォートで括る必要があります。
#!/bin/sh
if [ "${1}" = "" ];
then
XPATH=".";
else
XPATH="$(cygpath -w "${1}")";
fi
explorer $XPATH &
例 3.4. cygpath の使い方
大文字のオプション
-D、-H、-P、
-S そして -W
は、Windows によって利用されるディレクトリを出力します。
これらのディレクトリは、全てのシステムに対して同一ではありません。
例えば、-S は C:\WINNT\SYSTEM32 か C:\WINDOWS\SYSTEM
を出力し得ます。
-H は、ホームのルートとして利用される
Windows のプロファイルディレクトリを出力します。
-A オプションは、-D や
-P オプションが出力する現在のユーザ用のディレクトリの代わりに、「All Users」ディレクトリを出力させるために利用します。
シングルユーザでしか利用されない Windows 9x システムでは、-A
は何らの意味も持ちません。-D と -AD
は同じ出力になります。
デフォルトでは、出力は UNIX(POSIX)形式となります。
他の形式で出力するには、-w 又は -d
オプションを利用して下さい。
Usage: dumper [OPTION] FILENAME WIN32PID Dump core from WIN32PID to FILENAME.core -d, --verbose be verbose while dumping -h, --help output help information and exit -q, --quiet be quiet while dumping (default) -v, --version output version information and exit
dumper ユーティリティは実行中の
Windows プロセスのコアダンプを作成するために利用します。
このコアダンプは後から gdb
で読み込み、分析するために利用出来ます。
一般的な dumper の利用方法は、Cygwin
のジャストインタイムデバッグ機能として組み込むことです。
そのためにはCYGWIN 環境変数に
error_start=x:\path\to\dumper.exe
を追加します。x:\path\to\dumper.exe
は Cygwin 上でのパスではなく、Windows 形式で記述する必要があるという点に注意して下さい。
error_start がこのように設定されたなら、プログラムに致命的なエラーが発生した時点で
dumper が起動されます。
dumper は実行中のプロセスのコアダンプを作るために、コマンドラインから開始させることも出来ます。
残念ながら Windows API の制限により、コアダンプが作成され
dumper が終了した時点で、対象となったプロセスもまた終了させられてしまいます。
コアダンプのスペースを小さくするため、dumper
はプロセスのメモリ空間のうち、実行ファイルからロードされた部分、DLL
ファイル、そして不変部分(例えばプログラムコードやデバッグ情報)については書き出しを行いません。
代わりに、dumper
はそれらのデータを含んでいるファイルへのパスを保存します。
コアダンプが gdb によってロードされると、
これらのパスは適切なファイルをロードするために利用されます。
このことはつまり、あるマシンで作成されたコアダンプを別のマシンでデバッグするのであれば、コアダンプが作成されたマシンと同じ位置に実行形式や DLL
のコピーを配置しておく必要があるということを意味します。
Usage: getfacl [-adn] FILE [FILE2...]
Display file and directory access control lists (ACLs).
-a, --all display the filename, the owner, the group, and
the ACL of the file
-d, --dir display the filename, the owner, the group, and
the default ACL of the directory, if it exists
-h, --help output usage information and exit
-n, --noname display user and group IDs instead of names
-v, --version output version information and exit
When multiple files are specified on the command line, a blank
line separates the ACLs for each file.
getfacl は引数として与えられた個々の通常のファイル、特殊ファイル又はディレクトリについて、所有者、グループそして ACL を出力します。
ディレクトリに対しては、getfacl
は更にデフォルトの ACL をも表示します。
オプションが指定されなかった場合、
getfacl はファイル名、所有者、グループ、ACL
と(もし存在するのなら)デフォルトの ACL の両方を表示します。
Cygwin 及び Windows の ACL に関する更なる情報については、
Cygwin ユーザーズガイドの 項2.3. 「NT セキュリティと ntsec の使用方法」
を参照して下さい。ACL の出力形式は以下のようになります。
# file: filename
# owner: name or uid
# group: name or uid
user::perm
user:name or uid:perm
group::perm
group:name or gid:perm
mask:perm
other:perm
default:user::perm
default:user:name or uid:perm
default:group::perm
default:group:name or gid:perm
default:mask:perm
default:other:perm
Usage: kill [-f] [-signal] [-s signal] pid1 [pid2 ...]
kill -l [signal]
Send signals to processes
-f, --force force, using win32 interface if necessary
-l, --list print a list of signal names
-s, --signal send signal (use kill --list for a list)
-h, --help output usage information and exit
-v, --version output version information and exit
kill プログラムは他の Cygwin
プログラムに対して任意のシグナルを送信するためのものです。
通常、 ^C が動作しない場合に他のウィンドウから実行中のプログラムを停止させるために利用しますが、
SIGUSR1 のようなプログラム指定のシグナルをプログラム中でのトリガ、
例えばデバッグ用途やログファイルの再オープンなどのために送信することも出来ます。
個々のプログラムは、プログラム自身が理解するシグナルを定義します。
Cygwin のデフォルトのシェルである bash を含む幾つかのシェルから
kill を実行する場合、フルパスで指定する必要があります。なぜなら、bash
は組み込みコマンドとして kill
を定義しているからです。更なる情報については、bash
のマニュアルページの BUILTIN COMMANDS
を参照して下さい。Cygwin 版の kill を利用していることを確かめるには、
$ /bin/kill --version
を実行して、Cygwin の kill
のバージョン番号と著作権情報が出力されることを確認します。
-f オプションを指定しない限り、kill
が利用する「pid」値は Cygwin の PID であり、Windows の PID
ではないことに注意して下さい。実行中のプログラムとそれらの Cygwin
での PID のリストを取得するには、Cygwin の ps
を使用します。ps -W は、全ての Windows PID を表示します。
kill -l オプションは指定されたシグナルの名前を表示します。
シグナルが指定されなかった場合は、全てのシグナルの名前を表示します。
特定のシグナルを送信するためには、
次に示す例のようにシグナル番号又はシグナル名
(「SIG」部分を省いたもの)と共に -signN
オプションを使用します。
利用可能なシグナルとシグナル番号、そしてそれらに対するコメントをここに挙げます。
これらの情報は、この情報に関する公式な情報源であると考えられる
<sys/signal.h> から引用したものです。
SIGHUP 1 ハングアップ SIGINT 2 中断 SIGQUIT 3 終了 SIGILL 4 不正な命令 (受信時にリセットされない) SIGTRAP 5 トレーストラップ (受信時にリセットされない) SIGABRT 6 abort の使用 SIGEMT 7 EMT 命令 SIGFPE 8 浮動小数点例外 SIGKILL 9 kill (受信あるいは無視は出来ない) SIGBUS 10 バスエラー SIGSEGV 11 セグメント違反 SIGSYS 12 システムコールに対する不正な引数 SIGPIPE 13 誰も読まないパイプに対する書き込み SIGALRM 14 アラームクロック SIGTERM 15 kill からのソフトウェア終了命令 SIGURG 16 入出力チャネルにおける緊急事態 SIGSTOP 17 tty からではない、送信可能な中止 SIGTSTP 18 tty からの中止 SIGCONT 19 停止したプロセスの再開 SIGCHLD 20 親プロセスに対する、子プロセスの中止又は終了 SIGCLD 20 System V における SIGCHLD の名称 SIGTTIN 21 to readers pgrp upon background tty read SIGTTOU 22 like TTIN for output if (tp->t_local<OSTOP) SIGIO 23 入出力可能なシグナル SIGPOLL 23 System V における SIGIO の名称 SIGXCPU 24 CPU 時間の制限の超過 SIGXFSZ 25 ファイルサイズの制限の超過 SIGVTALRM 26 仮想タイムアラーム SIGPROF 27 プロファイリングタイムアラーム SIGWINCH 28 ウィンドウの変更 SIGLOST 29 リソースの消失 (例えば、レコードロックの消失) SIGUSR1 30 ユーザ定義シグナル 1 SIGUSR2 31 ユーザ定義シグナル 2
Usage: mkgroup [OPTION]... [domain]...
Prints /etc/group file to stdout
Options:
-l,--local print local group information
-c,--current print current group, if a domain account
-d,--domain print global group information (from current
domain if no domains specified).
-o,--id-offset offset change the default offset (10000) added to gids
in domain accounts.
-s,--no-sids don't print SIDs in pwd field
(this affects ntsec)
-u,--users print user list in gr_mem field
-g,--group groupname only return information for the specified group\n");
-h,--help print this message
-v,--version print version information and exit
One of `-l' or `-d' must be given on NT/W2K.
mkgroup プログラムは、システム情報から最初の /etc/group
の代用品(幾つかのコマンドはこのファイルを必要とします)を作成することによって、Windows
システムの構成の手助けを行います。このプログラムは NT 系システム(Windows NT、2000 及び XP)でのみ動作します。
mkgroup は Windows 9x 系システム(Windows 95、98
及び Me)では動作しません。なぜなら、それらの
OS にはセキュリティモデルのサポートが欠けているからです。マシンの最初のセットアップのためには、以下のようにします。
mkgroup プログラムは最初の
/etc/group を作成することによって、
Windows システムをより UNIX 的に構成するための手助けを行います。
mkgroup の用途は Windows のセキュリティ情報を取り込むことにあり、
NT 系列(WindowsNT、2000 及び XP)では不可欠です。
mkgroup は Windows 9x 系列(Windows 95、98 及び Me)ででも、
正しい形式でファイルを作成するために利用されます。
貴方がローカルユーザであれば、マシンの最初の設定のために以下のようにコマンドを実行して下さい。
この情報は静的なものであることに注意して下さい。 もしシステム内のグループ情報を変更したときは、 新しい情報を反映するために group ファイルを再作成する必要があります。
-d と -l オプションは、「ローカルマシンから」「(デフォルト、又は指定した)ドメインから」或いは「その両方から」のどの方法で情報を取り出すかを指定するためのものです。
現在のドメインのユーザに対するエントリは、オプション -c と共に -l
を与えた場合に生成されますが、-c が -d と共に使われた場合、何の効果も持ちません。
-o オプションは、(複数のドメインのような)特別なケースにおいて、GID
が違うものにマッチする場合に利用します。
-s オプションは NT セキュリティ識別子(SID)を省略します。
SID に関する更なる情報については、Cygwin ユーザーズガイドの 項2.3. 「NT セキュリティと ntsec の使用方法」 を参照して下さい。
-u オプションは個々のグループごとにユーザを調べ、gr_mem
フィールド(最後のフィールド)にグループのメンバを格納するよう mkgroup に通知します。
大きなドメインに対して mkgroup
を実行すると、実行時間が非常に大きくなるという点には注意して下さい。
ローカルマシンがドメインコントローラから切断されていても、gr_mem フィールドを設定しておけばリモートからのドメインユーザでのログイン時に役立ちます。
-g は一つのグループに関する情報のみを出力します。
Usage: mkpasswd [OPTION]... [domain]...
Prints /etc/passwd file to stdout
Options:
-l,--local print local user accounts
-c,--current print current account, if a domain account
-d,--domain print domain accounts (from current domain
if no domains specified)
-o,--id-offset offset change the default offset (10000) added to uids
in domain accounts.
-g,--local-groups print local group information too
if no domains specified
-m,--no-mount don't use mount points for home dir
-s,--no-sids don't print SIDs in GCOS field
(this affects ntsec)
-p,--path-to-home path use specified path and not user account home dir or /home
-u,--username username only return information for the specified user
-h,--help displays this message
-v,--version version information and exit
One of `-l', `-d' or `-g' must be given on NT/W2K.
mkpasswd プログラムはシステム情報から最初の
/etc/passwd を作成します。
mkpasswd の用途は Windows のセキュリティ情報を取り込むことにあり、
NT 系列(WindowsNT、2000 及び XP)では不可欠ですが、
実際のパスワードは /etc/passwd の内容からではなく、
Windows によって決定されます。
Windows 9x 系列(Windows 95、98 及び Me)でリモートアクセスが必要な場合、
password フィールドは crypt your_password
の出力によって置き換えられていなければなりません。
貴方がローカルユーザであれば、マシンの最初の設定のために以下のようにコマンドを実行して下さい。
この情報は静的なものであることに注意して下さい。 もしシステム内のユーザ情報を変更したときは、 新しい情報を反映するために passwd ファイルを再度作成し直す必要があります。
-d と -l オプションは、
「ローカルマシンから」「(デフォルト、又は指定した)ドメインから」或いは「その両方から」のどの方法で情報を取り出すかを指定するためのものです。
-d オプションを指定した場合、mkpasswd
プログラムはドメインコントローラに接続します。
現在のドメインのユーザに対するエントリは、
オプション -c と共に -l を与えた場合に生成されますが、
-c が -d と共に使われた場合、何の効果も持ちません。
-o オプションは、(複数のドメインのような)特別なケースにおいて、UID
が違うものにマッチする場合に利用します。
-g オプションは各ローカルグループに対応するローカルユーザを生成します。
これは、NT がグループにもファイル所有権を与えるからです。
-m オプションは現在のマウントテーブルをバイパスします。
なぜなら、仮に二人のユーザが Windows ホームディレクトリを H:
に構えているとしても、それぞれに異なった方法でマウント出来るからです。
-s オプションは NT セキュリティ識別子(SID)を省略します。
SID に関する更なる情報については、Cygwin
ユーザーズガイドの 項2.3. 「NT セキュリティと ntsec の使用方法」 を参照して下さい。
-p オプションはアカウントのホームディレクトリや
/home/ ではなく、指定した接頭辞を付けるように
mkpasswd に指示するためのものです。例えば、以下のコマンド
は、ローカルのユーザのホームディレクトリを Windows の「Profiles」ディレクトリに配置します。
Windows 9x マシンでは、-u は指定したユーザのエントリを生成します。
NT 系列では -u オプションは指定したユーザだけを出力対象とするので、大きなドメインでの実行時間を大幅に短縮させます。
Usage: mount [OPTION] [<win32path> <posixpath>]
Display information about mounted filesystems, or mount a filesystem
-b, --binary (default) text files are equivalent to binary files
(newline = \n)
-c, --change-cygdrive-prefix change the cygdrive path prefix to <posixpath>
-f, --force force mount, don't warn about missing mount
point directories
-h, --help output usage information and exit
-m, --mount-commands write mount commands to replace user and
system mount points and cygdrive prefixes
-o, --options X[,X...] specify mount options
-p, --show-cygdrive-prefix show user and/or system cygdrive path prefix
-s, --system (default) add system-wide mount point
-t, --text text files get \r\n line endings
-u, --user add user-only mount point
-v, --version output version information and exit
-x, --executable treat all files under mount point as executables
-E, --no-executable treat all files under mount point as
non-executables
-X, --cygwin-executable treat all files under mount point as cygwin
executables
mount プログラムは、一般的な UNIX システム上の
mount コマンドが行うように、ドライブ及び共有を Cygwin がシミュレートする
POSIX ディレクトリツリーにマップします。
Cygwin の POSIX ファイルシステムの背後にあるコンセプト及びマウントの戦略についての更なる情報については 項3.1.2. 「Cygwin マウントテーブル」 を参照して下さい。
マウントを解除するには、umount コマンドを利用します。
パラメータを指定せずただ単に mount とタイプした場合、
現在のマウントテーブルが表示されます。
c:\cygwin\> mount
c:\cygwin\bin on /usr/bin type system (binmode)
c:\cygwin\lib on /usr/lib type system (binmode)
c:\cygwin on / type system (binmode)
c: on /c type user (binmode,noumount)
d: on /d type user (binmode,noumount)
例 3.9. 現在のマウントポイント設定を表示
この例では、C:\cygwin は POSIX ディレクトリツリーのルートディレクトリに、D ドライブは
/d にマップされています。この場合、ルートのマウントは Cygwin
プログラムを実行する全ユーザが利用可能なシステム全体のマウントポイントですが、
対して /d のマウントは現在のユーザにだけのものであるということを覚えておいて下さい。
mount
ユーティリティはマウントテーブルに新しいマウントを追加する仕組みでもあります。
以下の例は、ディレクトリ \\pollux\home\joe\data を
/data へとマウントするというものです。
c:\cygwin\>ls /data ls: /data: No such file or directoryc:\cygwin\>mount \\pollux\home\joe\data /data mount: warning - /data does not exist!c:\cygwin\>mount \\pollux\home\joe\data on /data type sytem (binmode) c:\cygwin\bin on /usr/bin type system (binmode) c:\cygwin\lib on /usr/lib type system (binmode) c:\cygwin on / type system (binmode) c: on /c type user (binmode,noumount) d: on /d type user (binmode,noumount)
例 3.10. マウントポイントの追加
先の例の mount は
Windows コマンドシェルから起動されたということに注意して下さい。
bash を含む多くのUNIX シェルでは「\」がシェルのエスケープ文字であるため、Win32
パス名中でも「/」を使用することが出来ますし、またそのほうが便利です。
mount の -s
フラグは、ユーザ独自のマウントテーブルではなく、そのシステムにおける全ての Cygwin
ユーザによって使用されるシステム全体のマウントテーブルにマウントを追加するために使われます。
システム全体でのマウントは、先の例での / パーティションのように、
mount コマンド使用時に「system」タイプとして表示されます。
Windows NT では、Administrator 権限を持ったユーザだけがシステム全体のマウントテーブルを修正することが出来ます。
指定された POSIX パスはユーザテーブルとシステム全体のテーブルのいずれかにのみ存在可能であるということに注意して下さい。
マウントを置き換えようとした場合、busy エラーが発生して失敗します。
-f (force; 強制)フラグは、既存のマウントを警告なしに新しいマウントで置き換えます。
Win32 パスとしてディレクトリが存在しない場合についても警告を発しません。
-b フラグは、デフォルトでバイナリを処理し、テキストファイルについても同様の動作をするよう Cygwin に指示するために使われます。
バイナリモードマウントは、mount の出力中の
Flags 列中で「binmode」として表示されます。
デフォルトでは、マウントはテキストモードとなります(Flags 列には「textmode」として表示されます)。
通常、特定の拡張子(.exe、.com、.bat、.cmd)で終了するファイルは実行形式であると見なされます。
同様に、ファイルの先頭の 2 文字が「#!」で始まっているファイルも実行可能だと見なされます。
-x フラグは、マウントされたファイルは「実行可能」であるということを
Cygwin に指示するために使われます。
もし -x フラグがディレクトリに対して使用された場合、
そのディレクトリ中の全てのファイルが実行可能となります。
このオプションを使用すればそれ以外のファイルも実行可能としてマーク出来るので、
個々のファイルの内容が「#!」で始まっているかどうかをチェックするためのオーバーヘッドを回避することが出来ます。
-X オプションは -x
と非常に似ていますが、多少の高速化を図るため、通常の
Windows プログラムに対するコマンドと環境変数を Cygwin が設定することを防止します。
これらのフラグと対照的なのが -E であり、全てのファイルが実行可能ではないことを意味します。
-m オプションは、ユーザ及びシステムの両方のマウントポイントを再生成するための一連のコマンド群を
mount ユーティリティに出力させるというものです。
マウントテーブルの実験をする場合、この出力をバックアップとして保存しておくことが出来ます。
また、設定内容を別のマシンへとより簡単に適用するために利用することも出来るでしょう。
-o オプションはマウントポイントに関する様々なオプションをまとめるメソッドです。
以下のオプションが利用できます(オプションの大部分は他のマウントフラグと重複していることに注意して下さい)。
user - ユーザ独自マウント中のマウントとする。
system - システムテーブル中のマウントとする(デフォルト)。
binary - ファイルのデフォルトをバイナリモードとする(デフォルト)。
text - ファイルのデフォルトを CRLF テキストモード行終端とする。
exec - マウントポイント以下のファイルを全て実行可能とする。
notexec - マウントポイント以下のファイルを全て実行不能とする。
cygexec - マウントポイント以下のファイルを全て Cygwin の実行可能形式とする。
nosuid - suid されたファイルを許可しない(現在未実装)。
managed - Cygwin によってディレクトリが管理される。ファイル名中の
大文字小文字の混在及び特殊文字の利用が許される。
特定の Win32 パスを POSIX パスへと変換する際に
Cygwin が既存のどのマウントも利用できなかった場合は、
Cygwin は代わりにデフォルトのマウントポイントである
/cygdrive を使用した
POSIX パスへと変換します。
例えば、Cygwin が Z:\foo へとアクセスしたものの、
Z ドライブが現在のマウントテーブル中に存在しなかった場合、
Z:\ は /cygdrive/Z
としてアクセス可能になります。
mount ユーティリティの「--change-cygdrive-prefix」
フラグを使えば、デフォルトの自動マウント用プレフィックスを変更することが出来ます。
以下の例では、自動マウント用のプレフィックスを /
に変更しています。
この方法にで新しいプレフィックスを設定する際、-s
フラグを指定すれば、新しいプレフィックスをシステム全体のデフォルトプレフィックスとすることが出来るということを覚えておいて下さい。
デフォルトでは、cygdrive プレフィックスはシステム全体の設定のみに適用されます。
ユーザ及びシステムの cygdrive プレフィックスは
-p オプションで常に参照することが出来ます。
--change-cygdrive-prefix と共に -b
フラグを使用すれば、
全ての新しい自動マウントされたファイルシステムのデフォルトをバイナリモードでのファイルアクセスとすることが出来ます。
制限: マウントポイントは最大 30 までに制限されており、 これはハードコーディングされています。 また、仮に「/」から始まらないパス名をマウントすることが出来たとしても、 そのようなマウントポイントを使用する方法はありません。
通常、標準的な UNIX がそうであるように、Cygwin の POSIX マウントポイントは既存の空のディレクトリとなります。 この場合、又はマウントポイントのプレースホルダ (ファイル、どこかへのシンボリックリンク、 または空でないディレクトリ)が存在する場合、 予想される動作が示されます。 現在マウントポイントとなっているファイルのマウント前の姿は、 Cygwin プログラムからは見えなくなります。
例えば、ディスクを指し示す a、
b、c
といった名前がルートディレクトリに散乱するのを防ぎたいような場合、
時には存在しないディレクトリへのマウントが望ましいことがあります。
たとえ mount が警告を表示したとしても、
明示的にマウントポイントを参照した場合は全てがほぼ正確に動作します。
しかしながら、幾つかの奇妙な結果が発生するかもしれません。
例えば、現在の作業ディレクトリが /dir であり、しかも
/dir/mtpt がマウントポイントである場合、mtpt
は ls や echo * コマンドでは表示されず、
find . も mtpt を探し出せません。
Usage: passwd [OPTION] [USER]
Change USER's password or password attributes.
User operations:
-l, --lock lock USER's account.
-u, --unlock unlock USER's account.
-c, --cannot-change USER can't change password.
-C, --can-change USER can change password.
-e, --never-expires USER's password never expires.
-E, --expires USER's password expires according to system's
password aging rule.
-p, --pwd-not-required no password required for USER.
-P, --pwd-required password is required for USER.
System operations:
-i, --inactive NUM set NUM of days before inactive accounts are disabled
(inactive accounts are those with expired passwords).
-n, --minage DAYS set system minimum password age to DAYS days.
-x, --maxage DAYS set system maximum password age to DAYS days.
-L, --length LEN set system minimum password length to LEN.
Other options:
-S, --status display password status for USER (locked, expired,
etc.) plus global system password settings.
-h, --help output usage information and exit.
-v, --version output version information and exit.
If no option is given, change USER's password. If no user name is given,
operate on current user. System operations must not be mixed with user
operations. Don't specify a USER when triggering a system operation.
passwd はユーザアカウントのパスワードを変更します。
通常のユーザは自分自身のアカウントのパスワードだけを変更できますが、
Administrators グループに所属するユーザはどのアカウントのパスワードも変更できます。
passwd はまた、
パスワードの有効期限やパスワード変更間隔といった、
アカウントの情報を変更することが出来ます。
パスワードを変更する際、パスワードが既に定義されていれば、ユーザは最初に旧来のパスワードを入力するように促されます。 入力されたパスワードは暗号化され、保存されているパスワードと比較されます。 ユーザには正しいパスワードを入力するチャンスは一回しかありません。 パスワードを忘れてしまった場合でもパスワードを変更出来るようにするため、Administrators グループに所属するユーザはこのステップを省略することが出来ます。
続いてユーザは変更するパスワードの入力を促されます。
passwd は再度入力を促し、最初の入力と
2 回目の入力が合致しているかどうかを確認します。
パスワードを変更するためには、両方の入力が同じものである必要があります。
パスワードが入力された後、今回のパスワード変更が許可されているかどうかを確認するために、
パスワードの有効期限情報がチェックされます。もしチェックが通らなければ、passwd
はパスワードの変更を拒否して終了します。
現在のパスワードの状態に関する情報を得るには、-S オプションを利用します。
Administrators は passwd を利用して、様々なアカウントの管理を行うことが可能です
(ユーザは自分自身のアカウントに対しては、幾つかの管理を行うことが出来ます)。
-l フラグと共に実行すればアカウントのロックを、
-u フラグと共に実行すればアカウントのロックの解除を行うことが出来ます。
同様に、-c はユーザによるパスワードの変更を不可能にし、
-C はユーザによるパスワードの変更を可能にします。
パスワードの期限については、-e
によってパスワードの期限を無制限にし、-E
はシステムの通常の期限設定ルールに従ってパスワードの期限付けを行います。
-p はユーザに対してパスワードの設定を要求せず、
-P はユーザに対してパスワードの設定を要求します。
Administrators グループに所属するユーザは
-i、-n、-x 及び -L
オプションを利用することによって、システム全体のパスワードの有効期間と有効な長さも変更することが出来ます。
-i オプションはパスワードの有効期間満了後、
アカウントを無効とするための日数を指定するために利用します。
パスワードの有効期限が切れてから NUM
日が経過すると、それ以降、ユーザはもはやそのアカウントを利用してログオンすることは出来ません。
-n オプションは、パスワードの変更禁止期間を日数で設定するために使われます。
ユーザは MINDAYS 日数が経過するまで、パスワードを変更することは出来ません。
-x オプションは、パスワードの有効期限の最大日数を設定するために使われます。
MAXDAYS日数の後、パスワードは変更されなければなりません。
上記のオプションで利用可能な値の範囲は、0 から 999 までです。
-L オプションは、Administrators
グループに属さないユーザに許されるパスワードの最小の長さを
LEN 分の文字数で指定します。
最小のパスワード長として認められるのは 0 から 14 文字までです。
この場合、0 という値は「制限なし」を意味します。
制限: 幾つかのシステムでは、ユーザは自分のパスワードを変更することが出来ません。
Usage: ps [-aefls] [-u UID] Report process status -a, --all show processes of all users -e, --everyone show processes of all users -f, --full show process uids, ppids -h, --help output usage information and exit -l, --long show process uids, ppids, pgids, winpids -s, --summary show process summary -u, --user list processes owned by UID -v, --version output version information and exit -W, --windows show windows as well as cygwin processes With no options, ps outputs the long format by default
ps プログラムは、システム内で動作している全ての
Cygwin プロセスの情報を返します(ps とは「process status」を意味します)。
Windows 環境下における POSIX 環境のシミュレートによる制限のため、限られた情報しか出力されません。
PID 列は kill に与えるために必要なプロセス ID です。
PPID は親プロセス ID であり、PGID はプロセスグループ ID です。
WINPID 列は NT のタスクマネージャに表示されるプロセス ID です。
TTY 列はプロセスがどの仮想端末上で動作しているかを示すものであり、'?'
はサービスであることを表しています。UID 列には各プロセスのオーナーが示されます。
STIME はプロセスが起動した時刻であり、COMMAND は実行しているプログラムを示しています。
0 番目のカラムには、ステータスフラグもまた表示されます。
S は停止中或いはサスペンド中(言い換えるならバックグラウンド)であることを、I
は入力待ち中或いは対話処理待ち中(フォアグラウンド)であることを、O
は出力待ち中であることを示しています。
デフォルトでは、ps
は現在のユーザが所有しているプロセスのみを表示します。
-a か -e
のどちらかのオプションを使えば、全てのプロセス(システムプロセスも含む)が表示されます。
二つのオプションが同じ機能を持っているのは、UNIX の歴史的な理由によるものです。
-f は「完全(full)な」リスト表示を行うオプションであり、UID
に対するユーザ名も表示されます。-l
オプションはデフォルトの表示モードであり、上記の列について「長い(long)」リスト表示を行います。
他の表示オプションとしては -s があり、PID、TTY、STIME
そして COMMAND だけを短く表示します。-u
オプションは、指定されたユーザが所有しているプロセスだけを表示するためのものです。
-W オプションは、
Cygwin のプロセスと共に Cygwin プロセス以外の Windows
プロセスをも ps に表示させるものです。
WINPID もまた PID であり、Windows プロセスは
kill コマンドに -f
オプションを付けることによって殺すことが出来ます。
Usage: regtool.exe [OPTION] (add | check | get | list | remove | unset) KEY
View or edit the Win32 registry
Actions:
add KEY\SUBKEY add new SUBKEY
check KEY exit 0 if KEY exists, 1 if not
get KEY\VALUE prints VALUE to stdout
list KEY list SUBKEYs and VALUEs
remove KEY remove KEY
set KEY\VALUE [data ...] set VALUE
unset KEY\VALUE removes VALUE from KEY
Options for 'list' Action:
-k, --keys print only KEYs
-l, --list print only VALUEs
-p, --postfix like ls -p, appends '\' postfix to KEY names
Options for 'set' Action:
-e, --expand-string set type to REG_EXPAND_SZ
-i, --integer set type to REG_DWORD
-m, --multi-string set type to REG_MULTI_SZ
-s, --string set type to REG_SZ
Options for 'set' and 'unset' Actions:
-K<c>, --key-separator[=]<c> set key separator to <c> instead of '\'
Other Options:
-h, --help output usage information and exit
-q, --quiet no error output, just nonzero return if KEY/VALUE missing
-v, --verbose verbose output, including VALUE contents when applicable
-V, --version output version information and exit
KEY is in the format [host]\prefix\KEY\KEY\VALUE, where host is optional
remote host in either \\hostname or hostname: format and prefix is any of:
root HKCR HKEY_CLASSES_ROOT (local only)
config HKCC HKEY_CURRENT_CONFIG (local only)
user HKCU HKEY_CURRENT_USER (local only)
machine HKLM HKEY_LOCAL_MACHINE
users HKU HKEY_USERS
You can use forward slash ('/') as a separator instead of backslash, in
that case backslash is treated as escape character
Example: regtool.exe get '\user\software\Microsoft\Clock\iFormat'
regtool プログラムを使えば、シェルスクリプトから
Windows レジストリのアクセスと修正が可能になります。
Windows レジストリの修正は危険であり、不注意からシステムが使用不能になることがあります。
注意して下さい。
-v オプションは「冗長(verbose)」を意味します。
多くのコマンドでは、
これは追加の、又は長ったらしいメッセージを出力するためのものです。
逆に、-q オプションはエラーメッセージを抑制します。
キーが存在したか否かを調べるには、(例えば)プログラムの終了ステータスを使用します。
regtool には、以下に示すようなオプションを
アクション として指定する必要があります。
現在のところ、アクションとなるのは
add、set、
check、get、list、
remove、set 及び
unset です。
デフォルトでは、最後の「\」又は「/」はキーと値の区切り文字として認識されます。
-K オプションを利用することによって、キーと値の区切り文字として別の文字を利用することが可能になります。
add アクションは新しいキーを追加します。
check アクションはキーが存在するかどうかを確認します
(プログラムの終了コードが 0 なら存在し、非 0 ならは存在しません)。
get アクションはキーの値の値を取得し、標準出力にその値を出力します(あるいは何も出力しません)。
なお、値が存在しない場合はエラーメッセージが表示され、プログラムは非 0 の終了コードを返します。
-q が指定された場合、プログラムはメッセージを表示しませんが非 0
の終了コードを返します。
list アクションは、与えられたキーが持つサブキーと値を出力します。
list に-k
オプションを指定すれば、regtool
はキーだけを表示します。また、-l
を指定した場合は値だけが表示されます。-p
は個々のキーの最後に後置詞として '/' を付けますが、値には何も付けません。
remove アクションはキーを削除します。
キーを削除する前にはキー中にある全てを削除する必要がありますが、そのことが必要以上に削除してしまうことを偶然にも止める手段になるということは期待しないで下さい。
set アクションはキー中に値を設定します。
-e は値が展開可能な文字列(REG_EXPAND_SZ)であり、埋め込みの環境変数が含まれていることを示します。
-i は値が整数(REG_DWORD) であることを示します。
-m は値が複数行文字列(REG_MULTI_SZ)であることを意味します。
-s は値が文字列(REG_SZ)であることを示します。
もしこのいずれをも指定しなかった場合、regtool
は与えられた値を元に型を推測します。
もし数値に見えるのであれば、それは DWORD 値です。
もしパーセントで始まる値であれば、それは展開可能な文字列値です。
複数の値を与えたのであれば、それは複数行文字列値です。
そうでなければ、それは通常の文字列値です。
unset コマンドはキーから値を削除します。
Usage: setfacl [-r] (-f ACL_FILE | -s acl_entries) FILE...
setfacl [-r] ([-d acl_entries] [-m acl_entries]) FILE...
Modify file and directory access control lists (ACLs)
-d, --delete delete one or more specified ACL entries
-f, --file set ACL entries for FILE to ACL entries read
from a ACL_FILE
-m, --modify modify one or more specified ACL entries
-r, --replace replace mask entry with maximum permissions
needed for the file group class
-s, --substitute substitute specified ACL entries for the
ACL of FILE
-h, --help output usage information and exit
-v, --version output version information and exit
At least one of (-d, -f, -m, -s) must be specified
パラメータとして与えられた個々のファイルについて、setfacl
はそれらのファイルの完全な ACL
を置き換える(-s、-f)か、ACL
エントリの追加、修正又は削除を行います。
Cygwin と Windows ACL に関する更なる情報については、Cygwin
ユーザーズガイドの 項2.3. 「NT セキュリティと ntsec の使用方法」 を参照して下さい。
acl_entries は、以下のリストに示されたような一つ又はそれ以上のカンマ区切りの ACL エントリ群です。
u[ser]::perm
u[ser]:uid:perm
g[roup]::perm
g[roup]:gid:perm
m[ask]::perm
o[ther]::perm
デフォルトのエントリは上記に加えて、追加の default 識別子を持っています。例えば、次のようになります。
d[efault]:u[ser]:uid:perm
perm はそれぞれ「rwx」形式に従う
3 文字のパーミッション文字列であり、パーミッションが無い場合は
「-」文字を利用します。
また、0 (「---」と同じ) から 7 (「rwx」と同じ)までの
8 進数表現を利用してパーミッションを表すことも出来ます。
uid はユーザ名か数値表現の
UID であり、gid はグループ名か数値表現の GID です。
以下のオプションがサポートされています。
-d
一つ又はそれ以上の指定されたエントリをファイルの ACL から削除します。
所有者、グループそしてその他エントリを削除してはいけません。
削除される acl_entries はパーミッションなしで指定します。
例えば、次に示すリストのようになります。
u[ser]:uid
g[roup]:gid
d[efault]:u[ser]:uid
d[efault]:g[roup]:gid
d[efault]:m[ask]:
d[efault]:o[ther]:
-f
ACL_FILE から acl_entries を一行ずつ読み込みます。
空白文字は無視され、文字「#」はコメントの開始として扱われます。
は標準入力から読み込ませるには、特殊ファイル名「-」を利用します。
あるファイルから別のファイルへと ACL をコピーする場合は、getfacl
と setfacl を利用することが出来ます。
$ getfacl source_file | setfacl -f - target_file
ファイルの所有者として一つのユーザエントリ、ファイルのグループとして一つのグループエントリ、そしてその他エントリが必要となります。
追加のユーザ及びグループエントリとして、ファイルのファイルグループクラスに対するマスクエントリ及び、同じ UID / GID を持った重複しないユーザ又はグループエントリを指定することが出来ます。
もし対象がディレクトリであれば、ファイルの所有者として一つのデフォルトのユーザエントリ、ファイルのグループとして一つのデフォルトのグループエントリ、ファイルグループクラスとして一つのデフォルトのマスクエントリ、そして一つのその他エントリが必要となります。
-m
一つ又はそれ以上の指定した ACL エントリを追加又は削除します。
acl_entries は既に示したような、カンマ区切りのエントリのリストとなります。
-r
マスク入力として指定されたパーミッションを無視し、ファイルグループクラスに必要となる最大のパーミッションで置き換えます。
-s
-f と似ていますが、カンマ区切りのリストとしてコマンドラインから指定された acl_entries
でファイルの ACL を置き換えます。
-d 及び -m
オプションは同じコマンド内で利用できますが、-f
と -s オプションは排他的にしか利用出来ません。
ディレクトリはデフォルトの ACL エントリを保持しています。 デフォルトの ACL エントリを含んだディレクトリ内に作成されたファイルのパーミッションは、 現在の umask 値、明示的に指定されたパーミッション要求そしてデフォルトの ACL エントリを結合して決定されます。
制限: Cygwin 環境下では、デフォルトの ACL エントリは現在のアカウントからは取得されません。
Usage: ssp [options] low_pc high_pc command...
Single-step profile COMMAND
-c, --console-trace trace every EIP value to the console. *Lots* slower.
-d, --disable disable single-stepping by default; use
OutputDebugString ("ssp on") to enable stepping
-e, --enable enable single-stepping by default; use
OutputDebugString ("ssp off") to disable stepping
-h, --help output usage information and exit
-l, --dll enable dll profiling. A chart of relative DLL usage
is produced after the run.
-s, --sub-threads trace sub-threads too. Dangerous if you have
race conditions.
-t, --trace-eip trace every EIP value to a file TRACE.SSP. This
gets big *fast*.
-v, --verbose output verbose messages about debug events.
-V, --version output version information and exit
Example: ssp 0x401000 0x403000 hello.exe
SSP - シングルステッププロファイラ
オリジナルの作者: DJ Delorie
SSP は Win32 デバッグ API を利用してプログラムを実行するためのプログラムです。
SSP は個々の命令が利用された場所、命令が使用した時間、そして全ての関数呼び出しを記録します。
SSP の実行結果はプロファイル用プログラム gprof
が取り扱える形式として保存されますが、gprof
は値が秒であり、それらは本当は命令数だと主張するでしょう。
SSP は元々 Cygwin DLL をプロファイルするために設計されたので、統計レポートを報告するコードブロックを自動的に選択することは出来ません。
メモリアドレスの範囲を手で把握し、それを指定する必要があります、その作業は難しくはありません。
ターゲットの「.text」セクションの範囲を決定するには、「objdump」プログラムを利用します。
我々が行う cygwin1.dll のプロファイリング方法を説明しましょう。
デバッグシンボルが含まれるようにビルドを行い(そうでないと、gprof
を実行することが出来ません)、そして objdump を次のように実行します。
$ objdump -h cygwin1.dll
次のようなレポートが出力されるでしょう。
cygwin1.dll: file format pei-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0007ea00 61001000 61001000 00000400 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
1 .data 00008000 61080000 61080000 0007ee00 2**2
CONTENTS, ALLOC, LOAD, DATA
. . .
必要となる情報は .text セクションの VMA と、それに続くセクションの VMA だけです(通常、セクションは連続しています。 最終アドレスを知るためには、VMA に Size を加えても構いません)。 この場合、VMA は 0x61001000 であり、最終アドレスは 0x61080000(.data の開始アドレスから求める方法)又は 0x0x6107fa00(VMA に Size を加えて求める方法)のどちらかとなります。
SSP の基本的な使い方は二つです。 プログラム全体をプロファイリングするか、プログラム中の特定の場所をプロファイリングするかです。
プログラム全体をプロファイリングするのであれば、オプションなしでただ単に
ssp を実行します。
デフォルトでは、SSP はプログラム全体をステップ実行します。
単純な例として、上記の数値を使ってみます。
$ ssp 0x61001000 0x61080000 hello.exe
これによってプログラム全体がステップ実行されます。
Pentium II / 300MHz のマシンでは最低でも 8 分が必要になります(ええ、本当ですとも)。
処理が完了すると、SSP は「gmon.out」というファイルを作成します。
gprof を利用すれば、このデータを人間にも読める形式のレポートへと変換することが出来ます。
$ gprof -b cygwin1.dll
「-b」は「ヘルプページをスキップする」ことを意味しています。
gprof が出力するレポート形式をよく知っているなら、ヘルプページを省略することが出来ます。
gprof のドキュメントにはこのレポートに関する様々な説明がありますが、ssp は幾つかを変更しています。
例えば、レポートの最初の部分は次のように、各関数が使用した時間の総量を報告しています。
Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 10.02 231.22 72.43 46 1574.57 1574.57 strcspn 7.95 288.70 57.48 130 442.15 442.15 strncasematch
「seconds」列は実際には CPU opcode であり、opcode ごとに 1/100 秒となります。 即ち、上記例の「231.22」は 23,122 opcode を示しています。 ms/call 値は 10 倍の大きさとなっており、1574.57 は呼び出し毎に 157.457 であることを意味しています。 レポートの second 部分にある「self」及び「children」についても、同様の補正が必要になります。
OK、そして今や長い時間をかけて生成されたレポートを手に入れることが、そして最適化すべきスポットを識別することが出来ました。 time() 関数を使ってみましょう。 プログラム内から SSP をコントロールするための OutputDebugString() を利用することによって、この関数に対する選択的なプロファイルを行うために SSP を利用することが出来ます。 サンプルプログラムを挙げましょう。
#include <windows.h>
main()
{
time_t t;
OutputDebugString("ssp on");
time(&t);
OutputDebugString("ssp off");
}
そして、SSP に -d
オプションを与えることにより、プロファイリングの初期値を *無効* とします。プログラムは最初の
OutputDebugString() までは最高速度で動作し、それから少しの間だけステップ実行します。
それから、(いつも通り)gprofを利用することによって、プログラムの実行の一部分だけのパフォーマンスプロファイルが参照出来ます。
SSP には沢山のオプションがあります。ステッププロファイリングはプログラムの実行速度を通常よりも 1,000 倍も遅くしてしまうので、プログラム中でシングルステップ実行が必要な部分を絞るためにも、全てのオプションを理解することが望ましいと言えます。
-v - 冗長(verbose)。
このオプションはスレッドの開始と停止、OutputDebugString()
の呼び出し、DLL のロードなどに関するメッセージを出力します。
-t 及び -c - 追跡(tracing)。
-t を利用すると、*全ての* ステップのアドレスがファイル「trace.ssp」に書き出されます。
複数のスレッドを追跡することが可能になるので、これはデバッグ関数の補助として使われます。
必要であれば、巧妙なスクリプトを利用してアドレスをディスアセンブルされた opcode とマッチさせることが出来るでしょう。
警告: 非常に急速に、*巨大な* ファイルが作成されます。
-c は各アドレスをコンソールに書き出すので、アセンブラのキーの塊に対しては有効です。
addr2line -C -f -s -e foo.exe < trace.ssp > lines.ssp
を実行し、それから perl cvttrace を実行すれば、シンボリックトレースへと変換出来ます。
-s - サブスレッド(subthreads)。
通常、トレースが必要になるのはメインスレッドだけですが、
全てのスレッドをトレースする必要がある場合は、このオプションを利用します。
サブスレッドを呼び出すだけの関数をプロファイルしたいときも、このオプションが必要になるでしょう。
しかし、OutputDebugString() を利用すると、呼び出されたメインスレッドではないスレッドは自動的にプロファイリングが有効になります。
-l - DLL のプロファイリング。
プログラムが使用した各 DLL でどの程度の時間が使用されたかを示す、簡単な表を生成します。
仮に大部分の時間が DLL 内部で使用されていたとしたら、プログラム中の関数を最適化するなどということは考えられないでしょう。
私は普段、-v、-s、-l
オプションを使用しています。
$ ssp-v-s-l-d0x61001000 0x61080000 hello.exe
Usage: strace.exe [OPTIONS] <command-line>
Usage: strace.exe [OPTIONS] -p <pid>
Trace system calls and signals
-b, --buffer-size=SIZE set size of output file buffer
-d, --no-delta don't display the delta-t microsecond timestamp
-f, --trace-children trace child processes (toggle - default true)
-h, --help output usage information and exit
-m, --mask=MASK set message filter mask
-n, --crack-error-numbers output descriptive text instead of error
numbers for Windows errors
-o, --output=FILENAME set output file to FILENAME
-p, --pid=n attach to executing program with cygwin pid n
-S, --flush-period=PERIOD flush buffered strace output every PERIOD secs
-t, --timestamp use an absolute hh:mm:ss timestamp insted of
the default microsecond timestamp. Implies -d
-T, --toggle toggle tracing in a process already being
traced. Requires -p <pid>
-v, --version output version information and exit
-w, --new-window spawn program under test in a new window
MASK can be any combination of the following mnemonics and/or hex values
(0x is optional). Combine masks with '+' or ',' like so:
--mask=wm+system,malloc+0x00800
Mnemonic Hex Corresponding Def Description
=========================================================================
all 0x00001 (_STRACE_ALL) All strace messages.
flush 0x00002 (_STRACE_FLUSH) Flush output buffer after each message.
inherit 0x00004 (_STRACE_INHERIT) Children inherit mask from parent.
uhoh 0x00008 (_STRACE_UHOH) Unusual or weird phenomenon.
syscall 0x00010 (_STRACE_SYSCALL) System calls.
startup 0x00020 (_STRACE_STARTUP) argc/envp printout at startup.
debug 0x00040 (_STRACE_DEBUG) Info to help debugging.
paranoid 0x00080 (_STRACE_PARANOID) Paranoid info.
termios 0x00100 (_STRACE_TERMIOS) Info for debugging termios stuff.
select 0x00200 (_STRACE_SELECT) Info on ugly select internals.
wm 0x00400 (_STRACE_WM) Trace Windows msgs (enable _strace_wm).
sigp 0x00800 (_STRACE_SIGP) Trace signal and process handling.
minimal 0x01000 (_STRACE_MINIMAL) Very minimal strace output.
exitdump 0x04000 (_STRACE_EXITDUMP) Dump strace cache on exit.
system 0x08000 (_STRACE_SYSTEM) Serious error; goes to console and log.
nomutex 0x10000 (_STRACE_NOMUTEX) Don't use mutex for synchronization.
malloc 0x20000 (_STRACE_MALLOC) Trace malloc calls.
thread 0x40000 (_STRACE_THREAD) Thread-locking calls.
strace プログラムはプログラム、及び場合によってはそのプログラムの子プログラムも実行し、そして全ての Cygwin DLL の出力をプログラムから標準出力或いは -o オプションで指定されたファイルへと書き出します。
strace のセッションは、次のようにすれば新しいウィンドウで開始することが出来ます。
$ strace -o tracing_output -w sh -c 'while true; do echo "tracing..."; done' &
これは特に、長い時間がかかる strace セッションに有効です。
strace はスタンドアロンの Windows
プログラムであり、Cygwin DLL それ自体には依存していません(このことは、cygcheck
を利用して確かめることが出来ます)。そのため、strace
は POSIX パス名やシンボリックリンクを解釈しません。
このプログラムは主に、Cygwin DLL それ自身のデバッグに役立ちます。
Usage: umount.exe [OPTION] [<posixpath>] Unmount filesystems -A, --remove-all-mounts remove all mounts -c, --remove-cygdrive-prefix remove cygdrive prefix -h, --help output usage information and exit -s, --system remove system mount (default) -S, --remove-system-mounts remove all system mounts -u, --user remove user mount -U, --remove-user-mounts remove all user mounts -v, --version output version information and exit
umount プログラムはマウントテーブルからマウントを取り除きます。
現在のマウントポイントに対応する POSIX パスを指定した場合、umount
はシステム用のレジストリ領域からそのマウントを取り除きます(Administrator 権限が必要です)。
-u フラグを指定すれば、ユーザ独自のレジストリ領域からマウントが取り除かれます。
umount ユーティリティは全ての特定のタイプのマウントを取り除くためにも使われます。
拡張オプションを使用することにより、全てのマウント(-A)、マウントされている全ての cygdrive 自動マウント(-c)、現在のユーザのレジストリ領域中の全てのマウント(-U)、或いは、システム全体のレジストリ領域中の全てのマウント(-S)を取り除くことが出来ます(Administrator 権限があれば)。
マウントテーブルに関する更なる情報については 項3.7.8. 「mount」 を参照して下さい。