2009年3月25日水曜日
「?param=value」で400エラー

Webサイト構築のお仕事中…

テスト環境での作業が終わったので、本番環境へ移行作業をせっせと実施。

サーバ管理者がダイジェスト認証を設定。

ログイン。

OK。

とりあえず管理画面へアクセス。
でもって、次のページへ…

行けません。

「400」だってさ。
「不正な要求」だってさ。

試してみると「abc.php?param=value」のようなURLがNGで、「abc.php」だと上手く行く。

テスト環境だと問題なかったのに…

GETパラメタの問題かなぁ?
PHPの設定かなぁ?
Apacheの設定かなぁ?

ん?
サーバ管理者のPCだと問題がない?
違いは?
僕のPCがIE6で、彼のがIE7?
なんでだろう?
他のPCでも試してみたけど、IE6だけがNGのようだ。
IE6固有の問題?
でもテストサーバじゃOKだったもんなぁ…

かれこれ2~3時間くらいでしょうか?

ついに突き止めました。

HTTP クライアントを作ってみよう(6) - Digest 認証編 -
http://x68000.q-e-d.net/~68user/net/http-auth-2.html

上記サイトにこう書いてある。

ただし、IE6 では Digest 認証を使って foo.cgi?FOO=BAR のような URL にリクエストすると、誤ったリクエストを送ってしまうバグがあります。以下の URL は Mozilla や FireFox では正しく閲覧できますが、IE6 だと正しいユーザ名・パスワードを送信しても、 400 Bad Request になってしまいます (Windows XP SP2 + IE6 で確認)。

えぇっ!?
どういうこと??

パケットを見てみると、IE が送信した Authorization ヘッダの uri には「?FOO=BAR」の引数部分が含まれていないようです。


はぁ…
たしかにApacheのログを見ると、「?」以降があるのとないのとを比較して、アンマッチとかってなってる。

これは IE のバグですが、いつまでたっても修正されないので、 Apache-2.0.51 からサーバ側で無理矢理対応する仕組みが設けられました。 httpd.conf や .htaccess に以下のように記述しておけば、 IE でも上記のような URL に正しくアクセスできます。


書いてあるとおりに、修正を行う。
他のVirtual Hostに影響を与えないよう、.htaccessに以下を挿入。
# User-Agent ヘッダに MSIE という文字列が含まれていたら、
# 環境変数 AuthDigestEnableQueryStringHack に「On」をセットする。
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On


正常に動きました。
php.iniのdiffを取りました。
httpd.confもdiff取りました。
相違点はここくらかと思ったけど、まさかダイジェスト認証が問題になるとは…
よく考えれば、テスト環境ではダイジェスト認証をかけてなかったわ。

辛いなぁ…



0 コメント | コメントを書く | コメントの表示
2008年8月12日火曜日
viでエラーが発生して保存できない(追記あり)

えーっと、cygwinなんだけど、viで保存(:wq)時にエラーが出た。



"ファイル名" E513: write error, conversion failed (make 'fenc' empty to override)
Press ENTER or type command to continue



なんだ?

っつーか、fencってなんだよ。
:set fenc

としてみる。
fileencoding=sjis

まぁ、cygwinだからね、Shift-jisだね。

…で?

検索してみよう。

http://vim.cybermirror.org/messages/ja.po
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr "E513: 書込みエラー, 変換失敗 (上書するには 'fenc' を空にしてください)"


あぁ、そうか。

ってことで、こうしてみる。
:set fenc=


:wq

無事終了。

再度viで開いてみる。
勿論fencを確認しても空っぽなんだけど、sjisに再設定してみると、やっぱりE513のエラーがでる。
また空にすればいいだけの話なんだけどさ。
このfenc/fileencodingって、なんのためにあるのだろう??

情報は少なそうだなぁ。
何故このファイルだけ…

ちょっと調べてみた。
エンコードを指定して開き直す方法があった。
:e ++enc=sjis

