ちょっと話題の記事

Linuxコマンドの便利な使い方等をまとめてみました【22日目】

2012.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近AWSを利用する機会が増えてきており、OSもLinuxということで、sshでのサーバ接続が基本となってきています。 そこで、よく使うLinuxコマンドとviエディタについて(一部便利な)使い方をまとめてみようとおもいます。

cdはカレントディレクトリの移動なのですが、作業中はよく同じディレクトリに移動したいことがよくあります。 そこで、aliasを設定することで簡単に『よく使うディレクトリまで移動する』ことができます。 まずはviで.bash_profileを開きます

$ vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

するとログイン時のホームディレクトリに.bashrcファイルが存在するかをチェックし、あるならその.bashrcを読み込む記述がありますので、 .bashrcを直接viで開いてみます。すると、3つのaliasがすでに設定されているのが確認できます。

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

Apacheのホームディレクトリに移動する事が多いので、aliasにApacheのホームディレクトリを設定してみます。

alias apa='cd /usr/local/apache2/'

上記1行を追加して、保存後にプロファイルを再読み込みして有効にします。

$ source .bash_profile

これで.bash_profileが再読み込みされ、先ほどのaliasで設定したものが反映されます。コマンドプロンプトで apa と入力して、その後 pwd と入力します。

$ apa
$ pwd
/usr/local/apache2

/usr/local/apache2
にカレントディレクトリが移動していることが確認できます。

この様にサーバセットアップ中などはaliasを設定しておくと作業効率が上がるのでよく使っています。

また、一時的に設定する場合は

$ alias doc='cd /usr/local/apache2/htdocs/'
$ doc
$ pwd
/usr/local/apache2/htdocs

の様にコマンドラインで直接設定しても可能です。

ここまでで使用したコマンドは

1.cd
2.vi
3.source
4.alias

この4つのコマンドです。

aliasを設定しておくと楽ですが、一時的にディレクトリをスタックに保存して移動するpushdというコマンドもよく使っています。

$ cd /usr/local/apache2
$ pushd .  ←現在のカレントディレクトリを保存
/usr/local/apache2 /usr/local/apache2  ←スタックにカレント・ディレクトリが保存されている
$ cd /etc/init.d      ←/etc/init.dに移動
$ pushd            ← 一つ前のディレクトリに移動
/usr/local/apache2 /etc/init.d
$ pwd
/usr/local/apache2 ← 一つ前のディレクトリに移動していることを確認
$ pushd            ← 一つ前のディレクトリに移動
/etc/init.d /usr/local/apache2
$ pwd
/etc/init.d

本来はpopdを使ってスタックに保存されている一つ前のディレクトリに移動するのですが、このpushdコマンドを反復入力することで2つのディレクトリの行き来をする場合によく使っています。

5.pushd
6.pwd
この2つのコマンドが追加されました。

次にコマンド入力を行ってスペルミスした場合等、文字を置き換えて実行することもよく使っています。
例えばindex.htmlをcatするときに

$ cat index.hrml
index.hrml: そのようなファイルやディレクトリはありません

となった場合に

$ ^r^t

とすると直前に実行したコマンドラインの文字を置き換えて実行してくれます。(例はrをtに置き換える)
例の様に短いコマンドラインであれば打ち直してもいいですが、長いコマンドを入力し直すとなると大変なので、タイプミス部分をこの方法で置き換えて使っています。

$ ^r^t
cat index.html
htmlの中身を表示

あとはスペースで区切られた最後の文字列を引用する場合は!$を使って入力を簡素化しています。

$ cat index.html
htmlの中身を表示
$ vi !$   ←直前のコマンドラインでスペースで区切られた最後の文字列を適用してファイルを開く( vi index.htmlと同じ動作 )

パスが通っているファイルを開く場合はディレクトリパスを入力せず下記方法で開くことができます。whichコマンドはまさしくコマンドがどこにあるのか?ということを返してくれるコマンドです。

$ which apachectl
/usr/sbin/apachectl  ←コマンドのパスを表示
$ vi `which apachectl`

7.cat
8.which
この2つのコマンドが追加されました。

これらalias,pushd等のコマンドを使い慣れるとキータイプ数が非常に減るので、作業効率があがります。

空ファイルを作る場合はtouchコマンドを使っています。(vi 作りたいファイル名)でもいいですが、いつもtouchを使っています。

$ touch 作りたいファイル名

Apache等のログファイルの監視はtailコマンドを使っています。(例はapacheのアクセスログを監視する場合)

$ tail -f access_log

9.touch
10.tail
この2つのコマンドが追加されました。

