Linux misc Tips


LinuxでのTips(というより自分用の覚え書き)
distributionはRed Hat 7.3 (distributionに関係ないものも多いが) Debian編はこちら

Menu

シェルスクリプト関係
コマンド類
設定など (ユーザー向け)
設定など (管理者向け)
正規表現
細かい事 / 古い事

シェルスクリプト関係 (Bシェル系)

特殊変数

$0, $1, $2, ... : 第n引数 ($1なら1つめの引数)
$# : 引数の数
$* : 引数全て(のリスト)
$? : 直前に実行したコマンドの返り値
$$ : 自身のPID
---
$PWD : カレントディレクトリ
$RANDOM : 乱数

制御文

if文 (例 : 引数の数をチェック)
    if [ "$1" == "" ]; then
        echo "too few arguments"
        exit
    elif [ "$1" == "-q" ]; then
        echo "q option"
    else
        echo "other option"
    fi
    
while-do文 (例 : 変数 $ctr でループ)
    ctr=1
    while [ $ctr -le 10 ]; do
        echo "loop $ctr"
        ctr=$[ $ctr + 1]
    done
    
for文 (例 : ファイルをコピー)
    for i in `ls`; do
        echo "filename : $i"
        cp $i ~/copydir/$i
    done
    
C言語likeなforループ
    for i in `seq 1 10`; do
        echo "loop $i"
    done
    

ファイルからの入力

filename.txtから1行ずつ読み込んで変数VAR1に格納
    exec 3< filename.txt
    while read VAR1 0<&3
    do
       echo $VAR1
    done
    

ヒアドキュメント

シェルスクリプトからある程度長い文字列をファイルに書き出す
    cat << EOF > filename.txt
    alpha
    beta
    gamma
    EOF    
    
(catからEOFまでの内容がfilename.txtに書き出される)

シェルスクリプトで便利(かもしれない)コマンド

printf … 指定書式出力
例1) printf "%3.1f\n" 10
例2) printf "%05d\n" 10

seq … 番号を順に出力する
例) for i in `seq 1 1 10`; do ... done (C言語のfor文のような書き方[bash])

sed … 文字列を置き換える etc.
例1-1) cat orig.txt | sed -e "s/alpha/beta/" > dest.txt (文字列alphaをbetaに置き換え : 最初に現れるalphaのみ置換される)
例1-2) cat orig.txt | sed -e "s/alpha/beta/g" > dest.txt (文字列alphaをbetaに全て置き換え : 1行に該当箇所が複数の場合全て置換)
例1-3) cat orig.txt | sed -e "s/alpha/beta/2" > dest.txt (2つめの文字列alphaをbetaに置き換え)
例2) cat orig.txt | sed -e "/^alpha.*$/d" > dest.txt (alphaで始まる行を消去)

bc … 任意精度計算 (小数点を含む計算 etc.)
例) printf "%3.1f\n" `echo 5^2 | bc -l`

cut … 各行から特定部分を取り出す
例) value=`cat orig.txt | cut -d , -f 2` (カンマで区切られたファイル(CSV形式)の2番目の要素を取り出す)

basename … ファイル名からディレクトリ名と拡張子を取り除く
例) > basename ../alpha/beta/gamma.txt .txt
(ディレクトリ名と.txtが取り除かれてgammaだけが表示される)

wc … ファイルの単語数や行数を数える
例) > wc -l test.txt
(test.txtの行数を表示する.-w なら単語数.)

date … 日付を表示する
例) > date +%y%m%d.%H%M%S
( +... でフォーマットを指定)

read … コンソールからの入力を変数に代入する
例) read hoge ; echo ${hoge}

sort … ファイルの内容を並べ変えて表示する
例) sort test.txt

tr … 文字の変更
例) echo "hOgEHoGe" | tr "[a-z]" "[A-Z]"
(出力 HOGEHOGE : 小文字を大文字に変更)

[Menuに戻る]

コマンド類

rsync --- ssh経由でrsyncする場合

-eオプションを使う
例) rsync -ave ssh [source] [user@host:dest]

