Landscape トップページ | < 前の月 2003-02 2003-03 次の月 2003-04 >

Landscape - エンジニアのメモ 2003-03

月ごとの記事一覧
2007年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2006年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2005年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2004年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2003年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2002年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
日ごとのページ
2003-03/ 1日 2日 3日 4日 5日 6日 7日 8日 9日 10日 11日 12日 13日 14日 15日 16日 17日 18日 19日 20日 21日 22日 23日 24日 25日 26日 27日 28日 29日 30日 31日

2003-03-31 (Mon)

* /etc/profile への設定内容

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [bash]

bash に限らず、シェルはカスタマイズ次第で使い勝手が大きく変わる。

- 参考になるページ

bash で補完スレ
http://pc.2ch.net/test/read.cgi/unix/1013019416/

Working more productively with bash 2.x
http://www.caliban.org/bash/index.shtml#completion

- 私の /etc/profile の中身

HISTSIZE=10000
HISTFILESIZE=10000
HISTCONTROL=ignoredups
export HISTSIZE HISTFILESIZE HISTCONTROL
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '

alias ll='ls -l'
alias la='ls -aF'
alias lla='ls -al'
alias top='nice -10 top -d 2'
complete -d cd
complete -u {su,finger,chown}
complete -c man
complete -A stopped -P '%' bg
complete -j -P '%' fg jobs disown
complete -c command type which

PATH="$PATH":/usr/local/pgsql/bin
PG=/usr/local/pgsql
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PG/lib
export PGLIB=$PG/lib
export PGDATA=$PG/data

export http_proxy=http://10.241.4.1:10241/
export ftp_proxy=http://10.241.4.1:10241/
export https_proxy=http://10.241.4.1:10241/

以下、説明。

- 履歴とプロンプト

十分な数のコマンド履歴を保存したいので、十万までヒストリーを拡張。
全く同じコマンドは重複して記録しないように ignoredups を設定。

HISTSIZE=10000
HISTFILESIZE=10000
HISTCONTROL=ignoredups
export HISTSIZE HISTFILESIZE HISTCONTROL
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '

- エイリアスやコマンド補完

complete を使うと状況に応じて補完する対象を限定できる。たとえば、complete -d cd だと cd コマンドの 引数には、ファイルに cd することはあり得ないのでディレクトリのみ表示する、など。

alias ll='ls -l'
alias la='ls -aF'
alias lla='ls -al'
alias top='nice -10 top -d 2'
complete -d cd
complete -u {su,finger,chown}
complete -c man
complete -A stopped -P '%' bg
complete -j -P '%' fg jobs disown
complete -c command type which

- PostgreSQL 用設定

ほとんどのユーザが DB を利用するので追加。

PATH="$PATH":/usr/local/pgsql/bin
PG=/usr/local/pgsql
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":$PG/lib
export PGLIB=$PG/lib
export PGDATA=$PG/data

- wget 用 proxy 設定

export http_proxy=http://10.241.4.1:10241/
export ftp_proxy=http://10.241.4.1:10241/
export https_proxy=http://10.241.4.1:10241/


2003-03-28 (Fri)

* 137GB を超える IDE HDD を使う

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

Linux kernel-2.4.19 からは 48bit LBA に対応した IDE ドライバが組み込まれている。よって、BIOS が対応しているかどうかは関係なく利用可能。ただし、BIOS が誤認識してしまったり、起動時にフリーズしてしまうならば、BIOS が HDD を認識しないように設定する必要があるかも。
たとえば、
・32GB Clip のジャンパで、BIOS に対しては 32GB のディスクとして振る舞わせる
・BIOS のドライブ自動検出を OFF にする。

もう一台 HDD を用意してそちらにシステムを入れ、137GB 超のディスクはデータ置き場としてのみ使う、というやり方なら簡単。この場合は カーネルが対応してさえすればいいので、137GB の壁を簡単に超えられる。

[vine-users:057577] Big Drive (137GB 以上)のHDD を使う
http://search.luky.org/vine-users.5/msg07572.html

200GB IDE HDD
http://tach.arege.net/d/20030125.html
i810で200GBのディスクを使用している実例。

