Vimコマンド

Vimコマンドの使い方

機能

  • 構文強調
  • 複数の編集ウィンドウ
  • 折り畳み
  • マウスのサポート
  • ウィンドウの分割
  • プラグイン
  • カスタマイズ機能

基本

:set オプションの表示
* 文字列の強調表示

ビジュアルモード

v 文字単位で領域を選択
V 行単位で領域を選択
Ctrl + V 短形単位で領域を選択

ウィンドウ分割

:split ウィンドウの上下分割
:split newfile 新しいウィンドウでファイルを開く
:vsplist ウィンドウの左右分割
:new 新しいウィンドウを開く
:close 現在のウィンドウを閉じる
:only 現在のウィンドウ以外を閉じる
Ctrl + W w ウィンドウ間の移動
Ctrl + W + 現在のウィンドウを1行広げる
Ctrl + W - 現在のウィンドウを1行縮める
:wall すべてのウィンドウの変更内容を保存する
:wqall すべてのウィンドウの変更内容を保存しVimを終了する
:qall! すべてのウィンドウの変更内容を破棄しVimを終了する
:qall すべてのウィンドウを閉じVimを終了する(保存されていないウィンドウは停止)

バッファの表示

:ls
:b番号で表示する

ファイル呼び出し

:e ファイル名

領域選択+入力

ctrl + v して領域選択
shift + i して文字を入力
escape
escape

行選択+置換

shift + v 選択
j
j
/:

Undo/Redo

ctrl+u
ctrl+r

文字入力補完

ctrl+N

単語削除

dw

差分表示(vimdiff)

# vimdiff file1 file2
or
# vim -d file1 file1

テキスト操作系コマンド

grepコマンド

# grep meas$ /etc/* 2> /dev/null 行末にmeasが含まれるファイルの検索
# grep root /etc/* 2> /dev/null  行中にrootを含むファイルの検索
# grep ^root /etc/* 2> /dev/null 行頭にrootを含むファイルの検索
-v    :マッチしない行だけを表示 
-i    :大小の区別をしない
-n    :行番号を表示
-l    :マッチしたファイルを表示
-c    :マッチした行数を表示
'F..D'1文字にマッチ
'*D'  :複数文字にマッチ
'^F'  :先頭にマッチ
'F$'  :行末にマッチ
\     :特別文字を打ち消す
[]    :カッコ内の一文字にマッチ

egrepコマンド

# egrep '(reject|warn)' /var/log/messages

awkコマンド

1フィールド目と3フィールド目を表示 
# awk '{print $1,$3}' data

9フィールド目を表示
# awk '{print $9}' data

先頭がADMの行を表示
# awk '/^ADM/' data

2フィールド目と3フィールド目が同じ行を表示 
# awk '$2==$3' data

1フィールド目と3フィールド目をタブで区切り表示
# awk '{print $1,"\t",$3}' data

セパレータが:で2フィールド目を表示
# awk -F: '{print $2}' data

2フィールド目と3フィールド目が同じ行の1フィールド目を表示
# awk '{ if ( $2 == $3 ) print $1 }' data 

sedコマンド

マッチした行の削除(d)
# sed '1,5d' file1 > file2

検索パターンにマッチした文字列の置換
# sed s/linux/LINUX/

検索パターンにマッチした文字列の全部置換
# sed s/linux/LINUX/g                   

10行目までを置換
# sed '1,10s/^/>/g' sample.txt

検索文字列にマッチした文字の置換(y)
# sed y/ABC/123/ 

namesファイルのすべてのFをBに置き換え
# sed 's?F/B/g' names

namesファイルのFで始まる行を削除
# sed '/^F/d' names

namesファイルの2行目から最終行までを削除
# sed '2,$d' names                  

namesファイルの1行目から4行目にFをBに置き換え
# sed '1,4,s/F/B/g' names              

namesファイルの最終行にadd.1ファイルを読み込む
# sed '$r add.1' naems            

