Linux入門「はじめてのコマンドライン」- Part.1

※この記事は専門学校の講義用に作成されたものです

LinuxにはWindowsmacOSと同じ様にGUIを利用した操作ができる「XWindow」という仕組みもありますが、遠隔地にあるサーバを操作する場合には「コマンド」を入力して実行する方法が一般的です。

今回は初めてコマンドを操作する方を対象に、基本的な操作方法を取り上げます。

セットアップ

今回の環境はWindows10上にVirtualBoxを入れ、そこにCentOS7のイメージをインポートします。各セットアップの手順は過去の記事を参照してください。

最初にVirtualBoxをインストール。 blog.katsubemakito.net

その後にCentOSのイメージをインポートします。 blog.katsubemakito.net

ここではそれほど高度なことは行いませんので、一般的なLinux環境であれば同様に学習することが可能です。

コマンドを実行してみる

Terminalを起動

最初にコマンドを入力するための「Terminal」を起動します。(ここではダブルクリック)

このようなウィンドウが起動します。キーボードのキーを押すとカーソルが点滅しているところに文字が入力されていきます。

コマンドを実行する

コマンドを実行するには、コマンド名を入力しエンターキーを押すだけです。ここでは現在の時刻を表示するdateコマンドを実行してみましょう。すべて半角英字で入力してください。大文字と小文字は区別されます。

[neec@localhost ~]$ date
20201018日 日曜日 16:49:02 JST

あとはこの応用です。Linuxには様々なコマンドが用意されていますので、利用したいコマンドを同様の手順で実行するだけです。どうです?思ったよりも簡単な気がしませんか?(・∀・)

コマンドにオプションを指定する

少し複雑なこともしてみましょう。 まずはカレンダーを表示してくれるcalコマンドを実行してみます。以下のように現在の「月」が出力されました。

[neec@localhost ~]$ cal
      102020     
日 月 火 水 木 金 土
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

calコマンドは「オプション」を指定することで、指定した月を表示することもできます。それぞれの値は半角スペースで区切ってください。

[neec@localhost ~]$ cal 12 2020
      122020     
日 月 火 水 木 金 土
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

このようにコマンドへ半角スペースで区切って値を渡してあげることで、実行する際の挙動を変化させることができます。プログラミング言語の関数で言う引数のようなものですね。

ファイルを操作する

OSのお仕事の一つにファイルの管理があります。みなさんも普段からファイルをコピーしたりゴミ箱に入れたりしてますよね。あれです。あれをコマンドラインで同じ様に実行してみます。WindowsmacOSでは画面に表示された「アイコン」を操作するわけですが、コマンドラインはこれを「文字」で行います。

準備

最初に適当なテキストファイルを用意します。 テキストエディタを開き文字列を入力し保存します。ここでは「hello.txt」という名前で保存しました。ファイル名は基本的に半角英数字と一部の記号(ハイフンやアンダーバーなど)のみで入力しておくとトラブルに巻き込まれにくくなります。

Windowsで言う「エクスプローラー」を開き、先ほど作成したファイルが存在しているか確認します。エクスプローラー的な物の横にTerminalも配置しておきましょう。

これで準備万端です。

一覧を表示する

ファイルやフォルダ(ディレクトリ)の一覧を表示するには「ls」コマンドを実行します。「list」の略称です。

[neec@localhost ~]$ ls
Desktop    Downloads  Pictures  Templates  hello.txt
Documents  Music      Public    Videos

-lオプションを付けると作成日やファイル容量、その他の情報も表示されます。

[neec@localhost ~]$ ls -l
合計 4
drwxr-xr-x. 2 neec neec 143 106 19:50 Desktop
drwxr-xr-x. 2 neec neec  23 106  2019 Documents
drwxr-xr-x. 2 neec neec  51 106 19:43 Downloads
drwxr-xr-x. 2 neec neec   6  827  2019 Music
drwxr-xr-x. 3 neec neec  24  827  2019 Pictures
drwxr-xr-x. 2 neec neec   6  827  2019 Public
drwxr-xr-x. 2 neec neec   6  827  2019 Templates
drwxr-xr-x. 2 neec neec   6  827  2019 Videos
-rw-rw-r--  1 neec neec  11 1018 17:24 hello.txt

内容を表示する

ファイルの中身をちょろっと見たいときに、catコマンドを使えばわざわざテキストエディタを開くまでもありません。

[neec@localhost ~]$ cat hello.txt 
HelloWorld

名前を変更する

ファイル名を変更するにはmvコマンドを使います。これは「move」の略称です。Linuxのコマンドは母音を省略することがよくあります。

[neec@localhost ~]$ mv hello.txt world.txt

エクスプローラー的な物も同時に変化しましたよね。

コピーする

ファイルをコピーするにはcpコマンドです。お察しかと思いますが元になっているのは「copy」です。

[neec@localhost ~]$ cp world.txt hello.txt

中身を開いてみると同じ物であることがわかります。

[neec@localhost ~]$ cat hello.txt
HelloWorld

[neec@localhost ~]$ cat world.txt
HelloWorld

削除する

