LogoMark.png

Terminal のバックアップの現在との差分(No.2)


#author("2023-02-20T13:57:54+09:00;2021-10-29T19:53:45+09:00","default:inoue.ko","inoue.ko")
#author("2023-11-08T10:06:19+09:00;2023-02-20T13:57:54+09:00","default:inoue.ko","inoue.ko")
*Terminal
端末エミュレータ
~


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

-より詳細なPCの管理や応用的な開発作業では、この知識が必要になります。
-本格的なサーバー管理には遠隔操作([[SSH]]接続)が必要なので、この知識が必要になります。

-&color(red){このページに記載のコマンドには、MacOSでは使えないものもあります。};
-&color(red){MacOS Catalina 以降、Terminal のデフォルトシェルが bash から zsh へ変更されました(プロンプトは $ ではなく % になっています)。当ページ内の bash 関連記事は使えませんのでご注意ください。};
&color(red){&small(PATHの情報は、bash の場合は .bash_profile、zsh の場合は .zshrc です。);};
&color(red){&small(参考:Mojave からCatalina にアップデートした場合は bash のままです。);};

-&color(red){ターミナルからのコマンド操作は、自由度が高い分、システムを破壊するリスクもあります。最悪パソコンが使えなくなりますので、操作には十分注意してください。};
~

***CONTENTS
#contents2_1
~
~


**ターミナルの概要

***起動方法(Macの場合)
 MacOSメニュー>移動>ターミナル 
 MacOSメニュー>移動>ユーティリティー>ターミナル 
MacOSのターミナルエミュレータの正式名称は、Terminal.app です。
頻繁に使用するつもりであれば、起動後に以下の操作をしましょう。
 ドック上のアイコンを右クリック>オプション>Dockに追加
~

***どうやって使うの?
ターミナルはCUI(Character User Interface)です。キーボードからの文字入力で操作するのが原則で、画面には以下のような''プロンプト''が表示されます。
 パソコン名:カレントディレクトリ 利用者名 $ 
例)MyComputer:~ UserName$  
この ''$ マークの右側に 命令文字列を入力+[ENTER] '' とします。

簡単に体感できる事例として、カレンダーを表示してみましょう。
 $ cal
当該月のカレンダーが表示されます。20XX年の1年分見たい場合は
 $ cal 20XX
ということで、使い方はこんな感じです。
~

***何が便利なの?
-GUI(Graphical User Interface)ではできないことが可能になります。
ターミナルを使うと、画面上のメニューには用意されていない設定の変更や、Finderでは確認できない情報へのアクセスができます。例えば「隠しファイルの表示」などが可能です。Macでは通常フォルダ内の隠しファイルが見えませんが、ターミナルコマンドを使えば、隠しファイルを含むファイルリストを表示することができます。
 $ ls -a
このとき、通常は見えないファイル(先頭に . のあるファイル)が見えます。これはドットファイルといって、通常のフォルダ表示では見えない「隠しファイル」です。

-作業の種類によっては、GUI操作よりも効率的です。
ファイル名を一定のルールで一括書き換えするといった作業は、一瞬で終わります。マウスでコツコツやるのに比べると、圧倒的に速いです。

~

***カレントディレクトリ(作業フォルダ)について
カレントディレクトリという言葉は、ターミナルを利用するのに重要なキーワードで、現在のあなたの立ち位置、つまり、あなたが現在作業しているフォルダの場所のを意味します。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>Google: Bash UNIX]] が起動します。結果、UNIXコマンドによる操作が可能になります。

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

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

-''一般のコマンド''
/binや /usr/bin などのディレクトリに実行型ファイルとして存在しています。

-''組み込みコマンド''
シェル(コマンドインターフェイス)の起動時にメモリに読み込まれているもの。例えば cd など。

-コマンドのタイプは以下のように type コマンドで調べることができます。
 $ type cd
 cd is a shell builtin
これは、 cd コマンドが シェル組み込みコマンドである ということです。

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

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

~
~

**ディレクトリ操作