137Gbytes 超 IDE ディスクの正しい使い方
http://www.atmarkit.co.jp/fpc/experiments/009over137hdd/
Linux 向けの内容ではないが、ハードウェアが対応しなくともドライバ次第で137GBを超えるディスクを使える、ということがわかる。

2003-03-26 (Wed)

* xargs で再帰的 grep

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [unix]

問題: カレントディレクトリ以下には、複数個、複数階層のディレクトリがある。
その中にある特定の条件を持つファイルに grep をかけたい。

解答: find . |grep .0$ |xargs grep 'search string'
find でとりあえず全ファイルをリストアップし、grep で特定ファイルを絞り込む。
さらにそれを xargs に渡し、grep のコマンドラインを作って実行する。
このとき作成されるコマンドラインは、
grep 'search string' foo.0 bar.0 buzz.0
といったものになる。
grep 'search string' foo.0; grep 'search string' bar.0; grep 'search string' buzz.0;
とはならないため、複数のプロセスが大量に起動される、という事態を避けられる。

- 追記。

上記のような面倒なことをしなくとも、grep -r で再帰的に grep できる。

2003-03-25 (Tue)

* Perl の正規表現のオプション m と s

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

パターンマッチのオプションをちょっとおさらい。
試した環境は TurboLinux 6.5 Server の perl version 5.005_03 built for i386-linux

perldoc perlre も参考になる。

- m オプション: $str を複数行として扱う。

m オプションを必要とするのは、文字列中に改行文字を含み、
かつ正規表現中に ^ や $ を使って先頭や末尾を指定しているとき。
それ以外の時は意味がないと思われる。

以下の例では、m を付けるとマッチ、付けないとアンマッチ。
$str =~ "string\npattern\nptt\nend";
$str =~ /^pattern/m;

- s オプション: 文字列を単数行として扱う。・・・と書くとわかりにくいかな。

. を改行文字にもマッチさせるようになる。
普段は . は改行文字にはマッチしないが、s オプションによりマッチするようになる。
改行文字とは \n の事のようだ。\r は オプションの有無にかかわらずマッチした。

以下の例では、s を付けるとマッチ、付けないとアンマッチ。
$str =~ "string\npattern\nptt\nend";
$str =~ /ring.*pattern/s;

- m オプションと s オプションを両方指定すると・・・?

m オプションにより、^ や $ の指定が有効になる。
s オプションにより、. は\n にマッチする。

以下のようなときは、m と s 両方のオプションを指定したときだけマッチする。
$str =~ "string\npattern\nptt\nend";
$str =~ /ing.*^pattern/ms
「ing という 文字列の後に、0個以上の文字列(改行も文字として扱う)が続き、
pattern という文字が続く。ただし、pattern は行の先頭でなければならないので、
pattern の直前は改行文字。」にマッチ。
こんなマッチをさせたい事って、あんまりないかな。

2003-03-24 (Mon)

* Postgres で perl の join() のようなストアド

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Postgres]

perl の join() のような処理をしてくれるストアドプロシージャを PL/PGSQL で作ってみた。ただ、カラム名をハードコーディングしなければならず、あまり使い勝手が良くない。ということで、以下のような質問を投げてみた。

PostgreSQL 2テーブル目
http://pc2.2ch.net/test/read.cgi/php/1047317680/56
PL/PGSQL で Perl の join 関数みたいなストアドを作りたいんだけど、
なんかもっとスマートな方法無いでしょうか?
結果レコードのカラム名を変数で指定できると嬉しいんだけど、
Postgres 7.2.1 では変数展開してくれませんでした。

