ページ更新: 2014-02-25 (火) (3320日前)
Cygwin 1.7.1 が2009-12-23 に出ましたが、Cygwin 1.7系に対して、このページの内容が通用するかどうかは判りません。 目次
squid(2017-10-18) #自分はまだ試していません。
strftimeでタイムゾーンオフセットが間違っている? (2014-02-25) #(調査中: 1台のPCしか、試していません。) 環境 $ cygcheck -cd cygwin libgcc1 tzcode Cygwin Package Information Package Version cygwin 1.7.28-2 libgcc1 4.8.2-2 tzcode 2013d-1 strftime で TZ=Asia/Tokyo のとき、%z (UTCからのオフセット)を表示させると、正しい値を出力しません。 strftime_check.cpp: #include <cstdio> #include <ctime> int main() { time_t rawtime; time(&rawtime); tm * timeinfo = localtime(&rawtime); const size_t size = 128; char buf[size + 1] = {0}; strftime(buf, size, "%Z %z", timeinfo); puts(buf); return 0; } $ TZ=JST-9 ./strftime_check JST +0900 ★OK $ TZ=Asia/Tokyo ./strftime_check JST +1000 ★BAD straceでトレースしたら、/usr/share/zoneinfo/Asia/Tokyo を読んでました。 書式は http://ja.wikipedia.org/wiki/Tz_database で、Cygwin の tzcode パッケージの2013d-1 版に含まれています。 $ strace -o log strftime_check $ file /usr/share/zoneinfo/Asia/Tokyo /usr/share/zoneinfo/Asia/Tokyo: timezone data, version 2, 3 gmt time flags, 3 std time flags, no leap seconds, 9 transition times, 3 abbreviation chars $ cygcheck -f /usr/share/zoneinfo/Asia/Tokyo tzcode-2013d-1 $ cygcheck -l tzcode | grep Tokyo /usr/share/zoneinfo/Asia/Tokyo /usr/share/zoneinfo/posix/Asia/Tokyo /usr/share/zoneinfo/right/Asia/Tokyo Ubuntu 10.04.4 LTS では、問題なし。 $ TZ=Asia/Tokyo ./strftime_check JST +0900 $ TZ=JST-9 ./strftime_check JST +0900 $ dpkg -S /usr/share/zoneinfo/Asia/Tokyo tzdata: /usr/share/zoneinfo/Asia/Tokyo $ dpkg -l tzdata Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ 名前 バージョン 説明 +++-================-================-================================================ ii tzdata 2013g-0ubuntu0.1 time zone and daylight-saving time data[編集] ログインシェルでログイン時に実行されるbash_completion が遅いので、無効にした (2010-11-01) #bash-completionパッケージをインストールしている場合、ログインシェルでログインするときに時間がかかる件について。 (このことは数年前(Cygwin-1.5.xのころ)に気が付いて手元のPCすべてで対処していたが、 最近Cygwinを再インストールしたときにこの対処を忘れていたため、今回まとめておく) Windows XP Professional SP3, cygwin 1.7.7-1, bash-completion 1.2-1 にて。 $ cygcheck -cd bash-completion cygwin Cygwin Package Information Package Version bash-completion 1.2-1 cygwin 1.7.7-1 ログインシェルとして起動すると、やたら遅い。(bash --login -i、あるいは mintty -)。 PentiumM 1.1GHz (Pentium M 733J - Dothan, PC/NEC PC-VY11FBHET) を30秒間程度100%使用している。 (Microsoft Sysinternals Process Explorerで確認) 実行経路: /etc/profile → /etc/profile.d/* → /etc/profile.d/bash_completion.sh → bash_completion bash-completionパッケージをアンインストールするのも億劫なので、名前を /etc/profile.d/bash_completion.sh-disable に変更して無効化した。 bash-completion について
SIGSEGV発生時の終了コードを調べてみた 2005-02-13 #segfault.c int main(int argc, char *argv[]) { volatile int *p = 0; if (argc == 1) { *p = 1; } return 0; } コンパイル $ gcc -O -Wall segfault.c -o segfault.exe 実行 $ ./segfault; echo $? Segmentation fault (core dumped) 139 実行 $ ./segfault 0; echo $? 0
$ kill -l (略) 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS (略) $ kill -l 11 SEGV $ kill -l segv 11[編集] Windows側のユーザの反映 (2004-11-06) #sshdやproftpdで使うために、環境を用意する手順。 不必要な作業もあるけど、そこらへんは余り考えていない。 環境は Windows XP Professional SP1で、ローカルユーザのみ考慮。 1. Windows にユーザを追加する。ここでは仮に 'user' とする。 2. mkpasswd, mkgroup を使って、/etc/passwd, /etc/groups を作り直す。 (もし、過去に手で修正しているなら、バックアップしておいて後で手で反映) $ mkpasswd -l > /etc/passwd $ mkgroup -l > /etc/group 3. 追加したユーザで bash を起動してみる。/home/ユーザ名 ディレクトリが 作成され、.bashrc, .inputrc などが作成される。(これって /etc 以下に ひな形があるはずだが、調べてない) $ runas /user:user 'c:\cygwin\bin\bash.exe --login -i' user のパスワードを入力してください: c:\cygwin\bin\bash.exe --login -i をユーザー "HOSTNAME\username" として開始しています. ..[編集] プロセスごとのメモリ消費量 (2004-07-26) #ps コマンドや top コマンドの出力(top -b -n1 のようにバッチモードを使う)で 調べてもよいが、 /proc ファイルシステムを使って、たとえば次のようにしてみる。 ( Life with Cygwin 3 のシェルスクリプト流用) この場合、/proc/*/exename と /proc/*/status の VmRSS を出している。 #!/bin/sh for x in /proc/* do if [ -r $x/exename ] then echo `cat $x/exename` `grep VmRSS $x/status | awk '{print $2}'` fi done これを progmem ってファイルに入れて、chmod +x して、実行してみる。 $ ./procmem /usr/bin/bash 3760 /usr/sbin/httpd 3832 /usr/sbin/httpd 3832 /usr/sbin/httpd 3832 /usr/sbin/httpd 3836 /usr/sbin/httpd 3832 /usr/bin/sh 1940 /usr/bin/bash 1896 /usr/bin/bash 3724 /usr/bin/bash 3756 /usr/bin/cygrunsrv 2292 /usr/bin/cygrunsrv 2260 /usr/sbin/cygserver 2172 /usr/sbin/httpd 4724 /usr/sbin/inetd 2144 /usr/sbin/inetd 2832 なお、(少なくとも)Cygwin の top は /proc/*/ から情報を得ている。 使っているエントリは strace コマンドで調べることができる。 $ strace -o top.log top -b -n1 ★ strace が終了すると、top.logができているので、これを見る。[編集] エクスプローラでフォルダの右クリックからbashを呼ぶ (2004-06-21) #
Customize - Cygwin覚え書き - エクスプローラでフォルダの右クリックからbashを呼ぶ より。 PowerToy の 'Command Prompt Here' を Cygwin の bash でやる手法。
c:\bin\bashhere.cmd @echo off rem エクスプローラでフォルダの右クリックからbashを呼ぶ rem http://lamoo.s53.xrea.com/customize/index.html#cygwin set BASH_HERE_CURRENT_DIRECTORY=%1 C: chdir C:\cygwin\bin bash --login -i bashhere.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Folder\shell\bash] @="Cygwin bash" [HKEY_CLASSES_ROOT\Folder\shell\bash\command] @="c:\\bin\\bashhere.cmd \"%1\"" /etc/bash.bashrc # System-wide .bashrc file if [ ! -z "$BASH_HERE_CURRENT_DIRECTORY" ]; then cd "$(echo "$BASH_HERE_CURRENT_DIRECTORY" | tr -d "\"" | cygpath -u --file -)" unset BASH_HERE_CURRENT_DIRECTORY fi[編集] Cygwin Bash Shell 終了時の「バッチ ジョブを終了しますか」を回避 #Cygwinをインストールしたときに作成されるショートカット「Cygwin Bash Shell」を 使ってbashを実行しているとき、一度でも ctrl-C を入力すると、bashの終了時に 次のメッセージが表示される。 $ exit logout バッチ ジョブを終了しますか (Y/N)? この原因は、このショートカットがc:\cygwin\cygwin.batを実行しているためなので、ショートカットで直接、bashを起動するように変更した。 [編集] エラーでデバッガ起動 (未確認) #CYGWIN=error_start=c:\cygwin\bin\gdb.exe[編集] emacsを^X^Cで終了できない #emacsをctrl-X ctrl-C で終了できないので、こうする。 alias emacs='CYGWIN=tty emacs' ただし、emacs終了後にコンソールで、キーボード入力が何も表示されなくなるが、 resetコマンドで解消できる。 [編集]hexdumpいろいろ (2003-11-18) #cygwin-mlの'how to do "hexdump" to analyze special white-space characters?'より。 cat -vet od dump xxd xxd -g1 が一番見慣れた表示になる。 なお、任意位置の表示は-seekと-lenを使う。 $ xxd -g1 -seek 0xb4 -len 0x05 file 00000b4: ff 93 fe f0 70 ....p
whatisデータベースの作成 #/var/cache/man を作成した後、/usr/sbin/makewhatisを実行する。 これでwhatis, apropos, man -k が使えるようになる。 |