2022年2月25日金曜日

vim

//@ ヴィジュアルモード
"v 移動コマンド"で選択ができる. (その後"y"(ヤンク)したり "w ファイル名"で選択部だけ保存できる)
"V" 行単位で選択する "o" 選択範囲を操作するためのマーカー切り替え "Ctr-v" 矩形選択をする
"行末選択" 矩形選択時に移動コマンドで行末へ行くと各行の行末だけ選択した事になり
       そこでAを押して挿入して復帰すると全ての行末に挿入される
"gv" 前回選択した範囲が再選択された状態でヴィジュアルモードに入る.
"Ct-g" 選択モード(標準的な使い道はあまりない。拡張向けか)
"c" 選択した範囲を削除して挿入モードに入る "r" 選択した範囲の文字が全て指定した文字に置き換わる    
":normal コマンド" で選択範囲に一挙にノーマルコマンドを適用できる.
// オブジェクト選択  (二つの記号に挟まれた構造化領域の選択)
ここでのiやaは挿入モードとは関係ないので注意
"a"はaround"i"はinsideみたいな. "t"はタグの内側<a>ここ</a>.
"vi}" カーソルが{}の間にあるなら{nakami なかみ}の中身を選択できる.
va"とかvi" と入れる事で""で囲まれた領域全体or領域内部を選択できる.
これらの範囲はv選択だけじゃなくmotionにも使えるのでcitとかできる.
"cit" HTMLタグの内部を削除して挿入モード
// テキストオブジェクト選択 iとaの違いは上の通り, 大文字と小文字は記号含むか否か
v選択の際などに"iw aw iW aW" 現在の単語. "is as ip ap" 現在の文 段落.

//@ ファイル・ウインドウ・タブ
shellからvim *.txtなどでディレクトリ上のファイルを一気に開ける。
開かれたファイルはメモリ上に配置され、これをバッファと呼ぶ。
":edit ファイル名" ファイルを開く. Tabで補完可能. "%%"アクティブなバッファのパスに展開される.
":ls"現在開いているバッファ一覧.%が現在の#が交換ファイル."Ct-^"で交換ファイルにトグルできる.
":bn"":bp"で次のバッファ、前のバッファへ"b1"バッファ1を開く.
":bufdo"で全てのバッファに対してExコマンドを実行.
":args"現在の引数リストを表示. 引数リストというバッファ群を使って現在開いているファイル群の生成・管理が可能.
":args ファイル名" /で区切ったりワイルドカードを使って複数ファイルを引数リストに追加できる.
":argdo" 引数リスト中のバッファ全てにコマンドを実行.

":w FILENAME"  現在ファイルの別名保存を作る ":w" 現ファイルの保存.
":q" ウインドウ(タブ・ファイル)を閉じる ":wq" 保存して閉じる ":q!" 保存せず閉じる.
":qa!" 警告なしで全てのウインドウを閉じる ":wr"変更されたバッファを全てディスクへ書き込む.
":e FILE" ファイル読み込み ":tab FILE" 新しいタブで開く "gt""Ctr-tab" 次のタブへ .
":r ファイル名" ファイル内容をカーソル位置に張り付ける ":new" 別のファイルを二つ目のウインドウで.
// 分割 ウインドウ
":[数字]sp,vs (ファイル)" ウインドウの"sp"横分割"vs"縦分割 [数字]付けると行(列)幅指定 ファイル名を引数にも.
 "Ctr-w" 系  (まずCtr-w を押す事で以下のウインドウ操作系のコマンドが使える.Ctrは押しっぱなしでもいい).
      "s" 横分割 "v"縦分割.
          "w" 別のウインドウへカーソル移動 "p" 一つ前のウインドウへ戻る.
          "h,j,k,l" 左、下、上、右のウインドウへ移動. "H,J,K,L"でウインドウ自体が移動.
          ">, <" 幅を増やす,減らす "+,-" 高さをふやす減らす "=" 大きさをそろえる.
          "o" または普通に":only"で現在のウインドウ以外を閉じる.
      "c"または普通に":close"で現在のウインドウを閉じる.

//@ 移動系コマンド
"Ct-e""Ct-y" ウインドウスクロール.
"gf" カーソル位置にあるファイル名へジャンプ "gF" gfの動作の後ファイル名の後に書かれた行番号へジャンプする.
"g;" 直前に変更した位置にカーソルを移動 "g," カーソル移動履歴を未来方向へ辿る.
"gi" 直前に挿入した場所へ戻って挿入モード
"jkhl"  カーソル移動だが数字入れてから入力するとその分ジャンプする. "gj"の様にgを付けると表示行単位の移動.
"H,M,L"  画面の上,画面の真ん中,画面の下へ移動.
"Ctr-u" 半画面戻る "Ctr-d" 半画面進む  "Ctr-b" 1画面戻る "Ctr-f" 1画面進む.
"w" 次の単語の頭へ向かっていく "B"単語の頭、前の単語へ向かっていく.
"e"単語の尾へ移動。既に尾なら次の単語の尾へ. "E"直前の単語末へ移動. "ge" 前の単語の末尾に後退.
"%"  対応するカッコへ移動.
0 行頭へ "^" 文字行頭へ. "$" 行末へ.   "gg" 1行目へ.  "G" 最後の行へ.
"数G(gg)",":数" その行へ.
"Ctr-o"   ジャンプした時の前の位置へ辿る (検索や行数指定移動など).  "Ctr-i" Ctr-oと逆操作.
"-"  1行上の左端へ  "Enter"  1行下の左端へ.
"(,)" 文単位での前進,後退 "{,}" 段落単位での前進,後退.
"zz"  現在地を画面の中央に持ってく.
//@  マーク&ジャンプ
"mx"  現在地にマークを設定 xはa-z か A-Zのアルファベットが使える.
大文字だとグローバルマークとなりファイル間でも移動・保持される.
"'x"  xマークのある行頭にジャンプ "`x"(Shi@) xマークにジャンプ.
システムによって自動的にマークされるマークも使える [参考: jidoumaaku]
//@  行検索(全角入力可能で実行すると半角に戻る
"fa"  行末へ向かってaを検索. ";"で次へ ","で戻る. "F"で行頭へ向かって  f,Fの替わりに"t,T"を使うと文字一歩手前へ移動.
"f "  fの後スペース入れとくと全角文でも文節ごとに";"や","で行き来できる.
//@  検索  
"/"下へ検索. "?"上へ検索. "n" 次の検索結果. "N"前の検索結果. "Ctrl o"元の場所へ戻る. "Ctrl I" 進む ".
":set hls" ハイライト. "set nohls" ハイライトオフ. "set ic"大文字対象. "setnoic"大文字対称off.
"*" 現在地にある単語を検索 .
一度検索すればいつでもnで飛べるので文章中に何かの記号を置いておけばジャンプスポットみたいにもなる.
例えばスペース区切りで飛んでいくには"/ Enter"した後に"n"
*を使えばリンクを張った目次みたいにもできる.
検索ウインドウで↑を押すと検索履歴をたどれる.
前回と同じ検索を繰り返すなら"/Enter"でOK.