namesファイルの先頭にFがある行をnewdataに書き込み
# sed '/^F/w newdata' names

trコマンド

小文字を大文字に変更
# tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ  

小文字を大文字に変更
# tr a-z A-Z

小文字を大文字に変更
# tr '[:lower:]' '[:upper:]'

:を削除
# tr -d ':'

スペースを削除
# cat file1 | tr [:space:] ''

sortコマンド

数値的に降順(逆順)にソート
# sort -nr12フィールドは無視し,3番目のフィールがから各行末まででソート
# sort -k32フィールドで数値的にソートし同じになったものを第5フィールドの
第34文字で更にソート(フィールドの区切りとして':'を使用)
# sort -t : -k 2,2n -k 5.3,5.4

パスワードファイルを第5フィールドでソートし
先頭の空白文字は無視
第5フィールドが同じ値を持つ行は
第3フィールドのユーザーIDで数値的にソート
# sort -t : -k 5b,5 -k 3,3n /etc/passwd

uniqコマンド

# sort file | uniq -d
-c, --count      :それぞれの行が何回現われたかを行の内容とともに表示
-i, --ignore-case:比較の際に英大文字小文字の違いを無視
-d, --repeated   :同じ内容が 2行以上あるものだけを出力
-u, --unique1回しか現われない行だけを出力

cutコマンド

7文字目を取り出し
# cut -c7 samplt.txt

pasteコマンド

デリミタ""で水平方向にファイル連結
# paste -d";" sample1.txt sample2.txt

joinコマンド

共通フィールドを持つ行を連結
# join -j 1 sampl1.txt sample2.txt

splitコマンド

sample.txtを100行毎に分割しs_smaple.xxに出力
# split -100 sample.txt s_sample.

tacコマンド

catコマンドの反対

expandコマンド

テキスト中のタブをスペースに変換

unexpandコマンド

行頭にある連続した空白をタブに変換

いろいろ

ファイルの1カラム目をソートしてファイルに出力
# awk '{print $1}' file_name | sort > /tmp/bbb

ファイルサイズとファイル名のみを抜き出して表示
# ls -l | awk '{print $5,$NF}'
$5は「5列目のデータ」の意味。NFは、各行のフィールド数(列の数)
$NFは「NF列目のデータ」つまりその行の最後の列のデータということ

出力順番を変えてソート
# cat site.txt | awk '{print $3,$2,$1}' | sort

meeagesファイルの6フィールド目の出力をソートしてカウント
# cat /var/log/messages | awk '{print $6}' | sort | uniq -c

ApacheプロセスのMAXメモリ使用量
# pgrep apache | xargs -i grep VmPeak /proc/{}/status1秒間隔で測定
# while :; do pgrep http | xargs -i grep -H VmPeak /proc/{}/status; sleep 1 ; done

findコマンド

findコマンドの使い方いろいろ

/etc配下のliloというファイルを検索
# find /etc lilo -print

パーミッションが777のファイルを出力
# find / -perm -777 -exec ls -ald {} \;

UIDが101のファイルを出力
# find /var -user 101 -print

UIDが101のファイルをadminに変更
# find /opt -user 101 -exec chown admin {} \;

sbitのあるファイルを出力
# find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -ald {} \;

3日以内に更新されたファイルの検索
# find /etc -mtime -3 -print

更新日付が2500日以上前のファイルの検索
# find /etc -mtime +2500 -print

100日前から3日前までに更新されたファイルの検索
# find /etc -mtime +3 -mtime -100 -print

/etcディレクトリ下に存在する1KB以下のファイルの検索
# find /etc -size -1k -print

/etcディレクトリ下に存在する1KB以上3KB以下のファイルの検索
# find /etc -size +1k -size -3k print

1KB以上のサイズで1000日以上前に更新したファイルの検索
# find /etc -size +1k -mtime +1000 -print

1時間以内に参照されたファイルの検索
# find /var -atime 1

