LogoMark.png

Terminal のバックアップ(No.1)


Terminal

端末エミュレータ

はじめに

ターミナルとは、空港や駅などの輸送路の終端を意味する言葉ですが、コンピュータの世界ではOSを操作するための端末・窓口アプリケーションのことを意味します。通常そこには、シェルと呼ばれるインターフェイスプログラムが常駐して、ターミナルから入力されたコマンドを解釈して実行します。
 最大の特徴は CUI(Character-based User Interface)であるという点です。マウスの利用は限定的で、基本的にすべてキーボードのみで操作します。
 ちなみに、MacOSはUNIXベースの OS なので、UNIX(Linux)と同じ要領でコマンド操作が可能です。

CONTENTS




ターミナルの概要

起動方法(Macの場合)

MacOSメニュー>移動>ターミナル 

MacOSのターミナルエミュレータの正式名称は、Terminal.app です。
頻繁に使用するつもりであれば、起動後に以下の操作をしましょう。

ドック上のアイコンを右クリック>オプション>Dockに追加


どうやって使うの?

ターミナルはCUI(Character User Interface)です。キーボードからの文字入力で操作するのが原則で、画面には以下のようなプロンプトが表示されます。

パソコン名:カレントディレクトリ 利用者名 $ 

例)MyComputer:~ UserName$  
この $ マークの右側に 命令文字列を入力+[ENTER]  とします。

簡単に体感できる事例として、カレンダーを表示してみましょう。

$ cal

当該月のカレンダーが表示されます。20XX年の1年分見たい場合は

$ cal 20XX

ということで、使い方はこんな感じです。

何が便利なの?


カレントディレクトリ(作業フォルダ)について

カレントディレクトリという言葉は、ターミナルを利用するのに重要なキーワードで、現在のあなたの立ち位置、つまり、あなたが現在作業しているフォルダの場所のを意味します。GUI操作でいうと、ユーザーが今まさにマウスで触っているフォルダー(ウインドウがアクティブになっているフォルダ)のことです。CUI操作では、ウインドウのような全体を俯瞰するポジションには立てません。従って「今、私はどこにいて、目の前にはどんなファイルがあるのか」ということを常に意識する必要があるのです。

例えば、ユーザー yamada さんがMacターミナルを立ち上げたとします。その直後は、プロンプトが以下のように表示されます。

MyComputer:~ yamada$ 

このプロンプト上の文字列の意味は、以下のとおりです。

PC名:カレントディレクトリ名 ユーザ名$

上の例では、カレントディレクトリの部分が [ ~ ] となっていますが、この [ ~ ] はホームディレクトリ(家アイコンの場所)を意味しています。つまりこの場合、yamadaさんのホームディレクトリがターミナル上のカレントディレクトリになっているということで、 yamada さんは、自分の家の中にいて、そこにある Movies やMusic フォルダが見える状態にある・・ということを意味します。試しに ls (ファイル一覧表示)というコマンドを打ち込むと、ホームディレクトリの内容が以下のように表示されます。以下のような感じです。

MyComputer:~ yamada$ ls
 Applications Downloads Movies Public Desktop
 Music Documents Library Pictures

また例えば cd(ディレクトリの移動)コマンドで Desktop を指定すると
プロンプト自体が変わって、以下のようになります。

MyComputer:~ yamada$ cd Desktop 
MyComputer:Desktop yamada$

プロンプトは現在の場所(カレントディレクトリー)として、yamada さんのDesktop を示しているわけです。ここでまた ls コマンドを打つと、デスクトップフォルダの内容(デスクトップ上のもの)が表示されるはずです。

MyComputer:Desktop yamada$ ls
SampleSite Document.pdf Test.txt・・・・ 


フォルダをターミナルで開くには(GUI操作)

ターミナルを通常起動した場合、デフォルトのカレントディレクトリは、ユーザのホームディレクトリ(家アイコンの場所)です。しかし実際の作業は「書類フォルダの中の SampleProject フォルダで・・」といったケースが大半です。ホームディレクトリから目的の場所へ移動するには、CDコマンドで順にフォルダを辿るか、あるいは、以下のように絶対パスを入力して移動する必要があります。

$ cd /Users/links/Documents/SampleProject

その場合、そもそも書類フォルダがどこにあるのか、また書類フォルダのシステム名称が "Documents" であることなどを知っていなければならず、それなりに面倒です。そこでGUI操作で簡単に行く方法を紹介します。