ispell --- スペルチェックをする

nkf --- 日本語の文字コードを変換する

(例)nkf -s -Lw linux.txt > win.txt : Windowsで読めるようにする ( -s : shift-JIS, -Lw : 改行CR+LF)

gdb --- プログラムのデバッグをする

1. コンパイル
コンパイル時に-gオプションをつける
2. 実行
gdb [実行ファイル] で実行
3. gdbの操作
run
break [行番号]
continue

screen --- (ネットワークの接続を切ってもプロセスを走らせ続けたい)

1. 準備 (Ctrl-zをエスケープに変更/デフォルトはCtrl-a)
.screenrcを編集 : escape ^z^zを追加
2. 使い方
Ctrl-z c : 新しい仮想端末を開く
Ctrl-z n : 次の仮想端末へ
Ctrl-z p : 前の仮想端末へ
Ctrl-z w : 仮想端末の一覧を表示
Ctrl-z d : デタッチ (screenをバックグラウンドで走らせる)
$ screen -r [プロセスID] : アタッチ
(デタッチしたscreenが1つのみの場合[プロセスID]は省略可)
3. 例
$ ssh somewhre ("どこか"にログイン)
$ screen (screenを起動)
$ ./heavy_task (何かプロセスを走らせる)
Ctrl-z d (screenをデタッチ)
$ exit ("どこか"への接続を切断/プロセスは走り続ける)

LinuxでCD-Rを焼く

1. mkisofsコマンドでISOイメージを作る
(例) mkisofs -l -o /tmp/[ISOimagefile] [sourcefile]
(mount /tmp/[ISOimagefile] /mnt/[mountpoint] -o loop などで確認)
2. cdrecordコマンドでCDを焼く
(例) cdrecord -v [options] /tmp/[ISOimagefile]
(optionsは書き込み速度など...)

a2ps, dvips --- 文章→ps, DVI→ps変換

-oオプションで生成するファイル名を指定できる
a2psならa2ps -o [dest.ps] [source.txt]
dvipsならdvips -o [dest.ps] [source.dvi]

xinit --- Xを起動する (Ctrl+Alt+F1などで端末を切り替えた時)

xinit -- :1
exec gnome-session

jhead --- デジタルカメラ画像のExif情報を取得する

多分インストールが必要 : apt-get install jhead (Vine 3.1)
(例) jhead [foobar.jpg] | awk '/^Date.*/' (撮影時刻を表示)

圧縮と解凍

(形式) : (圧縮) / (解凍)
.gz : gzip / gunzip
.tar : tar -cvf / tar -xvf
.tar.gz : tar -cvzf / tar -xvzf
.lzh : lha -e / lha -a

cdrecord --- LinuxでCD-Rを焼く

(rootになる必要あり)
cdrecord -scanbus でCD-Rドライブの番号を調べる
cdrecord -v speed=4 dev=0,0,0 foobar.iso で焼く
(-dummyオプションでレーザーoffでテスト実行)


[Menuに戻る]

設定など (ユーザ向け)

htaccessでアクセス制限をかける(パスワード)

アクセス制限をかけるディレクトリに.htaccessというファイルを置く
.htaccessの例 :
AuthUserFile /home/[account名]/.htpasswd
AuthGroupFile /dev/null
AuthName "[message]" 
AuthType Basic
<Limit GET>
require [access-name]
</Limit>
promptで $ htpasswd -c .htpasswd [access-name] としてパスワードを入力

emacsで拡張子が.incのファイルをFORTRANモードで開く