//@   テキスト入力系
"u"   アンドゥ.   "C^r"  リドゥ.
"R"  上書きモード開始。Insで挿入←→上書(モード切替). "r"で一文字削除後一文字挿入.
"gR" "gr"などでタブ文字の上書きが安全な仮想置換モード使用.
"a"   現在地の前から挿入開始.   "A"  行末から挿入開始.
"i","Ins"  現在地の直前から挿入. "I"  行頭から挿入開始.
//    削除挿入系(d系との違いは挿入モード開始)開始
"s"    一文字削除して挿入開始.  
"ciw" 現在地の単語を消して挿入開始. "ce""cw" 現在地から一単語削除して挿入開始.   
"c〇"  現在地から移動コマンドを入れて削除しつつ文字入力開始 "cf〇"〇まで消して挿入開始.
"cc"   現在行を削除して挿入開始. "C" 現在地含めて行末まで消して挿入開始.
"J"     下の行と連結.
"o"    下の行に新ライン挿入して編集開始.  "O" 現在の行に新ライン挿入して編集開始.
":iab"  省略入力登録. ":iab pai 3.14" paiを3.14に展開するよう登録.
":unabbreviate pai"で登録解除. ":abbreviate"  登録一覧の表示.
//@-   挿入モードで使えるコマンド
"Ctr-h" バックスペース. "Ctr-w" 単語レベル削除.  "Ctr-u" 行頭まで削除.
"Ctr-o"  挿入モード中に1コマンドだけノーマルコマンドを使うためのコマンド.
挿入中貼り付け→[sounyuuhari]
//@    カット
"Shift-Insert"  (Windows)クリップボードから貼り付け.  "Ctr-Ins" クリップボードへコピー.
"x"     その場所の文字を削除.  "X" その場所の一つ左を削除.
"d~"   dの後に移動系コマンドを入れると現在地からその場所までを削除する.
"dn~" その移動系コマンドを使いながら消去をn回繰り返す.
"dd"   その行を削除. "ndd" n行削除. "D" カーソル位置から行末まで削除.
"diw"  その単語を削除. "daw" その単語先まで削除. "dw" カーソル位置から単語末まで削除.
"das"  文章センテンス全体削除.
//@-    ペースト(プット)    
"p" "(P)"  文字列カットの場合、"p"は現在地の直後"P"は直前へカットまたはコピーした内容をペースト.
       行単位カットの場合,"p"は現在行の下へ貼り付け"P"は現在行の上へ貼り付け.
"gp""gP"を使うと張り付けた後のカーソルの位置が変わる.
挿入中貼り付け→[sounyuuhari]
//@-    コピー(ヤンク)
"y~"  yの後に移動系コマンドを続けるとコピーされる.
"yy"   その行のコピー.
"yiw"  その単語のコピー.

//@    レジスタの利用 (マクロのレジスタと共用なので注意)
":reg" でどのレジスタがどうなっているかを見れる. ":put a"でレンジスタaの貼り付け可能.
普通にヤンクした場合はレジスタ"0"が利用される.  カット系は1-9レジスタが順に使われ流れていく.
カット・ヤンクに関わらず直前に蓄えたテキストは無名レジスタ""に保持される。
pみたいにレジスタ番号を指定しないペーストは無名レジスタを使っている。
つまりカットした履歴は流れて行ってしまうので、ある程度作業を挟むならヤンクしておき"0pという風に書けば
間にどれだけカットしててもヤンク時のデータが挿入される."レジスタ名…でレンジスタを指定できる.
// 任意のレジスタを使う
"ay  みたいに"を付けてから次に入力する文字がレジスタ名となり
"ap  みたいに頭に"つけてレジスタ指定して貼り付けられる.
大文字のレジスタ名を使うと過去のデータを上書きせずに追記になる.
"qaq"マクロに何も記録しない事でレジスタaを空にする.(globalコマンドなどで繰り返し追記する時の開始準備とかに)
// 挿入貼り付け[sounyuuhari]
挿入モードで"Ctr-r押してからレジスタキーを指定して貼り付けできる.
例"Ct-r  a"でレジスタaから"Ct-r 0" ならヤンクレジスタ "Ct-r "(←shift2)なら無名レジスタを貼り付け.
あと良く分らんが"Ctr-r Ctr-p a" でレジスタからそのまま貼り付けて(意図しないインデントは修正).
挿入モードでCtr-r= (任意式)3+4*10Enterみたいに打つと43(計算結果)が張り付けられる. =はExpressionレジスタという.
//  外部システムのクリップボードを使う
Windowsのクリップボードを張り付けるなら"Shift+Ins",コピーなら"Ctr+Ins"でできたりもするが
一般的なやり方としては
"+"とか"*"レジスタから入出力できるぽ。
シェルから利用している場合にはpasteオプションとか何か設定が必要な場合があるかも?
// 自動セットされるレジスタ…も存在し、任意に呼び出して貼り付け可能
"%"現在のファイル名"#"大体ファイル名"."直前に挿入されたテキスト":"直前に実行されたExコマンド"/"直前検索ワード


//@-  置換  Exコマンド :substitute (略称s)  通常のExコマンド同様コマンドの前にアドレス(効果範囲)を指定できる.
":%(アドレス)s(ubstitute)/置換元文字列(パターン)/置換後文字列/g(フラグ)"
デフォルトでは現在行の初めに見つかったパターンのみを置換する.
上はアドレス%でファイル全体を,フラグgで行の最初の一つ以外も対象とする例.
アドレス:10,20s/だと10~20行の範囲指定. ".,.+5"だと現在行から5行.
フラグ例 "n" マッチ数を報告 "&"直前の置換コマンドと同じフラグを使用.フラグの最初に記述しなければならない.
"c" 実行を一つづつ判定 [tikanflagc] (←参考:置換中に使えるコマンド)だが
これを使わずに検索しながらシンプルな置換↓を.コマンドで繰り返す方法もある.
":s/パタン/置換後" シンプルな(その行の初めのひとつだけ)置換.
ビジュアルモード中に":"を押すと":'<,'>"という記号が出てくるが
続けて上記の置換コマンドを完成させる事でビジュアルモードの範囲がアドレスとして使える.
"&" ":&" 最後の置換を現在行で一回行う(フラグは無視される).
":&&" フラグを無視せずに直前の置換を行う.
"g&" ":%&&" 全体に前回のフラグで置換を適用.
パターンは最後の置換ではなく最後の検索時のパターンが利用されたりする.

//@    マクロ
コピペのレジスタと共用なので注意.逆に言えば
テキストでマクロを作ってレンジスタにヤンクしてもよし
":reg" でどのレジスタがどうなっているかを見れる
"qa"  レジスタaにマクロ記録開始. "q"で記録終了. "@a"でマクロaを呼び出す. "@@"直前のマクロを呼び出す.
大文字の名前を使うと既存のレジスタを上書きせずに追記となる.
"."   さっきの作業を繰り返す(無名シンプルレジスタ).
":normal @a" で選択範囲に一挙にマクロaを適用できる.
"qaq"マクロに何も記録しない事でレジスタaを空にする.

  //マクロ利用例 (自分なりの現状設定)
 "@i" 単語先頭に合わせた状態で押すと単語末まで""で囲む "@o" @iの2単語版."@p" 選択範囲末で押すと""で囲む.
"@p"に設定しているのは
a"gvoi"gvoll
↑ 選択領域を""で囲むマクロ.
      上記のマクロは""の部分を[]など任意に置き換えれば汎用性が増す.
   マクロの登録は"q"コマンド以外にもヤンクでレジスタに入れれば良い.
