Linuxの基礎入門（一）

みなさん、こんにちは、夏です。

私の知識（SRE DEVOPS）をみんなと共有していきます。日本語のレベルはまだまだですが、ブログを書くことで日本語のスキルを上げることができますし、知識を共有できるのでとても嬉しいです。新しい友達を作ることを楽しみにしています。よろしくお願いします。

# 概要
* ユーザー 
* ターミナル 
* シェルの紹介 
* コマンドの実行 
* 簡単なコマンド 
* タブキー補完 
* コマンドラインの履歴 
* bashのショートカットキー 
* ヘルプの使用法

## 1. Linux 基礎
### 1.1  ユーザータイプ
+ root ユーザーは、スーパー ユーザーとしても知られる特別な管理アカウントです。root はシステムをほぼ完全に制御し、システムにほぼ無制限の損害を与えることができます。必要な場合を除き、root としてログインしないでください。
+ 一般の (特権のない) ユーザーには制限された権限があります。ダメージを与える能力は比較的限定的。

### 1.2 端末（Terminal）
+ 端末 (英語: Computer Terminal) は、コンピュータシステムに接続された入出力装置であり、ホストの操作の出力を表示したり、ホストが必要とする入力を受け付けたりするために使用され、通常はコンピュータから遠く離れた場所にあります。 さまざまな機能に応じて、いくつかのカテゴリに分類できます。 一般的な端末には、モニター、キーボード、キット、プリンター、タイプライター、キットなどが含まれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/023f6b1a-1c5e-5bb9-5c51-15dcf77cf798.png)

+ テクノロジーの発展に伴い、コンソールと端末はもはや個別の物理デバイスではなく、統合され、キーボードやモニターに置き換えられています。 現在、コンピュータ コンソールと tty ターミナルは仮想概念であり、概念的には、キーボードとモニタは両方ともコンソールであり、tty です。 いつコンソールであるか、いつ tty であるかについては、その時点で何をしているかによって異なります。ここでの仮想とは、Linux オペレーティング システムでは、tty とコンソールがデバイス ファイルの形式で保持される (すべてがファイルである) という事実を指します。 特定のソフトウェアを使用してホストに接続すると、現在の接続によって占有されている端末デバイス ファイルが表示されます。これは、マシンの端末がアクティブ化され、使用中であることを意味します。
:::note info
tty
tty という言葉は Teletypes (テレタイプライター) から来ています。もともとはテレタイプライターを指し、プリンターのキーボードを使用してシリアル回線を通じて情報を読み取って送信するものです。その後、このものはキーボードとモニターに置き換えられました。今では端末と呼ぶ方が適切です。
:::
####  1.2.1 端子の種類
+ コンソールターミナル：　/dev/console
+ シリアルターミナル：　/dev/ttyS#
+ 仮想端末：　tty: テレタイプライター、/dev/tty#、n 個の tty が可能、Ctrl+Alt+F#
+ 疑似ターミナル:　pty: pseudo-tty、/dev/pts/# など: SSH リモート接続
+ グラフィカルターミナル:　startx、xwindows

#### 1.2.2 現在の端末デバイスを表示する
tty コマンドは現在の端末を表示できます
```bash:shell
[root@rocy8-1 ~]# tty /dev/pts/0
```
### 1.3 インタラクティブなインターフェース（Interactive interface）
インタラクティブインターフェイス: 端末を起動した後、インタラクティブアプリケーションを端末デバイスにアタッチします。
#### 1.3.1 対話型インターフェースの種類
+ GUI:グラフィカル ユーザー インターフェイス X プロトコル、ウィンドウ マネージャー、デスクトップ GNOME (C、グラフィック ライブラリ gtk)、KDE ​​(C++、グラフィック ライブラリ qt) XFCE (軽量デスクトップ)
+ CLI: コマンドラインインターフェース、シェルプログラム
#### 1.3.2 シェル(shell)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/49c2f7f6-fdca-1b20-cb01-16528b7b93c3.png)
+ シェルは Linux システムのユーザー インターフェイスであり、ユーザーがカーネル(kernel)と対話するためのインターフェイスを提供します。 ユーザーが入力したコマンドを受け取り、実行のためにカーネルに送信します。
+ シェルはLINUXコマンドインタプリタ（LINUX command interpreter）とも呼ばれ、シェル自体がプログラムです。 ユーザーが入力したコマンドラインを「コマンド名」と「パラメータ」に分解します。 次に、コマンド名に従って実行するプログラムを見つけ、実行したプログラムを初期化して、解析したばかりのパラメータをプログラムに渡して実行します。
+ シェルは、変数、関数、条件判断、ループなどの開発言語機能を提供する高級プログラミング言語です。
+ シェル自体はプログラムであるため、任意のユーザーが開発したさまざまなシェルに置き換えることができます。