1) Dockにターミナルのアイコンを追加しておきます。
2) ターミナルで開きたいフォルダのアイコンをそこへ Drag&Drop

以上で、当該フォルダをカレントディレクトリとして利用できます。

例えば、「書類フォルダ」の中の SampleProject フォルダ をカレントディレクトリとしてターミナルを開く場合は、

SampleProjectフォルダをDock上のターミナルアイコンへ Drag&Drop

これで、ターミナル上では、以下のような表示となり、SampleProject がカレントディレクトリになっていることがわかります。

MyComputer:SampleProject yamada$




コマンド操作について

Command(コマンド)の一般的な意味は、命令(する)、指揮(する)、指令、支配(する)などですが、ここでいうコマンドとは、コンピュータの利用者がOSに与える文字列による命令のことです。Linux(UNIX)、MacOS(UNIX)、Windows・・すべてのOSに実装されている機能で、ファイルの一覧を表示する、検索する、コピーする、削除する・・といった基本的な操作や管理の手段を提供します。この種の技術の基本形は UNIX のものです。

みなさんが主に使うMac OSはUNIXベースのOSで、ターミナルを起動すると、MacOSの標準CUIシェルである Bash が起動します。結果、UNIXコマンドによる操作が可能になります。

この技術は「一生モノ」なので、IT系の人は覚えて損はありません。

コマンドには、システムの特定のディレクトリに収められているプログラムのほかに、組み込みコマンドというものがあります(Windowsでいう外部コマンドと内部コマンドと同様の区別です)。

以下、よく用いられるコマンドを紹介します(参考程度の内容です)。
詳しいサイトは多数あります > Google: UNIX コマンド一覧

ご注意
以下のサンプルコマンドの記載で、[ $ ] はターミナルのプロンプトです。
試す場合は [ $ ] は含めず、その右側部分のみを利用して下さい。




ディレクトリ操作

ls [-options]

ディレクトリ内のファイルを一覧表示します ( List Directory Contents )

pwd

Print working directory. 自分が今いる場所、つまりカレントディレクトリ(作業フォルダ)を表示します。

$pwd


cd

Change Directory. ディレクトリの移動。これは頻繁に使います。

mkdir [-options] [-p]

Make Directories. ディレクトリを作ります。

rmdir [-options]

ReMove DIRectory. ディレクトリーを削除します。

tar

Tape Archieves. 複数のファイルを1つのアーカイブファイルにまとめる<>展開する際に使います。


zip / unzip

zip形式で圧縮します。

ファイル操作

cat

ファイルの内容を標準出力に出力する。標準出力というのはターミナルの画面のことなので、要するにファイルの内容の閲覧です。本来の意味は「ファイルを連結して標準出力に出力する ( concatenate and print files )」で、ファイルを複数指定した場合は、ファイルの連結ができます。

open [-options]

ファイルを開く、あるいは、アプリケーションを起動します。代表的なオプションは以下のとおり。

-a:Opens with the specified application.
-t:Opens with default text editor.
-n, --new:Open a new instance of the application

cp [-options] source dest

ファイルやディレクトリーをコピーする ( copy )

mv [-options] source dest

ファイルやディレクトリを移動 ( move )

rm [-options] name...

ファイル、ディレクトリーの削除 ( ReMove )

ご注意:ReMoveにワイルドカード(*???)を使うのは大変危険です。十分注意して下さい。

diff

ファイルの比較

$ diff -q a.txt b.txt


echo

画面(標準出力)に文字列や数値、変数を表示する

vi / vim

標準エディタを起動。簡単なファイル作成、編集に便利
> 詳細はこちらのページ → Vim



アカウント操作

useradd [-options] username

ユーザーの作成

passwd [username]

userdel [-r] [username]

参考:ユーザー一覧を確認するには




権限操作

chmod [-options] mode file...

ファイルのアクセス権限を変更 ( change file modes or Access Control Lists )

注)ファイルのアクセス権限についてはこちら > FilePermission 

chown owner[:group] file or directory

ファイルやディレクトリの所有者を変更する

検索

which [-options] command-name

指定されたコマンドを、環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示します。

locate

名前のみを検索対象として高速で検索

$ locate 検索キーワード

付記
minimalインストールの場合 locateコマンドはインストールされていないので、locate を含む mlocateパッケージをインストールする必要があります。