コマンドラインでファイルを検索したい場合があります。その場合はfindコマンドを使います。例えばどこのディレクトリにhttpd.confがあるか不明な場合はルート"/"から検索することもでき、ワイルドカード"*"も使うことができます。(ディレクトリのアクセス権限がない場合は検索できませんので、一度rootユーザに変更してから実行するかsudoを使って実行してください。)

$ sudo find / -name httpd.conf -print

11.find
12.sudo
この2つのコマンドが追加されました。
sudoについては『指定したユーザーでコマンドを実行する。デフォルトではroot権限で実行されます。』

基本的なviコマンドの使い方(コマンドモード中の操作)

  1. 文字列の『置換』
  2. 文字列の『検索』
  3. vi中に他のファイルを開く
  4. 行頭に移動
  5. 行末に移動
  6. 行番号の表示
  7. 行番号の非表示
  8. カーソルの移動
  9. 行のコピー
  10. 行のペースト
  11. 行の削除
  12. 操作の取り消し
  13. 操作の繰り返し

文字列の『置換』

この機能はよく使うので、覚えていて損はないと思います。例えばpsコマンドの結果をファイルに書き出し、その書き出したファイルをviで開きます。

$ ps -aef > /tmp/tmp.txt
$ vi !$

これで/tmp/tmp.txtファイルが開かれるので、『:%s%Nov07%Dec07%g』を入力しリターンを押します。そうするとNov07と言う文字列をDec07に置き換えてくれます。最後についている『g』は全て置換すると言う意味です。『:%s%置換前文字列%置換後文字列%g』

あと固定長のファイル等を編集する際に便利なものとして例えばファイルの先頭10文字を削除する場合は『:%s%..........%%』と『.』を10個指定すると削除できます。

タブ区切りのテキストファイルの場合など特殊コードを置き換える場合は、『:%s%^I% %g』と指定するとタブコードを半角スペースに置き換えることができます。『:%s%』の後に特殊文字を指定する前処理としてCtrl+vコマンドを入力し、『^』が表示されたら次にキーボードのTabキーを押すと『:%s%^I』まで指定できますので、後は『% %g』と置き換えたい文字列を指定すれば『:%s%^I% %g』となりますので、タブコードを半角スペースに置き換えることができます。タブコードを完全に取り除く場合は『:%s%^I%%g』で取り除けます。
※カーソル位置から空白を含まない文字列(単語)の末尾までを単独で置き換える場合は『cw』とすることで文字列の置き換えが可能です。

文字列の『検索』

この機能はシンプルなので、特にずらずら書く事はないですが、『/sbin』と指定するとsbinと言う文字列を検索できます。マッチングした文字列にカーソルを移動するには n を押します。またマッチング文字列の一つ前に戻るには Shift+n です。

vi中に他のファイルを開く

これもよく使う機能です。vi編集中に他のファイルを開く場合は、『:e ファイル名』で指定したファイルが表示されます。元のファイルを表示する場合は『:e#』とすることで表示切り替えが可能です。

行頭に移動

これも簡単です。『^』を押すと行の最初の空白でない文字にカーソルが移動します。『0』(数字の0)を押すと先頭に移動します。

行末に移動

これも簡単です。『$』(Shift+4)を押すと行の先頭にカーソルが移動します。

行番号の表示

『:se nu』とするとviエディタで開いているテキストに行番号が表示されます。

行番号の非表示

『:se nonu』とするとviエディタで開いているテキストに行番号が表示されます。

カーソルの移動

次の区切りの文字列の先頭にカーソルを移動させるには『Shift+W』、逆に戻るには『Shift+B』です。
また、ページ送りは『Ctrl+F』、ページ戻りは『Ctrl+B』。カーソル位置を移動させずに行をスクロールさせるには『Ctrl+E』を使います。これが結構便利なので多用しています。

行のコピー

行のコピー(ヤンク)は『yy』です。複数行のコピー(ヤンク)を行う場合は『10yy』とコピーしたい行数を指定します。

行のペースト

行のペーストは『p』です。挿入したい位置までカーソルを移動させ、『p』を入力するとヤンクされている行がペーストされます。

行の削除

行の削除は『dd』です。削除したい行で、『dd』を入力するとその1行が削除されます。複数行の削除をしたい場合は『10dd』と削除したい行数を指定します。

操作の取り消し

直前の操作を取り消したい場合は『u』です。

操作の繰り返し

直前の操作を繰り返したい場合は『.』です。

viエディタは非常に奥が深いので、正規表現を使っていろんな事ができますが、通常利用する分にはこれくらい抑えておけば十分使えるのではないかと思います。