***ls [-options]
ディレクトリ内のファイルを一覧表示します ( List Directory Contents )
-例)隠しファイルまで含んですべての一覧を表示( -a は all の意味)。
 $ ls -a
-例)ディレクトリ内のファイルをサブフォルダまで再帰的にリスト表示。
 $ ls -Rl
-例)それをさらにテキストファイル( file_list.txt )として書き出す。
 $ ls -Rl > file_list.txt
~

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

***cd
Change Directory. ディレクトリの移動。これは頻繁に使います。
-例)カレントディレクトリ内の Desktop フォルダに入る
 $ cd Desktop/
-例)一つ上の親ディレクトリに戻る
 $ cd .. 
-例)ルート(MacintoshHD 直下 / )に行く
 $ cd /
-例)自分のホーム( /user/あなたのユーザ名 )に行く
 $ cd ~/
~

***mkdir [-options] [-p] 
Make Directories. ディレクトリを作ります。
-例)ディレクトリ temp を作成
 $ mkdir -m 777 temp 
~

***rmdir [-options]
ReMove DIRectory. ディレクトリーを削除します。
-例)ディレクトリ tempを削除する
 $ rmdir temp
この命令は、ディレクトリー内が空の場合にのみ有効です。
中身がある場合は、[ ファイル操作] に記載の rm -rf を使うと便利です。
~

***tar 
Tape Archieves. 複数のファイルを1つのアーカイブファイルにまとめる<>展開する際に使います。
-例)アーカイブ
 $ tar -cvf xxxx.tar アーカイブ対象ディレクトリ
-例) 展開
$ tar -xvf xxxx.tar
-''例)圧縮してアーカイブ''
 $ tar -zcvf xxxx.tar.gz  圧縮アーカイブ対象ディレクトリ
-''例)解凍して展開''
$ tar -zxvf xxxx.tar.gz

-応用例)日付をつけてアーカイブ
 tar -cvf backup_$(date +%Y%m%d).tar.gz 対象ディレクトリ名

-tarでのアーカイブファイルの拡張子には .tar が使われます。 -z オプションを付けてgzipでの圧縮も行う場合は .tar.gz や .tgz が使われます。

-オプションの意味
--c(--create):アーカイブを作成
--x(--extract):ファイルを解凍し展開・復元を行う
--v(--verbose)アーカイブ結果を表示する
--f(--file=ARCHIVE):アーカイブファイル名を指定する
--z(--gzip):gzip形式で圧縮する

-tarコマンドはオプションにハイフンをつけなくても動く珍しいコマンドです。以下、どちらでも可
 $ tar cvf hoge.tar hoge
 $tar -cvf hoge.tar hoge
これは歴史的な経緯で、コマンドラインオプションに [ - ]をつけるという慣習ができる以前からtar コマンドが存在していたためです。互換性のために古い記法も残されたということで、今は「オプションには [ - ] をつけるもの」という理解でいいと思います。

~

***zip / unzip
zip形式で圧縮します。
-例)ファイルの圧縮
 $ zip xxxx.zip  test.txt
-例)複数ファイルの圧縮
 $ zip xxxx.zip  test1.txt  test2.txt・・ 
 $ zip xxxx.zip test*.txt
-例)ディレクトリの圧縮(testという名前のディレクトリを想定)
zip -r xxxx.zip test
 $ zip -r xxxx.zip 
-例)解凍する場合・・
 $unzip xxxx.zip
~
~

**ファイル操作

***cat
ファイルの内容を標準出力に出力する。標準出力というのはターミナルの画面のことなので、要するにファイルの内容の閲覧です。本来の意味は「ファイルを連結して標準出力に出力する ( concatenate and print files )」で、ファイルを複数指定した場合は、ファイルの連結ができます。
-例)file1 の内容を見る
 $ cat file1
-例)file1とfile2を結合してfile3 に出力する
 $ cat file1 file2 > file3
-例)OSのバージョンを確認する(CentOSの場合)
 $ cat /etc/redhat-release 
ちなみに MacOS の場合は以下
 $ sw_vers
-例)カーネルのバージョンを確認する
 $ cat /proc/version
~

