コマンド詳細

これまではコマンドを「試す」ことと、その仕組みを優先して説明してきました。ここでは Unix におけるコマンドの書き方、扱い方などについて見ていきます。

コマンドの書き方

引数(パラメタ)

コマンドによっては、コマンド名の後に引数(パラメタ)を付けることで動作のターゲットが変わったりします。単純な例として cal コマンドがあります。

コマンド例 働き(意味)
% cal 現在の月のカレンダーを表示する
% cal 2024 指定された年の(12 ヶ月ぶんの)カレンダーを表示する
% cal 4 2024 指定された年月の(その月だけの)カレンダーを表示する

cd コマンドも引数無しの場合はホームディレクトリへの移動(作業ディレクトリの変更)、引数が付いている場合は、その引数を相対パスとして見た時のディレクトリへの移動を意味しましたね。

オプション

また多くのコマンドは「オプション」指示を与えることによって、その働きを少し変えることができます。例えば ls コマンドは作業ディレクトリ以下にあるファイルの名前の一覧を表示しますが、「 -l 」オプション(小文字の L で、long format を意味する)を設定することで、より詳しい情報を表示します。

yasuda@Lily dirReport % ls                                  <<< 単純な ls
sample1.txt subdir
yasuda@Lily dirReport % ls -l                               <<< -l オプションを付けると、、、
total 8
-rw-r--r--@ 1 yasuda  staff   44  1  3 13:40 sample1.txt
drwxr-xr-x@ 5 yasuda  staff  160  1  3 15:14 subdir
yasuda@Lily dirReport %

以下に long format 指定での表示結果について説明を試みます。

image-20240308170443975

ls -l は特にファイルのサイズや更新日付を確認するため、よく使います。他に -F オプションなどもあります。これはディレクトリについては名前の後ろに / を付けて、これがディレクトリであることを分かりやすくする表示オプションです。

yasuda@Lily dirReport % ls -F                  <<<< -F をつけるとディレクトリに / が付く
sample1.txt subdir/
yasuda@Lily dirReport % ls -lF                 <<<< -lF として -l, -F の両方を指定できる
total 8
-rw-r--r--@ 1 yasuda  staff   44  1  3 13:40 sample1.txt
drwxr-xr-x@ 5 yasuda  staff  160  1  3 15:14 subdir/
yasuda@Lily dirReport % 

-S (大文字のS)で並び順をファイルサイズ順にしたり、いろいろなオプションがあります。詳しくは他のドキュメントを捜して見ると良いでしょう。(ただし @ については Mac 独自の拡張ですので他の Linux 用の ls コマンドの機能には含まれていないことに注意してください。)

man コマンドでコマンドの書き方を調べる

man コマンドを用いて、コマンドの機能や書き方を確認することができます。例えば「 man mkdir 」とすることで、mkdir コマンドのオプションの与え方などがわかります。なおman コマンドの表示を終了するのは top コマンドと同じく、アルファベットの「 q 」キーを押してください。

image-20240305212314793

SYNOPSIS の項に、コマンドに与える引数やオプションの書き方がまとめられています。表記法を覚えてください。

引数やオプションの意味や実際に与えるべき記述の詳細は、続く DESCRIPTION の項に説明があります。

画面表示の操作

各種マニュアルは大抵長く、通常画面に収まりきらないために、画面に収まる分量だけ(1ページ分)出して一時停止してユーザの操作を待つ状態になります。以下に画面表示のためのキー操作についてまとめておきます。

キー操作 挙動
Space あるいは Enter 次ページに進む(スクロールする)
b 前ページに戻る(スクロールバックする)
上下カーソルキー 一行前に戻る、一行先に進む
< あるいは > マニュアル先頭に戻る、マニュアル末尾に進む
q あるいは Q 表示を終了する
h ヘルプ、つまり使えるキー操作の一覧を表示する
(ヘルプ表示も長くスクロール操作可。ヘルプ終了も同じく q キー。)

このような挙動をする機能を「ページごとに表示するためのツール」という意味で、Pager (ぺーじゃー)と呼んだりします。他にも文字列検索など多様な機能があるのでヘルプ画面を見て試すことを勧めます。

確認課題:banner コマンドの使い方を調べる

Unix に古くからあるコマンドに banner があります。「 banner abc 」などとすると、これがバナー(見出し)を作るものだと分かるでしょう。

man コマンドで banner の以下のことついて調べ、それぞれの機能を試してください。

banner は機能も限られており、man の出力も非常にコンパクトですから、全文・全項目について読んで理解すると良いです。パッと英文が読めない場合は機械翻訳を活用しましょう。

コマンド名の調べ方

man コマンドはコマンド名が分かっている時しか使えません。「〜〜の機能を持ったコマンドの名前が知りたい」といった場合は残念ながらコマンドレベルではあまり支援されていません。

man -k

man コマンドに -k オプションを与えると、あなたの Mac に登録されているマニュアルの一部をキーワードで検索してくれます。

% man -k copy
MacOSX::File::Copy(3)    - copy() on MacOS X
dvicopy(1)               - produce modified copy of DVI file
....(途中略)....
copy(9), copyin(9), copyinstr(9), copyout(9), copystr(9) - kernel copy functions
copyops(n), transfer::copy(n) - Data transfer foundation
cp(1)                    - copy files
cpio(1)                  - copy files to and from archives
dd(1)                    - convert and copy a file
....(以下略)....
%

