ずんだあん

zunda-an

コマンド覚え書き

いろいろうろうろしていて見つけた便利なコマンドたち。 と、小技たち。 最近は、 こちらにも いろいろ書いてるらしいです。

Last Updated:
2002.4.17. ベッセル関数


Windows

Windows 98 4.10.1998、Office 97 SR-2くらいのお話です。

zemaxの絵をWordに貼る

クリップボードにコピーしたものをそのまま貼ると、プリントアウトできまへん。 がっくし。

まず、メタファイルに出力して、 パワーポイントで用紙の大きさを最大にしたところに、 挿入→図→ファイルで挿入。 グループ化を解除すると巨大になるので、全てが選ばれたままで、 グループ化をまたする。 線の太さは、0.5ptくらい、色も適当に変えるといいかも。 上下反転しているのを直して、 一辺が58cm以下になるように、書式から大きさを変更。 紙面からいなくなった場合は、スクロールバーを動かすと出てくるかも。

できあがった図を選んで、クリップボードにコピーして、 Wordに、編集→形式を選択して貼り付け→メタファイルで、 やっとWordに貼り付きます。 あー。長い。

パワーポイントで小さくしすぎると、線分の座標が量子化されてるのが 見えちゃいます。ぎざぎざ。 最後に、Ctrl+Vで貼り付けちゃう(Officeアート)と、 いつまでたっても貼り付けがおわらん。 どーしてこーいうソフトができるかね?

WinCVSを使ってみる

WinCVSは、 Windowsで動くCVSクライアントです。(たぶんサーバーもある。) sshでリモートのレポジトリにつないで使ってみました。 そのときのメモ。

お。パスさえ通ってればDOS窓から普通にcvsが使えますよ。これは便利。 具体的には、 c:\autoexec.batset path=%path%;cvsとsshのパス と、 set cvs_rsh=ssh を追加する。

キーボードの配置を変える

そもそもユーロ記号を簡単に入力したくて始めたのですが…。 コントロールパネル→キーボード→「言語」タブで、 例えば「英語(U.K.)」を「追加」できます。Windows CD-ROMが必要。 そうすると、Shift+3でポンド記号が入力できたり、 「ドイツ語(標準)」でZとYを入れ替えて右の方にウムラウト文字があわられたり。

USキーボードなんて方言のひとつみたいなものなのですねぇ。 SUNのワークステーションを使いたくなると、どこでもUS的配置なのですが。 今はそうでもないのかな?

さて。ユーロ記号は、「Ctrl+Alt+テンキーの数字でコードを入力」で入るはず (少なくともOfficeでは、ということかな?)なのですが、 テンキーの無いキーボードの場合はどうするんでしょうか?

Excelでユーロを扱う

というわけでバータリー的解決方法。

  1. Wordを立ち上げ、挿入→記号と特殊文字で、フォントをArialにして、 ユーロ記号を挿入。下から5行目、左から4つ目にあります。 Arialじゃなくてもユーロ記号があるフォントならいいのだろう。
  2. 挿入したユーロ記号を選択して、Ctrl+Cでクリップボードにコピー。
  3. Excelを立ち上げ、適当なセルに適当な数字を入力。
  4. Ctrl+1で書式を、例えば会計→ドルにしておく。
  5. もう一度、書式を変更。ユーザー定義を選ぶと、 さっき設定したドル表示のための書式文字列があるので、 そこのドル記号を選択し、Ctrl+Vでクリップボードのユーロ記号に置きかえる。
  6. そのセルのフォントを、ユーロ記号をサポートしてるものにしておく。 MSゴシックはいいけど、MS明朝はだめ(豆腐になる)、とか変なの。

