小学校の頃初めてMS-DOSに触れ、その後ずっとWindowsのPCを使っていたので私はLinuxにそう詳しくないです。CLI
1にはGUI
とは違う感性があると思っていたくらいです。初めてCentOSを仮想マシンでインストールして見たときも、「あ、DOSに似ている」くらいの印象しかなかったです。でも仕事で使いながら思ったより便利ではやいと思いました。さすがサーバーで人気ナンバーワンのマケットシェアを誇るだけはあるんだなと思うくらいです。
それで、今回はcd
やmkdir
のような基礎の中の基礎しか知らない私が仕事で肩ごしで学んだコツをいくつか書こうと思います。これも基礎ですが、実際使ってみないとわからないだろうなと思っていたことが多く、コマンドやショートカットは本当に使い方次第だなと思ったのでその整理のためでもあります。
tabキーで自動補完
GUI
に比べCLI
が難しいと思われる理由は、何よりもコマンドの入力がベースになっているからと思います。ファイルを元のフォルダから違うフォルダに移動するという単純な動作も、GUIではマウスでドラッグすればいいだけのものをCLIではいちいちコマンドを打ちます。そもそもmv
のようなコマンドを知っていなければ成立できないことで、コマンドのオプションでまったく違う結果になったりもしますね。そして何よるも面倒なことは、ファイルやフォルダのパスをいちいち入力しなければならないということです。
そしてそれが不便と思ったのは多分私だけじゃなかったみたいです。いつから存在していたのかわからないショートカットですが、なんとtabを押すことで自動補完ができるのでした。これなら長いアルファベットでも、スペースが含まれていても大丈夫です。tabでの自動補完は以下のように動作します。
- ファイルやフォルダ名を入力する
- 書いている途中でtabキーを押す
- 自動補完でファイルやフォルダ名が完成
- 2つ以上のファイルやフォルダがある場合はリストを出力
例えば /home/retheviper/task01
というフォルダに移動するとします。
cd h # ここでtab
$ cd home/ # 自動補完される
$ cd home/r # ここでtab
$ cd home/retheviper/ # 自動補完される
$ cd home/retheviper/t # ここでtab
task01 task02 task03 # tから始まるフォルダが複数存在しているのでリストを出力する
かなり便利なショートカットなので覚えておきたいコツです。
フォルダ移動と目録の出力関連コマンド
現在のフォルダに何が入っているかをみるコマンドはls
やll
などがありますね。このコマンドにもう少しコマンドを付け加えることで違うフォルダの内容も出力できます。当たり前なことですが、同じような動作をするために私が主に使っていた方式はこうです。
# 現在のフォルダの内容を確認
$ ll
# /varフォルダがあったため、その中を覗く
$ cd var
$ ll
# スタート時点より上のフォルダがみたい
$ cd ..
$ cd ..
$ ll
しかし少しの応用でフォルダを変更せずにも違うフォルダを覗くことができます。
# 絶対経路を使う
$ ll /var/lib
# 下のフォルダを覗く
$ ll ./lib
$ ll lib
# 上のフォルダを覗く
$ ll ../
# さらに上のフォルダを覗く
$ ll ../../
他には、パスが長くて以前の位置に戻るのに時間がかかる場合は、簡単に戻ることもできます。
# 長いパスのフォルダの中にいる状態
$ pwd
/var/lib/jenkins/workspace/job01/git_repository/git
# また長いパスで全く違う経路のフォルダに入る
$ cd /home/retheviper/todo/task01/awesomeblog
$ pwd
/home/retheviper/todo/task01/awesomeblog
# 以前のフォルダに戻りたい
$ cd -
$ pwd
/var/lib/jenkins/workspace/job01/git_repository/git
ただ、cd -
を使ってフォルダを移動する場合は直前の経路だけに戻れないので注意してください。2回連続で入力すると2つのパスだけを繰り返して往復することになります。
ファイル同期ができるrsyncコマンド
Linuxでのファイルコピーは、scp
がもっとも多く使われているようです。でもrsync
コマンドの方がより効率的であるので私はこちらをオススメしたいです。rsync
は単純にファイルをコピーするだけでなく、フォルダやファイルの同期ができます。リモートのフォルダーを同期したい場合も公開鍵による認証を入れておけば、パスワードなしでコピーできるというところがまたいいです。
また、同期ができるということは差分を見つけ出すことも可能ということです。すでにコピー先にファイルがあるときはコピー元のファイルを比較し、差分だけを転送するので性能がよりいいです。また、コピー元でファイルが消されている場合はオプションでコピー先のファイルも消すことができます。
# フォルダを同期する
$ rsync origin destination
# コピー元から消されたファイルはコピー先でも消す
$ rsync --delete origin destination
ただ、他のコマンドでもそうですが、rsyncでコピーの対象を指定するときは/
の有無がかなり重要です。
例えばコピー元のフォルダを指定するときfolder
のように書くとそのフォルダごとコピーされますが、folder/
のように指定するとフォルダの下が対象となります。そしてコピー先のフォルダに権限がなかったり所有者名が違うとコピーできないどでご注意を。権限はchmod
、所有者はchown
で変えられます。
また、同期したいフォルダに消してはならないフォルダーがある場合は、オプションで指定することもできます。--exclude='folder'
というオプションを入れることで、指定したフォルダーは同期の対象から外されます。このオプションはコピー元からでもコピー先からでも適用されるので、便利ですね。
システムのスペックと状態を見る
仕事で性能テストがあって、特定作業でサーバーのシステム状態をモニタリングする必要がありました。まずサーバーのマシンスペックから確認したいですね。/procフォルダにカーネルで使われる情報が集まっているらしいです。
# CPUの詳細情報を見る
$ less /proc/cpuinfo
# メモリーの詳細情報を見る
$ less /proc/meminfo
リアルタイムでCPUやメモリーの使用量をみたい場合はvmstat
を活用します。
# 現在のステータスを出力する
$ vmstat
# メモリーの使用量を出力する
$ vmstat -s
# ディスクの活動を出力する
$ vmstat -d
# 1秒単位で更新しながら出力する
$ vmstat 1
メモリーとディスク、CPUの使用量をモニタリングできるため覚えておきたいコマンドですね。
長い出力を少しづつ見たい
ls -al
2などのコマンドでとある内容を出力する場合、リストが多すぎて画面に全部表示されない場合があります。こういうときはmore
コマンドで出力がターミナルを全部満たした場合、エンターキーを押すことで次のリストを表示することになります。
ls -al | more
この他にも色々と覚えておくと便利なコマンドやショートカットはたくさんありそうですね。こういうのがLinuxの魅力ではないかとも思います。使えば使うほどLinuxが好きになるかも。
それでは、今回のポストはこれにて。私のようなLinux初心者の方が実戦で応用できるような知識になればなと思います。