ほとんどLinuxしか触ってません

全般 *

C言語でファイル検索 *

WindowsならFindFirstFileというAPIがある中で、Linux環境ではどうすればよいのかわからなかった。 globやopendirなんかで等価な作業ができそうだ。 (http://pc.2ch.net/linux/kako/1037/10377/1037793960.html の549さん)

grep *

grep -v

は、マッチしないものを列挙する。

GRUB *

LILOよりmodernなブートローダ。USBキーボードでGRUBのメニューを操作したかった時、BIOSの"USB Legacy Device Support"みたいなやつをEnableしたらできた。

ファイルシステム *

色々ある。使ってきたディストリビューションでは、ext2 ==> ext3 ==> reiser と変遷していった。結局どれがいいんだろう? 現在マウントされてるファイルシステムは

df -T

でわかる。

cron *

自動実行のためのプログラム。設定ファイルは

crontab -e

として編集できる。5分おきにfetchmailしたい場合は下記みたいにする。

MAILTO=""
*/5 * * * * fetchmail

SSH *

文字コードと改行文字 *

OSが違えば環境も変わるのは当然だが、中でも文字コードや改行文字の相違が鬱陶しい。原則以下の様になっている。

OS文字コード改行文字
DOSShift-JISCR+LF
Mac(知らない)CR
UNIXEUC-JPLF

この相違により、異なるOSで作成されたファイルではゴミが見えたり改行されなかったりする。

文字コードは段々とUnicodeにシフトしているのだろうが、詳しくは知らない。

CR(Carriage Return)とLF(Line Feed)の表現方法も幾つかあり、これにも混乱した。

十進十六進
CR130D^M\r
LF100A^J\n

変換プログラム *

Webブラウザだとこれらの違いを結構吸収してくれて、閲覧に限れば変換の必要性は薄そう。だけどやっぱり度々変換の必要性に迫られる。

iconv *

UNIX界隈では標準の変換プログラムなのだそうだ。以下の感じで使う。

$ iconv -f SHIFT-JIS -t EUC-JP shiftjis.txt > euc.txt

文字コードのリストは

$ iconv -l

で得られた(cygwin)。

とある事からUnicodeの変換がしたくなった。UTF-16とUTF-16{BE,LE}というのがあって、まあどうせ後者はエンディアンの違いを明示するもので、前者にしておけば(目的のアプリが)自動判別してくれるはずとか思ってやってみたがどうもうまくいかない。そんな時、以下のページで勉強した。

nkf *

Network Kanji code conversion Filter なのだそうだ。日本語用で昔から非常によく使われていたみたい。最近のバージョンではUTF-8にも対応だとか。ソースを入手し、何も考えずmakeしたらバイナリができた(cygwin)。

cat sjis.txt | nkf -e > euc.txt

などとして変換できる。詳しくは

nkf --help

で。

qkc *

Ultra Highspeed Kanji Code Converter なのだそうだ。

nkfと違い、ファイルを書換えることを念頭においている(もちろんフィルタとして動作させることも可能)。例えば

qkc -e readme.txt

したらreadme.txtはEUCになる。詳しくは

qkc -H

で。

容量 *

du ./* -chs

でOK。

-c ... produce a grand total
-h ... print sizes in human readable format (e.g., 1K 234M 2G)
-s ... display only a total for each argument

w3m *

HTMLを解釈できるページャ。つまりテキストベースのWWWブラウザ。sshでのログイン先からちょこっとWebを見たい時に活躍。

インストール *

まずは http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/ からGC Libraryを入手しこれをセットアップする。

./configure --prefix=/home/akiyama/hiroitoh
make
make check
make install

で次にw3mのインストールをするわけだが、

checking size of long long... configure: error: cannot compute sizeof (long long), 77

なるエラー回避のため、あらかじめLD_LIBRARY_PATHを設定しておく。

setenv LD_LIBRARY_PATH /home/akiyama/hiroitoh/usr/lib
./configure --prefix=/home/akiyama/hiroitoh/usr --with-gc=/home/akiyama/hiroitoh/usr
make
make install

キーバインド *

カーソル動作、検索はEmacs、viのものを大体踏襲。

ブラウザ操作 *

UURL指定
B戻る
R再読み込み
uカーソル下のリンク先URL表示
c現在のURL表示
S現在のバッファ保存
aリンク先保存
vソース表示
ESC bブックマークを開く
ESC aブックマークに追加

画面操作 *

SPCPageDown
bPageUp
J一行下
K一行上
G一番下
g一番上
>画面を右にずらす
<画面を左にずらす
.画面を1文字右にずらす
,画面を1文字左にずらす

エディタとtextarea *

HTMLフォームの一行テキストはそのまま入力できるが、複数行テキスト(textarea)の編集には外部エディタを指定する必要がある。起動中に'o'キーでオプションを表示させ、そこからその設定が変えられる。

LINK *

CD/DVD関連 *

CD/DVDの作成 *

http://blogs.dion.ne.jp/terasan/archives/258368.html

が参考になった。

イメージのマウント *

CDイメージ(iso)をマウントするには

mount -t iso9660 /tmp/disk1.iso -o loop /mnt

とする。

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/500cdrom2iso.html

ctags *

ソースコードを解釈して「しおり」を作ってくれる。エディタ上で関数や変数を見て「これ、どういう宣言してたっけ?」と思うことはよくあるが、コマンド一発で即座に該当箇所にジャンプしてくれる優れ物。

$ ctags -R

でタグ(しおり)生成。vimならその後

ctrl-] でジャンプ
ctrl-T で戻る

である。

http://pcmania.jp/~moraz/tools/ctags.html

rsync *

ディレクトリの同期用プログラムで、リモート・ローカルを問わずバックアップに威力を発揮する。

link *

実例 *

私の常用コマンドは以下。オプションの意味は上記linkやman参照。

$ pwd
/cygdrive/e/hiroitoh
$ rsync -avz --delete ./data /cygdrive/h

eはHOMEがあるドライブで、hは外付けバックアップ用HDD

find *

link *

実例 *

カレントディレクトリ以下でhogeなるファイル・ディレクトリを検索

find ./ -name hoge

対象を、ファイルまたはディレクトリに限る

find ./ -name hoge -type d   # directory
find ./ -name hoge -type f   # file

大文字小文字の区別をなくすには、name を iname とする。

カーネルモジュール *

USBやSCSIなどが使えるか否かというのは、その機能がカーネルでサポートされているかに因ります。しかし、何でもかんでも機能をカーネルに盛り込んでしまうとカーネルが誇大化してしまい、何かと不都合です。そのため、必要な機能を使うためのコードというのをカーネルの外部に用意しておき、必要なときに読み込んで使用するといった方式が開発されました。この外部のコードのことをモジュールと言います。この機能を有効にする(動的なモジュール呼び出しを有効にする)ためには、カーネルの

Enable Loadable module support

というパラメータを有効にしておく必要があります。又、モジュールに関するコマンドは以下のようになっています。

insmod       モジュールのインストール
rmmod        モジュールを除く
depmod -a    モジュール依存関係のアップデートを行う
modprobe     依存関係を考慮した上でモジュールのインストールをする
lsmod        現在のモジュールを見る

設定は、/etc/modules.conf に記されていますが、これを変更したら depmod -a としてアップデートを行う必要があります。

f2c *

FORTRANは数値計算の分野では現役の言語ですが、コンピュータ言語そのものとしては過去のものという雰囲気があるようです(FORTRANの規格は改良され続けていますが)。そんなFORTRANのソースファイルをCのものに変換するのがf2cというプログラム(ライブラリ)です。まずこちらからモノを入手し、バラします。解凍後のファイルも余さず解凍します。

cd f2c
gzip -d *.gz
cd src
gzip -d *.gz
cd ..
unzip libf2c.zip

そしてコンパイルします。

cd src
make xsumr.out
make f2c
cd ../libf2c
make -f makefile.u

そしてインストール。f2c.tarを解凍したディレクトリに移って、

cp src/f2c /usr/bin
cp libf2c/libf2c.a /usr/lib
cp f2c.h /usr/include
cp f2c.1 /usr/share/man/man1
ranlib /usr/lib/libf2c.a

使い方は以下のようになります。

f2c foo.f
cc foo.c -lf2c -o foo

lm_sensors *

例えばCPU温度やファン回転数といった情報をモニタすることができるのが lm_sensorsというソフトです。バージョン2.8.1を使用して EPIA ME600 での動作に成功しました。

インストール *

ソースを入手し、注意事項を良く読みます。まずはi2cのインストールです。

# make all
# make install    <-- モジュールとヘッダがインストールされます
# depmod -a

次にlm_sensorsのインストールにとりかかります。

# make
# make install
# depmod -a
# ldconfig   <-- /etc/ld.so.confに/usr/local/libの行を加えてから
# prog/mkdev/mkdev.sh
# prog/detect/sensors-detect

私の環境ではいずれのパッケージもMakefileなどの修正は必要ありませんでした。sensors-detectは対話形式の初期設定ですが、何も考えずに言われるがままにEnterを押し続けたら動作しました。動作には幾つかのモジュールが必要で、その内容はsensors-detectの最後に示されます。Debianの場合、これらを

/etc/modutils/aliases
/etc/modules

に適宜追加し、update-moduleを実行すれば完了です。

参考文献 *

Windows パーティションのマウント *

デュアルブート環境などは、Windowsパーティションのディスクの内容も見られたほうが何かと便利です。以下にその方法を簡単に説明します。SCSIの場合はよく分かりません。 Linuxにおいては、諸々のデバイスをファイルとして扱いますが、IDEハードディスクとて例外ではありません。/dev ディレクトリに、 hda2 や hdb1 という名前で格納されていると思います。最初の h という文字は「ハードディスク」の略だと思います。2文字目は、以下の規則に従います。

最後の数字はパーティションの通し番号です。どのファイルがどこのディスクのどこのパーティションに属するか調べるためには

# fdisk -l

を実行します。容量とフォーマットの形式が一覧で出てくるので大体は理解できるはずです。対象のファイル名が分かったら、次にマウントポイントを作ります。要はどこにマウントするのかと言うことで、適当にディレクトリを作ってやればいいわけです。その後、コマンドを実行します。

# mount -t vfat /dev/hda2 /mnt/win

ここでは、「FAT32でフォーマットされた(vfat)」、「プライマリマスターの番号2のパーティション(/dev/hda2)」を、「/mnt/win」に、マウントすることを指示しています。 vfat という指定が、FAT32のみなのか、FAT16などでも有効なのかは知りませんが、とりあえずFAT32は私の環境でマウントできました。 Windows2000 など、NTFSでフォーマットされているのならば以下のようなコマンドにします。

# mount -t ntfs /dev/hda2 /mnt/win

ただし、NTFSへの書き込みは危険らしく、事実上読み込みしかできないそうです。 これらのコマンドをいちいち実行するのが面倒ならば、

/etc/fstab

を編集することによって、起動時に自動的にマウントすることが可能となります。エディタで開いて

/dev/hda2     /mnt/win     vfat     defaults   0 0

などという行を書き込めば有効になります。場所は、ファイルの最後尾の行にした方がいいでしょう。末尾に現れる数字は以下のような意味を表します。

書いておいてなんですが、2番目の数字のオプションは私自身よく分かっていません。しかし私が/etc/fstabに

/dev/hda2     /mnt/win     vfat     defaults   1 2

と記述したところ、起動時に「このファイルシステムはまだALPHAバージョンだからどーのこーの」と怒られたので、

/dev/hda2     /mnt/win     vfat     defaults   0 0

としてオプションをはずしてしまいました(これだと怒られずにすみました)。これらの数字の前にある"defaults"というのは、マウントのためのパラメータです。これには以下のようなものがあります。

"defaults"というのは、上のパラメータのうち"rw"と"exec"と"auto"を有効にするものです。

Xで2つのマウスを使う *

USBマウスの他にIBM のトラックポイント付のキーボード(space saver II)を使用したいと思った時には、以下のようにしました。以下をを /etc/X11/XF86Config に書き込みます。

Section "InputDevice"
     Identifier     "Mouse1"  <------------もとのMouse0と競合しないようにする
     Driver         "mouse"
     Option         "Device" "/dev/psaux"
     Option         "Protocol" "PS/2"
     Option         "EmulateWheel" "true"
     Option         "EmulateWheelButton" "2"
     Option         "Inertia" "50"
EndSection

その後、ServerLayoutセクションに、

InputDevice   "Mouse1" "AlwaysCore"

という行を書き込むと、Xの再起動後にはトラックポイントでマウスカーソルが動くようになっていました。青ボタンによるスクロールもちゃんと機能します。

その他大勢 *

多分もう古いこと *

LILOの設定 *

マルチブートをするにせよ、しないにせよ、LILOはフロッピーに入れると何かと便利と思っています。しかし、 RedHat 7.2ではインストーラがフロッピーにブートローダをインストールしてくれなさそうだったので、ブートローダはインストールせずにブートディスクで起動し、後に手動でLILOをフロッピーに書き込みました。rootになって、

/etc/lilo.conf

に以下のように書き込みます。

prompt
timeout=50
default=linux
boot=/dev/fd0
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.7-10
     label=linux
     initrd=boot/initrd-2.4.7-10.img
     read-only
     root=/dev/hdb1   <-----------インストールした場所
     append="hdc=ide-scsi"

保存した後、空フロッピーを入れてから

/sbin/lilo

を実行すれば、次回からこのフロッピーでLILOが立ち上がります。

プリンタの設定 (RedHat 7.3) *

通常プリンタの設定は、/etc/printcap を編集することによって行われますが、RedHat 7.3 においては手で編集してはいけないようですので、設定ツールを用いて行います。起動は以下のようにします。

# printconf-gui (Xの場合)
# printconf-tui (コンソールの場合)

設定は分かりやすいです。Phaser などのプリンタを Ethernet で直接繋いでいる場合は"JetDirect"を選択します。私のおかれている環境では PostScript プリンタを使用しているので印刷は比較的楽です。そうでない場合は GhostScript などを駆使して印刷する必要がありそうです。以下は PostScript プリンタの下での話です。印刷方法ですが、PSファイルの場合は

lpr -P (printer) hoge.ps

とします。-P オプションはプリンタ名を指定するものです。ただのtextファイルを印刷したい場合は、 textファイルをPSファイルに変換するスクリプトをlprにパイプで送ってやります。

a2ps hoge.txt | lpr -P (printer)

DVIファイルをPSに変換するdvipsでも同様にできます。ただ、私の環境ではプリンタを設定してからa2psやdvipsの標準出力先がプリンタになってしまったようなので、印刷したくない場合は-oオプションで出力先を指定してやる必要があります。又、textファイルを印刷したいのなら、 OperaやNetscapeなどのメニューを用いて印刷した方が簡単かも知れません。両面印刷については奥村氏の解説に解りやすく述べられています。ところで、どなたかAcrobatから両面印刷する方法をご存じでないでしょうか?


Last-modified: Tue, 21 Nov 2006 06:13:20 JST