これをマクロにしてみると…。 Wordで特殊文字を選ぶときに、この文字のコードが128ということがわかります。

  1. 以下のマクロを入力して、適当な名前で C:\Program Files\Microsoft Office\Office\XLStart かOfficeのインストールされているディレクトリに保存する。
    Sub Euro()
        Selection.NumberFormat = _
           "_-" + Chr(128) + "* #,##0.00_ ;_-" + Chr(128) + "* -#,##0.00 ;@"
    End Sub
    
  2. Excelを立ち上げなおし、新規のブックを開いておいて、 ツール→ユーザー設定→ツールバーで、
    1. 適当なツールバー(新しく作ってもいい)に、 コマンド→マクロ→ユーザー設定ボタンを挿入
    2. 選択したボタンの編集→マクロの登録で先ほど保存したマクロ を登録
    3. ボタンの見た目を適当に調整

これで、ユーロ単位にしたいセルを選択しておいて、このボタンを押せば、 ユーロ単位の表示になります。 もう少し洗練されたやりかたもあるような気がするけど…。

あ、古いプリンタドライバ使うとユーロ記号が化けますね。

wmfを編集する

Powerpointでウインドウズメタファイルをあるていど編集できます。 Wordだとちょっと変になる。

  1. Powerpointを起動
  2. 挿入→図→ファイルから、で編集するファイルを指定
  3. 挿入した図をダブルクリック
  4. Microsoft office描画オブジェクトに変換しますか?→はい
  5. いぢる
    右クリック→グループ化→グループ解除が効果的♪

…と編集のあとはPowerpointファイルとして保存するしかないのですが。 うーむ。 でも、コピーしてIllustratorにペーストすれば、 epsにもなってTeXに貼ったりもできます。 epsプリンタに印刷という手もある。

Windowsにperlを入れる

Wordの数式をHTMLにしたいのだが、Microsoftの吐くHTMLは余計なタグが多い。 これを消すのにperlを使ってみることにしました。 Linuxに行くとZEMAXが使えないのですねぇ。 試したのは、ActivePerl 5.6.1-626です。

まずはインストール

日本語化パッチもありますがいまのところ必要性を感じていないので、 オリジナル版だけを入れておきます。

  1. ダウンロード
    http://www.ActiveState.com/ActivePerl/より。 Microsoft Installerなどというものは持って無いので、 AS package (zipファイル)をいただいてきました。 Windows 98ではMicrosoft Windows Installer 1.1+、Internet Explorer 5、 DCOM for Windows 98 が必要だと書いてあるが、 文字列処理をするぐらいなら要らなさそうだ。
  2. 展開
    インストール先にひとつディレクトリを掘って展開するのが良さそう。 うちの場合は、C:\Program Files\localbinに perlというディレクトリを掘ってみました。
  3. インストール
    C:\Program Files\localbin\perlにcdして、install.batを実行。 質問に答えます。
  4. AUTOEXEC.BATの修正
    インストール時にperlのパスを足してくれるのですが、 パス名に空白が入ってエラーになるので、 SET PATH=C:\Program Files\localbin\perl\bin;%PATH%SET PATH=C:\PROGRA~1\localbin\perl\bin;%PATH% に変更。
  5. 再起動
    まったく、パスを追加するだけなのにねぇ。

使う

以下のようなバッチファイルにスクリプトを入れこむと、便利かも。 上記install.batからの借用です。

perlのライブラリをuseすることもできてかなり便利。 ライブラリは、C:\Program Files\localbin\perl\lib\ などに入ってますが、@INCが設定されていて場所を気にする必要はありません。 C:\Program Files\localbin\perl\html\index.htmlから辿れる ドキュメントも非常に有用。 ActiveState corp. に感謝いたします。 The author of this site thanks to ActiveState corp.

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S "%0" %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!perl -w
#line 15

print "Hello! perl\n";	# ここにスクリプトを書く

__END__
:endofperl

ZEMAXで星像と瞳像を同時に扱う

光学設計のお話。 ZEMAXで、リオ・ストップにできる瞳像をそこそこよくしながら、 同時に星像をよくしたいときが、時々あります。 二つファイルを作って、いったりきたりして最適化を繰り返してきたのですが、 Multi-Configurationにすることで解決できそう。 以下、望遠鏡の副鏡を瞳にする場合を考えます。

イラストレーターのメインのウインドウが居なくなった