実行してみると…(sjisでなくてもshift_jisでもOKみたい)
"ファイル名" [converted][CONVERSION ERROR in line 94] 170L, 2914C


なぁにぃぃぃ!

で、94行目を見ると、"\"が"?"に置き換わっている(括弧をエスケープする目的の"\")。
ここがいけないのかと思って、"?"を"\"に置き換えるが、やはりsjisでは保存できないようだった。
(追記:当然だわな、sjisにバックスラッシュってないもんね)

エンコードを変更することで"\"が"?"に置き換えられるのと、同じ原因なのかな?
(追記:sjisでバックスラッシュを表示させようというのがそもそもの誤りに気づかない僕って…)

stupidGeek
エラーコード:E513を克服する

ここを読むと、同じくE513のエラーに苦戦した経緯と解決に至った内容が書かれている。
でも、ちょっとこのケースは違うな。



やっぱり、"\"の部分で、他の文字コードと誤認されているのかな?
(追記:だからそろそろ気づけ、俺!)

vi abc

で、テキトーに「aaaaa」と書いて保存(:w)。
正常、正常。
:set fenc

でファイルエンコードを確認する。
 fileencoding=

空っぽ。
一旦閉じて(:q)、再度開く。
vi abc

ファイルエンコードを確認する。
:set fenc

 fileencoding=sjis

よく考えたら~/.vimrcでfileencodingをsjisに設定してるわ。
で上書き保存・終了(:wq)すると、正常に終われる。
再度開いて(vi)、問題の"\"を書いて、保存(:w)すると…
"abc" E513: write error, conversion failed (make 'fenc' empty to override)
Press ENTER or type command to continue

そういうことですか。
エンコードがshift_jisの場合には"\"がエラーになるのね。
"\"を使うなら、fencは削除しないといけないか…
(追記:というかutf-8とかeucなら大丈夫なんだろうな)

根本的な解決にはなってないな。


ちなみに、これらの作業ってPoderosaから実行してたんだけど、これをDOS(インストール時に作成されるショートカット)から実行すると
"ファイル名" E513: 書込みエラー, 変換失敗 (上書するには 'fenc' を空にしてください)
続けるにはENTERを押すかコマンドを入力してください

と、日本語でエラーが表示される。


(追記 - 2010/03/02)
久しぶりにコマンドプロンプトでvimを使ったが、エラーにならなかった。
「何故だ!」と思って、TeraTermのcyglaunchとPoderosaで試したけど、問題なく…

ふと.vimrcを見てみたら、こう設定されてた。
set encoding=japan
set fileencodings=sjis,utf-8,iso-2022-jp,euc-jp
set nu
set tabstop=4

fileencodingsの設定が変わってる!?

やべ、全然記憶にないわ。
とりあえずこうやって複数指定すれば回避できるんだな。
修正したときに、ここにも追記すべきだったな。



0 コメント | コメントを書く | コメントの表示
2008年8月5日火曜日
インストール時のスクリーンショット - Redhat

お久しぶりの更新。
ちょっと仕事でJAVAやってたんで、とりあえず書くことが無かった。

で、久しぶりにUNIX系OSのインストールをするので、ちょっと思い出したことを書いておきます。
※実際に作業したのは1年前なので、最新バージョンでは違うかもしれません。

インストール時のスクリーンショットの撮り方(取り方?)です。
まぁ、メモすりゃいいんだけど、作業記録としてあった方が確実でしょ?
でも、この方法が他のOSでも通用するか判りません。
一応、Redhat Enterprise Linuxでの方法です(でした)。
これからちょっと他のインストールがあるので、試してみようかと思います。

インストール時のスクリーンショット
 Shift + PrtSc
 後半はPrtScのみで取得できます(どこからか忘れた)。

うまく取れるとダイアログが出るので、取れたかどうか不安になることはないかと思います。



0 コメント | コメントを書く | コメントの表示
2008年4月4日金曜日
mtaサービスの変更 - alternatives コマンド

随分前に、仕事で調べたコマンド。
ふと気になったので、書いておく。


