~LPICじゃ学べないLinux講座編~ 1.超絶高速オペレーションの種


1.超絶高速オペレーションの種
人類が増えすぎた人口を宇宙に移民させるようになって、既に半世紀が過ぎていた。
地球の周りの巨大な人工都市は人類の第二の故郷となり、人々はそこで子を産み、育て、そして死んでいった。
宇宙世紀0079、地球から最も遠い宇宙都市サイド3はジオン公国を名乗り、地球連邦政府に独立戦争を挑んできた。
この一ヶ月あまりの戦いでジオン公国と連邦軍は総人口の半分を死に至らしめた。
人々はみずからの行為に恐怖した。戦争は膠着状態に入り、八ヶ月あまりが過ぎた
いや、西暦なのかもしれない。
ま、そんなことどうでもいい。
ハム先生:「待ちかねたぞ、少年!」
ジーン:「いや、少年というには歳が……。先生、シャア少佐のように出世するにはどうすればいいのでしょうか?」
ハム先生:「何?少年ではない・だ・と?!出世?ふふふ、関係ないな。わたしは独自行動のライセンスを持っている。」
ジーン:「ぐぬぅ。では、シャア少佐のように3倍速く操縦するにはどうすればいいのでしょうか?」
ハム先生:「機体を赤く塗るだとか、赤い服を着るとかいう噂もあるが、拙者の場合、気合あるのみ。」
結論:超絶高速オペレーションは気合!
 Linux1
すまぬ、遊んだ。(掴めた?)
会話風に猿わかチックにやろうと思ったけど、悪ふざけが過ぎるのでやめておく。w

超高速bashオペレーション

過去に書いた記事を再編して載せてます。 あんまりbashのオペレーションについて纏まっていないので以前社内紹介として纏めてみたものです。

オペレーションの高速化の種を紹介したいと思う。 Linuxのbash環境を主に使うと思うので、そちらを紹介しよう。 オペレーションする際に、矢印キーを多用している人はいないだろうか? 10回、20回と↑キーを押し、結局見逃したりなかったりで諦めて初めからコマンドを打ち始めていると思う。 その間にキーを何回叩いたか意識したことがあるだろうか? まず、↑キーは何を行っているのだろうか? 『コマンドの履歴』をインクリメンタルサーチで前方検索を行っている。 実は違うモードでは停止キーにも割り当てられており、ややこしいので、 『コマンドの履歴』を使いたいと割り切り、 ↑キーを使わないオペレーションを目指してみよう。 ちなみに↑キーはCTRL+pキー、↓キーはCTRL+nキーに割り当てられており、 矢印キーの無いキーボードの場合、代用する。

『コマンドの履歴』

$ history

とコマンドを打つと、そのユーザで入力したコマンドの履歴が表示される。

  • セキュリティの関係で履歴表示していない場合があるが、ここでは履歴表示されるデフォルト状態を想定
  • 履歴はHISTSIZEという環境変数で定義されており、デフォルト値は1000、履歴無しは0 コマンドの履歴の例を下にあげてみよう。
$ history
1 su – hogehoge
2 id
3 pwd
4 ls -altr
5 rpm -qa –qf ‘%{name}-%{version}-%{release}.%{arch}.rpm\n’
6 hostname
7 cat /etc/sysconfig/network-script/ifcfg-eth0
~
582 ls -al
583 ls -alh
584 ll
585 pwd
586 cd ~
587 history
$

左の数字が「履歴番号」というものでこの番号指定でコマンドを呼び出すことが出来る。 呼び出し方は「!履歴番号」

$ !6
hostname
hogehoge
$

となる。 直前は「!!」 直前のコマンドの最後の引数を呼ぶのは「!$」 直前のコマンドの全部の引数を呼ぶのは「!*」 細かいところはググって調べてくれ。w 「!-n」とかもある。 『華麗な履歴の呼び出し方』 実はテクニック的にはここからだ。 「そういえば、さっきviコマンドで設定ファイル編集したがも一回追加編集あるな……。」 と思うことが多々あるだろう。 前回入力したviコマンドを呼び出すのは「!vi」だ。 「!(検索したい文字列)」で文字列前方一致の検索が出来る。

$ !vi
vi /etc/sysconfig/network-script/ifcfg-eth0

合ってた?違ってた?w 違ってたら過去に入力した事実がありながら、また打つ? ま、正規表現使えるからそれでひっかけるのが早いけど、ここは単純にgrepで引っ掛けてしまえ!

$ history | grep httpd.conf
519 vi /etc/httpd/conf/httpd.conf
521 cat /etc/httpd/conf/httpd.conf
$

と、呼んでしまえ。 そして、

$ !519
vi /etc/httpd/conf/httpd.conf