"@q" []で選択対象を囲む.下はマクロの内容.
a]gvoi[gvoll
"@w" <>で選択対象をで囲む.下はマクロの内容.
a>gvoi<gvoll
"@e" ()で選択対象をで囲む.下はマクロの内容.
a)gvoi(gvoll
"@r" 「」で選択対象を囲む
a」gvoi「gvoll

"@j" 現在行の末尾に改行を入れる "u" 現在地に開業を入れる

//@    その他
"数字i" みたいに数字を指定して挿入モードに入って戻ってくると指定回数変更が繰り返される.
"." 直前のコマンドの繰り返し "u" undo "U" 現在行に対する変更の全取り消し.
":earlier 時間 単位" でその時間の状態戻る. ":earlier 10s"など.
":set nu(set nonu)" 行番号の表示(非表示).
"Ct-a""Ct-x"  カーソル行上で以降に現れた最初の数字をインクリメント/デクリメント.
"Ctr-D"  途中入力コマンドの補完候補リストアップ.  "tab" 補完.
"Ctr-G"  ファイル名や現在行を知る. "Ctr-l"  画面を再描画.


//@     EXコマンド(:から始まるコマンドラインで入力するコマンド)
ノーマルモード同様に様々な処理ができるが複数行を簡単に指定出来たり.
全文対象に実行するみたいな事が容易らしい.
 "Esc"でノーマルモードへ戻る."Ct-u"で入力途中のコマンドを削除."Ct-b"行頭へ"Ct-e"行末へ"Ct-w"単語削除 "↑"履歴[rereki]
"Tab"でコマンド補完.候補が複数ある場合はTab押す毎に切り替わる."Ct-D"で候補一覧.
"アドレス コマンド"という形式でコマンド処理の対象となるテキスト範囲をアドレス指定して実行するのが基本.
アドレスは行番号をそのまま入れていいし、3,6みたいに,で区切れば3行目から6行目の様な範囲となる.
行番号以外に以下の特殊なアドレス指定ができる.
// アドレスの例
"%"でファイル全体. "$"ファイル最終行. "0"ファイル先頭行の前の仮想的な行 "."現カーソル行 "'m"マークmがつけられた行.
"%"はファイル名も表せる(ファイル名の省略表記).
// コマンドの例
"t" コピー. "m"移動.
行対象のコピペ作業などもカーソル移動なしで直接指定できるので高速だったりする
ヴィジュアルモードから:でコマンドに移行できる事も覚えておこう
(例)"  :'<,'>m$  " mは移動,$はファイル末尾なのでこの例は指定範囲をファイル末尾へ送る.
:'<,'>後に"norm"と入れてからノーマルモードのコマンドを入れる事で指定範囲にノーマルコマンドを実行できる
例えば全ての行に対して処理が可能.
// グローバルコマンド :golobal(短縮はg)
":[range]g/パターン/コマンド" range内において特定のパターンにマッチした各行にExコマンドを実行する.
rangeはデフォルトで%(ファイル全体)
パターンを空にしておくと以前検索で使ったパターンが使われる.
コマンドはそれ自体が範囲を受け取ることができる.
コマンドをカラにしておくと:printを実行する.
":vglobal(短縮はv)"はパターンに当てはまらない行においてコマンドを実行する.
大文字レンジスタにyankする事でパターンに当てはまる複数行を蓄積可能.
":g/パターン/t$"はファイル末尾へパターンを追記していける.

// 履歴[rereki]
"@:"で直前のEXコマンドを繰り返せる.その後は同じコマンドなら"@@"で繰り返せる. "Ct-o"で操作を戻せる.
"q:" EXコマンド履歴を出す(j,kで移動Enterで実行できる他、通常のエディット同様に種々のコマンド,
     EXコマンド,範囲指定などで加工可能で"|"でコマンドを繋ぐ事もできる)
"q/" 検索履歴を出す.
"Ct-f" コマンドラインモードからコマンドラインウインドウへ切り替え.
"Ct-c" コマンドウインドウやコマンドラインからノーマルモードへ戻る方向へモードを閉じる.
       (空行からならEnter(実行)で復帰してもいい)
":changes"  変更履歴画面. "q" ノーマルへ戻る.

      
// シェルと連携
":shell"  シェルを呼び出す。 exitなどで抜ければvimに戻る カレントディレクトリが現在開いているファイルだったりするのでGUI起動した場合に便利なのかも。
":!コマンド" vimから端末のコマンドを実行する.
":r!コマンド"   端末コマンドの出力をカーソル位置に張り付ける.
"Ct-z" vimをバッググラウンド(停止・ハイド)モードにする.bashではfgコマンドで復帰できる.
//シェル入出力
割愛するが指定範囲をシェルに入出力が可能で、vimで編集中のテキストを外部コマンドで処理できたりもする.


//@     Help
https://vim-jp.org/vimdoc-ja/usr_toc.html  //vim日本語ドキュメント
":help user-manual" マニュアルを出す ("<F1>"でもOK) ":help  d" みたいにすれば dを調べる
"Ctrl ]" でタグジャンプやワードヘルプ. タグとは"|これ|"に囲まれている部分. 単にワードの上でWクリックでもいい "Ctrl t"で元の場所に戻る
シェルから "vimtutor"  とコマンド入力でチュートリアルテキストを開ける
興味深いのは折りたたみ機能


//@     設定
起動時の設定ファイル読み込み(ウインドウズ版で確認したがlinuxでもそうなのかも)
デフォルトでユーザーディレクトリみたいな場所 (Windowsの場合は$HOME/_vimrc、Mac,Linuxは$HOME/.vimrcのvimrcというファイル)から設定を読み込むが
そのファイルが見当たらなければdefaults.vimを読み込む。
defaults.vimはvimがインストールされたフォルダとかproguram-filesみたいな
とこにあったりする。
一人でシステムを使っている場合もdefaults.vimは汚さずに変な個人設定ファイル(vimrc)を作ってしまった場合のバックアップとするのが良いかも。

vimrcに"nnoremap k gk" みたいに書いておくと kをgk押したように扱うみたいにキーの置き換えが可能
"noremap <Leader>n nzz" みたいに書いておくとリーダーキーの後にnを押すとnzzの効果になる
リーダーキーと言うのはユーザー定義コマンド用のプレコマンドでデフォルトでは\(バックスラッシュ)らしい
F3でハイライト切り替え
set hlsearch!
nnoremap <F3> :set hlsearch!<CR>
":set guifont" 現在のフォント設定を見る
次回以降も同じフォントを使用したい場合は設定ファイルに次の様に書く
<半角文字の場合>
set guifont={フォント名}\ {フォントサイズ} (Linuxの場合)
set guifont={フォント名}:h{フォントサイズ} (Windows/Macの場合)
<全角文字の場合>
set guifontwide={フォント名}\ {フォントサイズ} (Linuxの場合)
set guifontwide={フォント名}:h{フォントサイズ} (Windows/Macの場合)

windows半角で試したが、h:set guifontで色々と出てくるがh(フォントサイズ)まで書けば良かった。


//  用語・雑記・補足
"バッファ" ファイルはディスクに保存されるものでバッファはメモリ上に存在するもの.

//自動マーク [jidoumaaku]
''  現在のファイルで直前に行われたジャンプ以前にいた場所
'.  直前に変更された場所.
'^  直前に挿入があった場所.
'[  直前に変更もしくはヤンクが行われた先頭.
']  直前に変更もしくはヤンクが行われた末尾.
'<  直前のビジュアルな選択範囲の先頭.
'>  直前のビジュアルな選択範囲の末尾.

// 置換フラグc 実行中に使えるコマンド [tikanflagc]
y   このマッチを置換
n   このマッチをスキップ
q   置換を終了
l   (last) このマッチを置換して終了
a   (all) これと以降の全てを置換
Ct-e Ct-y  画面上スクロール,下スクロール




2022年2月16日水曜日

シェルコマンドなど

 シェルコマンドなど(主にbashが対象の話) 自分用メモ

"sudo apt update(upgrade)"  アップデート情報を得る (実際アップグレードする)
"tab"  1回押すと入力ワード補完. 絞り込めない時は2回目を押すと全候補を表示する
// カーソル移動
"Ctrl-b" 一文字分後退  "Ctr-f"  1文字分前進  "Ctr-a"  行頭に移動  "Ctr-e" 行末へ移動
"Alt-b","Alt-f" 単語移動
"Ctrl-w"  単語削除  "Ctrl-u" カーソルから行頭まで削除  "Ctrl-k" カーソルから行末まで削除
"Ct-h = backSpace" 1文字分後退かつ削除 "Ctrl-y"  直前に削除したのを張り付ける

// オプションの記法
 "cmd -opt 引数" ("cmd"はコマンド"opt"はオプションを表すとする)
オプションと引数の間のスペースは省略可能だが
--ロングオプションでは間に=かスペースが必要
"無印" オプションを指定せずにコマンド単独で実行する事をこう呼ぼうかな.

// 履歴
"Ctrl p(↑)"  //一つ前の履歴に遡る
"Ctrl n(↓)"  //一つ後の履歴へ戻す
"Ctrl r"    //履歴を遡ってインクリメンタル検索
    - "Ctrl r"  ひとつ前の検索結果へ移動
    - "Enter"   現在の検索結果をそのまま実行
    - "Esc"      現在の検索結果を表示したままコマンドラインへ戻る
    - "Ctrl g"   検索結果を破棄してプロンプトに戻る

//  中止・リセット系
"Ctrl-c(q)"   // シェル上実行中のプログラムを終了するなど。
"Ctrl-c" をコマンドライン上で入力すると入力中テキストを実行しないで次のラインに行ける
"Ctrl-l"  //clear(画面全消去)と似てるが 現在入力途中は保持
"rset"   //ログイン時と同等に戻す?

// ディレクトリ内容リスト表示
"ls" <オプション> "-l" 詳細  "-a"  隠しファイル "-R" ディレクトリ下も表示
                  "-F" 種類("/"ディレクトリ "*"実行可能ファイル "@"シンボリックリンク)
  "ll = ls -alF" 詳しい. オプションa,l,F混ざってる感じ?
"file ファイル" ファイルの種類などの情報を表示
//  パス・ディレクトリ
"pwd"   現在のパスを出力  "cd" ディレクトリ移動 (指定しないとホームへ)  "cd ../" 親フォルダへ移動
"mkdir"ディレクトリ作成 "rm" ファイル削除  "rm -r"  フォルダ削除(内部含む)
"cp 元ファイル 新ファイル" ファイルコピー "cp-r" フォルダ(の内部も)コピー
"touch ファイル名" ファイルのスタンプ更新.なければ空のファイルを作成.
// パス展開
"." カレントディレクトリ  ".." 親ディレクトリ " ~ " ホームディレクトリ  "/" ルートディレクトリ
"?" 任意の1文字当てはまる候補全部   "*" 任意文字列当てはめる候補全部

// エイリアス (別名の設定)
"alias l=ls"  一時的なエイリアス設定. 削除するにはunalias=エイリアス.
ずっと残すには ~/.bashrcとかに書いてログイン時に読まれるようにして.
"\コマンド" 既存コマンドをエイリアスでオーバーライドした場合に一時的に元のコマンドを呼びたい場合
             バックスラッシュを付ける.
"type コマンド" コマンドの種類を表示。エイリアスかどうかなどが分かる

// リンク
"ln -s file linkName" シンボリックリンクの作成
"ln file linkName"  ハードリンクの作成
"[ハードリンク]" 一つの実体に複数の名前を与える.
          実体が消えるのは全てのハードリンクが消えた時.
"[シンボリックリンク]" ハードリンクと違いディレクトリのリンクが作れたり
            異なるディスク間をまたぐことが出来る.

// 起動と設定
bashでログインした時"/etc/profile"が読み込まれ、//共通設定用のファイル
続いて" ~/.bash_profile"が読み込まれる. //ログイン時にのみ読まれる個人設定
そこから" ~/.bashrc"があればそれも読み込まれる.//bashを起動するたびに読まれる個人設定
個人設定は↑これにだけ書いてれば良さげ.
設定後の繁栄は"bash"でいい。(".bashrc"が読み込まれる.)
// WSL2(Windows Subsystem for Linux 2)のubuntuのbashで確認した細かい話
まず"/etc/profile"から"etc/bash.bashrc"があれば読まれた後に
"etc/profile.d"があればその中の".sh"ファイルが読まれていく.
" ~/bash_profile"とかなければ作ればログイン時に呼ばれるので
そこから1行"bash"とだけ書けばコマンド"bash"が呼ばれて" ~/.bashrc"も呼ばれる.

// 拡張子
".org" 変更前の元のファイルみたいな意味でバックアップしたファイルに付けられがち.(オリジナル)

// パーミッション ・ chmod ( change mode) アクセス権限と設定
-rwxr-xr-x みたいなやつ ls -l などで確認できる
↑一文字目は種類 "-"ファイル(この例) "d"ディレクトリ "l"シンボリックリンク
その後、3文字ごとにファイル所有者権限/所有グループ権限/その他権限
"r"=read(読み取り可能) "w"=write(書き込み可能) "x"=excute(実行可能)
"chmod -オプション 対象  変更  権限" chmodコマンドによるパーミッションの変更の例
  それぞれの項目を一度に複数指定したり、連続設定が可能.オプションは"-R"を指定でサブフォルダを含む.
<対象> "u"ユーザー "g"グループ "o" その他 "a"全て
<変更> "=" 指定した権限に限定する "+" 指定した権限を追加する "-" 指定した権限を除去する
<内容> "r"読み取り "w"書き込み "x"実行 "対象=" 何も指定しないと全ての権限をはく奪.
例) "chmod a=rwx, g-w fileA"
全てのユーザがfileAを読み書き実行できる様にした後、グループの書き込み権は否定.
この他にビットフラグ的な数字で指定する方法もある.

