演習 - 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 の内容を調べてみましょう。
ls
コマンドを使って、現在のディレクトリにあるすべてのファイルとサブディレクトリの一覧を表示します。ls
次のような出力が表示されるはずです。
yourname@Azure:~$ ls clouddrive
clouddrive は、現在のディレクトリのサブディレクトリです。 自分のアカウントで Cloud Shell を使用している場合に保持される、マウントされたファイル共有です。 現在は、それを Microsoft Learn サンドボックスで使っています。
しかし、現在のディレクトリは "何でしょうか"。
pwd
コマンドを使って調べてみましょう。pwd
は、"print working directory" (作業ディレクトリの出力) を表します。それは、ユーザーが現在いるディレクトリの長い形式のパスを出力します。pwd
出力は次のように表示されます。
yourname@Azure:~$ pwd /home/yourname
この出力は、Linux ファイル システムのルートにある home という名前のディレクトリ内の yourname という名前のディレクトリにいることを意味します。
現在のディレクトリについてはあまり表示されません。 Bash の "フラグ" を使って、すべての非表示ファイルとディレクトリを出力し、正しいことを再度確認してみましょう。
ls -a
その出力では、最初に考えていたものより多くのものがこのディレクトリにあることが示されました。
yourname@Azure:~$ ls -a . .. .azure .bash_history .bash_logout .bashrc clouddrive .profile .tmux.conf .viminfo
どのようなファイルとサブディレクトリがありましたか。 一部は Cloud Shell を動かすための裏方のファイルです。 他のいくつかについて説明します。
.
は現在のディレクトリを示し、..
は親ディレクトリを示します。 ユーザーがどこにいても、非表示のファイルとディレクトリをすべて出力すると、.
と..
が表示されます。.bash_history
は特殊な Bash ファイルで、シェルに入力するすべてのコマンドが格納されます。 Bash はコマンド履歴を記憶しており、後で説明するように、これは役に立ちます。.bash_logout
はもう 1 つの特殊な Bash ファイルであり、サインイン シェルが存在するようになるたびに読み取られて実行されます。 Linux のスーパーユーザーは、これを変更して環境をカスタマイズできます。.bashrc
は、新しいシェルを開始するたびに実行される重要な Bash 構成ファイルです。 このファイルを開いて確認する場合は、変更しないように注意してください。意図しない結果になる可能性があります。
履歴を呼び戻してコマンドをオートコンプリートする
次のような複雑なコマンドを入力すると、間違えることがよくあります。
ls -a .azure/commands/202?*.log
さいわい、Bash には役に立つ機能がいくつか用意されています。
以前のコマンドを呼び戻す
入力ミスがある次のようなコマンドを入力してみましょう (
202?
ではなく203?
)。ls -a .azure/commands/203?*.log
次のような出力が表示され、そのパターンに一致するファイルがなかったことがわかります。
ls: cannot access '.azure/commands/203?*.log': No such file or directory
コマンド全体を入力し直して間違いを修正するのではなく、上方向キーと下方向キーを使って、前に入力したコマンドを呼び戻すことができます。 上方向キーを使って、間違えたコマンドを呼び戻してみましょう。 次に、左方向キーを使って、最後の
3
を2
に修正します。 もう一度 Enter キーを押し、修正したコマンドを送信します。上方向キーを連続して何回も押すと、前の複数のコマンドに戻ります。 後のコマンドに移動するには、下方向キーを使います。
次のような出力が表示されるはずです。 それにより、コマンドが正しく動作して、指定したパターンに一致するファイルの一覧が表示されたことがわかります。
.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": 連結) コマンドを使用できます。
このコマンドを使うには、次のような完全なファイル名を使用します。
cat .azure/commands/2020-01-29.21-56-35.login.103.log
しかし、それでは入力が多く、エラーが発生しやすくなります。 代わりに、Bash の基本的なオートコンプリートを使用して、ほとんどの作業を行うことができます。 次のように入力してください。
cat .a
次に、Tab キーを押します。 どうなりますか。
単語 "azure/" の残りの部分がコマンドに表示されるはずです。
cat .azure/
単語の先頭を入力した状態で、Tab キーを押してオートコンプリートを実行します。 あいまいさがある場合、Bash では何も入力されないことに注意してください。 Tab キーを 2 回押すと、既に入力した文字と一致する特定のパスのすべてのファイルとディレクトリが表示されます。
コマンド ディレクトリの実際の .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
コマンドについての詳細な情報を表示する練習をしましょう。
次のコマンドを入力すると、
cat
の概要と使用方法がわかります。man cat
そうです、シェルに「man cat」と入力しました。 Bash コマンドは、不可解に思うことも面白く感じることもあります。
出力は次のように表示されます。
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 ...
上下の方向キーを使ってマニュアル ページをスクロールし、「
q
」と入力して終了します。
ディレクトリを変更する
もう 1 つの基本的な Bash コマンドである cd
を練習しましょう。
シェルを使用している間は、PC や Mac のフォルダーと同じように、常にディレクトリ内にいます。 フォルダーを変更するには、cd
("change directory": ディレクトリの変更) コマンドを使います。
簡単なコマンドですが、少し練習してみます。
最初に、次のコマンドを入力して、正しい場所に移動します。
cd ~
このコマンドにより、シェルの特別な home ディレクトリにまだいなかった場合は、そこに移動しました。
pwd
コマンドをもう一度使って、再度確認します。pwd
出力は次のように表示されます。
/home/yourname
~
は、この home ディレクトリを示す Bash のもう 1 つの特別な文字です。 シェル内のどこにいても、~
を使うと、場所 /home/yourname を参照できます。ログ ファイルが格納されているディレクトリ (前のいた場所) に変更してみましょう。
cd .azure/commands/
完全なコマンドを自分で入力するか、Tab キーを使用してオートコンプリートを実行します。
コマンドを入力する行の表示が変わり、シェル内のどこにいるかがわかります。
yourname@Azure:~/.azure/commands$
特別な
..
構文を使って、1 つ上のディレクトリに移動してみてください。cd ..
ディレクトリ構造で 1 つ上のレベルに移動し、コマンド ラインは次のようになるはずです。
yourname@Azure:~/.azure$
順調です。 Bash のエキスパートになる第一歩を踏み出しました。 学習を続けましょう。