演習 - Bash を試してみる

完了

自分の Linux コンピューターでは、Bash コマンドをローカル環境で実行できます。 Linux サーバーにアクセスできる場合は、サーバーにリモートで接続して、そこで Bash コマンドを実行できます。 ただし、誰も稼働中の運用システムで試したいとは思いません (特に Northwind 社での初日など)。

このユニットでは、右側の Azure Cloud Shell を Linux 端末として使います。 Azure Cloud Shell は、Azure portal または https://shell.azure.com でアクセスできるシェルです。 お使いの PC やラップトップに何もインストールしなくても使用できます。

Cloud Shell に慣れる

最初に、学習した Bash コマンドを使って Cloud Shell の内容を調べてみましょう。

  1. ls コマンドを使って、現在のディレクトリにあるすべてのファイルとサブディレクトリの一覧を表示します。

    ls
    
  2. 次のような出力が表示されるはずです。

    yourname@Azure:~$ ls
    clouddrive
    

    clouddrive は、現在のディレクトリのサブディレクトリです。 自分のアカウントで Cloud Shell を使用している場合に保持される、マウントされたファイル共有です。 現在は、それを Microsoft Learn サンドボックスで使っています。

  3. しかし、現在のディレクトリは "何でしょうか"。 pwd コマンドを使って調べてみましょう。pwd は、"print working directory" (作業ディレクトリの出力) を表します。現在使用しているディレクトリの長い形式のパスが出力されます。

    pwd
    
  4. 出力は次のように表示されます。

    yourname@Azure:~$ pwd
    /home/yourname
    

    この出力は、Linux ファイル システムのルートにある home という名前のディレクトリ内の yourname という名前のディレクトリにいることを意味します。

  5. 現在のディレクトリについてはあまり表示されません。 Bash の "フラグ" を使って、すべての非表示ファイルとディレクトリを出力し、正しいことを再度確認してみましょう。

    ls -a
    
  6. どうでしょう。 その出力では、最初に考えていたものより多くのものがこのディレクトリにあることが示されました。

    yourname@Azure:~$ ls -a
    .  ..  .azure  .bash_history  .bash_logout  .bashrc  clouddrive  .profile  .tmux.conf  .viminfo
    
  7. どのようなファイルとサブディレクトリがありましたか。 一部は Cloud Shell を動かすための裏方のファイルです。 他のいくつかについて説明します。

    • . は現在のディレクトリを示し、.. は親ディレクトリを示します。 どこにいても、非表示のファイルとディレクトリをすべて出力すると、... が表示されます。
    • .bash_history は特殊な Bash ファイルで、シェルに入力するすべてのコマンドが格納されます。 Bash ではコマンド履歴が記憶されており、後で説明するように、これは役に立ちます。
    • .bash_logout はもう 1 つの特殊な Bash ファイルであり、ログイン シェルが存在するようになるたびに読み取られて実行されます。 Linux のスーパーユーザーは、これを変更して環境をカスタマイズできます。
    • .bashrc は、新しいシェルを開始するたびに実行される重要な Bash 構成ファイルです。 このファイルを開いて確認する場合は、変更しないように注意してください。意図しない結果になる可能性があります。

履歴を呼び戻してコマンドをオートコンプリートする

次のような複雑なコマンドを入力すると、間違えることがよくあります。

ls -a .azure/commands/202?*.log

さいわい、Bash には役に立つ機能がいくつか用意されています。

以前のコマンドを呼び戻す

  1. 入力ミスがある次のようなコマンドを入力してみましょう (202? ではなく 203?)。

    ls -a .azure/commands/203?*.log
    
  2. 次のような出力が表示され、そのパターンに一致するファイルがなかったことがわかります。

    ls: cannot access '.azure/commands/203?*.log': No such file or directory
    
  3. コマンド全体を入力し直して間違いを修正するのではなく、上方向キーと下方向キーを使って、前に入力したコマンドを呼び戻すことができます。 上方向キーを使って、間違えたコマンドを呼び戻してみましょう。 次に、左方向キーを使って、最後の 32 に修正します。 もう一度 Enter キーを押し、修正したコマンドを送信します。

    上方向キーを連続して何回も押すと、複数コマンド前に戻ります。 後のコマンドに移動するには、下方向キーを使います。

  4. 次のような出力が表示されるはずです。 それにより、コマンドが正しく動作して、指定したパターンに一致するファイルの一覧が表示されたことがわかります。

    .azure/commands/2020-01-29.21-56-35.login.103.log
    .azure/commands/2020-01-29.21-56-38.account_set.112.log
    