***open [-options]
ファイルを開く、あるいは、アプリケーションを起動します。代表的なオプションは以下のとおり。
 -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 の意味が不明な場合は試さないで下さい。危険です。
-アプリケーションを起動: -a オプション
 $ open -a Firefox
 $ open -a Safari
 $ open -a "/Applications/Google Chrome.app"
-アプリケーションとファイル名を指定して起動
 $ open -a Atom sample.txt
~

***cp [-options] source dest
ファイルやディレクトリーをコピーする ( copy ) 
-例)file1を/tmp/というディレクトリの中にコピーする
 $ cp file1 /tmp/
~

***mv [-options] source dest 
ファイルやディレクトリを移動 ( move )
-例)file1ファイルをfile2に名前を変更する
 $ mv file1 file2
~

***rm [-options] name...
ファイル、ディレクトリーの削除 ( ReMove )
-例)カレントディレクトリ内の拡張子 .txt のファイルを削除する
 $ rm *.txt
-例)カレントディレクトリにある abc* に該当するファイルを一括削除
 $ rm abc*
&small(USBをMacで使った際にできた ''._'' から始まるデータ(リソースフォーク)の削除などに便利);
-例)ディレクトリ temp 内のファイルやディレクトリ含めて削除
 $ rm -rf temp 

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

***diff
ファイルの比較
 $ diff -q a.txt b.txt
~

***echo
画面(標準出力)に文字列や数値、変数を表示する
-そのまま表示
 $ echo Hello!
 Hello!
-画面に書いた文字をそのままテキストファイルへ ← 意外に便利
 $ echo Hello! > hello.txt
 → カレントディレクトリに hello.txt ができます。
-変数の値を表示
 $ a=1200
 $ echo $a
 // 1200
-環境変数 $PATH を表示 ← コマンドが通る場所を確認(頻繁に使います)。
 $ echo $PATH
 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
参考:パスは:で複数接続されています。左の方が優先的に採用されます。
~

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

**アカウント操作

***useradd [-options] username
ユーザーの作成
-例)ユーザーを作成
 $ useradd testuser
-例)ユーザーを作成(ホームディレクトリも同時作成)
 $ useradd -m testuser
~

***passwd [username]
-例)testuser のパスワードを設定
 $ passwd testuser
~

***userdel [-r] [username]
-例) testuser を削除
 $ userdel testuser
-例)testuser を削除(ホームディレクトリも削除)
 $ userdel -r testuser
~

''参考'':ユーザー一覧を確認するには 
-catコマンドで/etc/passwdを見るとユーザーの一覧を表示できます。
 $ cat /etc/passwd
-ユーザー名のみを抽出して見るには・・
 $cat /etc/passwd|sed -e 's/:.*//g'

~
~

**権限操作

***chmod [-options] mode file... 
ファイルのアクセス権限を変更 ( change file modes or Access Control Lists )
-例)File01.txt のアクセス権を 755 に変更
 $ chmod 755 File01.txt
-例)ディレクトリ work のアクセス権を 再帰的に 777 に変更
 $ chmod -R 777 work
 管理者権限で実行する必要があるケースでは以下
 $ sudo chmod -R 777 work
 Password:  ← 聞かれるので入力します。

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

***chown owner[:group] file or directory
ファイルやディレクトリの所有者を変更する
-例)dataフォルダの所有者を sato に変更する
 $ chown sato data
-例)dataフォルダの所有者を sato にグループを member にする
 $ chown sato:member data
-ディレクトリごと権限を変更したい場合は、chmodと同様に [-R]オプションをつけます。
~
~


**検索

***which [-options] command-name
指定されたコマンドを、環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示します。
-例)vi(エディタ)の場所を探す
 $ which vi
 /usr/bin/vi
~

***locate 
名前のみを検索対象として高速で検索
 $ locate 検索キーワード
-例)拡張子 csv のファイルを探す
  $ locate .csv

''付記''
minimalインストールの場合 locateコマンドはインストールされていないので、locate を含む mlocateパッケージをインストールする必要があります。
 # yum install mlocate
mlocate.dbが生成されていないとすぐには使えないので、updatedbを実行してmlocate.dbを生成します。
 # updatedb