# yum install mlocate

mlocate.dbが生成されていないとすぐには使えないので、updatedbを実行してmlocate.dbを生成します。

# updatedb


find [-options] name

ファイルを検索します ( find )

grep

ファイル中の文字列を検索します。検索パターンとして、正規表現を使用することができます ( file pattern searcher > global regular expression print )。

ネットワーク関連

ifconfig(Windows ではipconfig)

ipアドレス他、当該機器のネットワーク設定を表示する。

$ ifconfig


ip

ネットワークデバイスやルーティング等の表示と変更を行う。ifconfigコマンドやnetstatコマンド、routeコマンドなど、net-toolsパッケージのコマンド群に代わるものとして登場。 ipコマンドへの移行が進んでいます。

ping [-qr] [-c count] [-i wait] [-s packetsize] host

指定されたホストと交信が可能かどうかを確認します。リモート・ホストに対してパケットを送り、稼動していればレスポンスが戻ってきます。

dig [@server] domain [query-type] [query-class] [+-][query-option]

ドメインの情報をDNSサーバーに問い合わせて表示する。

nslookup [option] [Domain name or ip] [DNS server]

ドメインの情報をDNSサーバーに問い合わせて表示します。digとは異なりコマンドに引数を与えない場合は、対話的にネーム・サーバーの問い合わせを行うことになります。
nslookupは将来的にサポートされなくなる可能性あり。digコマンドの利用を推奨します。

netstat

接続情報(IP,ポート)やルート情報を表示

$ netstat


tracert

あるホストから別のホストまでのネットワーク経路をリスト表示する

$ traceroute6 www.example.com


whois

ドメインの所有者などをはじめとするドメイン情報を表示

nmap

空いているポートを確認(セキュリティー状態の確認)

$ nmap localhost

デフォルトでは入っていない場合はインストール(以下)

$ sudo yum -y install nmap
$ nmap -V  (バージョン確認)




システム、サービス等

コマンドのバージョン確認

コマンド名 -V(--version)

実行型コマンド(ソフトウエア)のバージョンを表示します。サーバーの構築等では、サービスのバージョン確認は重要な作業となります。

$ httpd -v
$ php -v
$ mysql --version
$ python --version


clear

ターミナル画面をクリアし、表示された文字を全て消去します。

exit / logout

ターミナルからログアウトします。
[ プロセスが完了しました ] となって、以後コマンドは打てなくなります。
機能停止したウインドウは x で閉じましょう。

export

環境変数やシェル変数を設定する

man [command]

コマンドの使用方法を表示します(Manual)

説明の途中でプロンプトに戻りたいときは [Q] をタイプします。Quitです。

su [-] [UserName]

ユーザの切り替え(Switch User)

ユーザー名を指定せずにsuコマンドを実行するとスーパーユーザー(root)に変更します。引数に「-」を付けると、そのユーザーの環境変数(PATHなど)を引き継ぎます。

注意
Mac の初期状態では誤操作防止のためこのコマンドは使えません。Macで root ユーザーを有効にするには、管理者権限でシステム設定の深いところを変更する必要があります。以下の検索で記事が見つかると思います。
Google:Mac でルートユーザを有効にする方法

sudo [ option ]

スーパーユーザー(root)に成り代わって、コマンドを実行(Super Do)。

注意
Mac のTerminal にはこのコマンドは使えません。Macに標準搭載の httpd ( Apache ) を起動するには以下のコマンドを入力する必要があります。

$ sudo apachectl start ← 管理者PWを入力後に Apache が起動します。

ブラウザを起動して、URLに http://localhost と入力すると、It It works!と表示されるはずです。試用後は必ず停止しましょう。

$ sudo apachectl stop ← 停止します。


systemctl

ssh

リモートコンピュータへの接続

$ ssh [ ユーザー名 ] @ [ 接続先IPアドレス]
例)$ ssh hanako@133.17.XXX.XXX

> 詳細は SSH のページをご覧下さい。

yum

yumは Yellowdog Updater Modifiedの略で、ディストリビューションのパッケージアップデートやパッケージの検索、パッケージ削除、パッケージの情報表示などを行うパッケージ管理ツール(コマンド)です。
注)Mac のTermnal では yum は使えません(後述)

参考:brew

Macには、yum はありません
yumは、Linuxのディストリビューション CentOS等で使われているものです。Macの世界では Homebrew がメジャーなパッケージ管理ツールです。

