SSブログ

LinuxをWindowsで始める 5 [Linux]

今まで
・WindowsにBash on Windowsを入れ
・コマンドの入力をし
・ファイルの編集をおこない
・パッケージマネージャでプログラムを入れて、プログラミングのまねごと
をしました。

LinuxをWindowsで始めるという名目でやってきましたが、正直WindowsでやっていかなければならないところというのはBoWを入れるところぐらいで、実際シェルの中に入ってしまえば大してLinuxと変わるところはないというのは正直なところでした。結局、単なるLinux入門になってしまいましたが、それはそれでBoWの完成度が高いという事なんでしょう。

とりあえずはコマンドを入力できてテキストファイルを編集できるところまでくれば、後は各自でやっていく他ないんですが、あまり手放しが良すぎるのも無責任だろうと思っています。Linuxのシステム的なところも知っておくべきなんですが、それよりもBoWで操作に慣れて実際に何かできるようになった方が良いし、理論的なところは後でも全然遅くない気はします。BoWでカプセル化されて見えなくなっている部分まで追おうとすると厳しい気もしますし。



今回はシェルとtmuxを取り上げます。tmuxもシェルの一つらしいですが、普通のシェルとはちょっと違った感じなので、少し分けて話したいと思います。

現在のシェルを知るには
$ echo $SHELL
/bin/bash

で基本bashです。Linuxのシェルは大体はbashだと思います。例外はあるかもしれませんが、基本的に最新のディストリビューションではbashを使っていると思います。シェルのキーバインド(ショートカットキーみたいなもの)などで気になるところが出てきたら、それはそれで使いこなしている証拠なのでしょう。

ただ他のOSを使わない限りはシェルが変わることはないので、まずはbashを使いこなすところからいけばいいと思います。そしてbashで不十分か不都合な点があれば他のシェルに乗り換えればいいのです。自分の場合は、そこまでシェルを使いこなしてはいないのと、そもそも必要性がないので惰性的にbashを使い続けています。

chshというコマンドがあるのだけれども、BoWではいまいち効いてこない気がしますし。というかtmux以外使おうと思ったことないので、chsh自体使ったことがなかったのですが、ログインするときのシェルを変えるものなので、普通にbashとかtcshとか打てば変えられたんでした。


シェルというものはOSとのやり取りをするためのインターフェイスで、コマンドを打ったりして入出力をやり取りします。ただ、シェルによってできる事が変わってきていて、それによって便利になったりしています。

簡単なところからいくと、コマンドの履歴があります。lsやらcdやらいろいろ入力した後に、カーソルキーの上を押すと順に前に入力したコマンドが出てきます。その履歴は/bin/shでは使えません。これは後から足された機能という事になります。とはいえ、大体のシェルは履歴機能を含んでいると思うので、普通気にすることはないところなのかもしれません。

ただ、同じ長いコマンドや以前とは少し違うだけの長いコマンドを打つ場合は履歴がないときついですね。そして自分がやってきたことを見直すという意味でも使えないと厄介です。なおこの履歴はパスで言うと~/.bash_historyというファイルに収められています。

内容を見るには下記コマンドで。
less ~/.bash_history


~/ という表記は自分のホームディレクトリで、名前がhogeなら/home/hoge/というディレクトリを示します。ただ、一回普通にログアウトしないとファイルとして保存はされずに次のセッションには使えなかったりします。普通のログアウトはexitで終わったりするわけですが、普通じゃないログアウトとはいきなりコマンドプロンプトのウィンドウを×マークで消してしまうなどの事です。正常な終了をしないと書き込まれないわけですね。ただセッションが続いているうちは、履歴はメモリの中に残っているので、その場でのコマンドの再利用は普通にできます。


あとbashだとCtrl+aで行頭へ飛び、Ctrl+eで行末に飛ぶ、くらいは便利かもしれない。網羅的に知りたい場合は下記などへ

http://hogem.hatenablog.com/entry/20090411/1239451878

シェルの機能じゃないらしいけど、Ctrl+cでコマンドの実行停止とか、Ctrl+zでコマンドの中断とかは良く使いますね。emacsのキーバインドと関係しているみたいだけど、lessの操作がviと似ているとかどこぞから持ってきた仕組みって割合と多いのかも。まぁ何でも慣れですけど。