方法1 : emacs起動後に M-x fortran-mode で直接呼ぶ
方法2 : .emacsに以下の記述を追加する
(setq auto-mode-alist
(cons (cons "\\.inc$" 'fortran-mode) auto-mode-alist))
 

ネットワーク越しにプリンタを使う (ユーザ側の設定)

root権限でprinttoolを実行する
追加→Linuxプリンタ→プリンタの名前とホストのマシン名を入力
プリンタの種類を適当に選択してlpdを再起動すれば完了

.Xdefaultsの設定を(すぐに)反映する

xrdb -load ~/.Xdefaults とすると反映される
(emacsの背景色を変えたいとき, など)
 

マウスの種類の変更

/etc/X11/XF86Config-4 のmouseの項目を編集する
(例)PS2マウス: Option "Protocol" "PS/2"
(例)スクロールマウス : Option "Protocol" "IMPS/2"

液晶モニタがちらつく/にじむ

位相を調整する

wnn/eggの辞書に用例を追加する

wnn/egg中で Ctrl-t

環境変数を表示する

printenvを使用する

a2psで日本語が文字化けするのを防ぐ

解決法1
~/.a2ps/a2psrcというファイルを作り、
Options: --encoding=euc-jp
を加える

解決法2
/etc/a2ps-site.cfgの
# Default encoding
Options: --encoding=latin1
# Default encoding
Options: --encoding=euc-jp
に変える

Xの設定を変更する

xsetを使う
例1 : スクリーンセーバの起動をON/OFFする
$ xset s on(off)
例2 : ディスプレイの省電力設定を変更する
$ xset dpms 0 0 0 (省電力を無効)
例3 : マウスの速さを変更する
$ xset m 2 1 (1ドット以上動かすと2倍に)

[Ctrl]と[CapsLock]を入れ換える

.Xmodmapファイルをhomeに置く
.Xmodmapの例
すぐに変更を反映したい時は xmodmap ~/.Xmodmap
[Menuに戻る]

設定など (管理者向け)

サービスの状態を確認する

chkconfigでrun level毎に管理可能
+α
    /etc/init.d/*** はheaderを他のスクリプトからコピーすればchkconfigで管理できる

パーティションテーブルを変更する / ディスクをフォーマットする / パーティションにラベルを付ける

パーティションを切る
fdiskを使う
(例)fdisk /dev/hda
ディスクをフォーマットする
mke2fsを使う or mkfs.ext3を使う
(例) mke2fs -j /dev/hda5 (-j オプションはext3)
(例) mkfs.ext3 /dev/hda5 (ext3フォーマット)
ファイルシステムラベルを付ける
e2labelを使う
(例) e2label /dev/hda1 (/dev/hda1のラベルを表示)
(例) e2label /dev/hda1 /boot (/dev/hda1に"/boot"というラベルを付ける)
"ラベル名が長過ぎる"と言われた
後ろを切られて短くなったLABEL名で問題無い
(/etc/fstabでもLABEL名は短くされている)

LinuxのVersionを確認する

Linuxのバージョンは /proc/version
ディストリビューションの情報は
Vine : /etc/vine-release
RedHat : /etc/reahat-release
Debian : /etc/debian_version

シングルユーザモードで起動する(GRUB)

GRUBの選択画面で[E]キーを押す
kernelの行を選択して[E]キー
kernel ... root=/ の後ろにsingleと追加して[Enter]キーで確定
[B]キーでブート

[Menuに戻る]

正規表現

メタキャラクタ
^ : 行頭
$ : 行末
. : 任意の一文字 (シェルでの?に相当)
* : *の直前の文字の0〜n回繰り返し
[]: []内の文字のいずれか (範囲指定も可能:下の例を参照)
\ : エスケープ文字(メタキャラクタを無効にする)
/^#/ : #で始まる行に一致
/^$/ : 空行に一致
/.*/ : 任意の文字列(何も無くても可)に一致(シェルでの*に相当)
/\.c$/ : 行末が.cなら一致
/[cf]$/ : 行末がcまたはfなら一致
/[a-z]$/ : 小文字アルファベットなら一致

[Menuに戻る]

細かい事 / 古い事 etc...

ktermで開くwindowの大きさを変更する

kterm -geometry 80x60 などとすると指定の大きさで開く

xdvi, dvipsが日本語対応していない?

pxdvi, pdvipsという日本語対応バージョンが入っている
[Menuに戻る]

return to top page


Valid HTML 4.01! MORII Hideki
mail : moriih@scphys.kyoto-u.ac.jp