オート コンプリート

見つかったファイルの 1 つの内容を読みたいものとします。 ファイルの内容を画面に出力するには、cat ("catenate": 連結) コマンドを使用できます。

  1. このコマンドを使うには、次のような完全なファイル名を使用します。

    cat .azure/commands/2020-01-29.21-56-35.login.103.log
    
  2. しかし、それでは入力が多く、エラーが発生しやすくなります。 代わりに、Bash の基本的なオートコンプリートを使用して、ほとんどの作業を行うことができます。 次のように入力してください。

    cat .a
    

    次に、Tab キーを押します。 どうなりますか。

  3. 単語 "azure/" の残りの部分がコマンドに表示されるはずです。

    cat .azure/
    

    単語の先頭を入力した状態で、Tab キーを押してオートコンプリートを実行します。 あいまいさがある場合、Bash では何も入力されないことに注意してください。 Tab キーを 2 回押すと、既に入力した文字と一致する特定のパスのすべてのファイルとディレクトリを Bash で表示できます。

  4. コマンド ディレクトリの実際の .log ファイルが表示されるまで繰り返します。 その後、Enter キーを押し、cat コマンドを使って画面に内容を表示します。 次のように表示されます。

    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:35,426 | INFO | az_command_data_logger | command args: login --identity
    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:37,604 | INFO | az_command_data_logger | exit code: 0
    

    正しくない文字を既に入力してある場合、Bash ではユーザーが入力しようとした文字を正しく推測できないことに注意してください。

man を使用する

cat コマンドを使用しましたが、それについてはまだ詳しく説明していません。 man を使って cat コマンドについての詳細な情報を表示する練習をしましょう。

  1. 次のコマンドを入力すると、cat の概要と使用方法がわかります。

    man cat
    

    そうです、シェルに「man cat」と入力しました。 Bash コマンドは、不可解に思うことも面白く感じることもあります。

  2. 出力は次のように表示されます。

    CAT(1)                                       User Commands                                       CAT(1)
    
    NAME
           cat - concatenate files and print on the standard output
    
    SYNOPSIS
           cat [OPTION]... [FILE]...
    
    DESCRIPTION
           Concatenate FILE(s) to standard output.
    
           With no FILE, or when FILE is -, read standard input.
    
           -A, --show-all
                  equivalent to -vET
    
           -b, --number-nonblank
                  number nonempty output lines, overrides -n
    
           -e     equivalent to -vE
    
    ...
    
  3. 上下の方向キーを使ってマニュアル ページをスクロールし、「q」と入力して終了します。

ディレクトリを削除する

もう 1 つの基本的な Bash コマンドである cd を練習しましょう。

シェルを使用している間は、PC や Mac のフォルダーと同じように、常にディレクトリ内にいます。 フォルダーを変更するには、cd ("change directory": ディレクトリの変更) コマンドを使います。

簡単なコマンドですが、少し練習してみます。

  1. 最初に、次のコマンドを入力して、正しい場所に移動します。

    cd ~
    

    このコマンドにより、シェルの特別な home ディレクトリにまだいなかった場合は、そこに移動しました。

  2. pwd コマンドをもう一度使って、再度確認します。

    pwd
    
  3. 出力は次のように表示されます。

    /home/yourname
    

    ~ は、この home ディレクトリを示す Bash のもう 1 つの特別な文字です。 シェル内のどこにいても、~ を使うと、場所 /home/yourname を参照できます。

  4. ログ ファイルが格納されているディレクトリ (前のいた場所) に変更してみましょう。

    cd .azure/commands/
    

    完全なコマンドを自分で入力するか、Tab キーを使用してオートコンプリートを実行します。

    コマンドを入力する行の表示が変わり、シェル内のどこにいるかがわかります。

    yourname@Azure:~/.azure/commands$
    
  5. 特別な .. 構文を使って、1 つ上のディレクトリに移動してみてください。

    cd ..
    

    ディレクトリ構造で 1 つ上のレベルに移動し、コマンド ラインは次のようになるはずです。

    yourname@Azure:~/.azure$
    

順調です。 Bash のエキスパートになる第一歩を踏み出しました。 学習を続けましょう。

自分の知識をチェックする

1.

cd . を Bash コマンドとして入力した場合、どのディレクトリに切り替わりますか?