ファイルを削除する場合はrmコマンド。これは「remove」が元になっています。直訳すると「取り除く」と言った意味になります。例えば塗料や接着剤を取り除く薬品を「リムーバー」と言ったりしますよね。

[neec@localhost ~]$ rm world.txt

ディレクトリを操作する

Linuxではフォルダのことを「ディレクト」と呼びます。名前が違うだけでWindowsmacOSのフォルダと同じです。最初は違和感があるかもしれませんがこのあたりは慣れですね。

作成する

ディレクトリを作成する場合はmkdirコマンドです。「make directory」の略称です。

[neec@localhost ~]$ mkdir foo

名前を変更する

ファイル名を変更したときと同様にmvコマンドを利用します。

[neec@localhost ~]$ mv foo bar

コピーする

コピーするときもcpコマンドを使うのですが、ファイルと同様に指定するとうまく動いてくれません。

[neec@localhost ~]$ cp bar bar2
cp: ディレクトリ `bar' を省略しています

ディレクトリをコピーする際にはcpに続いて-rオプションを指定する必要があります。

[neec@localhost ~]$ cp -r bar bar2

削除する

削除する場合はrmdirコマンドです。何となくわかってきたと思いますが「remove directory」の略称です。

[neec@localhost ~]$ rmdir bar2

ただしこれはディレクトリの中が空っぽの場合のみです。ディレクトリの中にファイルが残っている場合はエラーとなってしまいます。大惨事を防ぐ安全装置ですね。

[neec@localhost ~]$ rmdir bar2
rmdir: `bar2' を削除できません: ディレクトリは空ではありません

中身が入っているディレクトリを丸ごと消すにはファイルと同様にrmコマンドに-rオプションを付けて利用します。

[neec@localhost ~]$ rm -r bar

Terminalをもう少し便利に使う

コピー&ペースト

一般的にWindowsでは「Ctrl+c」でコピー、「Ctrl+v」でペーストできますがTerminal上ではちょっとだけ異なります。

Terminalの「編集」メニューを開いてみると「Shift」を追加で指定する必要があることがわかります。

つまり「Shift+Ctrl+c」でコピー、「Shift+Ctrl+v」でペーストです。疲れていると私もよく忘れて慌てますw

自動的に補完する

ファイルやディレクトリ名を入力中に「タブキー」を押すと残りの文字を自動的に入力してくれます。候補が複数ある場合は、その候補を表示してくれます。 [video width="1376" height="574" mp4="https://blog.katsubemakito.net/wp-content/uploads/2020/10/cli1st-hokan.mp4"][/video]

すべてを入力するのは正直辛いのでこの補完機能は積極的に使っていきましょう。

直前のコマンドをもう一度

矢印キーの上(↑)を押す度に、過去に実行したコマンドがどんどん表示されます。実行したいコマンドまでたどり着いたらそのままエンターキーを押して実行できます。 [video width="1550" height="328" mp4="https://blog.katsubemakito.net/wp-content/uploads/2020/10/cli1st-prev.mp4"][/video]

左右キー(←→)でカーソルを移動し編集した上で実行することも可能です。

ワイルドカードを使う

ここまでの内容であれば「アイコンを操作した方が分かりやすいし楽じゃん」って思いますよね。はい、おっしゃる通りですw コマンドラインの真価はここからなのです。

準備

ファイルを以下のようにたくさん用意します。

[neec@localhost ~]$ cp hello.txt 2020-10-01.txt
[neec@localhost ~]$ cp hello.txt 2020-10-02.txt
[neec@localhost ~]$ cp hello.txt 2020-10-03.txt

[neec@localhost ~]$ cp hello.txt 2020-11-01.txt
[neec@localhost ~]$ cp hello.txt 2020-11-02.txt
[neec@localhost ~]$ cp hello.txt 2020-11-03.txt

[neec@localhost ~]$ cp hello.txt 2020-12-01.txt
[neec@localhost ~]$ cp hello.txt 2020-12-02.txt
[neec@localhost ~]$ cp hello.txt 2020-12-03.txt

以下のようにたくさんファイルが出来たでしょうか?

複数のファイルを一度に操作する

例えば12月のファイルだけ削除したいといった場合、以下のように1つづず指定しても良いのですが、これだと対象ファイルが1000個あったら1000回コマンドを打たなければなりません。

[neec@localhost ~]$ rm 2020-12-01.txt
[neec@localhost ~]$ rm 2020-12-02.txt
[neec@localhost ~]$ rm 2020-12-03.txt

しかし、コマンドラインでは以下のように入力すれば一発で削除することができます。対象のファイルが1000個あっても1発です。このようにコマンドラインで「*」を入力した場合にはどんな文字が来ても対象とすると言った特別な意味を持ちます。

[neec@localhost ~]$ rm 2020-12-*

このような特別な文字を「ワイルドカード」と呼びます。

1文字だけマッチさせたい

例えば各月の2日のファイルだけ削除したい場合には以下のような指定も可能です。

[neec@localhost ~]$ rm 2020-??-02.txt

「*」は一度に複数の文字列にマッチしますが、「?」は1文字だけにマッチしてくれます。状況によって使い分けましょう。

続き

blog.katsubemakito.net