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 -nr 第1~2フィールドは無視し,3番目のフィールがから各行末まででソート # sort -k3 第2フィールドで数値的にソートし同じになったものを第5フィールドの 第3~4文字で更にソート(フィールドの区切りとして':'を使用) # 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, --unique :1回しか現われない行だけを出力
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/{}/status ※1秒間隔で測定 # 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>&1 ※2>&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コマンドの結果を見れば、効果は一目瞭然