shell関連memo
キーボードショートカット
- 「Ctrl」+「S」でキー入力が受け付けられなくなる~
「Ctrl」+「Q」で解除
配列について [#k96b8e7a]
要素の参照
${array[0]} ${array[1]}
要素の代入
array[0]=1 array[0]=2
配列の要素の個数
declare -i array_num=${#array[@]}
配列の操作
declare -a array=(1 2 3)
先頭を取り出す
first="${array[0]}" # firstは1 array=("${array[@]:1}") # arrayは(2 3)
先頭に追加
array=(5 "${array[@]}") # arrayは(5 2 3)
末尾を取り出す
declare -i num=${#array[@]}-1 last="${array[$num]}" # lastは3 array=("${array[@]:0:$num}") # arrayは(5 2)
末尾に追加
array=("${array[@]}" 9) # arrayは(5 2 9)
lsof 使い方 [#z2b7b1b0]
lsof - list open files
- pオプションでプロセスID指定
# プロセスID指定
lsof -p 12345
#バッククォート使う
>||
lsof -p `pgrep -n httpd`
|
- cオプションでプロセス名指定
lsof -c httpd
\-uオプションでユーザ指定
lsof -u hoge
- iオプション [@IPアドレス:ポート番号]
listenしてるポートを出力。指定したポートのみ表示することもできる。
lsof -i # Listenしてるのずらずら表示 lsof -i :22 # ssh lsof -i :22,80 # ssh or http lsof -i :http # 名前でもいける lsof -i @192.168.0.1 # interface指定 lsof -i @192.168.0.1:80 # interfaceとポート指定
- aオプションでAND
オプション複数指定するとORで出力されるようです。なのでプロセスとユーザの両方を指定したいときは-aをつける。
lsof -a -u hoge -c java
ファイルシステムを指定
オプションなしでファイルシステム(ディレクトリ、ファイル)を指定すると、そのファイルシステムを使用中のプロセスが出てきます。例えば、こんなときに使う。(パスは絶対パスで指定する必要あり)
root # umount /media/cdrom umount: /media/cdrom0: デバイスを使用中です umount: /media/cdrom0: デバイスを使用中です
split 使い方 [#f9701890]
ファイルのサイズが大きくてメディアに収まりきれないときに使うとよい
split -b 1000m file file. ←fileをを1GBbytesずつに分割
くっつけるとき
cat file1 file2 > file
tar: Removing leading `/' from member names
メッセージが出た時の対処方法
tarは基本的に相対パスで実行される。~
そのため絶対パスで指定された場合に警告が出る。~
(圧縮自体は問題なし)~
絶対パスをで進めたい場合は-Pオプションを付けて実行すればよい
ハードウェア情報を調べるコマンド
dmidecode~
例:メモリの情報を抽出する
# dmidecode --type memory
typeはいろいろ
bios system baseboard chassis processor memory connector slot
引数を付けないでやると全部出るのでgrepしてもよし。~
/proc/meminfo とかよりも詳細な情報がでることもあるのでいろいろ試してみよう
文字コード変換
iconv
iconv -f=utf8 -t=sjis < 元ファイル > 変換後ファイル名
元ファイルの文字コードを utf8 とみなし、Shift_JIS に変換して出力。
iconv --list
-e 変換結果をEUC-JPで出力する
-j 変換結果をISO-2022-JPで出力する
-s 変換結果をShift-JISで出力する
-u 変換結果のバッファリングを行わない
|
DISKの追加とか
mkfs -t ext3 /dev/sda2 mkdir -p /disk2 mount -t ext3 /dev/sda1 /disk2
引用元
http://saminnet.dip.jp/servercomputer/Lmemo/pub/boot_scsi.html~
http://d.hatena.ne.jp/interu/20081215/1229336594
DISKの速度を調べる
hdparm -ft /dev/mapper/VolGroup00-LogVol00
プロセスごとのDISK I/Oを調べる
iotop
- d で間隔指定~
方向キーで優先順位の変更ができる~
インストールされていない場合はepelからyumで入れる
wgetやscpに帯域制限をかける
wget
・--limit-rateのオプションで制御可能。単位はbyte/秒
wget --limit-rate=100000 http://XXXXXX.com/aaa.tgz
これで100KB/秒で転送。
scp
・-lオプションで制御可能。単位はKbit/秒
scp -l 800 root@XXXXXX.com:/aaa/aaa.tgz ./
|
これで100KB/秒で転送。
rsync
・--bwlimitオプションで制御可能。単位はKbyte/秒
rsync -av --bwlimit=200 root@XXXXXX.com:/aaa/ ./aaa/
これで200KB/秒で転送。
faillog [#g29302b0]
ログイン失敗をみるコマンド~
/var/log/faillog~
を整形して表示する~
使用例~
ユーザーを指定して確認
faillog -u test
全ユーザーを指定して確認
faillog -a
yum [#s5217740]
- 失敗して壊れた時の対応
yumやRPM中にシャットダウンなどすると以下のようなメッセージが表示され正常に起動しなくなる。
rpmdb: PANIC: fatal region error detected; run recovery エラー: db4 error(-30978) from dbenv->
復旧するには以下のファイルを削除するか移動する
# ls -l /var/lib/rpm/__db.00? -rw-r--r-- 1 rpm rpm 90112 11月 14 19:51 Sigmd5 -rw-r--r-- 1 rpm rpm 12288 11月 14 19:50 Triggername -rw-r--r-- 1 root root 16384 12月 5 09:02 __db.001 -rw-r--r-- 1 root root 1318912 12月 5 09:02 __db.002 -rw-r--r-- 1 root root 450560 12月 5 09:02 __db.003
# mv /var/lib/rpm/__db.00? /tmp
rpmを再ビルド
>||
# rpm --rebuilddb
|
yumを起動して動作確認する
sar [#t4c985de]
- 過去分を日付指定でみる
sar -f /var/log/sa/sa15
※最後は日付をmmで記載
いつも通り他のオプションの指定も可能(-r -u -qとか)
unmount できないとき [#o47e3b75]
busyとでてumountができない時がある。その際はオプションに -l を付けてやるとできることが多い
umount -l /mnt
find [#md4aac68]
検索、表示する階層を指定する。
-maxdepth [arg]
上から[arg]分の階層を除外
-maxdepth [arg]
下から[arg]分の階層を除外
find /tmp/ -maxdepth 2 -mindepth 1 -ctime -1
dateコマンドのGNU版とBSD版の違い [#x4ec59c4]
BSD版 [#mf61b295]
$ date -help date: illegal option -- h usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]
GNU版 [#pddc4c4e]
$ date --help 使用法: date [OPTION]... [+FORMAT] または: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] Display the current time in the given FORMAT, or set the system date. -d, --date=STRING display time described by STRING, not `now' -f, --file=DATEFILE like --date once for each line of DATEFILE -I[TIMESPEC], --iso-8601[=TIMESPEC] output date/time in ISO 8601 format. TIMESPEC=`date' for date only (the default), `hours', `minutes', `seconds', or `ns' for date and time to the indicated precision. -r, --reference=FILE FILE の最終変更時刻を表示する -R, --rfc-2822 RFC 2822 形式で日付と時刻を出力する 例: Mon, 07 Aug 2006 12:34:56 -0600 --rfc-3339=TIMESPEC RFC 3339 形式で日付と時刻を出力する TIMESPEC=`date', `seconds' または `ns' で 示す日付、時刻の精度になる。 日付と時刻は単一のスペースで区切られ、次 のようになる: 2006-08-07 12:34:56-06:00 -s, --set=STRING STRING で記述される時間に設定する -u, --utc, --universal UTC (協定世界時) 時間を表示または設定する --help この使い方を表示して終了する --version バージョン情報を表示して終了する ||< ***日付指定する場合 [#a19cf1a1] 10日前 BSD版 >|| date -v-10d
GNU版
date -d '10 days ago'