Linuxについて

・学習の意義
サーバー用、組込器用などの幅広い場所で使用されている。
Linuxの技術は長い時間をかけて多くのユーザーに検証された結果、大きく変更する必要がなくなっている(技術が枯れている)ため、一度習得すれば何年たっても使える。

・種類
RedHat系とDebian系が主流。

RedHat系
〇Red Hat Enterprise Linux
〇CentOS
〇Fedora
※執筆時点でCentOSのサポート終了

Debian系
〇Debian GNU/Linux
〇Ubuntu

・カーネルとディスリビューション
カーネルはOSの中核となるソフトウェア
ディスリビューションはカーネルに色々なソフトウェアを組み合わせて使いやすくしたもの。

・シェルとターミナル
シェルはLinuxのCLIを提供するソフトウェア
ターミナルは入出力の画面を提供するソフトウェア

・環境構築
VisualBoxをインストール
CentOSのisoをダウンロードし、VisualBoxで読み込み。
仮想環境上でOSをインストールする。

・ディレクトリを操作するコマンド
```linux:sample
コマンド[オプション][引数]
cd：ディレクトリを移動
pwd：カレントディレクトリを表示する
ls：ディレクトリの一覧を表示する
　　(ls *.html)：htmlを表示する
　　(ls z???)：zから始まり4文字で終わるファイル
ls -l：ファイルの詳細情報
ls -a：隠しファイルを含めた全てのファイルを表示
　　(隠しファイルは、「.ファイル名」で表示される)
ls -F：ファイル種別を表示する
mkdir：ディレクトリを作成する
mkdir -p：深いディレクトリを作成する際に一度に作成
rmkdir：ディレクトリを削除する(空のディレクトリが対象となる)
```

・コマンドの使い方を調べるコマンド
```linux:sample
<コマンド> --help：コマンドの使い方を調べる
man <調べたいコマンド名>：コマンドの使い方を調べる
man -k：キーワードから検索もできる
```

・ファイルを操作するコマンド
```linux:sample
cat：ファイルの中身を表示する
cat -n：行番番号を表示する
less：ファイルの中身をスクロール表示する(長いファイル)
touch：空のファイルを作成する
rm：ファイルを削除する (SHIFT＋DELETEに相当)
rm -r：ディレクトリの中のファイルやディレクトリもまとめて削除
rm -f：ファイルを削除する際に警告文を表示
rm -i：ファイルの削除前に確認する
mv：ファイルの移動、ファイル名を変更する
mv file file1：ファイル名を変更する場合、ファイル名を「file」から「file1」に変更。
mv file dir/：ファイルを移動する場合、ファイルを「root」から「root/dir」へ移動。
mv -i：上書き前に確認する
cp：ファイル・ディレクトリをコピーする(同じ名前のファイルがある場合、上書きしてしまうので注意)
cp -i：上書きする前に確認する
cp -r：ディレクトリをコピーする(オプションなしだと、ディレクトリをコピーできない)
```

別名を付けることを「リンクを張る」という(windowsで言うところのショートカット)
ハードリンク：1つのファイルの実体に複数の名前を付ける機能
シンボリックリンク：リンク先のパス名が書かれた特殊ファイル。リンク先がファイルの実体
```linux:sample
ln：リンクを張る(オプションなしだと、ハードリンク)
ln -s：シンボリックリンクを付けたい場合
　　   (長いパス名を省略したいとき、複数バージョンを共存させ最新を区別したいとき)
       シンボリックリンクの方が使う機会が多い

find：ファイルを検索する
find -name：ファイル名を指定してファイルを検索(例、find .. -name ReadMe.md -print)
            ワイルドカード＊を利用する時は""で囲う
find -iname：ファイルを検索する(ファイルの大文字小文字を区別しない)
find -type：ファイルの種類で検索
find -type f：通常のファイル
find -type l：シンボリックリンク
find -type d：ディレクトリ(例、find .. -type f ReadMe.md -print)
find -a：複数の検索条件を指定(省略可能)
         (例、find .. -type d -a -iname images -print)
```

・リダイレクト
```linux:sample
〇入力のリダイレクト：キーボードの代わりにファイルから入力する機能
　$ cat < /etc/hosts：/etc/hostsファイルを入力元にしてcatコマンドを実行
〇出力のリダイレクト：コマンドの実行結果を画面に表示するのではなくファイルに保存する機能
  $ ls > output.txt：lsコマンドの出力先をoutput.txtにして保存
〇エラー出力のリダイレクト：エラー結果を画面に表示するのではなくファイルに保存する機能
  $ ls /hoge 2> error.txt：lsコマンドの出力先をerror.txtにして保存

〇出力とエラー出力をまとめる
  まとめる場合は、出力をリダイレクトした後に「2>&1」と書く
  $ls //hoge > output.txt 2>&1

〇リダイレクトで追記する
  「>」でリダイレクト指定するとファイルを上書きする
  「>>」でリダイレクト指定するとファイルを追記する
  $echo Hello! >> output.txt
```

・/dev/null
```linux:sample
入力先として指定しても何も返さず、出力先として指定してもデータは消え何も表示されない、スペシャルファイル
入力時：コマンドのテストなどで入力を空にしたい時に使用
出力時：結果が大量にあり、結果を非表示にしたい時に使用
```

・パイプライン
```linux:sample
複数のコマンドを連携させる機能
コマンドの標準出力を別のコマンドの標準入力につなげる
$ls /bin | less
$ls /bin | grep systemd | less
```


・パーミッション
ファイルにはすべてオーナー(所有者)とグループ(所有グループ)が設定されており、権限管理されている
```linux:sample
-rwxr-xr-x
-：1文字目→ファイルタイプ
rwx：2~4文字目→オーナーのパーミッション
r-x：5~7文字目→グループのパーミッション
r-x：8~10文字目→その他ユーザーのパーミッション

パーミッションを設定
chmod [ugoa][+-=][rwx]<filename>
[ugoa]u:所有者、g:グループ、o:その他のユーザー、a:全ユーザー
[+-=]+:追加、-:削除、=:記述した権限にする
[rwx]

chmod 755 <filename>

管理権限(スーパーユーザー)で実行
sudo(switch user and do)
```

・ジョブとプロセス
```linux:sample
ps(process status)、プロセスコマンド
PIDがプロセスID、CMDが実行中のコマンド

auxオプション(-つけると別の意味になる)
```