しかしかなり限られた範囲でしか調べられず、あまり当てにはなりません。

Google 検索

やはりいまどきはネット検索が簡単で良いです。ただし「コピー」などとキーワードを入れても不要なものばかりが上がって来ますから、これが Unix コマンドでのファイルのコピーだ、と分かるように検索するのが良いです。

教材作成者は以下のように聞きたいことをそのまま文章として検索エンジンに与えることを推奨しています。大抵の場合、例のように一番上に適切な情報が出てきます。つまりあなたが Google に適した単語列を推定するより、Google があなたの文章から適切な検索意図を推定する方がおよそうまく行く、という事ですね。

image-20240308212410355

外部の資料を積極的に見て試す

いまどきですから、積極的に外部の資料を見ましょう。

少ないですが Mac のコマンドに関する書籍もあります。[新版 zsh&bash対応]macOS×コマンド入門 ──ターミナルとコマンドライン、基本の力 は2020年と少し前ですが、技術監修が新居さんですし。

Linux のコマンド関連書籍も(システム管理系のコマンド以外であれば)よく似たコマンドが使える場合が多いので、検索するなり大型書店を覗くなりしましょう。

ストレートに「初心者向け Mac コマンド一覧」などと検索してみると、幾つものサイトが出てくるでしょう。Qiita や Zenn など、技術者コミュニティの記事が評価値なども付いていて信頼できるものを見分けやすいかもしれません。

コマンド実行時の操作

対話的なコマンド

Unixコマンドは多くの場合実行したら結果を出して終了するように作られいますが、一部のコマンドは起動後にユーザからの指示をコマンド形式、つまり CLI - Command Line Interface で与えるものがあります。電卓機能をもつ bc コマンドを例に挙動を示しておきます。

% bc                         <<< シェルから bc コマンドによってプログラムを起動
>>> 1 + 1                    <<< 計算式を入れると結果を表示する
2
>>> 100 / 3                  <<< デフォルトでは割り算の結果は整数化される
33
>>> scale=2                  <<< scale コマンドで小数点以下 2 桁まで維持するように指定 
>>> 100 / 3                  <<< 今度は少数点以下 2 桁まで結果を出した
33.33
>>> quit                     <<< quit コマンドで処理終了を指示
%                            <<< シェルに戻ってきた

なお bc はかなり複雑な計算も可能です。興味のあるひとは調べると良いでしょう。そこまで凝ったことをしないでも、この機会に少し試すと良いです。なお四則演算は +, -, *, / で行います。べき乗は ^ つまり 2^32 は 4294967296 であることがすぐ出てきますからそれなりに出番があります。

実行の中断

コマンドの実行を中断したいことがあるでしょう。(恐らくは誤った使い方をしたせいで)実行が終了しない、返事が返ってこない、などです。また、表示が崩れてしまう、処理が終わったはずなのにプロンプトが表示されず、次の入力ができない、といったおかしな状態になってしまうこともあります。そのような場合は次の方法を試すと良いでしょう。

参考:コマンド操作時の機能二つを再掲

前週にも登場していたファイル名補完とワイルドカードもコマンド操作のために便利な機能です。ファイル操作課題 からその分を取ってきて再掲しておきます。

ファイル名補完

ファイル名を入力す場面では Tab キーを使ったファイル名の補完機能を使えます。例えば「 mv ../ 」と入力した時点で、Tab キーを押してください。画面上には以下のように「一つ上」のディレクトリ階層にあるファイル名の候補が現れます。

image-20240305221953796

これで「ああ今このディレクトリ階層を覗いているんだな」とわかるでしょう。また、sub くらいまでタイプして Tab を押せば「 mv ../subdir/ 」まで補完してくれますし、そこでもう一度 Tab キーを押せば、今度は subdir の下の階層について出してくれます。

ワイルドカード

ところで mv コマンドで一つずつファイルを移していっても良いのですが、こういう時はワイルドカードが使えます。ワイルドカードとはファイル名指定の一部に「 * 」や「 ? 」を使うと、それがマッチするファイルを全て処理の対象としてくれる機能です。「 * 」は「複数の文字」、「 ? 」は「一つの文字」にマッチします。

以下に今回の images ディレクトリ以下でマッチするパターンの例を挙げておきます。

パターン マッチするファイル
* すべてのファイル
*.* すべてのファイル
*.jpg confectionaries.jpg, KSU.jpg, leaves.jpg すべての JPEG ファイル
*.png icon01.png〜icon6.png すべての PNG ファイル
icon*.png icon01.png〜icon6.png すべての PNG ファイル
icon0?.png icon01.png〜icon6.png すべての PNG ファイル
??????.* icon01.png〜icon6.png と、leaves.jpg (ドットより前が6文字)
???????*.* confectionaries.jpg (ドットより前が7文字以上)
*e* confectionaries.jpg, leaves.jpg (どこかに e が含まれるもの)

ワイルドカードについてはまだ書き方があります。検索してみると良いでしょう。例えばこんな資料がありました。

まだまだ

他にも(ワイルドカードに似た)正規表現や、さまざまな機能があります。検索してみると良いでしょう。例えばこんな資料がありました。