Homebrew を利用できるようにするには、以下の手順です。

システム監視

top

OSで利用しているプロセスの数や状態、またOS全体のシステムリソース状況が分かります(3秒ごと)。停止する場合は [CTRL] + [C] です。

# top

PID USER   PR  NI   VIRT  RES  SHR  S  %CPU  %MEM    TIME+  COMMAND

%CPU、%MEMの値が異常に高いプロセスがあれば、それがリソースを消費している可能性があります。

vmstat

システム全体の負荷を一覧。停止する場合は [CTRL] + [C] です。

# vmstat 2 ・・・ 2 は「2秒ごと」を意味します。

procs  -----------memory----------  ---swap--  -----io----  --system--  --------cpu-------- ---timestamp---
 r   b    swpd    free    buff   cache    si    so       bi    bo      in     cs       us   sy  id  wa  st
・・・ここに数字列・・・・

free

空きメモリーの確認

# free


df

ファイルシステム(パーティション)ごとのディスク容量を確認する

$ df -h




Git 関連コマンド

Macの場合 Git自体は標準でインストール済みですが、ターミナルから利用する場合はコマンドライン・ディベロッパー・ツールのインストールが必要です。




その他

デバイスはファイルである

UNIX 系OSではメモリーも含めてあらゆるデバイスはファイルと同等に扱います。Linuxではサウンド等のデバイスドライバーを組み込むとデバイスとして扱えるようになります。デバイスは /dev 以下に置かれて、一般のファイルストリームと同等に扱える様になります。

例)デバイスを直に操作してサウンドを鳴らすには…
Linux OSS ではサウンドデバイスは /dev/dsp または /dev/audio
ここに何かを流し込めば、何らかの音が出ます。つまり /dev/dsp を open してそこにデータを write する。

$ cat test.dat > /dev/dsp
中断は、CTRL+C




応用例

フォルダ内のファイル一覧をテキストファイルとして保存

ファイル拡張子の一括変換

以下の例は、カレントディレクトリ内にある、大文字の拡張子JPG をもつ、すべてのファイルを、小文字のjpgへ変換する例です。

3行分のループ処理になっていて、3行を順に入力していきます。この事例、いきなり実行してぐちゃぐちゃになると大変なので、試したい方は、ダミーディレクトリをつくって、そこで練習して下さい。

for fname in *.JPG;do

この時点で、対話型入力モードになります(プロンプトが > になる)

mv $fname ${fname%.JPG}.jpg

move、この場合は、名称変更の操作です。ルール通りに・・

done

doループの終端です。

なお、ループから抜け出せなくなった場合(>の表示から抜けられない)場合は、終端を意味する done を入力してみて下さい。

フォルダ内のファイルを一括で連番ファイル名に変換

以下、フォルダ内にあるすべての png 画像を連番形式で img_xxx.png に変換するコマンドです。当該データが存在するディレクトリに入ってから、このコマンドを実行して下さい。

ls *.png | awk '{ printf "mv %s img_%03d.png\n", $0, NR }' | sh 


ファイルの比較 ( compare files line by line > difference )

diff [-options] file1 file2

ファイルにパッチをあてる( patch )

patch [ -options ] file patchfile

詳細は PatchFile のページをご覧下さい。



Mac特有の操作

必要に応じて、随時追記します。

隠しファイルの表示

ユーザーに見える必要のないシステムファイル等は通常、「隠しファイル」として不可視の状態になっています。これにはルールがあって、 [ . ] ではじまるファイル名のものは、これを隠すということになっています。
ふつうに自分のファイルを保存する場合も同じです。ファイル名の頭に [ . ] をつけてしまうと、見えなくなってしまうので注意が必要です。

MacOSのバージョンによっては、以下の方法で、その表示・非表示のトグル切り替えができるので、まずはそれをお試し下さい。フォルダを開いた状態で、以下のショートカットです。

[COMMAND] + [SHIFT] + [ . ] 

ただ、新しいOSでは、これができなくなっているようです。上記の方法を試してもダメだった場合は、以下、ターミナルの出番となります。
 以下、それなりに危険な操作なので慎重に。Finderの再起動をするので、作業中のファイル等は一旦保存して下さい。また、この種の操作は仕様が変わることがあります。念のため、他のサイトの情報も検索してチェックしてください。 Google: MacOS 隠しファイル 表示