~

***find [-options] name
ファイルを検索します ( find )
-例)カレントディレクトリ直下で、ファイル名が abc* のものを検索
 $ find -name abc*
&small(上記の[ * ] は、この部分は何でもいい・・という意味で、ワイルドカードといいます。);
-例)拡張子 . htmlのファイルをファイル詳細付きで検索する
 $ find *.html -ls
~

***grep
ファイル中の文字列を検索します。検索パターンとして、正規表現を使用することができます ( file pattern searcher > global regular expression print )。
-例)拡張子がtxtのファイルから sample を検索
 $ grep "sample" *.txt
-例)index.htmlから <P>または<p>のある行数を表示
 $ grep -ci "<p>" index.html
-付記:正規表現について
--[[正規表現の概説>RegularExpression]]
--正規表現チェッカー:http://okumocchi.jp/php/re.php
~
~

**ネットワーク関連

***ifconfig(Windows ではipconfig)
ipアドレス他、当該機器のネットワーク設定を表示する。
 $ ifconfig
~

***ip
ネットワークデバイスやルーティング等の表示と変更を行う。ifconfigコマンドやnetstatコマンド、routeコマンドなど、net-toolsパッケージのコマンド群に代わるものとして登場。 ipコマンドへの移行が進んでいます。
-例)デバイスの設定を一覧表示する
 $ ip addr show
 $ ip a ← addrをaと省略表記、showサブコマンドを省略
-指定したデバイスの設定を一覧表示する
 $ ip addr show dev デバイス名(画面1)
~

***ping [-qr] [-c count] [-i wait] [-s packetsize] host 
指定されたホストと交信が可能かどうかを確認します。リモート・ホストに対してパケットを送り、稼動していればレスポンスが戻ってきます。

-例)www.example.com にパケットを送る
 $ ping www.example.com
Macの場合、送り続けるので、強制停止の必要があります。以下の操作。
 [CTRL] + [C]
-例)www.example.com に5回パケットを送る
 $ ping -c 5 www.example.com
~

***dig [@server] domain [query-type] [query-class] [+-][query-option] 
ドメインの情報をDNSサーバーに問い合わせて表示する。
-例)example.com を調べる
 $ dig example.com
-例)アドレスから逆引きで調べる
 $ dig -x 216.239.38.10
~

***nslookup [option] [Domain name or ip] [DNS server]
ドメインの情報をDNSサーバーに問い合わせて表示します。digとは異なりコマンドに引数を与えない場合は、対話的にネーム・サーバーの問い合わせを行うことになります。
&small( nslookupは将来的にサポートされなくなる可能性あり。digコマンドの利用を推奨します。);
-例)ドメイン名からIPアドレスを調べる
 $ nslookup www.yahoo.co.jp
 
対話型モード(>)から抜けるには
 > exit
~

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

***tracert
あるホストから別のホストまでのネットワーク経路をリスト表示する
 $ traceroute6 www.example.com
~

***whois 
ドメインの所有者などをはじめとするドメイン情報を表示
-例)ドメイン名からドメイン情報を表示
 $ whois google.co.jp
-例)IPアドレスからドメイン情報を探し出して表示
 $ whois 133.17.5.5
~

***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
環境変数やシェル変数を設定する
-環境変数 $PATH を書き換える 
たとえば /usr/[UserName]/sample/bin へパスを通したい場合、
現在の $PATHに追加のパスに:を使って接続します。
 $ PATH=$PATH:/usr/[UserName]/sample/bin
 $ export PATH
参考:パスは:で複数接続されています。左の方が優先的に採用されます。
 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

-参考:.bash_profile を編集してXAMPPにパスを通す
Mac + xampp + ターミナルでmysqlにログインする場合などに必要です。
 $ cd ~
 $ vi .bash_profile(atom にパスが通っている場合は $ atom  .bash_profile)
vi エディタで以下を追記
 export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
~

***man [command]
コマンドの使用方法を表示します(Manual)
-例)ls コマンドの使い方を調べる
 $ man ls

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