-- SQL の結果レコードに指定した文字列を挟んで連結して返す
-- 引数1: 実行する SQL 文
-- 引数2: 挟み込む文字列
DROP FUNCTION join_str(TEXT, TEXT);
CREATE FUNCTION join_str(TEXT, TEXT) RETURNS TEXT AS '
  declare
    delimiter alias for $1;
    sql alias for $2;
    str text;
    rec record;
    is_first bool;
  begin
    is_first = true;
    str := '''';
    FOR rec IN EXECUTE sql LOOP
      IF is_first THEN
        str := rec.serialnum;  -- カラム名を指定
        is_first := false;
      ELSE
        str := str || delimiter || rec.serialnum; -- カラム名を指定
      END IF;
    END LOOP;
    return str;
  end;
' LANGUAGE 'plpgsql';

2003-03-21 (Fri)

* hdparm でディスクのチューニング

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

とりあえずいろいろやってみる。
-X66 を記述してもしなくても同じだったので、とりあえず指定しないようにした。
http://pc.2ch.net/test/read.cgi/linux/1002445806/158 として投稿。

VP_IDE: VIA vt82c586b (rev 41) IDE UDMA33 controller on pci00:07.1
ide0: BM-DMA at 0xe000-0xe007, BIOS settings: hda:DMA, hdb:DMA
hda: ST38410A, ATA DISK drive
hda: 16841664 sectors (8623 MB) w/512KiB Cache, CHS=16708/16/63, UDMA(33)

# hdparm -i /dev/hda
/dev/hda:
Model=ST38410A, FwRev=3.03, SerialNo=6CS1JE84
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=512kB, MaxMultSect=32, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=16841664
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3 ATA-4 ATA-5

# hdparm -m16 -c1 -u1 -d1 -tT /dev/hda
/dev/hda:
setting 32-bit I/O support flag to 1
setting multcount to 16
setting unmaskirq to 1 (on)
setting using_dma to 1 (on)
multcount = 16 (on)
I/O support = 1 (32-bit)
unmaskirq = 1 (on)
using_dma = 1 (on)
Timing buffer-cache reads: 128 MB in 3.13 seconds = 40.89 MB/sec
Timing buffered disk reads: 64 MB in 5.31 seconds = 12.05 MB/sec

2003-03-18 (Tue)

* 同じマシンに複数の postgres を共存・同時起動できるようにインストール

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Postgres]

改訂第3版 PC UNIXユーザのためのPostgreSQL完全攻略ガイド、いわゆるシーラカンス本第3版 の35ページのコラム「1つのマシンで複数の PostgreSQL インストレーションを管理する方法」に書いてあった石井さんのやり方。この方法を使えば、異なるバージョンの postgres を同時起動したり、同じバージョンの複数の postgres を同時起動することができる。

ポイントは、ソースコード展開ディレクトリ、インストールディレクトリ、postmaster の待ち受けポートをすべて別にすること。インストールディレクトリや待ち受けポートは環境変数で指定できるの。この機能を利用して、異なる内容の .bashrc を用意しておいて必要に応じて source コマンドで環境変数を変えることで、異なる postgres を共存できるようにインストールし同時に起動することができる。

PG=`pwd`
export PGPORT=10732
export PGLIB=$PG/lib
export PGDATA=$PG/data
export LD_LIBRARY_PATH=$PG/lib
PATH="$PG/bin":$PATH



ちなみに、Postgres ではテーブルの集合をデータベースと呼び、データベースの集合をデータベースクラスタ、データベースインストレーション、インストレーションなどと呼ぶ。ちなみに MS SQL Server ではインスタンスと呼んでいた。

- 参考

[pgsql-jp 21676] 異なるversion のPostgreSQL の使用
http://ml.postgresql.jp/pgsql-jp-old/pgsql-jp/2001Jun/msg000 ...

* mv コマンドとディレクトリの指定

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [unix]

JM の mv より抜粋。
http://www.linux.or.jp/JM/html/gnumaniak/man1/mv.1.html
最後の引き数がすでに存在しているディレクトリならば、mv は指定したファイルを同じ名前でそのディレクトリに移動する。一方、2 つのファイルしか指定されない場合、 1 番目のファイル名を 2 番目のファイル名に変更する。

最後の引数がディレクトリでなく、 3 つ以上のファイルが指定された場合はエラーとなる。

したがって `mv /a/x/y /b' とすると、ディレクトリ /b がすでに存在する場合は /a/x/y を /b/y という名前に変更する。/b が存在しない場合は /b という名前に変更する。

ディレクトリを移動するとき、移動先が存在するかどうかでその動作が変わるのがポイント。

* debian のインストール

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

debian woody 3.0r1 をインストールしてみた。

jigdo を使って powerd.com から non-us パッケージをダウンロードし、
binary-1-NON-US を作成。

CD-ROM からブート。Kernel2.4 を使いたかったので、bf24 を指定。
bf24 では i82557 チップ搭載のネットワークカードは自動認識されなかったので、インストールが終わった後に手動で設定して認識させた。

* ディスク空き容量チェック&メールスクリプト

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [unix]

df を実行し、閾値を超えていたらメールする perl スクリプト。
[linux-users: 20178] Disk Usage check script より。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/~poffice/mail/l ...
マシン台数が多ければ SNMP を使って集中的に管理するところだが、いまのところはこれで十分。

2003-03-17 (Mon)

* /dev/null の破壊と復旧

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [unix]

非常にまずい。間違って /dev/null を消してしまった。

以下の質問を 2ch.net に投げてみた。
http://pc.2ch.net/test/read.cgi/linux/1047096767/691
間違って root で
# mv /tmp/log.txt > /dev/null
してしまい、/dev/null を上書きしてしまいました。

/usr/src/linux/Documentation/devices.txt を参考に、
# mknod /dev/null c 1 3
# chmod 666 /dev/null
として作成したのですが、これで良かったのでしょうか?

結局回答はもらえなかったが、問題なく動いているのでこれでいいのだろう。

追記。
JM の NULL のマニュアル
http://www.linux.or.jp/JM/html/LDP_man-pages/man4/null.4.htm ... によると、上記方法で良いみたい。

以下のようにすれば一行で書ける。
mknod -m 666 /dev/null c 1 3

2003-03-12 (Wed)

* 今までの積立金を401k に移管するかどうか

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

結局移管せずに全額現金で返してもらうことにした。書類やその他の手続きは完了。

移管しないという判断の根拠は以下の通り。
・返戻金合計が12万円程度なので、一時所得の特別控除枠内に収まるため全額非課税。
・加入期間がリセットされてしまうが、401k 実施組織で10年働けばリカバリ可能。
・移管してしまうと、少なくとも60歳まで払い戻せない。
・払い戻して自分で運用した方が投資商品選択の自由度が高い。使っちゃったら別だけど。

2003-03-11 (Tue)

* emacs の基本的なコマンド

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

コマンドの中断 C-g
行頭に移動 C-a
行末に移動 C-e
コピー 領域の先頭にカーソルを置いて C-Space、領域の末尾の次の文字の上にカーソルを置いて M-w
カット 領域の先頭にカーソルを置いて C-Space、領域の末尾の次の文字の上にカーソルを置いて M-w
ペースト C-y
アンドゥ C-\
1画面分スクロールする C-v

2003-03-07 (Fri)

* テーブルの正規化の定義

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [SQL]

第一正規形: 一つのカラムの中に複数の値が現れない (DB では当たり前のことだね)。
第二正規形: 主キーとなる列の値が決まれば、おのずと他の列の値が決まる。
第三正規形: 主キー以外の列の値によって、他の列の値が決まることがない。

今までは「こんな設計じゃ更新するときに大変だからテーブルを分けておこう」という視点でテーブルの分割を行っていたが、これで明確な定義のもとに設計できる。というか、いままで勘でやってたってことか。やれやれだ。

2003-03-04 (Tue)

* cron の仕組み

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [unix]

システム設定ファイルを知ろう〜/etc/crontab〜
http://www.itmedia.co.jp/help/tips/linux/l0350.html
/etc/crontab が大本の設定ファイル。

* bash のカスタマイズ

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [bash]

bash をカスタマイズして使いやすくする。

- @IT の特集記事。

Windowsユーザーに教えるLinuxの常識 第9回 bashの便利な機能を使いこなそう
http://www.atmarkit.co.jp/flinux/rensai/theory09/theory09b.h ...
history の個数を設定するには、HISTFILESIZE と HISTSIZE を設定する。

- 私好みのヒストリー設定

過去のコマンドを再利用しやすいように、history の件数は十分に確保する。

HISTSIZE=100000
HISTFILESIZE=100000
HISTCONTROL=ignoredups


すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。