イラストレーターのデータをワードに貼りつけたりしてたら、 起動後に、ツールボックスなどは見えるがメインのウインドウが出てこなくなった。 Alt+Fなどでメニューのカスケードだけ出てくるのがお茶目だがこれでは使えない。

実行ファイルのあるディレクトリに行って、 Ctrl+Fから最近変更されたファイルを検索。 AIPrefsというのがあったので、リネームしてから、イラストレーターを起動した。

無事、イラストレーターが立ち上がって、 新しいAIPrefsが作られた。 はー良かった。

機械翻訳ソフトを入れてから、Wordが起動時にエラーを出す

英語とヨーロッパ言語の機械翻訳ソフトを入れたら、Wordが起動時に、 「非表示モジュール hoge内でコンパイルエラーが発生しました。」 と文句を言うようになった。 日本語版のWordだからいけないんだろう。

C:\Program Files\Microsoft Office\Office\STARTUP\ にそれらしいファイル hoge.dot があったので、 拡張子を加えて、 hoge.dot.bak にファイル名を変更した。

エラーも出なくなった。よしよし。 たぶん機械翻訳ソフトがWordから使えなくなってるんだろうけど、 どうせ使わないので問題なし。

Excelで「リンク貼りつけ」したときに空白セルに「0」が表示される

空白のときは文字列として空白を返す関数をかませればいい。 Alt+F11でマクロエディタを開き、オブジェクトを右クリックして、 挿入→標準モジュールで、以下のコードを書き入れる。

Function LinkPaste(Value)
  If (Len(Value) > 0) Then
    Ret = Value
  Else
    Ret = ""
  End If
  LinkPaste = Ret
End Function

マクロエディタを閉じ(なくてもいいけど)、 「リンク貼りつけ」したセル、たとえば=Original!A1になってるのを、 =LinkPaste(Original!A1)に直せば完成。 他のセルも同様にしたいときは、直したセルをコピーしてから、 ペースト先を選び、編集→形式を選択して貼りつけ→数式(F)をチェックして、 OKを押す。

Wordからポストスクリプトプリンタにプリントアウトすると、 メモリが足りないと怒られる

  1. 印刷→ファイルに出力でWordからポストスクリプトファイルを作成
  2. DistillerでPDF化
  3. Acrobatreaderで表示、プリントアウト

NetscapeでPDFを別のウインドウで表示する

WindowsのネットスケープでPDFをNavigatorのウインドウに出されると、 コピーなどできない処理がある。

  1. Help→About plug-insでプラグインのdllの位置を確認。
  2. Netscapeを終了。
  3. nppdf32.dll Nppdf32.jpn を他の場所に移動。
  4. Netscapeを起動。
  5. Edit→Preferences→Navigator-Applicationsで、New Type...を押し、 MIME Type: application/pdfを指定、タブを押すと、 Windowsのエクスプローラで表示→フォルダオプション→ファイルタイプ に登録されているソフトが入るので、OK

Acrobat Reader 4.05b以前はバッファオーバーフローがあるので注意。

Excelの自動変換を無効化

Excel 97で、「...」(半角ピリオド三つ)が、 「…」(全角てんてん?)に化ける。 メニューバーより、 ツール→オートコレクト→入力中に自動修正する、のチェックをはずす。

tracert

Windowsのtraceroute発見!

C:\WINDOWS>tracert www.yahoo.com

Linux/unix

ssh-agentをXのユーザー以外が使う

ssh-agentをXのセッションからsuしたユーザーで使いたくなったのですが、 環境変数をいちいち設定するのが面倒だなあ、という話。 sh系シェル専用ですので、csh系の方は適宜読み換えてくださいまし。

以下のスクリプトを、たとえば、/usr/local/bin/ssh-agent-agent とかにコピーして、chmod +xして実行すれば、 ホームディレクトリに、.ssh-agent-agentというファイルができます。 あとは、これを、

. .ssh-agent-agent

とすれば、ssh-agentが生きていれば、それを再利用するように、 SSH_AUTH_SOCKと、SSH_AGENT_PIDを設定してくれるし、 そうでなければ、/usr/local/bin/ssh-agent-agentを実行しなおして、 新しくssh-agentを立ち上げて、ssh-addしてくれます。