サーバセットアップの際に、MTA(メール転送エージェント)の変更が必要になった。
調査時にはRed Hatのパッケージで変更をしたようだったけど、僕が実作業に入るときには、パッケージを選別したために、そのコマンドだかなんだかが無くなってしまった。
そこで、コマンドを探し当てたという話。


まずはchkconfigでpostfixを確認する。

# chkconfig --list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off


次に、sendmailを確認してみる。

# chkconfig --list sendmail
サービスsendmailはchkconfigをサポートしますが実行レベルで参照されていません (run 'chkconfig --add sendmail')
#


で、alternativesコマンドで確認する。

# alternatives --display mta
mta - ステータスは手動です。
リンクは現在 /usr/sbin/sendmail.postfix を指しています。
/usr/sbin/sendmail.sendmail - 優先項目 90
スレーブ mta-pam: /etc/pam.d/smtp.sendmail
スレーブ mta-mailq: /usr/bin/mailq.sendmail
スレーブ mta-newaliases: /usr/bin/newaliases.sendmail
スレーブ mta-rmail: /usr/bin/rmail.sendmail
スレーブ mta-sendmail: /usr/lib/sendmail.sendmail
スレーブ mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
スレーブ mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
スレーブ mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
スレーブ mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix - 優先項目 30
スレーブ mta-pam: /etc/pam.d/smtp.postfix
スレーブ mta-mailq: /usr/bin/mailq.postfix
スレーブ mta-newaliases: /usr/bin/newaliases.postfix
スレーブ mta-rmail: /usr/bin/rmail.postfix
スレーブ mta-sendmail: /usr/lib/sendmail.postfix
スレーブ mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
スレーブ mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
スレーブ mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
スレーブ mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
現在の「最適」バージョンは /usr/sbin/sendmail.sendmail です。
#


ここでpostfixからsendmailに変更してみる。

# alternatives --config mta

2 プログラムがあり 'mta'を提供します。

選択 コマンド
-----------------------------------------------
* 1 /usr/sbin/sendmail.sendmail
+ 2 /usr/sbin/sendmail.postfix

Enterを押して現在の選択[+]を保持するか、選択番号を入力します:
と出るので、sendmailにするなら、「1」を入力してENTERすればいい。


再度、確認する。

# chkconfig --list postfix
サービスpostfixはchkconfigをサポートしますが実行レベルで参照されていません (run 'chkconfig --add postfix')
# chkconfig --list sendmail
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# alternatives --display mta
mta - ステータスは手動です。
リンクは現在 /usr/sbin/sendmail.sendmail を指しています。
(以下省略)



…おっと、サービスを起動させないと。


# /etc/init.d/postfix stop
Shutting down postfix: [ OK ]
# /etc/init.d/sendmail start
sendmail を起動中: [ OK ]
sm-client を起動中: [ OK ]
#


こんなもんですか。



0 コメント | コメントを書く | コメントの表示
2007年10月28日日曜日
vi で複数のファイルを編集する。 - つづき

前回のエントリの続き。

複数のファイルをviで開いた場合、

:n[ENTER]

で次のファイルに移動して、
:e#[ENTER]

で一つ前のファイルに戻る…

…らしいのだが、e#で戻った場合、nで先に進めないことがあった。

例えば
> vi test01 test02[ENTER]

とした場合、最初に開いているのはtest01ファイルということになる。
そこで
:n[ENTER]

としてtest02というファイルを開く。
そこから
:e#[ENTER]

でtest01に戻るが、そこから
:n[ENTER]

を使うと、これ以上先はないとエラーになる。

そもそもこの「:n」と「:e#」はコマンドとしては別の意味を持ってるんだということに気が付いた。
移動することと、編集することはあくまでも別のことであり、「:n」で移動して「e#」で前に編集していたファイルを開いたというのであれば、現在の場所は「:n」で移動した先のファイルということか。そして「:e#」で編集中のファイルを再定義したことになるのか…