#### 1.3.3 さまざまなシェル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/32d98488-b543-2f0e-bd55-a9719dc1106c.png)
+ sh: Steve Bourne
+ bash: Bourne-Again Shell, GPL, CentOS, and Ubuntu use the default. csh: C shell, C language style
+ ksh: Korn shell, AIX default shell zsh: MacOS default shell

#### 1.3.4 bash shell
GNU Bourne-Again Shell (bash) は、GNU プロジェクトの重要なツール ソフトウェアの 1 つであり、Linux の標準シェルでもあり、sh と互換性があります。
```bash:shell
#現在使用されているシェルを表示します
[root@rocy8-1 ~]# echo ${SHELL} 
/bin/bash

#現在システムで使用されているすべてのシェルを表示します。
[root@rocy8-1 ~]# cat /etc/shells /bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
```
### 1.4 ホスト名の設定
```bash:shell
#一時的に効果がある
//hostname NAME

#永続的な、CentOS7 および Ubuntu 18.04 以降をサポート
//hostnamectl set-hostname NAME

#例文：
[root@rocky8 ~]# hostname bj-yz-k8s-node1-100-10.mooreyxia.org

##注意:
// ホスト名の変更には root 権限が必要です
// ホスト名ではアンダースコアの使用はサポートされていませんが、水平線はサポートされています。文字、水平線、数字の組み合わせを使用できます。一部のソフトウェアでは、ホスト名に特別な要件があります。
// 一般に、ホスト名は組織の規定に従って設定され、通常は特定の意味を持ちます。

// ※ホスト名が間違っていると、一部のサービスが起動できない場合があります
// 例：
[root@rocky8 ~]# hostnamectl set-hostname centos8.3
[root@rocky8 ~]# systemctl restart postfix
Job for postfix.service failed because the control process exited with error code.
See "systemctl status postfix.service" and "journalctl -xe" for details.
```
### 1.5 コマンドプロンプト(command prompt)
+ Linux にログインすると、デフォルトのシステムコマンドプロンプトには個性がなく、運用環境とテスト環境を明確に区別できないため、誤操作が発生します。PS1 変数を変更することで、パーソナライズされたプロンプト形式を実装して、このような低レベルのエラーを回避できます。
```bash:shell
#例: デフォルトのプロンプト（"#"　→　管理者、"$"　→　一般ユーザー）
#Rockydefault prompt
[root@rocky86 ~]#

#Ubuntu default prompt 
root@ubuntu22:~#

echo $PS1 #現在のコマンドプロンプトを表示
[\u@\h \W]\$

#root ユーザーとしてホストにログインする場合、デフォルトのプロンプトは上記に対応する [\u@\h \W]\$ [root@rocky86 ~]#

#PS1 の値は一重引用符で囲む必要があります。二重引用符で囲むと、一部の置換文字が解析されません。
PS1='\e[31m[\u@\h \W]\$\e[0m'

#永久保存したい場合はファイルを書き込む必要があります
echo "PS1='\e[31m[\u@\h \W]\$\e[0m'">/etc/profile.d/env.sh 
source /etc/profile.d/env.sh

#PS1 変数の共通オプション
\d #Day、形式は「週、月、日」です。
\H #完全なホスト名。デフォルトのホスト名「localhost.localdomain」など。
\h #ホスト名の省略名。デフォルトのホスト名「localhost」など。
\t #24 時間制、形式は「HH:MM:SS」です。
\T #12 時間制、形式は「HH:MM:SS」です。
\A #24 時間制、形式は「HH:MM」です。
\@ #12 時間制、形式は「HH:MM am/pm」です。
\u #現在のユーザー名。 
\v #Bash のバージョン情報。 
\w #現在のディレクトリのフルネーム。
\W #現在のディレクトリの最後のディレクトリ。
\# #実行される最初のコマンド。
\$ #プロンプト。 root ユーザーの場合、プロンプトは「#」になり、一般ユーザーの場合、プロンプトは「$」になります。

#プロンプト形式の変更例
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\ [\e[0m\]\\$"

```
+ 例: CentOS システムでの永続保存プロンプト形式の実装

```bash
[root@rocky8 ~]# echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\
[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
[root@rocky8 ~]# cat /etc/profile.d/env.sh 
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\ [\e[0m\]\\$"
[root@rocky8 ~]# exit
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/a935980c-e34a-1665-3bc2-f3497c86a192.png)

+ 例: Ubuntu システムでの永続的な保存プロンプト形式の実装

```bash
jose@ubuntu20:~$  echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]'" >> .bashrc jose@ubuntu20:~$  tail -1 .bashrc 
PS1='\[\e[1;35m\][\u@\h \W]\$\[\e[0m\]'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/7d6da99a-3251-3469-d6bf-d66fc72ab93d.png)

今日はここで書くのをやめて、次回に続きを更新しましょう
おやすみ