なかなか便利だわい。

/usr/local/bin/ssh-agent-agent

#!/bin/bash
rcfile=~/.ssh-agent-agent
ident=~/.ssh/id_rsa

# add lines so that ssh-agent can be started from rcfile
add_lines () {
  cat << _END >> $rcfile
if [ ! -S "\$SSH_AUTH_SOCK" ]; then
  $0
fi
_END
}

# function to ssh-agent and ssh-add
start_agent () {
  killall ssh-agent 2>/dev/null
  ssh-agent >| $rcfile && . $rcfile && ssh-add $ident && add_lines
}

# let first time user know how to use this
if [ ! -f $rcfile ]; then
  echo do \'. $rcfile\' to enable ssh-agent
fi

# make up the rcfile
if [ -n "$SSH_AGENT_PID" ] && [ -S "$SSH_AUTH_SOCK" ]; then
  # if we already have ssh-agent, mimic the output of ssh-agent
  # the user might still have to ssh-add by him/herself
  cat << _END >| $rcfile
SSH_AUTH_SOCK=$SSH_AUTH_SOCK; export SSH_AUTH_SOCK;
SSH_AGENT_PID=$SSH_AGENT_PID; export SSH_AGENT_PID;
echo Agent pid $SSH_AGENT_PID;
_END
  add_lines
else
  # if we do not have a ssh-agent, start ssh-agent and ssh-add
  if [ -f $rcfile ]; then
    eval `grep 'export SSH_AUTH_SOCK' $rcfile`
    eval `grep 'export SSH_ANGENT_PID' $rcfile`
    if [ ! -S "$SSH_AUTH_SOCK" ]; then
      start_agent
    else
      echo ssh-agent is already running
    fi
  else
    start_agent
  fi
fi

生成される~/.ssh-agent-agentの例

SSH_AUTH_SOCK=/tmp/ssh-XXELUH5C/agent.21290; export SSH_AUTH_SOCK;
SSH_AGENT_PID=21300; export SSH_AGENT_PID;
echo Agent pid 21300;
if [ ! -S "$SSH_AUTH_SOCK" ]; then
  /usr/local/bin/ssh-agent-agent
fi

夏時間にする

3月31日から夏時間になりました。スタンバイから復帰すると、 タイムゾーンは、CESTと夏時間になってるのに、時刻は冬時間のままだ。 ハードウェアクロックはローカルタイムということにしていて、 Windowsも起動していないので、一時間ずれてしまったのでした。 以下のようにまずはシステムの時刻を合わせました。

% su
# date; date --set '1 hour'
2002年  3月 31日 日曜日 17:29:40 CEST
2002年  3月 31日 日曜日 18:29:40 CEST

いきなりXscreensaverが動いてびっくり。 次に、ハードウェアクロックに反映。

# cat /etc/adjtime; /usr/sbin/hwclock --systohc; cat /etc/adjtime
-0.418002 1017040089 0.000000
1017040089
LOCAL
566.241638 1017592283 0.000000
1017592283
LOCAL

/etc/adjtimeはぜんぜんおかしくなっちゃったので、とりあえず削除しておこう。

rm /etc/adjtime

これでいいのかな? Windowsで使わないなら、ハードウェアクロックはGMTにしておいた方が楽な模様。

magicpointにgnuplotを貼りこむ

gnuplot3.8(開発版)ではXにプロットされたグラフの表示範囲を、 マウスの右クリックで変えることができるようになりました。 これをmagicpointに貼れば、グラフをぐりぐり動かすプレゼンができそう。

まず、プロットされるべきスクリプトを用意しておく。 例えば、foo.plot:

set xlabel "x"
set ylabel "y"
set title "sin(x)"
set xrange [-10:10]
set yrange [-1:1]
plot sin(x) with lines
pause -1

マジックポイントのソース (bar.mgp) の方はこんな具合。 gnuplotのオプションは、 -fontオプションでgnuplot内のフォントを指定、 -backgroundで背景色 (以下の例だと黒板みたいになりますよん)、 -rvで暗い背景色に文字や軸の色を合わせてもらいます。

  - 前略 -