で、戻るコマンドは以下。
:rew[ENTER]


rewind ね…



0 コメント | コメントを書く | コメントの表示
2007年10月25日木曜日
vi で複数のファイルを編集する。

久しぶりに、viでファイル編集中、ふと思い出したのだが、結局使い方をちゃんと思い出せませんでした。

> vi test01.txt test02.txt

とかやって、複数のファイル(この場合2つ)を編集する場合、ひとつの画面にはひとつのファイルしか表示できないので、どうやって切り替える(移動する)かというと…
:n[ENTER]

で次に指定したファイルへ移動する。

じゃ、戻るのは?
:e#[ENTER]

って書いてあるサイトが多いんだけど、これは正確には「一つ前に編集していたファイル」ってことでは?
ここから「:n」で先に進もうとすると、エラーになってしまう。ってことは編集しているのはひとつ前のファイルだけど、今いる場所はさっき「:n」で開いたファイルだよ、と?

実際には
:rew[ENTER]

が正解みたいだね。

あとはバッファへの格納の方法だな。
UNIXコマンド本に僕が書いたメモでは
"名前yy

となっていたんだけど、これ上手く動かなかったんだよね。
viのバージョンとかに依存すんのかな?

明日、もう少し試してみよう。



0 コメント | コメントを書く | コメントの表示
2007年9月28日金曜日
またやった - Ctrl-s

なんだか知らないけど、ついついやっちゃうんだよね、Ctrl-sの入力。

で、入力を受け付けなくなる。

毎回やるたびに、ググって解決方法を探す。
いやぁ、頭悪いね。

Ctrl-q で解決しますね。



1 コメント | コメントを書く | コメントの表示
IPアドレスが取れない

ある本を使ってお勉強中。
サーバとクライアントのプログラムを作って通信(Telnet)テスト。

本のサンプルどおりにコーディングするも…

(略)

struct sockaddr_in from;
char client_address[80];

(略)

sprintf(client_address, "%d.%d.%d.%d", from.sin_addr.S_un.S_un_b.s_b1, from.sin_addr.S_un.S_un_b.s_b2, from.sin_addr.S_un.S_un_b.s_b3,from.sin_addr.S_un.S_un_b.s_b4);

(以下省略)


test.c:173: error: structure に `S_un' という名前のメンバはありません
test.c:174: error: structure に `S_un' という名前のメンバはありません
test.c:175: error: structure に `S_un' という名前のメンバはありません
test.c:176: error: structure に `S_un' という名前のメンバはありません

…という結果に。

/usr/include を検索(find/grep)しても、見つからない…ということは、そもそもIPのとり方がNGだと考えるしかない。

でもって、探してみるとinet_ntoa()という関数があるらしい。

なので、こう書いてみる。
sprintf(client_address, inet_ntoa(from.sin_addr));


$ gcc test.c 
test.c: In function `MainLoop':
test.c:172: 警告: 引数 2 個の `sprintf' を渡しますにより、キャストなしで整数からポインタを作りまし
$


ありゃ。訂正。
sprintf(client_address, "%s", inet_ntoa(from.sin_addr));


$ gcc test.c
$

無事コンパイル完了。

これが正解なのかどうかは知らないけどね。
同じサーバからtelnetしてみたら、127.0.0.1が来たから問題ないかな~と思ったんだけど??



0 コメント | コメントを書く | コメントの表示
2007年9月18日火曜日
math.h関連のコンパイルエラー

引き続きC言語のお勉強中。
ちょっとポインタあたりを検索しつつ、お勉強してみる。

でもって、サンプルを実行中、どーしてもコンパイルエラーになる。