// ディレクトリに対してのパーミッション設定の効果
読み取り = lsなどで表示可能か
書き込み = ディレクトリ内のファイルを変更可能か
実行     = cdなどでそのディレクトリに移動可能か


// ファイルからのコマンド実行(スクリプト)
//ソースコマンド
直接コマンドを打たなくてもコマンドが記述されたファイルを用意して
"sourece ファイル名" か ". ファイル名"(ドットがあることに注意)と打てば実行できる.
これは指定したファイルの内容をそのままコマンドラインに入れるだけの挙動、
つまり読めれば実行できると言うのと既に実行中のシェルで解釈するだけの話なので
ファイルの実行権限は不要.(ファイルにシバンがある場合は無視される)
"source ./ファイル名"の様に"./"を付けてパス指定しないとサーチパスからもファイルを探す.
// シバン(#!)からの実行
ファイルの1行目に
"#!/bin/bash" と書いてあればコマンドライン上で単に
"ファイル名"を打つだけで中のコマンドを実行できる.
    ただしファイルの実行権限が必要。またサーチパス以外の場所にあるなら
"./ファイル名"みたいにしてパスごと渡す必要がある.
"#!"で始まる行はシバン(#ハッシュ,シャープ !バン)と呼ばれるもので
次の行から続くコマンドをどのインタープリタで実行するかを指定する.
"#!/bin/bash"ではバッシュを指定しているのでバッシュに
このファイル自体を引数として渡す事になる。
渡されたバッシュでは#から始まる行はコメントとして無視されるため
再びバッシュを起動する事はなく、続く行のコマンドだけが実行される.
.やsourceコマンドから実行する場合は、今のシェルを利用しているため
エイリアスなどの環境設定がシェルスクリプトにも反映される.
// サーチパス
サーチパスはコマンドを入力した時に実際にコマンド処理をするためのプログラムの置き場所
"echo $PATH"で確認可能.
":"セミコロンを挟む事で複数のパスを登録できる(前方で見つからないと後方を探す).なので
"PATH = $PATH:追加するパス" という変数代入で新たにパスを追加できる.
// ユーザー独自のコマンド
"~/bin"ユーザー独自のコマンドは"~/bin"(home/bin)とかに置くことが多い.

// テキストエディタ
"nano (ファイル名)" お気軽メモ帳. 操作方法が画面下に書いてある. "^C"はCt- "M-"はAltとか
"vim (ファイル名)" 手堅い多機能テキストエディタ. コマンドモードめんどいがマクロとか便利.閲覧も便利

// フィルタ系 (入出力を連携させがち系)
"echo" 入力行を出力
"cat ファイル名" ファイル内容を表示.ファイル名複数入れは連結表示.
cat 単独のコマンドはまとまった文章を入力できCt-dで入力終了するとそれが出力になる(echoに近い)
"cat >> ファイル" 同名ファイルがあると末尾に追記. ">"だと上書きになる.("ca"で追記みたいなエイリアスを設定した方が安全)
"more" 長いファイルでも複数ページで読める.読み終わると閉じる.じっくり読むなら"less"を使うと良い.
"head -n ファイル名" ファイルの頭n行表示(デフォは10行). ファイル名複数入れるとタイトル付きで連続表示.
"tail" headの逆.
"grep" 文字列を検索しヒットした行を表示. 詳しくは[*grepkensaku]
書式は "grep [オプション] <パターン> <ファイル名>
例 "grep ex e" ファイルeからexという文字を含む行を全て表示する.
"sort" 順番に並び替える
"uniq" 重複行を取り除く
"tac" 逆順に出力
"wc" 行数やバイト数を出力: "-l"行数 "-w"単語数 "-c"バイト数
"tr A B" AをBに置換
"diff A B" 差分表示

// パイプ |
"cmd|cmd|cmd|"…みたいに"cmd(コマンド)"を"|"でつなぐと前のコマンドの出力が後ろのコマンドの入力になる
つまり関数(関数(関数))と違い前から順番に実行されていく

// リダイレクト(こちらはパイプと違い関数の引数の様にそのコマンドの入出力を設定する)
"コマンド < ファイル" 標準入力をファイルから読み込む
"コマンド > ファイル" 標準出力を新規ファイルへ書き込む//同名のファイルがあれば削除される
"コマンド >> ファイル" 標準出力を既存ファイルの末尾へ追加する

// less 長文ファイルのread only
"gやG"でファイル先頭や末尾へ移動 "hjkl" 前後左右へ移動
"スペース(PgDn)" [1画面]移動  "w(PgUp)" [1画面]戻る
"d (down)" [半画面]降りる     "u (up)" [半画面] 戻る
細やかなスクロール調整法→ [半画面]や[1画面]の定義を変えられる。
コマンドdやuの直前に数字を入れるとその量が半画面として登録される.

// 検索(lessやvim)
"/"   下方検索(文字列入力開始)
"?"   上方検索(文字列入力開始)
"n"   次の検索結果に移動する
"N"   前の検索結果に移動する

"find <検索開始ディレクトリ><検索条件><アクション>"
検索開始ディレクトリを起点として検索条件に満たすファイルを探し、見つかったらアクションする.
"find 単語" みたいに全部省略してワンワードだけで検索すると
現在のディレクトリから下に向かって単語が一部でも含まれているパスが全て表示される.
<検索条件> "-type f" 通常ファイル "-type d" ディレクトリ  "-type l" シンボリックリンク
検索条件は複数指定できる. "find . -type f -name '*.txt'"
"locate" という簡単だが高速な検索もあるよ(デフォルトでルートからグローバルに検索)
"man -k  キーワード" キーワードからコマンドを検索する
"$PATH"  コマンドを探す場所を表示(普通は複数あるが:で連結)
"which  コマンド" コマンドは複数ある場合、最初に見つかったのを実行するが、
           そのパスを確認する(-aオプで全て表示)
"man man"  //マニュアル。この例はman自身のマニュアルを見てる(セクション番号を忘れた時とかに).
// grep (行検索) [*grepkensaku]
"grep [オプション] <パターン> <ファイル名>" で指定ファイルから特定の行を検索し表示できる
例 "grep ex e" ファイルeからexという文字を含む行を全て表示する.
<オプション> "-n" 行付き "-i"大小文字同一 "-v" 逆にヒットしない行を表示 "-E"拡張正規表現を利用
"-r" サブフォルダとかも再帰的に検索
正規表現を使う場合はシェルによる展開を防ぐために'で囲む
// <正規表現>[*seiki]
// . 任意の1文字
.(ドット)で任意の1文字、つまり何でも良いよという意味になる.
本当に.(ドット)を検索に含めたい場合は
メタ文字をうち消すために直前にバックスラッシュ(\)を置く
例 "grep '\.txt' textes"
// [] 指定文字
[]の中に入れたどれかの文字という意味になる.
例 "[abc]" a,b,cのどれか
"-"ハイフンの利用で連番となる.
例 "[a-z]" aからzまで. "[0-9]" 0から9まで.
// [^ ] 非含有
[^ ]の中に入れた文字以外のいずれかの文字
例 mail[^13] mailの後に1か3以外の文字があればヒット.(1文字なので十三ではない)
// 行頭・行末 ^ $
^が先頭限定, $が行末限定という意味
例 ^sentou   // 先頭がsentouの場合のみ一致
    matu$    // 行末がmatuの場合のみ一致
   ^$        // 空行に一致
// 繰り返し
* 直前の文字が繰り返されている様なパターンに一致.ただし直前の文字がない時も一致となる
直前の文字はメタ文字でもいいので.(ドット)と組み合わせると任意の文字列となる.
例 .*  //任意の文字列
    ^ex.*txt$  //exで始まってtxtで終わる行
// 拡張正規表現 () |
拡張正規表現を使う場合は-Eオプションが必要.
|は複数の正規表現をor条件でつなぐ.
例 abc|xyz //abc または xyz という文字列にマッチ
()によるグループ化と組み合わせて例えば
My (Vodka|Wine) と書くとMy VodkaまたはMy Wineでマッチとなる
例 "grep -E 'My (Vodka|Wine)' drink.txt"

// bashのブレース展開
touch file-{1..5}.txt  という感じで
"{A..Z}"みたいにして数字やアルファベットが連番リスト化する
"{a,b,c}"みたいに普通に連記しても良い

//変数
"x=数字"  みたいに =で結ぶだけで特定のワードを変数化できる(スペースはいれない)
"echo $x"  みたいに書くと変数の内容を参照する. ($を付けないと普通の文字としてのxなのでその他のシステムと競合しない)

// 外部コマンドと組み込みコマンド
シェル自体に内蔵しているコマンドを"組み込みコマンド",
ファイルシステム上に存在するコマンドを"外部コマンド"と呼ぶ.
外部コマンドは現在設定されているシェル変数を参照できない.
外部コマンドがシェル変数を参照できるようにするには
"export シェル変数" でシェル変数を環境変数として設定する必要がある.
"export シェル変数=シェル変数の値" みたいにシェル変数のセットと同時に可能.

// シェル変数
 ビルトインコマンドからしか参照されない.
通常の変数の様に "echo $変数" で参照したり "変数=" で設定できる.
"PS1" プロンプトのデフォルト表示
"PS1='\W ******** ' " [カレントディレクトリ *********]みたいなプロンプト設定例
"HISTSIZE"  コマンドライン履歴の最大行数
"HISTFILE" コマンドライン履歴を保存するファイル名。デフォルト値は "~/.bash_history"
"HISTFLIESIZE"  履歴ファイルに保存するコマンドライン履歴の最大行数
"HOME"   ホームディレクトリ
"SHELL"    ログインシェルのパス
"PWD"  カレントディレクトリ
//環境変数  外部コマンドからも参照できる
シェル変数の内、環境変数として設定してあれば外部コマンドからも参照できる.
"printenv"コマンドで現在設定されている環境変数を表示できる
"PATH" サーチパス:シェルからコマンドを実行する際にコマンドの実体ファイルを探すディレクトリ
"IFS"  (Internal Field Separator) bashが単語の区切りとして解釈する文字
"LANG" 現在のロケール(言葉や国を特定する識別子)

// shoptによるバッシュの設定
"shopt[動作][設定項目]" 動作はshoptコマンドのオプションとして、設定項目は引数として記述する体裁ぽ.
(例)"shopt -s autocd"
[動作] "s"(設定)を有効にする"u"無効にする"o"set-oで指定できるオプションを対象にする.
[設定] 例
autocd    ディレクトリ名のみでcdコマンドを実行する
cdspell   cdコマンドで指定したディレクトリの軽微なミスを修正して実行する
dirspell  指定したディレクトリが存在しない場合、補完の際に訂正を試みる

// sed(stream editor)
"sed 対象行 コマンド ファイル" みたいな書式
拡張正規表現を使う場合は"-r"オプを付ける.
"sed 1d FILE" FILEの1行目を削除
"sed 2,5d FILE" FILEの2行目から5行目を削除
"sed d FILE" FILEの全行削除
正規表現で対象を指定する場合/で囲む
"sed/^B/d FILE" 先頭がBで始まる行を削除
"p"単に行を表示する"sed -n 1p FILE" FILEの1行目を表示
sedコマンドは仕様上,全行出力してしまうので
"-n"オプでファイルの全出力を避ける事で"p"の意図した挙動になる.
"s"置換.書式は"s/対象/置換後/フラグ"
"sed -n 's/abc//gp' FILE" 置換文字列に何を指定しないので削除となる.
正規表現を使う場合に備えて"'"で囲んである.
フラグはgで全ての対象を置き換えでpは対象の出力
// awk
"awk スクリプト ファイル" で指定ファイルにスクリプトを適用する。
スクリプトの働きはファイルの各行に1行づつ何かしらの処理(アクション)をする.
スクリプトはファイルに保存しておけばファイル名指定するだけ.
スクリプトの中身は"パターン アクション"からなる。
パターンを省略した場合は全ての行にアクションが適用される.

// シェルスクリプト ・シェル文法
コマンドの様にシェルに直接打ち込んでも良いシェルの文法。
主にまとまった量のコマンドや分岐をファイルから実行する目的で記述する。
";" これを書くと改行しなくてもコマンドの終端を表せるので1行に複数のコマンドを書ける.
"\(バクスラ)"  次に来る記号の特殊効果を消す効果がある。
        ゆえに改行直前に打てば(見た目は改行しながらも)シェル解釈時には改行が無視される.
        (可読性を重視した改行ができる。)
"|"パイプでコマンドを繋いだ後は普通に開業しても良い.
"#" これを書いたら、その行はそれ以降コメント扱いとなる.
"x=3" 変数への代入はスペースを挟まず"="で繋げばできる.
"$変数" 変数を参照するには直前に"$"を付ける. じゃないと普通の文字と解釈さる.
 変数名はアルファベットと数値と_の組み合わせで付けられるが先頭に数値はだめ.
"文字${変数}文字" {}で囲むと前後に文字があってもそこが一つの変数だと認識可能になる.
'や"で"囲むことでファイル名などの文字途中にスペースやワイルドカードなどが混ざっても
普通にみたままの文字列として使用可能になる.
'シングルクォート'の中では$も普通の文字となり変数展開されなくなるが
"Wクォーク"の中では$が生きて変数展開される.
"\"バクスラ"置いて次の文字の特殊さをエスケープする事でWクォーク内でも
      変数展開を避ける事は可能。
"$(コマンド)" コマンド置換 : 実行時、()内に入れたコマンドの結果に置き換わる.
" 変数=$(コマンド)"という風にして変数にコマンド結果を入れたりできる.
"`バッククォート`"で囲んでも$()と同じ効果.
"$0" シェルスクリプトの名前(ファイル名)に置き換わる
"$1~" $1からはシェルスクリプト実行時に渡した引数が順に入り置き換わる.
"$#" 引数の個数 "$@ or $*" 全引数. ""で囲むと@は個々の引数が*は全引数がまとめて囲まれる.
"if"文の例  // [ ] の前後などにスペースが必要.(ifの後にも[の中にも)
if [ "$1" = "bin" ]; then //ifの後にはコマンドを置いてもいい(各コマンドは値を返す)
   echo "OK"
else
    echo *NG"
fi
if []の中の条件式で仕える評価演算子
"=" "!=" "-n str" strが空文字列でない "-z str" strが空文字列である
// 整数の評価 (小数は不可)
"int1 -eq int2" 等しい "-ne" 等しくない "-lt" <の意味  "le" <= の意味
"-gt" >の意味  "-ge" >=の意味
// ファイル属性に関する評価演算子
"-e file" fileが存在する "-d " ディレクトリである. "-h "シンボリックリンク
"-f " 通常のファイル " -r""-w""-x" 各パーミッションあり "A -nt B"Aの変更時刻がBより新しい
"A -ot B" Aの変更時刻がBより古い
// 結合演算子(条件式に対して働く)
"A -a B" and(AとBが共に真の場合に真) "A -o B" or "!" 真偽反転 "()" グループ化(\backSlash必要)
"コマンドA && コマンドB" コマンドAが正常終了(0を返す)場合にコマンドBを実行
"コマンドA || コマンドB" コマンドAが異常終了(0以外を返す)場合にコマンドBを実行
"if[ 条件] && [条件 ] && [条件]" 各条件が全て真なら次へ(条件はコマンドでもいい)
"if[条件] || [条件 ] || [条件]" どれかの条件を満たすなら次へ
// 終了ステータス (コマンドの戻り値)
" echo $?" で確認できる.
自作のスクリプトも終了ステータスを戻す
特に指定しなければスクリプト内で最後に実行したコマンドの
終了ステータスが戻る.
指定するには
"exit 終了ステータス"
// for文
for "変数名" in "リストA リストB リストC …"
do
  繰り返し処理
done

繰り返し処理の中ではfor一行目で定義した"変数名"を
使う事ができるが、その変数の内容としては同じくfor一行目で定義した
"リスト"が順番に展開される.
"リスト"には*.txtみたいにパス名展開が利用できるんで
単に in *.txt みたいに書いておけばカレントディレクトリ内の
.txt系ファイルに次々と展開されていく.
   //seq
for文内、リストとしてコマンド置換を使う事ができる.
例えばseqというコマンドは
"seq 2 4" みたいに書くと 2 3 4が改行しながら出力されるだけの機能だが
リストに指定すればC言語とかのfor(int i=2; i <=4; ++i)みたいに使える.
---0001.txtから0005.txtまでのファイルを作る例---
for i in $(seq 1 5)
do
    touch"000${i}.txt"
done
// デフォルトのリストはコマンドライン引数となる
"$@"というリストを(""含めて)指定すると"コマンドライン引数"がリストになる.
ただし、in以下リストを省略すると自動でそれになる.
for param in "$@"と書いても単にfor paramと書いても同じ。
// case文
case文 は指定された文字列が指定するパターンにマッチする場合に実行する
どこかのパターンにマッチした時点で次のマッチングは行われない.
複数条件のどれかでいい場合は複数のパターンを|で区切る.
case 文字列 in
     パターン1)
      処理1
       ;;
     パターン2)
     処理2
      ;;
