Linuxを基本からまとめてみた【入門】

## 1. Linuxとは？

- UNIXという初期に生まれたOSに対して、無料（オープンソース）で提供されたOSの１つ
- Linuxでは、ソフトをインストールする際に『パッケージ管理機能』を使う

## 2. カーネル・シェル（bash, tcsh） 

(1) Linuxの構造
- 安全のため、カーネル(核)はシェルで包まれている
※ カーネル:OSの核(指示)・・・システムコール、デバイスドライバ、プロセス管理
※ シェル:命令をカーネルに伝える

(2) シェルの種類
sh: 基本的、速いが機能が少ない
bash: 多くのLinuxで標準搭載
tcsh: BSD系OSでは標準だが、シャルスクリプトが苦手

(3)環境設定ファイル(bash)

『アクセス』⇨『/etc/profile』システム（ユーザー）共通の設定ファイル ⇨
『.bash_profile』ユーザー固有の設定ファイル(bashrcを呼ぶ) ⇨ 
『.bashrc』ユーザー固有の設定ファイル(簡単な設定はbashrcに書くのがセオリー) ⇨
『bash終了』

## 3. ディレクトリ構造

(1) Linuxのディレクトリ構造

ディレクトリ(Linux) = フォルダ(Windows)
```
/
├─ home
   ├─ a(user):カレントディレクトリ(current directory)
      ├─ .base_logout
      ├─ .bashrc
      ├─ .motd_shown
```
(2) ディレクトリ操作のコマンド
```
pwd: カレントディレクトリへのパス
ls: カレントディレクトリ下のファイル・ディレクトリの表示
cd: カレントディレクトリの移動
```

(3) ディレクトリ構造

```
├─/bin :OSが正常に動作するための実行ファイル
├─/boot　:システムの起動に必要なファイル
├─/dev　:ハードウェア機器を表すファイル
├─/etc　:設定ファイル
├─/home　:ユーザーのホームディレクトリ
├─/lib　:OSに必要なライブラリファイル
├─/media　:外部の記憶媒体をマウント(自動)
├─/mnt　:外部の記憶媒体をマウント(手動)
├─/opt　:追加のアプリケーションがインストール
├─/proc　:OSのシステムをコントロール
├─/root　:rootアカウントのホームディレクトリ
├─/sbin　:ルートユーザーのみ実行できるプログラム
├─/sys　:OSの現在の状況に関する情報
├─/usr　:全ユーザーが共通して利用するプログラムのデータ
├─/var　:システム運用中に生成、後から削除されるデータ
```
## 4. 基本コマンド

(1) ディレクトリ操作のコマンド

```
pwd: カレントディレクトリへのパス
```
```
ls: カレントディレクトリ下のファイル・ディレクトリの表示
ls-l: ファイル権限の表示
ls-a: 隠しファイルも表示
```
```
cd: カレントディレクトリの移動
cd..: 1つ上のディレクトリに移動
cd/: 1番上のディレクトリに移動
cd〜: ホームディレクトリに移動
```

(2) ファイル操作のコマンド
```
touch: ファイルの作成
```
```
vim: ファイルの編集
```
```
Esc: ノーマルモード
I: 編集モード
 : コマンドモード　　wq: 上書き終了　q!: 強制終了
```
``` 
cp: ファイルのコピー
mv: ファイルの移動（名前の変更可能）
rm: ファイルの削除
```
(3)パイプライン
2つ以上のコマンドを連結できる(左から右に結果を渡す)
- lsの出力をgrepに渡す
- printenv(環境変数)の出力をgrepに渡し、tailに渡す
```
フィルタ
head: 先頭
tail: 末尾
grep: 文字列を含む行の検索
```
(4)リダイレクト
出力結果を書き込める

lsの出力をtext3.txtに書き込む
```
ls > text3.txt
cat text3.txt
```
lsの出力をtext3.txtに末尾に書き込む
```
ls >> text3.txt
cat text3.txt
```

## 5. シェルスクリプト（.shファイル）

(1)シェルスクリプトの基本
コマンドをまとめて一括で実行するために、.shファイルを用意する

①test.shというファイルを作成する
```
vim test.sh
```
②ファイル権限を実行可能(+X)にする
```
chomd +X test.sh
```
③実行結果
```
./test.sh
```
```
# : コメントアウト
echo: 画面表示
```
(2)変数とargs

① test.shというファイルを作成する

```
vim test.sh
```
②実行結果