$ gcc -o sample sample.c
/tmp/ccgJ0RxZ.o(.text+0x30): In function `sample':
: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました
$


なんだよー、math.hきちんとインクルードしてんのにさぁ。

答えは簡単。
で定義されている関数の本体は全て math ライブラリにあります。したがってこのような関数を用いるには、リンクの際に -lm が必要になるわけです。
The Linux GCC HOWTO - 6.2 ライブラリに尋ねる(sin() はどこにいるの?)

いやはやお恥ずかしい限りです。
だからさ、初心者なんだって、結局は。
きちんと勉強をした方がよさそうだなぁ。

The Linux GCC HOWTO
http://www.linux.or.jp/JF/JFdocs/archive/GCC-HOWTO.html



0 コメント | コメントを書く | コメントの表示
2007年9月12日水曜日
恥ずかしながら、vi の置換

すーぐ忘れるんですよ、コレ。

:%s/置換前/置換後/

これだと一箇所だけで、
:%s/置換前/置換後/g

で、全体を置換するんだけど、viのバージョン?設定?によっては、前者でも全て置換されてしまうみたいね。

:n,Ns/置換前/置換後/

これでn行目からN行目までの置換を行う、と。



0 コメント | コメントを書く | コメントの表示
2007年9月5日水曜日
lsattr と chattr

別に新しい話題でもないけど、知らなかったのでちょっとメモ。

Linuxのext2、ext3のファイルシステムにおいて、パーミッション以外のファイル属性を操作するもの。
lsattrが表示でchattrが変更のコマンド。

例えばlsなら、

# ls -la test
-rw-r--r-- 1 root root 0 8月 29 00:26 test

となる。rootであれば書き込み可能だし、その他のユーザであれば読み込みだけ可能ということになる。
そこで、lsattrを実行する。
# lsattr test
------------- test

現状、何も設定されていないので、chattrで変更不可能を表すi(immutable)を設定してみる。
# chattr +i test

念の為に確認。
# lsattr test
----i-------- test


で、削除(rm)してみる。
# rm test
rm: remove write-protected 通常の空ファイル `test'? y
rm: cannot remove `test': 許可されていない操作です


ほほぅ…

でもってiフラグを消す。
# chattr -i test

念の為に確認。
# lsattr test
------------- test

で、削除。
# rm test
rm: remove 通常の空ファイル `test'? y
# ls test
ls: test: そのようなファイルやディレクトリはありません

はい、無事消えました。