esac

コマンドライン引数の拡張子によって起動するプログラムを変える例
#! /bin/bash

case "$1" in
 *.txt)
    less "$1"
     ;;
    *)
      echo "not supported file : $1"
      ;;
esac
// While 文
指定した条件が真である限り繰り返す処理
while <コマンド>
do
   繰り返す処理
done
   //10以下の奇数を表示する例
#!/bin/bash
i =1
while [ "$i" -le 10]
do
    echo "$i"
    i=$((i+2)) #算術式展開
done
// 算術式展開
"$((式))"という風に$(())2重括弧の中で書いた式において
文字列を計算式として扱える。括弧の中ではシェル変数に$を付けなくてよい.
// シェル関数 (呼び出す前に定義する)
function <関数名> ()   #functionと()のどちらかは省略できる.

{
  処理
}
関数内での引数は、普通に関数の引数でありコマンドライン引数ではない.
($0はシェルスクリプト名のまま)
戻り値は最後に実行されたコマンドの終了ステータスだが
return 数値 という風に明示的に指定も可能.
関数内で"local"を付けて定義した変数は関数内部専用の変数になる.

// ヒアドキュメント (複数行テキスト)
シェルスクリプト内で複数行のテキストを記述する場合
コマンド << "終了文字"
テキスト
・・・
"終了文字"
みたいにすればよい.
例)
cat << END
abcd
efg
END