/etc配下のファイルに対してliloという文字列を検索
# find /etc -type f | xargs grep lilo

エラーを表示させない
# find / -name traceroute -print 2> /dev/null

エラーのみ表示される
# find / -name traceroute -print 1> /dev/null

すべてを表示させない
# find / -name traceroute -print &> /dev/null

ワイルドカードの使用
# find / -name '*route' -print 2>/dev/null

routeを含むファイルの検索
# find /etc -exec grep "route" {} \; -print
-exec XXX:XXXを実行する  
{}       :findで検索されたものが代入
\;       :grepコマンドの終了

routeを含むファイルの検索
# find /etc -type f -exec grep "route" {} \;
-type:f ファイル
-type:d ディレクトリ
-type:l シンボリックリンク 

ファイルの種別にスクリプトファイルを指定した検索
# find /sbin -exec file {} \; | grep script

Linuxのシェル関連のまとめ

シェル(bash)の設定ファイル

  • 全ユーザーに適用される設定ファイル
/etc/profile  ログイン時に読み込まれ、全ユーザーに適用される
/etc/bashrc   ~/.bashrcから呼び出される
  • ユーザーごとの設定ファイル
~/.bash_profile ログイン時に読み込まれる ⇒ 環境変数の設定に利用
~/.bash_login   ~/.bash_profileファイルがない場合は読み込まれる
~/.profile      ~/.bash_profileも~/.bash_loginもない場合は読み込まれる
~/.bashrc       bashが起動するごとに読み込まれる
~/.bash_logout  ログインシェルが終了するときに読み込まれる

プロンプトの変更

PS1="/! \w\$ "

\H ホスト名(ドメイン付)
\h ホスト名
\T 時刻(12時間制)
\t 時刻
\u ユーザ名
\W 現在のディレクトリ
\w 現在のディレクトリ(homeディレクトリを~で表示)
\! これから実行するコマンドのヒストリ番号
\# これから実行するコマンドのコマンド番号
\$ rootユーザの場合# 一般ユーザの場合$

コマンド実行

コマンドを続けて実行させる
# command1 ; command2 ; command3

command1の実行が成功したときだけcommand2を実行
# command1 && command2

command1の実行が失敗したときだけcommand2を実行
# command1 || command2

リダイレクト

commandの実行結果をfileに保存(fileを上書き)
# command > file

commandの実行結果をfileに追記
# command >> file

fileの内容をcommandへ入力する
# command < file

任意の終了文字ENDが表れるまで入力を継続(ヒアドキュメント)
# command << END

commandのエラー出力をfileに保存(fileを上書き)
# command 2> file

commandのエラー出力をfileに追記
# command 2>> file

commandの実行結果とエラー出力をfileに保存(fileを上書き)
# command > file 2>&12>&1 は、2>file と同意

commandの実行結果とエラー出力をfileに追記
# command >> file 2>&1

パイプ

command_Aの結果をcommand_Bに渡す
# command_A | command_B

command_Aの結果を表示すると同時にfileにも保存
# command_A | tee file

command_Aの結果をcommand_Bに渡し、fileにも保存
# command_A | tee file | command_B

nohupコマンド・・・ログアウト後も実行させる場合

# nohup updatedb &

LinuxのTCPコネクション

Linuxは、TCPのコネクションが TIME_WAITステータスになってから、実際に切断されるまで、デフォルトで60秒かかる。


頻繁にコネクションが発生するシステムでは、TIME_WAITコネクションが大量に残ってしまい、新しいコネクションがはれない状況が発生することがある。


その場合、TCPのリサイクルオプション(tcp_tw_recycle)を有効化することで、TIME_WAITコネクションを使いまわしてくれる。

# echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

システム再起動後も設定を有効にする場合は、

# vi /etc/sysctl.conf
---------------------
net.ipv4.tcp_tw_recycle = 1
---------------------


設定前後の netstatコマンドの結果を見れば、効果は一目瞭然