ところで、lsattrのオプションに「-a」がある。これはJMから引用すると、
`.' ではじまるファイルも含め、全てのファイルおよびディレクトリを表示する。

ということで、lsコマンドと同じ。
じゃ、「-l」は? と思ったけど、記述は無い。
manページ開いてもない。ってことで、実行してみました。
# touch test
# lsattr -l test
test               ---


# chattr +id test
# lsattr -l test
test               Immutable, No_Dump

ははぁ、なるほど。

…と思ってたら、usageにはしっかりlオプションの記載があった。
# lsattr -r
lsattr: オプションが違います -- r
Usage: lsattr [-RVadlv] [files...]

でも、manにはないなぁ。

いやぁ、まぁ、誰もこんな情報は欲してないと思うけど。

# コマンドなど、一部半角スペースを全角スペースに置き換え。
# スタイルシートを修正しないといかんか?



0 コメント | コメントを書く | コメントの表示
2007年8月30日木曜日
vi で対応する括弧にジャンプする

単純にモノ忘れの世界。

対応する括弧にジャンプするのは、

%

です。



0 コメント | コメントを書く | コメントの表示
2007年8月28日火曜日
「Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて」でお勉強

久しぶりに、Cのお勉強。
僕自身、そんなにまじめに勉強したことがないので、きちんとやらなきゃと思いながら…
でもって、2~3年くらい前に買った本を久しぶりに開いてみた。

当時よりも幾分Cの知識はあるし、ワリとサクサク進む。

しかし…

ところどころ動かないんですけど?

でもって、版元のサイトを調べると、サンプルソースがダウンロードできるね。

改訂後
http://www.sbcr.jp/books/download/art.asp?newsid=1333

改訂前
http://shop.sbcr.jp/isbn/old/1st/linux/index.htm

実行すると画面がクリアされ、中央ほどに簡単なメニューが表示されるというプログラムがある。
サンプルどおりに打ち込んでコンパイル、実行するのだが、一向に画面が変わらない。
入力待ちになる。

ここでENTERとかなにかキー入力をすると、画面がクリアされ、メニューが表示される。そして誤った入力である旨、表示される(メニューとしては、「a」「d」「q」しか許可していないため、先ほど入力した値を受け取って誤りだと出力する)。

でもって改訂版のソースを見ると、

fflush(out);

が追加されている。
※outは出力先(この場合は標準出力)を指す。

こいつが無いせいで画面が切り替わらなかったんだな。

しかもtputsの第3引数用に関数char_to_terminal()というのを設定しているのだが、この引数の型が改訂前後で違う。
改訂前
int char_to_terminal(char char_to_write);

改訂後
int char_to_terminal(int char_to_write);


おーい!
とか思ってたら、このchar_to_terminal()は単純にputcをコールしてるだけ。
よくよく考えてみると、このputcって第1引数(つまりchar_to_terminal()の第1引数)はintなんだよねぇ。
これはすぐに気が付いてもよかったなぁ。

古いOS(もしくはコンパイラ)だったら動くんか?

まぁ、とにかく、これは注意せねばならんね。


 こっちは僕の持っている改訂前。



0 コメント | コメントを書く | コメントの表示
2007年8月20日月曜日
lessの不思議

つづき。

manが文字化けするので、lessのオプションの変更を/etc/man.configに施したんだけど、根本的な対策ではなかった。
要するに、less自体が文字化けしているのだ。

個人的には多少不便でもmore派だし、サーバ本体を操作する機会なんてほとんどない。
PoderosaとかTeraTerm使ってれば、スクロールバーを操作して、前の画面見られるし、全然気がつきませんでした。

現状、

ls -la | less

を実行すると、ファイルのタイムスタンプの"7月"が"7<B7><EE>"となってしまう。

とりあえずJLESSCHARSETをユーザの環境変数に組み込んでみる。
これはたいていどこのサイトにも書いてある手法だ。
でもダメ(この時点ではmanのPAGER設定にJLESSCHARSETがなくてもOKなことに気が付いていない)。

で、man.configに何を設定したのか思い出してみる。
まずは
JLESSCHARSET=japanese
を入れた。
次に、lessのオプションをRからrに変更した。

やってみた。

alias less='less -r'


直った。

ふぅむ、オプションの問題か。

とりあえずJMにお伺いをたててみる。

Manpage of LESS

-r または --raw-control-chars
「そのままの」制御文字を表示させるようにする。デフォルトでは、制御文字をキャレット表記を使って表示する。例えば、control-A (8 進数 001) は "^A" と表示される。警告: -r オプションが指定されると、 less は (制御文字のタイプにどのように画面が反応するかに依存しているために) 画面の実際の状況の経過を追うことができない。よって多くの場合、長い行が誤った位置で分割されてしまうといった問題が生じる。


まったくもって今回の事象の説明にならん、気がする。

こんなときはUNIXの部屋だ!
UNIXの部屋 検索:less (*BSD/Linux/Solaris)
ここに、オプションの一覧があり、-rの説明には以下のようにある。

コントロールコードをそのまま表示する。デフォルトでは control-A は ^A と表示されるが、-r を指定するとそのまま表示する。これによって、cat で日本語が表示できる環境なら、less -r で日本語が表示できるかも。


一応、「ふむふむ」と言えるような説明文だ。

Googleで"less -r"で検索してみても、正直、満足のいく文章はなかった。
JMやmanpageじゃ、オプションはrよりもRを薦めてるし、実際のところどうなんだろう?

ついでに、UNIXの部屋で知った環境変数を。
環境変数LESSにはlessのオプションを指定できるらしい。

export LESS=-rgj10

としてみた。


元記事
HOMEGROWN | lessの不思議
http://homegrown.jugem.cc/?eid=273



1 コメント | コメントを書く | コメントの表示
manの文字化け

仕事でRed Hat Enterprise Linuxをインストール、設定することになった。
調査段階でほとんどのことは終わってるので、実質的には作業するだけなんだけど…実際にはそうはいかない。

Red HatってUTF-8なんだけど、インストールするサーバプログラムがEUCなので、i18nを修正して無理矢理EUCに変更した。
その影響もあって、manが化ける。
Red Hatの9からFedora Coreになったときに、文字コードがEUCからUTF-8になったせいで、EUC->UTF-8への変換方法ってワリといろんなところに書かれてた。
しかし、その逆UTF-8からEUCへの変更ってどこにも出てこない(見つけられないだけかも)。

しかも大半がPAGERにlvを使えとある。
which lv しても出てきませんが?(パッケージを厳選しすぎたか?)

でもまぁ、直せたので、一応残しておこうと思って。

参考にしたページはここ。
ミラクル・リナックス:日本語manページの文字化けについて
http://www.miraclelinux.com/technet/faq/data/00087.html

ここでは/etc/sysconfig/i18nで文字コードをShift-JISかUTF-8にした場合の修正手順が載っている。
UTF-8の場合の、iconvをはさむやり方はNGだったので、Shift-JISのパターンで行ってみる。

上記ページには、以下のように記載されている。

JNROFF LANG=ja_JP.eucJP /usr/bin/groff -Tnippon -mandocj
PAGER JLESSCHARSET=euc-sjis /usr/bin/less -isr


jnroffは入ってないので、ここは無視して、PAGERのみ変更を加える。

PAGER JLESSCHARSET=euc-sjis /usr/bin/less -isr


…まぁ、これだけ。
念の為、再起動…は大袈裟なので、ログアウトして、再度入ってみる。
でもってman lsと入れると…

無事、日本語が表示されてました。

その後、JLESSCHARSETはセットしなくても、正常に表示されることが判明。
問題はmanコマンドそのものではなく、実はlessそのものにあったと気が付くのに、時間がかかった。

つづく…

元記事
HOMEGROWN | manの文字化け
http://homegrown.jugem.cc/?eid=268





追記(2007/09/03)
@ITにて、UTF-8からEUC-JPに変更する方法が記載されていた。

デフォルトの文字コードをEUC-JPに変更するには - @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a043eucjp.html

そこでもmanの文字化けが触れられているが…
lvがインストールされていない場合には、事前にlvをインストールしておく

ってのは、どうよ?



0 コメント | コメントを書く | コメントの表示
UNIX系OSのプロンプト(PS1) - bash

えーっと、よく忘れるので、メモ書き…
bashの場合、プロンプトの設定を行うには、~/.bashrc に以下のような設定を行う…と。
PS1="変数や文字列色々"
で、なにが設定できるかというと


\d

日付

\h

ホスト名

\n

改行

\s

シェル名

\t

時間(タブじゃないのね)

\u

ログインユーザ名

\w

ワーキングディレクトリ(ホームディレクトリは"~"で、一応フルパス表示のようです)

\W

同じくワーキングディレクトリ。こちらはベース名…つまり/home/Sophie/binにいたらbinのみってことです。

\#

コマンド番号

\!

ヒストリ番号

\$

UIDが"0"(スーパーユーザ)の場合には"#"で、それ以外は"$"を表示。


ま、使いそうなところは、こんなモンかな?
再度ログインするか、source .bashrc かなにかで再読み込みを行う、と有効になるはず。
csh とかになると、set prompt=""で設定してやらなくてはいけないハズ。
ま、こちらはそのうちってことで。

と思ったら、こんなサイトが…

UNIX FAQ LIST #2.1
2.4) プロンプトに、カレントディレクトリ名を出力させておくにはどうすれば良いのですか。
http://www.nurs.or.jp/~asada/FAQ/UNIX/section2.4.html

元記事
HOMEGROWN | UNIX系OSのプロンプト(PS1) - bash
http://homegrown.jugem.cc/?eid=212



0 コメント | コメントを書く | コメントの表示
Template Design: © 2007 Envy Inc.