```
./test.sh 1 10 100
```
(3)caseとfor

条件分岐(case)と繰り返し(for)も使用可能
① test.shというファイルを作成する

```
vim test.sh
```
②実行結果

```
./test.sh
```
## 6.パーミッションと管理者権限（chmod, sudo）

(1)パーミッション(権限)
ファイルには9つのアクセス情報が含まれる

{ r: 読み込み w: 書き込み x: 実行}
　　　　　　　　×
{ 管理者{root} グループ ユーザー（本人）}

```
ls -l
-rw-r--r--r 1 
(パーミッション)
```

(2)chmod: パーミッションを変更(グループごとに2進数で設定)

```
chmod 755 test.txt
ls -l
```
(3) 管理者権限(super user)

多くの作業には管理者権限が必要になる

```
/
├─ home
   ├─ user1:ユーザーのアクセス範囲
```
{ 起動/停止　ユーザー追加　ソフトウエアインストール }

sudo: 一時的に管理者権限で実行する
```
sudo apt-get install xrdp
```
su -: 管理者ユーザーでログインする
```
sudo su -
```

## 7.リモート接続（SSH, Xサーバ）

- なぜリナックスを使うのか？ ⇨ 軽い・安い・安定 → サーバに最適
- サーバ管理は遠隔でやりたい ⇨『SHH』『Xserver』が遠隔操作に必要

(1)リモート操作
- SHH(Secure Shell):安全に遠隔操作ができる
- Xserver:GUIで操作できるシステム
- FTP:リモートでファイル操作ができる

## 8.ビルド（gccコンパイル・リンク）
(1)ビルドとコンパイル
- プログラミング言語は『ビルド』して初めて使えるようになる

```what's.build
コンパイル　⇨  リンク
```
- Linuxではコンパイル用コマンドを自分で作成する必要がある

(2)GCC(C言語コンパイラ)
Linuxでよく使われるvimによる『コンパイル（リンク）⇨ 実行』方法

①GCC(コンパイラ)をインストール
```
sudo apt-get install gcc
```
②vimよるファイル編集
```
vim test.c
```
③実行ファイルtest.outを作成(コンパイル)
```
gcc -o text.out test.c
```

④実行結果
```
./test.sh
```

## 9.プロセス・スレッド・ジョブスケジューラ

プロセスとスレッドの違い

- プロセス: 実行中のプログラム　自分専用のメモリ空間が必要
- スレッド: プロセスの中の実行単位　独立して実行可能

(1)プロセス管理
- ps:現在稼働しているプロセスを表示
```
ps
```
- top:リアルタイムで稼働しているプロセスを表示
```
top
```
(2)ジョブ
大量の計算を流す場合、ジョブスケジュールで管理する

{プロセス:Linuxから見た処理の単位　ジョブ：シェルから見た処理の単位}

job -l:ジョブを表示
```
jobs -l
```




## 参考サイト
[【丁寧に学ぶLinux入門】　①Linuxとは？　ディストリビューション（Ubuntu　RedHat　CentOS　Devian）](https://www.youtube.com/watch?v=UF0iSxHQ4OU)
[【丁寧に学ぶLinux入門】　③カーネル・シェル（bash, tcsh）](https://www.youtube.com/watch?v=rW_3IdBvVq0)
[Linuxディレクトリ構造を完全解説！](https://www.youtube.com/watch?v=bzqrlef15wI&list=WL&index=1)
[【丁寧に学ぶLinux入門】　④ディレクトリ構造](https://www.youtube.com/watch?v=l89MQINU6Ko)
[【丁寧に学ぶLinux入門】　⑤基本コマンド　（ディレクトリ表示　ファイル操作　パイプライン　リダイレクト）](https://www.youtube.com/watch?v=kQDCS1D3nyk)
[【丁寧に学ぶLinux入門】　⑥シェルスクリプト（.shファイル）](https://www.youtube.com/watch?v=7XNmLlWVG7I)
[【丁寧に学ぶLinux入門】　⑧リモート接続（SSH, Xサーバ）](https://www.youtube.com/watch?v=S5911IlPDfA)
[【丁寧に学ぶLinux入門】　⑨ビルド（gccコンパイル・リンク）](https://www.youtube.com/watch?v=-XhwohpwRAI)
[【丁寧に学ぶLinux入門】　⑩プロセス・スレッド・ジョブスケジューラ](https://www.youtube.com/watch?v=IS-SNffd5ak)