そして、シェルに組み込まれている文法もあります。if文やfor文がそれですが、プログラミングじみた事ができます。それらコマンドをファイルに書き込んでシェルスクリプトにすることもあります。それらをまじめにやろうとすると一冊の本になるくらいなので割愛しますが、既存のコマンドを組み合わせてできる事はプログラミングと同等に可塑性のあるものです。というか、プログラミングと言っていいのかな。


前に書いたコマンドの補完機能もbashの拡張機能なのでTabを押しても/bin/shではTab文字が入力されるだけです。色々見ていくとbashによって実現されていることって多いんだなと実感できますね。同じように他のシェルで別の事が実現できていることというのも多いのでしょう。

あとパイプとかリダイレクトとか基本技がありますが、それは必要になってきたらそのうちやる予定です。





地味にコマンドライン環境を便利にしているシェルですが、bashの他にtmuxをお勧めします。似たものでGNUのscreenがあるのですが(そしてBoWにも入っているのですが)、tmuxの方が普通に使われているっぽいです。僕としてはどっちを使ってもいいんじゃないかと思ったりはしましたが、自分が使い始めたころには縦に分割するのが普通にできたのがtmuxの方だったので、最終的にはtmuxを選びました。

tmuxの優れたところは
・画面分割ができる
・端末の接続がブチ切れてもセッションを続けてくれる
ところにあると思います。

他にも利点があるとは思いますが、自分がはっきりと認識しているところはそこのところですね。BoWでは後者はあんまり意味がないですが、画面分割ができるというのはメリットが大きいです。別に端末を複数開けばいいじゃないかという人もいるかもしれませんが、それはあまり推奨された行為ではないみたいです。特にSSHで外部から接続している場合は、接続をたくさん作るのはあんまりかっこよくないですし。正直、お作法的にあんまり端末をたくさん開くのはきれいじゃないという理由ぐらいしか見つからないのですが、もしかすると直接的なデメリットがあるのかもしれません。


僭越ながら自分のやり方を見せますと、ウインドウを全画面表示して、Ctrl+b, % で縦に分割して、横に二つの表示領域を並べています。

何かを参照しながら、ファイルを書いたり、
ファイルを開き編集しながら、コマンドで作業をしつつ、みたいな使い方をしています。
プログラミング的に切り替えが使いやすいというのはあると思います。

tmux.png

Ctrl+bとカーソルキーで細かく分割したペイン間を移動できます。

もっと分割もできるのですが、現実的に2ペインぐらいが一番使いやすいんじゃないかと思ったりします。Shift+2で横分割もできたりするので、色々自分の使いやすい使い方を探してみてください。

シェルの内容的にはbashが動いていますので、ペインの操作以外はbashと同じと考えてよいと思います。恐らくキーバインドが重なっている部分があるとしたらtmuxの方が優先されるんじゃないかとは予想されるんですが実際はどうなんでしょう。検証してないので分かりません。前に出たscreenというシェルはemacsのキーバインドと重なるとかなんかで敬遠されているのかもしれなかったような(てきとう)。


細かい使い方とかは他のブログにゆずります。
 http://kanjuku-tomato.blogspot.jp/2014/02/tmux.html
やたらQiitaのエントリーばかり引っかかるのですが、Qiitaは玉石混淆で記事の精度も低めで放置気味で、あんまり好きじゃないので他のサイトにしてみました。そもそも同じサイトで同じような記事があるのなんて冗長すぎるではないか。なんか頭悪さを露呈しているような気がするんだよね。集合知というより船頭多くして、という感じ。


一番のメリットはやっぱり先に挙げた後者の、SSHなどの接続が切れたとしても、長い時間かかる処理の実行が終わらないところでしょうか。外からつなぐと直接端末のコンソールを叩いているのとは違い、いつ切れてもおかしくないという前提でやった方が良いですから、予防措置的に使うのは精神衛生上とてもいいです。tmux attachで再接続できるのは安心です。

なので、BoWで使う事自体はそれほどメリットがないものの、使っていると後々得をする部分は大きいのではないのでしょうか。

次はデーモンがマシンの外から見えるのか検証します。それで後々の計画を考えたいと思います。
 http://miff.blog.so-net.ne.jp/2018-03-02-1

タグ:Linux入門
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0