ちょっと待って! historyコマンドも打たなかったっけ?w

$ !hi | grep httpd.conf

$ !587 | grep httpd.conf

でよくね?

$ !hi | grep httpd.conf
history | grep httpd.conf
519 vi /etc/httpd/conf/httpd.conf
521 cat /etc/httpd/conf/httpd.conf
$

おお!呼べた。

$ !519
vi /etc/httpd/conf/httpd.conf

で、catは、

$ !521
cat /etc/httpd/conf/httpd.conf

で確認っと。 よしよし、俺出来る、俺出来る。 ちょいと待って待って。 ここで三通りのオペレーションが出来るよ。 まあ、今まではコマンドを↑で呼び出して、←キーを連打してたよね?(ニヤニヤ) たまたま、grepで引っ掛かったから履歴番号わかってたけど、わからない場合が多い。

$ ^vi^cat

または

$ !!:s/vi/cat/

または

$ cat !$

どれも

①
$ !519
vi /etc/httpd/conf/httpd.conf
$ ^vi^cat
cat /etc/httpd/conf/httpd.conf
②
$ !519
vi /etc/httpd/conf/httpd.conf
$ !!:s/vi/cat/
cat /etc/httpd/conf/httpd.conf
③
$ !519
vi /etc/httpd/conf/httpd.conf
$ cat !$
cat /etc/httpd/conf/httpd.conf

と目的が達成できる。 ①②は文字列変換 特に①は前方一致したキーワードのみ変換する。 だから、

$ vi /hoge/hoge/geho/view.txt
$ ^vi^cat
cat /hoge/hoge/geho/view.txt

となり、view.txtのviは変換してくれない。 あとは説明しないね。(笑) ①が活躍する場面は、 例えば、

$ !7
cat /etc/sysconfig/network-script/ifcfg-eth0
$ ^cat^vi
vi /etc/sysconfig/network-script/ifcfg-eth0
$ ^0^1
vi /etc/sysconfig/network-script/ifcfg-eth1
$ ^1^2
vi /etc/sysconfig/network-script/ifcfg-eth2
$ ^vi^cat
cat /etc/sysconfig/network-script/ifcfg-eth2
$ ^2^1
cat /etc/sysconfig/network-script/ifcfg-eth1
$ ^1^0
cat /etc/sysconfig/network-script/ifcfg-eth0

とかやる場合、すさまじく早くなる。 呼び出して、即実行したくない場合もあると思う。 実行されるコマンドやシェルを呼び出す場合は、

$ !6:p
hostname
$ !!
hostname
hogehoge

と「:p」を付けてあげることで実行せずに呼び出す。 難しくてわからねーよ!というお方へ。 コマンドを↑で呼び出して、←キーを連打派の方へ朗報!!! ↑で呼び出したら、 CTRL+a で行頭へ移動 CTRL+e で行末へ移動 CTRL+u でコマンド削除だ。 CTRL+u か CTRL+c で

$

状態のときに CTRL+d で

$ exit

と同じだ。 もうここ何年も「exit」という文字は打っていない。(嘘)

.Webサーバなどにsshして作業しまくるとき、
$ ssh hogehoge101
password:
$
~
$
(CTRL+d)
$ ^101^102
ssh hogehoge102
password:
$
~
$
(CTRL+d)
$ ^102^103

と流れ作業したりする。 さて、ここまでで今回は終了だ。

Linuxオペレーションでどれだけ無駄にキーを叩いていたか驚いていることであろう。 これを覚えて実践しているだけで、オペレーションの正確性、速さが抜群に違ってくる。 今まで無駄にキーを叩いていた時間を正確で迅速なオペレーションに代替し、生まれるのが貴重な時間である。 その生まれた時間を確認や準備に費やすことで更に質が向上する。 そんなん知ってるよという方もいるだろうが、気が付くと↑キーを連打している方は、またここに来て、オペレーションを修正していくことをオススメする。

  • ちなみにbash環境であればLinuxであろうがSolarisであろうがHP-UXであろうがAIXであろうが一緒。
  • 正確性、速さなどのメリットがあるが、更にscriptコマンドやターミナルのログが綺麗という事後作業でのメリットもある。 たぶんこれを実践していれば、赤い服を着なくてもマシンを赤く塗らなくても3倍くらいオペレーションは早くなる。

注意:オペレーションの仕方は人それぞれで、csh環境の師匠はいるが、bashについては完全に俺流ですので、あしからず。 参考サイト: http://www.geocities.co.jp/AnimeComic-Pastel/3829/words01_Gundam.html

2011/11/06 up


  • http://www.global-yurtdisi-egitim.com Yurtdisi Egitim

    Is there any information about this subject in other languages?