LinuxをWindowsで始める 2 [Linux]
前回はLinuxをWindowsで始めるために、Bash on Windows(以下BoW)でやろうとしました。何にしてもアプリケーションを導入するようにお手軽なので、この方法を選択しました。
ここで知っておくことべきなんですが、Linuxを操作することは具体的にどういう事なんでしょうか。
極論すれば二つの事だけだけです。
それは、
・テキストを編集する
・コマンドを実行する
この二つです。恐らくそれ以上でもそれ以下でもありません。この二つができればほとんどの事ができます。さらに極論すればテキストを編集するのもviやemacsコマンドを使うので、最終的にはコマンドだけでなんとかなる世界ではあります。ただ厄介なことに、GUIではなくコマンドラインで行う事が基本となっています。確かにデスクトップなLinuxでGUIで操作することも可能です。
しかし、今回はCUIなBoWですし、Linuxを使うにおいてコマンドラインで作業ができる事に慣れておくのが肝要かと思われます。そしてGUIの作業はそもそもWindowsで可能なので、あえてLinuxを使うにおいてGUIでやる必要性はないのです。コマンドラインで慣れておく事は非常につぶしが利くので初めからやっておきましょう。
■ コマンドを打ってみる
Windowsでもコマンドプロンプトから簡単なコマンドを打ったことがあると思います。例えば、ネットワーク状況を調べるipconfigだとかpingだとかはやる機会も多いものでしょう。ただ普通にWindowsを使っていく上で、mkdirでわざわざフォルダを作ったりすることは少ないと思うし、cdでディレクトリの移動をすることもあまりないと思います。それらはGUIのマウスオペレーションでできてしまう事だからです。
しかし、コマンドで作業を行う事が基本的なLinuxですから、多くの事はコマンドを扱って作業を行っていかなければなりません。面倒ですよね。ただ、文字列の受け渡ししか受け付けない環境では、コマンド作業というのは非常に重要となってきます。例えば、遠く離れたサーバへのネットワーク経由の接続や、入出力がプアな組み込み機器など、文字列でやり取りしかできない、または現実的にGUIでやるのにコストがかかりすぎる状態というのは意外とあるものです。
そのため基本的なディレクトリ操作は何を見なくてもある程度できていたほうが事がスムーズに進みます。ただ、コマンドのすべてを隅々まで覚えておくことは不可能だと思うので、よく使うものや便利なものをピックアップして覚えていき、その他のものは必要になった時点で調べていけばいいと思います。
まず、Windowsと同じコマンドでディレクトリを作っていきたいと思います。コマンドはmkdirです。
$というのは実際に打ち込まないでください。一般的にプロンプトは$で示されていますので入力する必要はありません。同じ名前のディレクトリがなければ普通にtestdirというディレクトリ(フォルダ)が生成されます。これについてはWindowsでも同じなので特に何の疑いもないとは思います。
ただ、コマンドの中身がすべて一緒だという訳ではありません。やはりWindowsとLinuxのコマンドには違いが当然あって、名前が同じだからといって細かい仕様までは一緒ではありません。
コマンドプロンプトからbashに入らず、Windowsのコマンドのヘルプを見てみると
なんて出てきます。
LinuxであるBoWのmanを見てみると、下のようにコマンドを打ちます。
画面が切り替わって以上のような画面になると思います。画面を元に戻したい場合は、「q」ボタンを押すとプロンプトの入力待ち状態に戻ります。
とこのようにヘルプを見ても違いが判ると思います。同じ名前のコマンドであっても似て非なるものだと認識してください。ただ基本的な使い方は同じなので、コマンド以降の文字列の入力方法が違うだけだと思っていてもいいと思います。
ここで気付くとは思うのですが、Linuxのヘルプであるmanコマンドの中身は英語で記されています。もちろん日本語に翻訳されたものもあるんですが、いちいち入れるほどのもんかと言われるとそうでもないし、そもそもmanの英語はそんなに難しいわけでもないですし、正直あまり見やすいものでもありません。
ですからググるとよく分かるんですが、Linuxコマンドの詳細が示されたサイトが複数見つかると思います。分かりやすく更に日本語で書かれてあったりするものですから、自分としてもそっちを利用することも多いです。本当にこのパラメータであってたかなとか確認程度でしかmanは使っていません。
と、ここでパラメータという言葉が出てきましたね。パラメータを日本語で示すと引数だと思うんですが、要するにコマンドに引き渡す情報の事です。それがファイル名だったり、特定の動作をさせるためのスイッチみたいなものだったりします。
manの方で言うと
-m
-p
-v
という文字列がパラメータにあたります。ハイフンとアルファベットの後に別途文字列を必要とするものもあったりします。それはおいおい見ていくことにしましょう。ここではコマンドを意図的に動かすための情報を与えてあげると理解しておきましょう。
コマンドはある程度、英語から類推できるものになっています。mkdirはmake directoryの略と思われます。先ほどのmanもmanualのmanかと思われますし、これから行うcdコマンドもchange directoryやcurrent directoryの略かと思われます。ちなみにパラメータもある程度、頭文字などを取って類推しやすくはなっていて、丸暗記しなくてもそこそこいけます。
それではcdコマンドでディレクトリを移動してみましょう。
これで先ほど作ったtestdirに移動できます。普通ディレクトリを作った後は中身は何も入っていませんよね。それを確かめてみます。現在のディレクトリの内容を確認するにはlsコマンドを使います。
これは何かの頭文字の語呂合わせではたぶんないです(LiStかも…)。ただホームポジションからキーが打ちやすいと聞いた覚えがあります。それだけ良く打つコマンドではあります。
Windowsのエクスプローラから見れば一目瞭然ですが、コマンド操作だといちいち操作が必要となります。lsと打っても何も出ないと思います。そこで詳細表示を出してみることにします。
「-la」というのは先ほどのパラメータで「ls -a -l」とも分かち書きできますが、いちいちそう書くのは面倒なので通例はいっぺんに並べて書きます。コマンド作業では何度も同じことをするので、できるだけ簡略化をした操作が好まれる傾向にあるのです。
-aというパラメータはすべての情報を出し、-lというパラメータは内容をリスト形式にして詳細表示にするというものです。「-a」はall、「-l」はlistという意味なんでしょう。違う意味かもしれませんが、実際の挙動が把握できれば問題ありません。
.と..という表示がありますね。lsコマンド単体では出てきませんでしたが、-aパラメータで出てくるようになります。それがすべてという意味です。
「.」は現在のフォルダを示します。実際の使われ方として、相対パスで示す場合に「./hoge/foo/bar」などと書きます。この場合、今いる地点からhogeフォルダの中のfooフォルダの中のbarフォルダを指定するディレクトリの表現となります。
「..」は現在のフォルダが入っている上位のフォルダを示すディレクトリの表現です。これはWindowsでも同じかと思います。「cd ..」とすると上のディレクトリに戻れるというわけです。どんどん上に戻りたい場合は「cd ../../..」という風につなげていくといっぺんに移動できます。
さてリスト形式にして色々と情報が出てきました。
drwxrwxrwx 0 root root 4096 1月 14 17:50 .
drwxrwxrwx 0 root root 4096 1月 14 17:50 ..
なんじゃこりゃですよね。ここにはそこにあるファイルの使用権限やら、権限を持っているユーザーやグループ、ファイルの大きさや作成された時刻などが書いてあります。一番最後は先に見た現在位置のフォルダとその上に位置するフォルダの意味でした。
細かく説明すると他のコマンドの説明などを行わないといけないので、その時に説明するとして初めの文字の羅列ぐらいは書いておきます。
d: ディレクトリ(directory)
r: 読み取り権限(read)
w: 書き込み権限(write)
x: 実行権限(execute)
初めのdがディレクトリかどうかを示していて、
次の三文字がそのファイルの持ち主の権限を
その次の三文字がそのファイルのグループの権限を
最後の三文字がそれ以外のユーザーの権限を示しています。
仮にdrwxrwxrwxの部分が、drwxrw-r--だとすると
そのファイルのユーザーは、読めて書けて実行でき、
グループに属するユーザーは読めて書けるけど実行はできなくて、
それ以外のユーザーは読むことしかできない、となっています。
drwxrwxrwxの後ろは、ユーザーとグループになっています。上の例だとどちらもrootユーザーとrootグループになっていますが、/mnt/cなどのWindowsのディレクトリでフォルダを作成すると自分のユーザーではなくrootで作成されるみたいです。ちなみに/home/ユーザ名/などのディレクトリだと普通に自分のユーザー名で作成されるんですけどね。普通はそれが平常な動作です。
ファイルを所有するユーザーとグループを変更するには、それぞれchown, chgrpコマンドで変える事ができます。先の読み書きのパーミッションはchmodですね。chmodはともかくchown, chgrpは言うほど使わないので変えられるという事ぐらいは覚えておけばいいと思います。
ユーザーとグループの次の数字はファイルの大きさですね。ディレクトリはファイルシステムのブロックサイズが影響して4096bytesになっているようです。Linuxに限らずコンピュータは理詰めで、そうである理由が分かることが多いのがいいですね。
最後の日付と時間はタイムスタンプとなっていますが、たぶん作成した時間か更新した時間だと思います。しっかり調べたわけではないのであやふやですが、普通に考えればそうなんでしょう。
と一般的なlsコマンドの内容を説明するだけでこれですから、他のものを考えると面倒だなと思うでしょう。中にはわかりにくいものもあるけれども、これほど説明が必要なのに素っ気ない表示のものもそれほどは多くはないので気にする必要はないとは思います。ただこうすれば欲しい情報が出てくるという事は知っておくべきで、それを実際にやってみるというのは非常に大事だと思います。
コマンド作業は今後もやっていくので逐次勉強していくとして、もう一つの重要な作業であるテキストファイルの編集の仕方をやっていきたいと思います。
ここで知っておくことべきなんですが、Linuxを操作することは具体的にどういう事なんでしょうか。
極論すれば二つの事だけだけです。
それは、
・テキストを編集する
・コマンドを実行する
この二つです。恐らくそれ以上でもそれ以下でもありません。この二つができればほとんどの事ができます。さらに極論すればテキストを編集するのもviやemacsコマンドを使うので、最終的にはコマンドだけでなんとかなる世界ではあります。ただ厄介なことに、GUIではなくコマンドラインで行う事が基本となっています。確かにデスクトップなLinuxでGUIで操作することも可能です。
しかし、今回はCUIなBoWですし、Linuxを使うにおいてコマンドラインで作業ができる事に慣れておくのが肝要かと思われます。そしてGUIの作業はそもそもWindowsで可能なので、あえてLinuxを使うにおいてGUIでやる必要性はないのです。コマンドラインで慣れておく事は非常につぶしが利くので初めからやっておきましょう。
■ コマンドを打ってみる
Windowsでもコマンドプロンプトから簡単なコマンドを打ったことがあると思います。例えば、ネットワーク状況を調べるipconfigだとかpingだとかはやる機会も多いものでしょう。ただ普通にWindowsを使っていく上で、mkdirでわざわざフォルダを作ったりすることは少ないと思うし、cdでディレクトリの移動をすることもあまりないと思います。それらはGUIのマウスオペレーションでできてしまう事だからです。
しかし、コマンドで作業を行う事が基本的なLinuxですから、多くの事はコマンドを扱って作業を行っていかなければなりません。面倒ですよね。ただ、文字列の受け渡ししか受け付けない環境では、コマンド作業というのは非常に重要となってきます。例えば、遠く離れたサーバへのネットワーク経由の接続や、入出力がプアな組み込み機器など、文字列でやり取りしかできない、または現実的にGUIでやるのにコストがかかりすぎる状態というのは意外とあるものです。
そのため基本的なディレクトリ操作は何を見なくてもある程度できていたほうが事がスムーズに進みます。ただ、コマンドのすべてを隅々まで覚えておくことは不可能だと思うので、よく使うものや便利なものをピックアップして覚えていき、その他のものは必要になった時点で調べていけばいいと思います。
まず、Windowsと同じコマンドでディレクトリを作っていきたいと思います。コマンドはmkdirです。
$ mkdir testdir
$というのは実際に打ち込まないでください。一般的にプロンプトは$で示されていますので入力する必要はありません。同じ名前のディレクトリがなければ普通にtestdirというディレクトリ(フォルダ)が生成されます。これについてはWindowsでも同じなので特に何の疑いもないとは思います。
ただ、コマンドの中身がすべて一緒だという訳ではありません。やはりWindowsとLinuxのコマンドには違いが当然あって、名前が同じだからといって細かい仕様までは一緒ではありません。
コマンドプロンプトからbashに入らず、Windowsのコマンドのヘルプを見てみると
<mkdir /? ディレクトリを作成します。 MKDIR [ドライブ:]パス MD [ドライブ:]パス コマンド拡張機能を有効にすると、MKDIR は次のように変更されます: MKDIR は、必要に応じてパスの中間ディレクトリを作成します。 たとえば、\a が存在しない場合、 mkdir \a\b\c\d は、次と同じです: mkdir \a chdir \a mkdir b chdir b mkdir c chdir c mkdir d 拡張機能が無効な場合は、上のように入力します。
なんて出てきます。
LinuxであるBoWのmanを見てみると、下のようにコマンドを打ちます。
$ man mkdir
MKDIR(1) User Commands MKDIR(1) NAME mkdir - make directories SYNOPSIS mkdir [OPTION]... DIRECTORY... DESCRIPTION Create the DIRECTORY(ies), if they do not already exist. Mandatory arguments to long options are mandatory for short options too. -m, --mode=MODE set file mode (as in chmod), not a=rwx - umask -p, --parents no error if existing, make parent directories as needed -v, --verbose print a message for each created directory -Z set SELinux security context of each created directory to the default type --context[=CTX] like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX --help display this help and exit Manual page mkdir(1) line 1 (press h for help or q to quit)
画面が切り替わって以上のような画面になると思います。画面を元に戻したい場合は、「q」ボタンを押すとプロンプトの入力待ち状態に戻ります。
とこのようにヘルプを見ても違いが判ると思います。同じ名前のコマンドであっても似て非なるものだと認識してください。ただ基本的な使い方は同じなので、コマンド以降の文字列の入力方法が違うだけだと思っていてもいいと思います。
ここで気付くとは思うのですが、Linuxのヘルプであるmanコマンドの中身は英語で記されています。もちろん日本語に翻訳されたものもあるんですが、いちいち入れるほどのもんかと言われるとそうでもないし、そもそもmanの英語はそんなに難しいわけでもないですし、正直あまり見やすいものでもありません。
ですからググるとよく分かるんですが、Linuxコマンドの詳細が示されたサイトが複数見つかると思います。分かりやすく更に日本語で書かれてあったりするものですから、自分としてもそっちを利用することも多いです。本当にこのパラメータであってたかなとか確認程度でしかmanは使っていません。
と、ここでパラメータという言葉が出てきましたね。パラメータを日本語で示すと引数だと思うんですが、要するにコマンドに引き渡す情報の事です。それがファイル名だったり、特定の動作をさせるためのスイッチみたいなものだったりします。
manの方で言うと
-m
-p
-v
という文字列がパラメータにあたります。ハイフンとアルファベットの後に別途文字列を必要とするものもあったりします。それはおいおい見ていくことにしましょう。ここではコマンドを意図的に動かすための情報を与えてあげると理解しておきましょう。
コマンドはある程度、英語から類推できるものになっています。mkdirはmake directoryの略と思われます。先ほどのmanもmanualのmanかと思われますし、これから行うcdコマンドもchange directoryやcurrent directoryの略かと思われます。ちなみにパラメータもある程度、頭文字などを取って類推しやすくはなっていて、丸暗記しなくてもそこそこいけます。
それではcdコマンドでディレクトリを移動してみましょう。
$ cd testdir
これで先ほど作ったtestdirに移動できます。普通ディレクトリを作った後は中身は何も入っていませんよね。それを確かめてみます。現在のディレクトリの内容を確認するにはlsコマンドを使います。
これは何かの頭文字の語呂合わせではたぶんないです(LiStかも…)。ただホームポジションからキーが打ちやすいと聞いた覚えがあります。それだけ良く打つコマンドではあります。
Windowsのエクスプローラから見れば一目瞭然ですが、コマンド操作だといちいち操作が必要となります。lsと打っても何も出ないと思います。そこで詳細表示を出してみることにします。
$ ls -la 合計 0 drwxrwxrwx 0 root root 4096 1月 14 17:50 . drwxrwxrwx 0 root root 4096 1月 14 17:50 ..
「-la」というのは先ほどのパラメータで「ls -a -l」とも分かち書きできますが、いちいちそう書くのは面倒なので通例はいっぺんに並べて書きます。コマンド作業では何度も同じことをするので、できるだけ簡略化をした操作が好まれる傾向にあるのです。
-aというパラメータはすべての情報を出し、-lというパラメータは内容をリスト形式にして詳細表示にするというものです。「-a」はall、「-l」はlistという意味なんでしょう。違う意味かもしれませんが、実際の挙動が把握できれば問題ありません。
.と..という表示がありますね。lsコマンド単体では出てきませんでしたが、-aパラメータで出てくるようになります。それがすべてという意味です。
「.」は現在のフォルダを示します。実際の使われ方として、相対パスで示す場合に「./hoge/foo/bar」などと書きます。この場合、今いる地点からhogeフォルダの中のfooフォルダの中のbarフォルダを指定するディレクトリの表現となります。
「..」は現在のフォルダが入っている上位のフォルダを示すディレクトリの表現です。これはWindowsでも同じかと思います。「cd ..」とすると上のディレクトリに戻れるというわけです。どんどん上に戻りたい場合は「cd ../../..」という風につなげていくといっぺんに移動できます。
さてリスト形式にして色々と情報が出てきました。
drwxrwxrwx 0 root root 4096 1月 14 17:50 .
drwxrwxrwx 0 root root 4096 1月 14 17:50 ..
なんじゃこりゃですよね。ここにはそこにあるファイルの使用権限やら、権限を持っているユーザーやグループ、ファイルの大きさや作成された時刻などが書いてあります。一番最後は先に見た現在位置のフォルダとその上に位置するフォルダの意味でした。
細かく説明すると他のコマンドの説明などを行わないといけないので、その時に説明するとして初めの文字の羅列ぐらいは書いておきます。
d: ディレクトリ(directory)
r: 読み取り権限(read)
w: 書き込み権限(write)
x: 実行権限(execute)
初めのdがディレクトリかどうかを示していて、
次の三文字がそのファイルの持ち主の権限を
その次の三文字がそのファイルのグループの権限を
最後の三文字がそれ以外のユーザーの権限を示しています。
仮にdrwxrwxrwxの部分が、drwxrw-r--だとすると
そのファイルのユーザーは、読めて書けて実行でき、
グループに属するユーザーは読めて書けるけど実行はできなくて、
それ以外のユーザーは読むことしかできない、となっています。
drwxrwxrwxの後ろは、ユーザーとグループになっています。上の例だとどちらもrootユーザーとrootグループになっていますが、/mnt/cなどのWindowsのディレクトリでフォルダを作成すると自分のユーザーではなくrootで作成されるみたいです。ちなみに/home/ユーザ名/などのディレクトリだと普通に自分のユーザー名で作成されるんですけどね。普通はそれが平常な動作です。
ファイルを所有するユーザーとグループを変更するには、それぞれchown, chgrpコマンドで変える事ができます。先の読み書きのパーミッションはchmodですね。chmodはともかくchown, chgrpは言うほど使わないので変えられるという事ぐらいは覚えておけばいいと思います。
ユーザーとグループの次の数字はファイルの大きさですね。ディレクトリはファイルシステムのブロックサイズが影響して4096bytesになっているようです。Linuxに限らずコンピュータは理詰めで、そうである理由が分かることが多いのがいいですね。
最後の日付と時間はタイムスタンプとなっていますが、たぶん作成した時間か更新した時間だと思います。しっかり調べたわけではないのであやふやですが、普通に考えればそうなんでしょう。
と一般的なlsコマンドの内容を説明するだけでこれですから、他のものを考えると面倒だなと思うでしょう。中にはわかりにくいものもあるけれども、これほど説明が必要なのに素っ気ない表示のものもそれほどは多くはないので気にする必要はないとは思います。ただこうすれば欲しい情報が出てくるという事は知っておくべきで、それを実際にやってみるというのは非常に大事だと思います。
コマンド作業は今後もやっていくので逐次勉強していくとして、もう一つの重要な作業であるテキストファイルの編集の仕方をやっていきたいと思います。
タグ:Linux入門
コメント 0