// アーカイブ
"tar cf dirA.tar dirA"  dirAディレクトリを「dirA.tar」という名前でアーカイブ
tarのオプションは-不要で"c"はcreate. "f"はfileの意味でファイル名を引数に取る時に必要.
"tar tf dirA.tar" でアーカイブdirA.tarの中身(構成)を確認."t"はリストの意味.
"tar xf dirA.tar" dirA.tarを展開. "x"はextractの意味. 同名ファイルがあれば上書きされる.
// 圧縮 :基本的に高圧縮な形式程時間は掛かる
"gzip ファイル" ファイルを圧縮. 圧縮後,ファイル名には.gzが付く.
"gzip -d ファイル.gz" or "gunzip ファイル.gz" ファイルを解凍(gzは取れる)
gzipコマンドは一つのファイルが対象なので複数の場合はアーカイブにしとく必要があるが
tarの"z"オプションを使うとgzipを使って圧縮や解凍までしてくれる.
"tar czf dirA.tar.gz dirA" dirAをdirA.tar.gzという名前でアーカイブ圧縮する.
"tar xzf dirA.tar.gz" dirA.tar.gzという圧縮アーカイブを解凍展開.
bzip2コマンドはgzipと同じ体裁でより圧縮可能なbzip2形式で圧縮
解凍は"bzip2 -d ファイル"または "bunzip ファイル"
これもまたtarから"j"オプションで利用可能. (例)"tar cjf 名前"
xz形式はさらに圧縮率が高く.tarでは"J"オプションで利用可能."tar cJf 名前"
// zip形式 (windosやmacで良く利用される)
"zip -r dirAzip dirA"という感じで.-rは再帰の意味でフォルダ事中身全部になる.
"zipinfo dirA" で中身確認  "zip -er …"という風に"e"オプションでパスワード付きzip化.
"unzip dirA.zip"で解凍
コマンドがインストールされてなければubuntuでは
"sudo apt-get install zip unzip" でインストールできる.

