unix linux tips
出典: 有限会社クラフト 技術情報
簡単なunix linuxのtipsを掲載してます。ミスなどあれば、ご連絡頂ければ幸いです。
コントロールキー一覧
- CTRL+Q
入力ターミナルにCTRL+Sのコードが送られ、画面表示がストップ時、このキーで画面表示を再開可能
- CTRL+J
夕一ミナルモードをリセット
- CTRL+D
入力終了(EOF)
- CTRL+C
実行中のプログラムを中断
- CTRL+Z
実行中のプログラムの停止を試行
- CTRL+\
実行中のプログラムを強制的終了
複数のディレクトリを一度に作成する
mkdir /aa/{help,work,att}
結果
/aa/help /aa/work /aa/att
が作られる
指定したユーザーでコマンドを実行
bsd
su -l <username> -c <command>
linux
su -c '/usr/local/pgsql/bin/pg_ctl start' - postgres
コマンド ユーザー名
フロッピー(FD)のイメージダンプとリストア
イメージ取得
dd if=/dev/fd0 of=foo.img
イメージ書き込み
dd if=foo.img of=/dev/fd0
MBR保存(HDでも可能、ifを変更すること)
dd if=/dev/fd0 of=/dev/fd0 bs=512 count=1
ddについて
判例
dd if=/dev/rdsk/???? of=/dev/rmt/0mn bs=1024k count=620 skip=621
if=読み込み元 of=書き込み先 /dev/rmt/0:最初のテープデバイス m:ミディアム圧縮 n:巻き戻しなし bs=ブロックサイズ(必ず512byteの倍数であること)ここでは1024K=1Mごととしている count=回数 (620*1024k=640MByte) skip=スキップする範囲
CD-ROMサイズにわけて保存する
dd if=/dev/rdsk/c2d0s9 of=/dev/rmt/0mn bs=1M count=620 dd if=/dev/rdsk/c2d0s9 of=/dev/rmt/0mn bs=1M count=620 skip=621 dd if=/dev/rdsk/c2d0s9 of=/dev/rmt/0mn bs=1M count=620 skip=1241
ネットワーク経由でddを使う
手法はいくつかあるが、安易なのは、ncコマンドを使用した方法である。
- 受信元マシンで待ちうけ設定
nc -l -p 8080 > cimage.dd
nc -l -p 待ちうけポート > ファイル名
- 送信先マシンから送信開始
dd if=/dev/rdsk/???? bs=1024k count=620 skip=621 | nc 192.168.0.1 8080
送信先IP 送信先ポート
フォルダの使用容量ランキング
homeの各フォルダの使用容量を調べる
du -s /home/* | sort -nr
改行コードを取る
- 1ファイルでの例
!!入力と出力は同じファイルにしないこと!!!!
tr -d '\r' < in > out
- 複数ファイルを同時
for i in *.{cgi,pl}
do
tr -d '\r' < $i > $i.tmp
mv $i.tmp $i
done
nkfで文字コードと改行コード変換
unix[eucコード(LF改行)]変換
!!入力と出力は同じファイルにしないこと!!!!
nkf -e -Lu file > output_file
-e euc出力
-L 改行モード
-Lu unix (LF) 0x0a
-Lw windows (CRLF) 0x0d0a
-Lm mac (CR) 0x0d
windows[sjisコード(CRLF改行)]変換
!!入力と出力は同じファイルにしないこと!!!!
nkf -s -Lw file > output_file
-s sjis出力
-L 改行モード
-Lu unix (LF) 0x0a
-Lw windows (CRLF) 0x0d0a
-Lm mac (CR) 0x0d
disk test
- IBM Drive Fitness Test <URL:http://www.storage.ibm.com/hdd/support/download.htm>
- Maxtor POWERMAX v2.4 <URL:http://www.maxtor.com/Softwaredownload/default.htm>
- Quantum QDPS <URL:http://www.maxtor.com/Quantum/support/csr/software/disk_docs/qdps_ontrack_info.htm>
- Seagate SeaTools Disc Diagnostic <URL:http://www.seagate.com/support/index.html>
dosテキストファイルの ^Mを取る
tr -d '\015' < beforefile > afterfile
16進ダンプ(hexdump)表示
16進ヘキサーと文字コード表示
od -hc file
16進ヘキサー表示
od -h file
以下のコマンドがインストール済みの場合もある hd hexdump
ファイル名の一括変換
- 例1
for i in *.jpg do mv $i `echo $i | sed 's/z0/a/'` done
実行すると …
ファイル名 z01.JPG -> a01.JPGへ ファイル名 z02.JPG -> a02.JPGへ ファイル名 z03.JPG -> a03.JPGへ ファイル名 z04.JPG -> a04.JPGへ
に変更される
- 例2 複数の拡張子を対象に処理をする(jpg,png,gifが選択される)
for i in *.{jpg,png,gif}
do
mv $i `echo $i | sed 's/P00/a/'`
done
ファイルを読み込んで拡張値を変えて処理結果を保存
#!/bin/sh
LOGDIR=../snifer-log-pc\(020730\)
# UP SDK
for i in `find ${LOGDIR} -type f -name "*_up_sdk_*.cap"`
do
echo make $i figure
fig_name=`echo $i | sed 's/.cap$/.fig/'`
tethereal -R "ip.addr == 192.168.59.7" -V -r $i | gawk -f count.awk -v mode="figure" > ${fig_name}
done
ディレクトリ名からファイル名取出し
- 末尾に/が付かなければファイル名を取り出せる(先頭の/は影響なし)
echo "/aaa/bbb/ccc" | awk 'BEGIN {FS="/"} { print $NF}'
結果、ccc が出力される $は指定したフィールドを表示する NFはフィールド数なので、最後のフィールド内容を表示する
- 具体例
#!/bin/bash
rowLogDir=take_raw_log/
traficDir=trafic/
## trafic normal chenge
echo "trafic normal chenge"
mkdir ${traficDir}
#
for i in `find ${rowLogDir} -type f -name "*.csv"`
do
echo make $i
trafic_name=`echo $i | awk 'BEGIN {FS="/"} { print $NF}'`
trafic_name=`echo ${traficDir}${trafic_name}`
awk -f trafic_normal_chenge.awk $i > ${trafic_name}
done
ディレクトリ名からファイル名だけ除外
echo "/aaa/bbb/ccc.txt" | awk 'BEGIN {FS="/"} { for(i=1;i<NF;i++){printf("%s/",$i);} }'
ディレクトリは残してファイルだけ消す
find /home/aaa -type f -exec rm {} \;
ディレクトリ配下のhtml/htmだけをディレクトリ構造ごとコピー
#!/bin/sh
srcDir="corp"
dstDir="corp_onlyhtml"
#
for i in `find ${srcDir} -iname "*.html" -o -iname "*.htm" `
do
echo $i
dir=$dstDir/`echo $i | awk 'BEGIN {FS="/"} { for(i=1;i<NF;i++){printf("%s/",$i);} }'`
file=`echo $i | awk 'BEGIN {FS="/"} { print $NF }'`
mkdir -p $dir
cp $i $dir/$file
done
ファイルの文字列置換
for i in *.eps do sed -e 's/MSPゴシック/GothicBBB-Medium-H/g' $i > tmp mv tmp $i rm tmp done
行頭に特定の文字の後があれば、他のファイルの内容を追加
#!/bin/sh
DIR=.
TMP=tmp
# html file
for old in `find ${DIR} -type f -name "*.htm*" `
do
echo ${old}
cp ${old} ${TMP}
cat ${TMP} | awk '
BEGIN {
FS=" ";
IGNORECASE=1;
}
{
print $0;
}
/^<body/ {
system("cat s1");
}
' > ${old}
done
無限ループ
while [ 1 ]; do tail -f /tmp/az sleep 1 done
該当日時までループ
2004/07/18 05:00まで動作する
LIMIT=2004071805 while [ `date '+%Y%m%d%H'` -lt $LIMIT ] ; do logname=`date '+%Y_%m%d_%H%M%S_aaaaaa.csv'` echo $logname sleep 5 done