%center
%xsystem "gnuplot -font -*-helvetica-medium-r-*-*-20-*-*-*-*-*-*-* -background darkgreen -rv foo.plot"
  - 後略 -

これを、mgp -O bar.mgpで表示します。 -Oオプションを付けないと、 マウスのクリックやキーボードからの入力がgnuplotに伝わりません。 ウインドウマネージャ依存かもしれませんが、 fvwm2の上では快適♪

-Oオプションを付けると、 %xsystemで表示されたウインドウが自発的に閉じると (gnuplotでqを押したとか) プレゼンテーションが道連れにされちゃうので注意が必要。

X11-big-cursor MINIHOWTOに従って、cursor.bdf (ftp://ftp.xfree86.org/pub/X.Org/pub/R6.4/xc/fonts/bdf/misc/cursor.bdf にありました。) をいただいてきて、 でっかいカーソルを作ると、発表のときに、見やすいかも。うひひ。 Kondara2.1Beta3では、bdfresizeは、bdfresize-1.5-2kに、 bfftopcfはXFree86-4.1.0-54kにありました。 こんなことしてないで、発表する中身を準備しなくちゃ。

skkinputでedictを使う

Shift+Spaceでskkinputのウインドウを出して、/を押すと、▽モードになります。 ここで、ATMとか打ってSpaeceを押すと、 キャッシュサービスコーナーなどと候補が出る。 こりゃ便利。

あ、ついでに。 間違えて辞書に登録した単語を消すのは、 その候補を出しておいてから、X を押す。

xyakuの設定

xyakuという X上で動くソフトがあります。 rxvtなどの上で英文を編集しているときに、 ハイライトしてホットキーを押すと、辞書を引いてくれたりするという、 なかなか便利なもの。 学会などへのアブストラクトを書いていると、単語数が気になったりしません? そういうわけで、xyakuからwcなども呼べるようにしてみました。 スペルチェックもできますよん。

.xyakurc
これをホームディレクトリの下に置いておくと、 調べたい単語やパラグラフを選択しておいて、 Shift+F1でedictが、 Shift+F2でwcが、 Shift+F3でipellが、 が実行され、結果が表示されます。 もう一度同じキーを押すと消える。
edict.sh
Shift+F1で実行されるシェルスクリプト。 オリジナルのものと違って、 edictファイルを1回だけgrepするようにしてあります。 複数の単語が選択されている場合は、最初の1個だけを調べます。 余計なエントリーが出てくることもありますが、 待たされる時間は少ない。
wc.sh
wcしてくれる。文字数、単語数、行数の順に表示されます。
ispell.sh
ispell -lしてくれる。ispellの辞書に無い単語を表示してくれます。

上記の設定ファイルを~/.xyakurcとして、 .shファイルを~/.xyaku.d/に置いてchmod +xしておきます。 xyakuを実行しておくと、シアワセになれる。 .xinit.d/hookに書きたしておいてもいいかもしれませぬ。

lndir

ディレクトリのコピーを作って、そちらだけでmakeしたい場合など。 man lndirより。

名前
       lndir - 他のディレクトリツリーへのシンボリックリンクを持つ
       シャドウディレクトリを生成する

書式
       lndir [ -silent ] [ -ignorelinks ] fromdir [ todir ]

説明
       lndir はディレクトリツリー fromdir のシャドウコピーであ る
       todir を生成する。ただし、シャドウコピーは実際のファイルを
       置いたものではなく、ディレクトリツリー fromdir にある実 際
       のファイルを指すシンボリックリンクを置いたものである。この
       コマンドは異なるマシンアーキテクチャ用のソースコードを管理
       するときに便利である。ユーザはリモートマシンの実際のソース
       があるディレクトリをマウントし、これに対するリンクを持つシ
       ャドウディレクトリを作ることができる。このシャドウツリーで
       プログラムの構築を行うと、シャドウディレクトリにあるソース
       ファイルは実際のファイルへの単なるシンボリックリンクである
       が、オブジェクトファイルはシャドウディレクトリに生成される
       。

       この方法には、ソースコードを更新しても他のアーキテクチャ用
       のコードまで手で直す必要がないという利点がある。なぜなら、
       シャドウディレクトリにある全てのソースコードは実際のソース
       へのシンボリックリンクだからである。よって、シャドウディレ
       クトリに移動してそのまま再コンパイルを行うことができる。

  (後略)

長年思いだせなかったコマンドをやっと思いだしました。 でんすけさんの ふが日記 より。

CD-ROMのボリュームラベルを読む

Windowsではエクスプローラーで確認できるCD-ROMのボリュームラベル、 時々これが知りたくなるのです。 CD-ROMをumountして取り出して物理的に書いてある文字を確認してもいいんだけど、

volname /dev/cdrom

で見られる。デバイスファイルを読むので、マウントしてなくても大丈夫。 The Linux CD-ROM HOWTO, How do I read a CD volume label?より。 Kondara2.1b3では、eject-2.0.12-2k に入ってます。

watch

watch コマンド [オプション …]

すると、2秒ごとにコマンドを実行して表示してくれる。 これは便利。watch cat /proc/meminfoとか。 kawa's memo経由で、ねぎ式より。

lprがPermission deniedと言って印刷してくれない

Kondara 2.1くらいのlprコマンドは、

% cd $HOME
% lpr hoge.ps
Warning - Cannot open file 'hoge.ps', Permission denied
lp: nothing to print
となり、引数にポストスクリプトファイルを指示すると印刷できない。
% cd /tmp
% lpr hoge.ps
なら普通に印刷してくれるのに。

/usr/bin/lpr が lpさん にSUIDされていて、 ユーザーのホームディレクトリのファイルを読む権限がないのでせう。

とりあえずの回避策は、

% cd $HOME
% cat hoge.ps | lpr
標準入力ならだれでも見られるので、ちゃんと印刷してくれる。

もっと根本的な解決策は無いだろうか? $HOMEの下とか、/tmpの下って、ファイルのあらわなパーミションと、 実際の動作との間に、 自分のホームディレクトリの下の他人のファイルが、600でも消せちゃうとか 違いがあるみたいなんだけど、 どこで設定されてるんだろ?

…ファイル自身の書き込み許可はoverrideできるけど、 そのファイルのあるディレクトリの書き込み許可はoverrideできない、ってこと? すなくとも、vxfsではファイル自身のパーミションはoverrideできないし、 ReiserFSの仕様なのかな? 便利だからいいんだけど、感覚的に慣れるのに時間がかかりそうだ。

screen

こういうの欲しいんすよ、と思ってたら既にあるし。 プロセスの入出力を端末から切りはなしておいてくれるので、 別の端末に入出力を移したり、 2個所から作業のなりゆきを見まもったり、 裏で静かに動いてもらったりできる。

端末のベルを鳴らさないようにする

bashでTABでファイル名を補完する時とか、 viで行末まで行ったときとか、ベルが鳴るのだが、 家で仕事をしていると結構うるさい。

bashの音を消す。man bashすると、 readlineの設定を変えればいいらしいことがわかる。

  1. /etc/inputrcを~/.inputrcにコピーして、以下を書き加える。
    set bell-style none
    
  2. ログインしなおす。 ~/.inputrc が無い場合は、/etc/profile で環境変数 INPUTRC が /etc/inputrc に設定されているので、上記の設定が有効にならない。

vi (vim) の音を消す。vimで、:help visualbell するとわかる。 ~/.vimrc に以下を書き加える。

set vb t_vb=

rxvt に -vbオプションをつけるか、rxvt.visualBell: trueにすると、 rxvtがビジュアル・ベルを表示するようになる。ちょっと見にくい。

もっといい方法が、aさんの、備忘録+随想録 に載っていました。

Nanaさんの、⊂ななんち⊃にも。

んー。一番目はatermに効く方法ですね。これって、 *visualBell: true とか書いておくとrxvtとかktermとかにも有効になるのかしら? (書くなら試せっ、とも思いますが、そのうち…。) 二番目は、readlineライブラリを使ってないソフトには効かなかったり。 やっぱりスピーカーのケーブルを引っこ抜く、というのが王道なのかな? ノートパソコンでは難しいけど。

sshでXを飛ばす

サーバー側は、/etc/ssh/sshd_configとかの、 X11Forwarding noX11Forwarding yesに変える。

クライアント側は、 きっと~/.ssh/にょろにょろとかに書いてもいいんだろうけど、 簡単なのは、-Xオプションを付けてつなぐ。

perlの一行プログラム

sedじゃできないようなパイプをperlでやりたいとき、 perl -ne 'コマンド' とする。

-nオプションは、 while(<>){…}が実行するスクリプトを囲んでいると解釈し、 -eオプションは、次の引数をスクリプトとして実行する。

ftpの続行

というわけでrpmを作っていたわけですが。 サーバーにftpしようとすると、途中でとまってしまう。 gzipすると全部行く、止まる付近に 0x00 が並んでいる、ということから、 ファイヤーウォールの設定が悪かろうということにしました。 しかしそれでは、アップロードができない。

で、man ftpしていてみつけました。(ftp-0.16-3k2) 切れたところの後からputをrestartできる。 getしてきたところ、同じファイルになってました。 太字が端末からの入力。

ftp> put gsl-0.9-1z.i386.rpm
local: gsl-0.9-1z.i386.rpm remote: gsl-0.9-1z.i386.rpm
227 Entering Passive Mode (XXX,XX,XXX,XXX,XXX,XXX).
150 Opening BINARY mode data connection for gsl-0.9-1z.i386.rpm
450 Transfer aborted.  Link to file server lost.
  …こういう風に切れちゃう。
ftp> dir
227 Entering Passive Mode (XXX,XX,XXX,XXX,XXX,XXX).
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 XXXXXXXX XXXXXXXX    34752 Jul 12 17:51 gsl-0.9-1z.i386.rpm
226 Transfer complete.
  …で、切れるまでに送れた量を確認。
ftp> restart 34752
restarting at 34752. execute get, put or append to initiate transfer
  …今度はここから始めますよーんと知らせておくと。
ftp> put gsl-0.9-1z.i386.rpm
local: gsl-0.9-1z.i386.rpm remote: gsl-0.9-1z.i386.rpm
227 Entering Passive Mode (XXX,XX,XXX,XXX,XXX,XXX).
350 Restarting at 34752. Send STORE or RETRIEVE to initiate transfer.
150 Opening BINARY mode data connection for gsl-0.9-1z.i386.rpm
226 Transfer complete.
4301664 bytes sent in 91.8 secs (46 Kbytes/sec)
  …そこから始めてくれるのです。

ツリー状ps

をー。わかりやすい。

% ps xf
 1202 pts/3    S      0:00 -bash
11263 pts/3    R      0:00 ps xf
 1156 pts/2    S      0:00 -bash
 2291 pts/2    T      0:00 rpm -vv -ba gsl.spec
10429 pts/2    T      0:00  \_ /bin/sh -e /var/tmp/rpm-tmp.79492
11250 pts/2    T      0:00      \_ sh /usr/lib/rpm/brp-compress
11255 pts/2    T      0:00          \_ gzip -9 ./usr/man/man1/gsl-config.1
 2296 pts/2    S      0:00 tee rpm.ba.gsl.010712.log

Ctrl+\でcore dumpする

SunOS 4.1.4の頃のviは、Ctrl+\でコアを吐いてお亡くなりになってました。 バグだねぇとか思っていたのですが、[Kondara-devel.ja:05095]で解決。

ingo libcによると、 Ctrl+\はSIGQUITで、SIGINT(Ctrl+C)と同じ動作をするが、 普通coreを吐くのだそうだ。 なるほど〜。

mph-getが失敗する

mph-getのせいじゃないんだけど。 Proceed? (y/n)から先にすすめなくなってみたり。 以下、解決策。

bashのパイプがおかしい?

bash (1.14.7) でパイプの先のteeのファイル名にコマンドを混ぜると、 入力からのEOFを受けつけなくなる。 どーしてだろー?

本当はどうればいいのだろう?

rpmがロックされてる

とごちゃごちゃやってると、rpmのファイルがロックされて、

cannot get exclusive lock on database
error: cannot open /var/lib/rpm/packages.rpm
と怒られるのだな。

fuser -v ファイル名でどのプロセスがロックしているかわかるので、 kill -KILL `/sbin/fuser -v /var/lib/rpm/packages.rpm | awk '/root/{print($2)}'`とかして、止まってもらった。

wdmでウインドウマネージャーが切り換わらない

ある日をさかいに、wdmでウインドウマネージャーを選んでも切り換わらず、 前と同じ設定のままになってしまいました。 言語とかximも。

原因は、.bashrcでset -o noclobberとして、 リダイレクト先のファイルを上書きしないようにしてたためでした。

wdmがユーザーのセッションを始めるときに走らせる、 /etc/X11/xinit/Xsessionに、unset noclobber を追加して解決。(bash 1.14.7)

Kondara 2.0 (bash 2.04.26) では、set +o noclobberだ。

*** /etc/X11/xinit/Xsession.org Sat Feb 19 05:34:27 2000
--- /etc/X11/xinit/Xsession     Wed Apr 18 18:22:21 2001
***************
*** 17,22 ****
--- 17,23 ----
  #     $HOME/.xinit.d/xim              --- user prefered input-method
  #     $HOME/.xinit.d/lang             --- user prefered language
  #
+ unset noclobber
  
  
  site_session=/etc/sysconfig/xinit-session

GNU infoを見る

manで、この文書は古いからinfoを見なさい、と書いてあることがある。 今まではあきらめていたのだが、emacsがなくても見られたのでした。

info gcc

で端末にgccのinfoが出てくる。すばらしい。 Kondara 1.2では、info-4.0-12k.rpm です。

自ホストの空いているポートをみつける

netstat -a -Ainetでbindされているポートが確認できる。 fuser -v -n tcp ポート番号/ポート名でプロセスの確認。 意外に開いててびっくりでしたよ。

cd

cd前のディレクトリに戻ることができる。

~/public_html> cd gomaan
~/public_html/gomaan> 何か作業
~/public_html/gomaan> cd -
~/public_html>

kcc

ファイルの漢字コードを調べることができる。 コード変換もできるけど、 これはnkfとどっちが有利なんだろう?

% kcc -cx index.html 
index.html:     EUC/DEC

seq

数列を表示する。あ、フォーマットバグの標的になりそうだけど…。

% seq --help
使用法:   seq [オプション]... LAST
もしくは: seq [オプション]... FIRST LAST
もしくは: seq [オプション]... FIRST INCREMENT LAST
数字をFIRSTからLASTまで表示する. INCREMENTでステップを指定できる.

  -f, --format FORMAT      printf(3)ライクでFORMATを指定する(標準: %g)
  -s, --separator STRING   STRINGを数値の区切りとして使用する(標準: \n)
  -w, --equal-width        0を挿入して, 数字の桁を揃える
      --help               使い方を標準出力に表示する
      --version            バージョン情報を標準出力に表示する

FIRSTかINCREMENTを省略した場合, 値には1が代入されます.
FIRST, INCREMENT, や LASTは浮動小数点の値として解釈されます.
FIRSTが LASTより小さい時、INCREMENTは正でなくてはなりません. また、その
反対の場合は負でなくてはなりません.
FORMATを指定する場合, printfライクの浮動小数点の出力形式には, 絶対に一つ,
%e, %fか %gを含ませてなくてはなりません. 

バグを発見したらsh-utils-bugs@gnu.ai.mit.edu宛に報告して下さい.

その他

ベッセル関数

J0(x) = 1/2π ∫0 exp[ i x sinθ] dθ = 1/π ∫-π/2π/2 exp[ i x sinθ] dθ = 1/π ∫0π exp[ i x sinθ] dθ

Introduction to Bessel functions, Frank Bowman, Dover PUblications, New York, 1958 より


Up to zunda.

[zunda]
zunda <zunda at freeshell.org>