***su [-] [UserName]
ユーザの切り替え(Switch User)
-例)操作の権限を管理者権限に上げる(rootにあがる)
 $ su
 password:  ← パスワードの入力が求められます。
 # ← rootユーザ(管理者)になるとプロンプトが # になります。

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

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

***sudo [ option ]
スーパーユーザー(root)に成り代わって、コマンドを実行(Super Do)。
-例)管理者権限でソフトをインストール
 $ sudo yum install ・・・

&color(red){''注意''};
Mac のTerminal にはこのコマンドは使えません。Macに標準搭載の httpd ( Apache ) を起動するには以下のコマンドを入力する必要があります。
 $ sudo apachectl start ← 管理者PWを入力後に Apache が起動します。
ブラウザを起動して、URLに http://localhost と入力すると、It It works!と表示されるはずです。''試用後は必ず停止しましょう。''
 $ sudo apachectl stop ← 停止します。
~

***systemctl
-コマンド群
--サービス起動 systemctl start ${Unit}
--サービス停止 systemctl stop ${Unit}
--サービス再起動 systemctl restart ${Unit}
--サービスリロード systemctl reload ${Unit}
--サービスステータス表示 systemctl status ${Unit}
--サービス自動起動有効 systemctl enable ${Unit}
--サービス自動起動無効 systemctl disable ${Unit}
--サービス自動起動設定確認 systemctl is-enabled ${Unit}
--サービス一覧 systemctl list-unit-files --type=service
--設定ファイルの再読込 systemctl daemon-reload

-例)Apacheサーバーの起動/終了/再起動
 $ sudo systemctl start httpd 
 $ sudo systemctl stop httpd 
 $ sudo systemctl restart httpd 

-補足)Mac標準のWebサーバーの起動/終了/再起動
管理者権限が必要なため、sudo に続けてタイプ。PW入力が必要です。
 $ sudo apachectl start
 $ sudo apachectl stop
 $ sudo apachectl restart
~

***ssh
リモートコンピュータへの接続
 $ ssh [ ユーザー名 ] @ [ 接続先IPアドレス]
 例)$ ssh hanako@133.17.XXX.XXX
> 詳細は [[SSH]] のページをご覧下さい。
~

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

-リポジトリにアップデートがないかチェック
 # yum check-update

-リポジトリのアップデート
 # yum update

-インストールされたリポジトリと有効・無効の状態を確認(例 mysql)
 # 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

-補足1:EPELリポジトリの追加
EPELはRHEL 向けの高品質アドオンパッケージ群でFedora プロジェクトで有志によって作成されています。信頼度が高く、安心して使えます。
 # yum install epel-release
 # yum update (インストール後はアップデートします)

-補足2:リポジトリ選択の重要性
リポジトリを指定せずにインストールしようとすると、デフォルトで有効化されていないリポジトリからのインストールは行われません。リポジトリ情報は ''/etc/yum.repos.d'' にあって、それぞれ有効/無効が記載されています。有効化したリポジトリの xxxx.repo ファイルを編集し、enabled=1 にして実行することで、それができるようになります。
~

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

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

-以下のサイトの先頭にあるスクリプトをターミナルから入力
https://brew.sh/index_ja.html

-以下のコマンドで、バージョンが表示されればOK
 $ brew -v
 Homebrew 1.8.6
~
~

**システム監視

***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
 ・・・ここに数字列・・・・
-procs
--r :実行中または実行待ちのプロセス数
--b:IO待ちのプロセス数( r+b でロードアベレージに等しくなります )
-memory
--swpd:スワップされたメモリ
--free:空きメモリ(これは小さくてもいいですが、free + buff + cache が少ないと問題です)
--buff:バッファキャッシュ
--cache :ページキャッシュ
-swap
--si:スワップイン
--so:スワップアウト
-io
--bi:ブロックデバイスからの読み込み
--bo :ブロックデバイスへの書き込み
-system
--in:1秒間の割り込み回数
--cs :1秒間のコンテキストスイッチ回数
-cpu
--us:ユーザーCPU時間
--sy:システムCPU時間(カーネルが使用したCPU使用率)
--id:アイドル時間
--wa :IO待ち時間
--st:仮想マシンに取られた時間
~