// Git  バージョン管理システム
"git config --global …"初期設定:ユーザー情報などが~/.gitconfigに置かれる.
"git init" 初期化.カレントに.gitディレクトリ(リポジトリの実体)が生成される.
"リポジトリ" Gitがファイルの履歴を保存している場所:テキストではなく独自形式
"ワークツリー" リポジトリの内容をファイルとして展開する場所.サブフォルダにリポジトリを持つ.
"git add ファイル" ファイルをリポジトリの履歴に残す"インデックス"に登録.commitする前に毎回やる.
     add -u  変更したファイルを全てをインデックスに登録(新規作成ファイルは除く)
     -A  新規作成したファイルも対象にするのが-uと違うところ.
"git commit -m 'ファイル新規作成'"
 事前にインデックスにaddしたファイルを対象に一括でリポジトリに変更履歴を追加.
"-m"オプションで'コメント'を残せる."git commit"する事を"コミットする"と言う.
"リビジョン" "コミット" ある時点でのプロジェクトの状態の事.
"git status" 現在のワークツリーの状態を表示する(変更があったファイル名など)
"git diff" 現在のワークツリーにおいて、過去の履歴との差分表示.
"git status" ワークツリーの状態を表示する
"git log"   履歴を表示する
"git checkout HEAD" ワークツリーとインデックスがリポジトリと同じになる
                     最後にコミットした状態まで戻ると言う事かと
"git revert <取り消したいコミットのオブジェクト名>" コミットを取り消す
             新しいコミット内容に修正するコミットをする事になるらしい

"ブランチ"  枝分かれしたそれぞれの履歴
"git branch" ブランチ一覧を表示する
"master"  デフォルトのブランチ. (通常メインのブランチとして使われる)
"git branch 名前" 新しいブランチを作る
"git checkout ブランチ名" ブランチを切り替える
"git merge ブランチ名" 指定したブランチを現在のブランチにマージする
"git branch -d ブランチ名" ブランチを削除する.未マージのブランチは"-D"で削除可能.
// リポジトリのバックアップ
リポジトリ自体のバックアップは
まず別のパスに新規ディレクトリ(慣習的に名前.git)を用意し
そこで"git --bare init"でバックアップ用のリポジトリ初期化して元の場へ戻り
"git push <送信先リポジトリ> <送信元ブランチ>:<送信先ブランチ>"でバックアップ.
           送信元ブランチと送信先ブランチが同じなら一つ書けば良い
