端末エミュレータ
ターミナルとは、空港や駅などの輸送路の終端を意味する言葉ですが、コンピュータの世界ではOSを操作するための端末・窓口アプリケーションのことを意味します。通常そこには、シェルと呼ばれるインターフェイスプログラムが常駐して、ターミナルから入力されたコマンドを解釈して実行します。
最大の特徴は CUI(Character-based User Interface)であるという点です。マウスの利用は限定的で、基本的にすべてキーボードのみで操作します。
ちなみに、MacOSはUNIXベースの OS なので、UNIX(Linux)と同じ要領でコマンド操作が可能です。
MacOSメニュー>移動>ターミナル
MacOSのターミナルエミュレータの正式名称は、Terminal.app です。
頻繁に使用するつもりであれば、起動後に以下の操作をしましょう。
ドック上のアイコンを右クリック>オプション>Dockに追加
ターミナルはCUI(Character User Interface)です。キーボードからの文字入力で操作するのが原則で、画面には以下のようなプロンプトが表示されます。
パソコン名:カレントディレクトリ 利用者名 $
例)MyComputer:~ UserName$
この $ マークの右側に 命令文字列を入力+[ENTER] とします。
簡単に体感できる事例として、カレンダーを表示してみましょう。
$ cal
当該月のカレンダーが表示されます。20XX年の1年分見たい場合は
$ cal 20XX
ということで、使い方はこんな感じです。
$ ls -aこのとき、通常は見えないファイル(先頭に . のあるファイル)が見えます。これはドットファイルといって、通常のフォルダ表示では見えない「隠しファイル」です。
カレントディレクトリという言葉は、ターミナルを利用するのに重要なキーワードで、現在のあなたの立ち位置、つまり、あなたが現在作業しているフォルダの場所のを意味します。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・・・・
ターミナルを通常起動した場合、デフォルトのカレントディレクトリは、ユーザのホームディレクトリ(家アイコンの場所)です。しかし実際の作業は「書類フォルダの中の 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でいう外部コマンドと内部コマンドと同様の区別です)。
$ type cd cd is a shell builtinこれは、 cd コマンドが シェル組み込みコマンドである ということです。
以下、よく用いられるコマンドを紹介します(参考程度の内容です)。
詳しいサイトは多数あります > Google: UNIX コマンド一覧
ご注意
以下のサンプルコマンドの記載で、[ $ ] はターミナルのプロンプトです。
試す場合は [ $ ] は含めず、その右側部分のみを利用して下さい。
ディレクトリ内のファイルを一覧表示します ( List Directory Contents )
$ ls -a
$ ls -Rl
$ ls -Rl > file_list.txt
Print working directory. 自分が今いる場所、つまりカレントディレクトリ(作業フォルダ)を表示します。
$pwd
Change Directory. ディレクトリの移動。これは頻繁に使います。
$ cd Desktop/
$ cd ..
$ cd /
$ cd ~/
Make Directories. ディレクトリを作ります。
$ mkdir -m 777 temp
ReMove DIRectory. ディレクトリーを削除します。
$ rmdir tempこの命令は、ディレクトリー内が空の場合にのみ有効です。
Tape Archieves. 複数のファイルを1つのアーカイブファイルにまとめる<>展開する際に使います。
$ tar -cvf xxxx.tar アーカイブ対象ディレクトリ
$ tar -zcvf xxxx.tar.gz 圧縮アーカイブ対象ディレクトリ
tar -cvf backup_$(date +%Y%m%d).tar.gz 対象ディレクトリ名
$ tar cvf hoge.tar hoge $tar -cvf hoge.tar hogeこれは歴史的な経緯で、コマンドラインオプションに [ - ]をつけるという慣習ができる以前からtar コマンドが存在していたためです。互換性のために古い記法も残されたということで、今は「オプションには [ - ] をつけるもの」という理解でいいと思います。
zip形式で圧縮します。
$ zip xxxx.zip test.txt
$ zip xxxx.zip test1.txt test2.txt・・ $ zip xxxx.zip test*.txt
$ zip -r xxxx.zip
$unzip xxxx.zip
ファイルの内容を標準出力に出力する。標準出力というのはターミナルの画面のことなので、要するにファイルの内容の閲覧です。本来の意味は「ファイルを連結して標準出力に出力する ( concatenate and print files )」で、ファイルを複数指定した場合は、ファイルの連結ができます。
$ cat file1
$ cat file1 file2 > file3
$ cat /etc/redhat-releaseちなみに MacOS の場合は以下
$ sw_vers
$ cat /proc/version
ファイルを開く、あるいは、アプリケーションを起動します。代表的なオプションは以下のとおり。
-a:Opens with the specified application. -t:Opens with default text editor. -n, --new:Open a new instance of the application
$ open test.png ← おそらくプレビューが起動 $ open http://www.google.com ← デフォルトブラウザが起動 $ open ~/.bash_profile ← デフォルトエディタが起動 注).bash_profile の意味が不明な場合は試さないで下さい。危険です。
$ open -a Firefox $ open -a Safari $ open -a "/Applications/Google Chrome.app"
$ open -a Atom sample.txt
ファイルやディレクトリーをコピーする ( copy )
$ cp file1 /tmp/
ファイルやディレクトリを移動 ( move )
$ mv file1 file2
ファイル、ディレクトリーの削除 ( ReMove )
$ rm *.txt
$ rm abc*USBをMacで使った際にできた ''._'' から始まるデータ(リソースフォーク)の削除などに便利
$ rm -rf temp
ご注意:ReMoveにワイルドカード(* や ???)を使うのは大変危険です。十分注意して下さい。
ファイルの比較
$ diff -q a.txt b.txt
画面(標準出力)に文字列や数値、変数を表示する
$ echo Hello! Hello!
$ echo Hello! > hello.txt → カレントディレクトリに hello.txt ができます。
$ a=1200 $ echo $a // 1200
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin参考:パスは:で複数接続されています。左の方が優先的に採用されます。
標準エディタを起動。簡単なファイル作成、編集に便利
> 詳細はこちらのページ → Vim
ユーザーの作成
$ useradd testuser
$ useradd -m testuser
$ passwd testuser
$ userdel testuser
$ userdel -r testuser
参考:ユーザー一覧を確認するには
$ cat /etc/passwd
$cat /etc/passwd|sed -e 's/:.*//g'
ファイルのアクセス権限を変更 ( change file modes or Access Control Lists )
$ chmod 755 File01.txt
$ chmod -R 777 work 管理者権限で実行する必要があるケースでは以下 $ sudo chmod -R 777 work Password: ← 聞かれるので入力します。
注)ファイルのアクセス権限についてはこちら > FilePermission
ファイルやディレクトリの所有者を変更する
$ chown sato data
$ chown sato:member data
指定されたコマンドを、環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示します。
$ which vi /usr/bin/vi
名前のみを検索対象として高速で検索
$ locate 検索キーワード
$ locate .csv
付記
minimalインストールの場合 locateコマンドはインストールされていないので、locate を含む mlocateパッケージをインストールする必要があります。
# yum install mlocate
mlocate.dbが生成されていないとすぐには使えないので、updatedbを実行してmlocate.dbを生成します。
# updatedb
ファイルを検索します ( find )
$ find -name abc*上記の[ * ] は、この部分は何でもいい・・という意味で、ワイルドカードといいます。
$ find *.html -ls
ファイル中の文字列を検索します。検索パターンとして、正規表現を使用することができます ( file pattern searcher > global regular expression print )。
$ grep "sample" *.txt
$ grep -ci "<p>" index.html
ipアドレス他、当該機器のネットワーク設定を表示する。
$ ifconfig
ネットワークデバイスやルーティング等の表示と変更を行う。ifconfigコマンドやnetstatコマンド、routeコマンドなど、net-toolsパッケージのコマンド群に代わるものとして登場。 ipコマンドへの移行が進んでいます。
$ ip addr show $ ip a ← addrをaと省略表記、showサブコマンドを省略
$ ip addr show dev デバイス名(画面1)
指定されたホストと交信が可能かどうかを確認します。リモート・ホストに対してパケットを送り、稼動していればレスポンスが戻ってきます。
$ ping www.example.comMacの場合、送り続けるので、強制停止の必要があります。以下の操作。
[CTRL] + [C]
$ ping -c 5 www.example.com
ドメインの情報をDNSサーバーに問い合わせて表示する。
$ dig example.com
$ dig -x 216.239.38.10
ドメインの情報をDNSサーバーに問い合わせて表示します。digとは異なりコマンドに引数を与えない場合は、対話的にネーム・サーバーの問い合わせを行うことになります。
nslookupは将来的にサポートされなくなる可能性あり。digコマンドの利用を推奨します。
$ nslookup www.yahoo.co.jp
> exit
接続情報(IP,ポート)やルート情報を表示
$ netstat
あるホストから別のホストまでのネットワーク経路をリスト表示する
$ traceroute6 www.example.com
ドメインの所有者などをはじめとするドメイン情報を表示
$ whois google.co.jp
$ whois 133.17.5.5
空いているポートを確認(セキュリティー状態の確認)
$ nmap localhost
デフォルトでは入っていない場合はインストール(以下)
$ sudo yum -y install nmap $ nmap -V (バージョン確認)
コマンド名 -V(--version)
実行型コマンド(ソフトウエア)のバージョンを表示します。サーバーの構築等では、サービスのバージョン確認は重要な作業となります。
$ httpd -v $ php -v $ mysql --version $ python --version
ターミナル画面をクリアし、表示された文字を全て消去します。
ターミナルからログアウトします。
[ プロセスが完了しました ] となって、以後コマンドは打てなくなります。
機能停止したウインドウは x で閉じましょう。
環境変数やシェル変数を設定する
$ PATH=$PATH:/usr/[UserName]/sample/bin $ export PATH参考:パスは:で複数接続されています。左の方が優先的に採用されます。
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
$ cd ~ $ vi .bash_profile(atom にパスが通っている場合は $ atom .bash_profile)vi エディタで以下を追記
export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
コマンドの使用方法を表示します(Manual)
$ man ls
説明の途中でプロンプトに戻りたいときは [Q] をタイプします。Quitです。
ユーザの切り替え(Switch User)
$ su password: ← パスワードの入力が求められます。 # ← rootユーザ(管理者)になるとプロンプトが # になります。
ユーザー名を指定せずにsuコマンドを実行するとスーパーユーザー(root)に変更します。引数に「-」を付けると、そのユーザーの環境変数(PATHなど)を引き継ぎます。
注意
Mac の初期状態では誤操作防止のためこのコマンドは使えません。Macで root ユーザーを有効にするには、管理者権限でシステム設定の深いところを変更する必要があります。以下の検索で記事が見つかると思います。
Google:Mac でルートユーザを有効にする方法
スーパーユーザー(root)に成り代わって、コマンドを実行(Super Do)。
$ sudo yum install ・・・
注意
Mac のTerminal にはこのコマンドは使えません。Macに標準搭載の httpd ( Apache ) を起動するには以下のコマンドを入力する必要があります。
$ sudo apachectl start ← 管理者PWを入力後に Apache が起動します。
ブラウザを起動して、URLに http://localhost と入力すると、It It works!と表示されるはずです。試用後は必ず停止しましょう。
$ sudo apachectl stop ← 停止します。
$ sudo systemctl start httpd $ sudo systemctl stop httpd $ sudo systemctl restart httpd
$ sudo apachectl start $ sudo apachectl stop $ sudo apachectl restart
リモートコンピュータへの接続
$ ssh [ ユーザー名 ] @ [ 接続先IPアドレス] 例)$ ssh hanako@133.17.XXX.XXX
> 詳細は SSH のページをご覧下さい。
yumは Yellowdog Updater Modifiedの略で、ディストリビューションのパッケージアップデートやパッケージの検索、パッケージ削除、パッケージの情報表示などを行うパッケージ管理ツール(コマンド)です。
注)Mac のTermnal では yum は使えません(後述)
# yum check-update
# yum update
# yum repolist all | grep mysql mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community 無効 mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - So 無効 mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community 無効 mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - So 無効 mysql-connectors-community/x86_64 MySQL Connectors Community 有効: 108 mysql-connectors-community-source MySQL Connectors Community - Sou 無効 mysql-tools-community/x86_64 MySQL Tools Community 有効: 90 mysql-tools-community-source MySQL Tools Community - Source 無効 mysql-tools-preview/x86_64 MySQL Tools Preview 無効 mysql-tools-preview-source MySQL Tools Preview - Source 無効 mysql57-community/x86_64 MySQL 5.7 Community Server 無効 mysql57-community-source MySQL 5.7 Community Server - Sou 無効 mysql80-community/x86_64 MySQL 8.0 Community Server 有効: 113 mysql80-community-source MySQL 8.0 Community Server - Sou 無効有効の表記のあるものが採用されます。
# yum install <pkg>
# yum search <pkg>
# yum remove <pkg>
# yum info <pkg>
# yum list installed
# yum install epel-release # yum update (インストール後はアップデートします)
Macには、yum はありません
yumは、Linuxのディストリビューション CentOS等で使われているものです。Macの世界では Homebrew がメジャーなパッケージ管理ツールです。
Homebrew を利用できるようにするには、以下の手順です。
$ brew -v Homebrew 1.8.6
OSで利用しているプロセスの数や状態、またOS全体のシステムリソース状況が分かります(3秒ごと)。停止する場合は [CTRL] + [C] です。
# top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
%CPU、%MEMの値が異常に高いプロセスがあれば、それがリソースを消費している可能性があります。
システム全体の負荷を一覧。停止する場合は [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
ファイルシステム(パーティション)ごとのディスク容量を確認する
$ df -h
Macの場合 Git自体は標準でインストール済みですが、ターミナルから利用する場合はコマンドライン・ディベロッパー・ツールのインストールが必要です。
UNIX 系OSではメモリーも含めてあらゆるデバイスはファイルと同等に扱います。Linuxではサウンド等のデバイスドライバーを組み込むとデバイスとして扱えるようになります。デバイスは /dev 以下に置かれて、一般のファイルストリームと同等に扱える様になります。
例)デバイスを直に操作してサウンドを鳴らすには…
Linux OSS ではサウンドデバイスは /dev/dsp または /dev/audio
ここに何かを流し込めば、何らかの音が出ます。つまり /dev/dsp を open してそこにデータを write する。
$ cat test.dat > /dev/dsp 中断は、CTRL+C
$ ls -l > fileList.txt ( -l は ハイフン・エルです)
$ ls -lR > fileList.txt ( -lR は ハイフン・エル・アールです)
以下の例は、カレントディレクトリ内にある、大文字の拡張子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
diff [-options] file1 file2
$ diff file1 file2
$ diff -u file.txt file.new.txt > file.patch[ -u ] は unified diff 形式でパッチファイルを作る・・という意味のオプション指定です。
$ diff -u folder folder_new > folder.diff差分ファイル folder.diffs を作る場合は、一般に2つのフォルダが直下に見える位置で作成します。差分ファイルには、対象となるファイルのパスに folder/ や folder_new/ といった記述が付加されて、以下のようになります。
--- folder/index.html 2017-09-08 19:06:46.000000000 +0900 +++ folder_new/index.html 2017-09-08 19:06:46.000000000 +0900
patch [ -options ] file patchfile
$ patch -u file patchfile[ -u ] は unified diff形式のパッチファイルをあてる・・という意味のオプション指定です。
$ patch -u < patchfileパッチファイルの先頭行「--- ファイル名」の部分に適用元の情報があるので、同名のファイルにパッチを適用する場合は(パッチファイルを配布する場合はこれが一般的です)元ファイル名の記述を省略できます。
$ patch -u -p1 < folder.diffs-p1についての補足
詳細は PatchFile のページをご覧下さい。
必要に応じて、随時追記します。
ユーザーに見える必要のないシステムファイル等は通常、「隠しファイル」として不可視の状態になっています。これにはルールがあって、 [ . ] ではじまるファイル名のものは、これを隠すということになっています。
ふつうに自分のファイルを保存する場合も同じです。ファイル名の頭に [ . ] をつけてしまうと、見えなくなってしまうので注意が必要です。
MacOSのバージョンによっては、以下の方法で、その表示・非表示のトグル切り替えができるので、まずはそれをお試し下さい。フォルダを開いた状態で、以下のショートカットです。
[COMMAND] + [SHIFT] + [ . ]
ただ、新しいOSでは、これができなくなっているようです。上記の方法を試してもダメだった場合は、以下、ターミナルの出番となります。
以下、それなりに危険な操作なので慎重に。Finderの再起動をするので、作業中のファイル等は一旦保存して下さい。また、この種の操作は仕様が変わることがあります。念のため、他のサイトの情報も検索してチェックしてください。 > Google: MacOS 隠しファイル 表示
$ defaults write com.apple.finder AppleShowAllFiles true
$ killall Finder
$ defaults write com.apple.finder AppleShowAllFiles false
$ killall Finder