***free
空きメモリーの確認
 # free
~

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

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

-リポジトリの作成およびメンテナンス
git init:リポジトリを作成する
git clone:既存のリポジトリの複製を作る
git fsck:リポジトリの正当性チェックを行う
git gc:リポジトリ内の不要なオブジェクトを削除し、最適化を行う

-作業ツリーやブランチの操作・管理
git status:変更が加えられたファイルを表示する
git diff:ファイルに加えられた変更点をdiff形式で表示する
git add:コミットするファイルを指定する(ステージへの移動)
git commit:変更点をコミットする
git log:コミットログを閲覧する
git reset:直前のコミットを取り消す
git revert:作業ツリーを指定したコミット時点の状態にまで戻す
git branch :ブランチ情報の表示およびブランチの作成
git checkout:ブランチの切り替え
git show-branch:ブランチの作成/変更/マージ履歴を表示
git merge:ローカルブランチのマージを行う
git tag:コミットにタグを付ける
git stash:現在の作業ツリーの状態を一時的に保管する
git rebase:ブランチの派生元(上流)を変更する

-他のリポジトリとの連携
git pull:ほかのリポジトリの変更点をローカルリポジトリにマージする
git push :公開リポジトリに自分のリポジトリの内容を送信する

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

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

~
~


**応用例

***フォルダ内のファイル一覧をテキストファイルとして保存
-一覧を作成したいフォルダ内(ディレクトリ内)に入ります。
-以下のコマンドで fileList.txt ができます。
 $ 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 
~

***ファイルの比較 ( compare files line by line > difference )
 diff [-options] file1 file2

-例)file1 と file2 の比較を行う > 比較結果が画面に表示されます
 $ diff file1 file2
-例)file.txt(旧) と file.new.txt(新) の差分ファイルを作る
 $ diff -u file.txt file.new.txt > file.patch
&small([ -u ] は unified diff 形式でパッチファイルを作る・・という意味のオプション指定です。);
-例)folder(旧) と folder_new(新) 、2フォルダ間の差分ファイルを作る
 $ 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 )
 patch [ -options ] file patchfile

-例)file を patchfile で修正する
 $ patch -u file patchfile
&small([ -u ] は unified diff形式のパッチファイルをあてる・・という意味のオプション指定です。);
-例)pachfile 内に書かれた「元ファイル」を修正する
 $ patch -u < patchfile
パッチファイルの先頭行「--- ファイル名」の部分に適用元の情報があるので、同名のファイルにパッチを適用する場合は(パッチファイルを配布する場合はこれが一般的です)元ファイル名の記述を省略できます。
-例)ディレクトリ単位でパッチをあてる
 $ patch -u -p1 < folder.diffs
''-p1についての補足''
フォルダ間の差分ファイルの作成では、2つのフォルダが直下に見える位置でdiff を実行しましたが、パッチをあてる際は、対象となるフォルダの中に入って作業を行うことも多くあります。パッチファイルには、ファイルの位置を示すパスが folder/index.html などと記述されているのですが(上述)、この folder/ の中に入って作業している場合は、folder/ の記述が邪魔になります。ここで、-p[数字] というオプションがよく利用されます。このオプションの[数字]の部分は無視するパスの階層の数を意味するもので、この例では、-p1 でパスを1つ分取り除くことで folder/index.html ではなく、index.html が処理の対象となります。これで正しく差分が適用できます。

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

**Mac特有の操作
必要に応じて、随時追記します。
~

***隠しファイルの表示

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

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

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

-''隠しファイルを表示するには''
--1) 設定ファイルの当該項目を true に書き換えます。
 $ defaults write com.apple.finder AppleShowAllFiles true
--2) Finder を再起動します。← 一瞬デスクトップが消えます。
 $ killall Finder

-''元に戻す場合は''
--1) 設定ファイルの当該項目を false に書き換えます。
 $ defaults write com.apple.finder AppleShowAllFiles false
--2) Finder を再起動します。
 $ killall Finder


~
~
~