"git clone 復元元リポジトリ" リポジトリを復元
"git remote add 別名 パス"でリポジトリパスを別名で登録
"git remote -v" 別名の一覧を表示
"git fetch リポジトリ" 他のリポジトリの履歴を取得しリモート追跡ブランチに保存
「リモート追跡ブランチ」 上流(共有)リポジトリの内容を取り込むためのブランチで
 リモート名/ブランチ名で自動生成される.これを自分のリポジトリにマージすればOK.
"git branch -r" リモート追跡ブランチを表示する
"git pull オリジン マスター" オリジンをマスターにマージ."fetch"と"merge"を一度に行う.
// ソフトウェアを配布しているサイトも「リポジトリ」と言う
「パッケージ」ソフトウェアの実行ファイル・ドキュメント・設定ファイルなどをアーカイブしたもの.
パッケージファイルの形式には "rpm" Red Hat形式 "deb" Debian形式 などがある
"deb"はUbuntu,Debian  "rpm"はCentOS, Red Hat などで採用されている。
公式リポジトリ:各ディストリビューション一式などが配布されているとこ
サードパーティリポジトリ:UbuntuならPPA,Japanesei Teamなど
"dpkg" debファイルのインストールに使われる事が多かった.
// apt-get オプション コマンド パッケージ名"
dpkgと違い依存性解決のインストールも自動で行ってくれる
"sudo apt-get install パッケージ名" パッケージのインストール
"sudo apt-get remove パッケージ名" パッケージのアンインストール(依存ファイルも消す)
             "-y" 確認しない
"sudo apt-get purge パッケージ名"  設定ファイルも含めた完全アンインストール
"apt-cache search 検索ワード" ネットワークから検索ワードでソフト類を探す
             "--name-only"  パッケージ名だけを検索対象にする
"apt-cach show パッケージ名" 詳細の表示
// SSH (Secure Shell) リモートマシンと通信するためのプロトコル
認証・暗号化の機能を持つためセキュリティを確保して接続できる.通常TCPの22番ポートを利用
"PuTTY" "Tera Term" windowsのSSHクライアント機能を持つターミナルエミュレータ
"ssh ログインユーザー名@宛先IPアドレス" sshコマンドによるリモートログイン
遠隔地とは 公開鍵認証によるユーザーの認証が必要だったり
// VirtualBoxとssh接続
"NAT" Network Address Translation プライベートIPアドレスを自動的に
    外部ネットワークで使用できるグローバルIPアドレスに変換する機能
"ポートフォワーディング" ホストOSからNATが効いている仮想OSのマシンへ接続するために
                         ポート番号を設定する

// プロセスとジョブ
「プロセス」 Linuxカーネルから見た処理単位
"ps" 現行プロセスの表示
   "PID" プロセスID "CMD"実行されているコマンド
   "TTY" ターミナル: ターミナルに接続していないデーモンは"?"表示
"ps xf" xオプは別のターミナルやデーモンも含めて現在のユーザーが実行中のを全部表示
        fオプは親子関係を表示
        aオプはLinuxシステム自体を管理するために動いているプロセスを表示
    uオプはCPU,メモリ占有など含めた詳細表示
「ジョブ」 シェルから見た処理の単位.コマンドラインの一つの行
           パイプで繋いだコマンドはプロセスはコマンドごとに生成されるが
      ジョブはコマンドライン全体で一つとなる.
  プロセスはシステム全体で一意のIDを持つが
 ジョブはシェルごとにジョブ番号を持つ.
"Ct-z"  コマンド途中停止=ジョブの一時停止
vimでノーマルモード中の場合もコマンドラインへ戻れる.GVIMならタスクバーへ収納
"jobs"  ジョブの一覧表示 "-l"プロセスIDも表示
"fg %ジョブ番号" ジョブをフォアグランド(アクティブ)にする.
"fg" 無印は"jobs"で+マークが付いているジョブをフォアグランドする
[バックグラウンド] ユーザーが対話的に操作できない状態のジョブの状態
    "Ct-z"するとジョブは一時停止になってしまうが"bg"は実行中のジョブを止めない
[フォアグランド] ユーザーが対話的に操作できる状態のジョブの状態(カレントジョブ)
"bg %ジョブ番号"  指定番号のジョブをバックグラウンドにする
"bg" カレントジョブをバックグラウンドにする.
"コマンド (引数) & " コマンド行の末尾に&を入れると初めからバックグラウンドで処理をする
" Ct-c" フォアグランドジョブの終了
"kill %ジョブ番号" バックグラウンドジョブの終了
"kill プロセスID"  プロセスを終了させる
killコマンドは直接プロセスを終了させると言うよりLinuxカーネルに
[シグナル]を送っている.無印の場合"Kill -TERM ID"みたいにTERMシグナルを送っている.
"kill -l" 利用可能なシグナル一覧を表示 "SIG"はシグナルに付く接頭辞.
終了処理があるのでユーザーは普通SIGKILLは指定しない.カーネルによる強制終了などで使われる.


// ヘルプ マニュアル
"コマンド --help" コマンドのオプションとして概要を表示させる.
"man コマンド" コマンドのマニュアル "man 番号 コマンド" セクション番号指定で調べる
"man man" manコマンドのマニュアル :セクション番号の説明とか
"man bash" バッシュ自体のマニュアル
"man -k キーワード" キーワードからマニュアルを探す


// info コマンド 最近のHelpシステム
"info コマンド" でコマンドを調べられる.無印で総合案内みたいなページ<dir>が開く.
<ノード> info系ドキュメントにおける項とか章みたいな単位.(ページと言うと画面単位みたいなので微妙)
         ノードは階層を持ち、一つの階層に複数のノードがあったり、その下にさらにノードがあったりする.
<top> 通常のinfoドキュメントにおける一番上のノード.さらに上にdirがある
<dir> 最上ノードに存在するinfoの総合案内的ページ
<Next> 次のノード(兄弟ノード,同階層ノード) <Up> 上のノード(親ノード,上階層)
"u" 上のノードへ "n" 同階層の次のノードへ "p" 兄弟間で前のノードへ
"]" 階層無関係に次のノードへ(末っ子なら親の弟へ ) "["階層無関係にノードを戻る
"Ct-v" 一画面下へ  "スペース" 一画面下へ行き、下端なら次のノードへ行く  
"At-V" 一画面上へ  "Back" "Dell" 一画面上へ行き、上端なら前のノードへ戻る
"t" Go to the top node of this document."d" Go to the main 'directory'node.<dir>
"Ct-n"  次の行に移動 "Ct-p"前の行へ "Ct-f" 一文字進む "Ct-b" 一文字戻る
"Ct-a" 行頭に移動 "Ct-e" 行末へ移動
"Tab" 次のリンクへカーソル移動  "Meta Tab(Shift TabとかAlt Tabとか環境依存)" 前のリンクへカーソル移動
"*"リンク "Enter" リンク先へ移動 "l" ノードの移動履歴を戻る