---
# System prepended metadata

title: Linux
tags: [Ubuntu, Linux]

---

###### Tags: `Linux` `Ubuntu`
[TOC]
#	Linux

## 基本指令

#### ctrl + a 
##### 跳到開頭 

#### ctrl + e 
##### 跳到結尾

#### XX --help 
##### 在指令後方加上--help可以查看有哪些參數可用
```bash
cd --help
```

#### man <command> 
##### 在man後方加上某指令可以查看該指令用戶手冊
```bash
man mkdir
```
|    man後操作     |        功能        |
|:-----------:|:------------------:|
|    space    |        翻頁        |
|      q      |        離開        |

#### cd <folder name | /path/folder name> 
##### change directory 移動到某資料夾
```bash
cd Documents
cd /home/demo/Documents
```
#### cd .. 
##### 移動至上一層資料夾

```bash
cd ..
```
#### cd 
##### 直接回到home目錄
```bash
cd
```

#### pwd 
##### print working directory 顯示當前路徑

```bash
pwd
```

#### ls 
##### list directory contents 列出資料夾底下檔案
```bash
ls
```

#### ls -l 
##### 列出檔案詳細資料
```bash
ls -l
```

#### ls -a 
##### 列出所有包含隱藏檔案
```bash
ls -a
```


#### touch <file name> 
##### 創建檔案
```bash
touch demo.txt
```

#### rm <file name> 
##### remove 刪除檔案

```bash
rm demo.txt
```
rm就是叫電腦進行消除的動作；「r」表示消除指定目標中的所有一切；「f」代表「強制（force）」
#### rm -rf <file name>
```
rm -rf greenbox.yaml 
```
#### mkdir <folder name> 
##### make directories 創建資料夾

```bash
mkdir demo
```

#### mkdir -p <xx1/xx2/...> 
##### 建一個不存在的資料夾並在此資料夾再建資料夾
```bash
mkdir -p demo2/demo3/demo4
```

#### rm -rf <folder name> 
##### 強制刪除該資料夾包含底下的資料

```bash
rm -rf demo3
```

#### history 
##### 列出過去執行的指令
```bash
history
```

#### ip a 
##### 查看網路設置
```bash
ip a
```
## cat/more/less 區別

#### cat </path/filename>
##### 顯示文件內容到最後行
```bash
cat /etc/profile
```

#### cat -b </path/filename> 
##### 顯示文件內容到最後行並顯示行號
```bash
cat -b /etc/profile
```

#### cat -n </path/filename> 
##### 顯示文件內容到最後行並顯示所有行號(包含空行)
```bash
cat -n /etc/profile
```

#### cat <filename1> <filename2> 
##### 後面接兩個檔案檔名，可以依序顯示內容
```bash
cat test1.txt test2.txt
```

#### cat <filename1> <filename2> >> <filename3> 
##### 合併內容到新文件 
```bash
cat test1.txt test2.txt >> test3.txt
```

#### more <filename> 
##### 顯示文件內容一個視窗的行數
```bash
more syslog
```


|    more後操作     |        功能        |
|:-----------:|:------------------:|
|      b      |        上頁        |
|      f      |        下頁        |
|    space    |        下頁        |
|    enter    |    一行一行顯示    |
|      q      |        離開        |


#### more -<number> <filename> 
##### 顯示number行數
```bash
more -10 syslog
```

#### less <filename> 
##### 顯示文件內容一個視窗的行數(不顯示目前%)
```bash
less syslog
```

| less後操作  |        功能        |
|:-----------:|:------------------:|
|      b      |        上頁        |
|      f      |        下頁        |
|    space    |        下頁        |
|    enter    |    一行一行顯示    |
|      q      |        離開        |
|      g      |      到第一頁      |
|      G      |      到最後頁      |
| /搜索關鍵字 |     關鍵字反白     |
|      n      | 只翻有關鍵字的頁面 |


#### less -m <filename> 
##### 顯示文件內容一個視窗的行數(顯示目前%)
```bash
less -m syslog
```
#### less -M <filename> 
##### 顯示文件內容一個視窗的行數(顯示目前%與行數)
```bash
less -M syslog
```

#### head <filename> 
##### 顯示檔案內容前幾行(預設10行)
```bash
head syslog
```
#### head -<number> <filename> 
##### 顯示檔案內容前number行
```bash
head -15 syslog
```
#### tail <filename> 
##### 顯示檔案內容後幾行(預設10行) 
```bash
tail syslog
```
#### tail -<number> <filename> 
##### 顯示檔案內容後number行
```bash
tail -3 syslog
```
#### tail -f <filename> 
##### 監控檔案變化
```bash
tail -f syslog
```
#### ps -ef
##### 檢查處理程序狀態
```bash
ps -ef
```
### ps -aux
顯示所有程序與狀態
-A ：所有的處理程序均顯示出來，與 -e 具有同樣的效用
-a ： 顯示現行終端機下的所有處理程序，包括其他使用者的處理程序
-u ：以使用者為主的處理程序狀態
x ：通常與 a 這個參數一起使用，可列出較完整資訊


## 權限 (Mode)
#### drwxrwxrwx
#### d rwx rwx rwx

#### d: 檔案類型
##### rwx: 對當前User擁有的權限
##### rwx: 對Group用戶擁有的權限
##### rwx: 對Other用戶擁有的權限

##### r: Read讀取
##### w: Write寫入
##### x: Excute執行
##### -: 無

|          | 讀取 | 寫入 | 執行 | 無  |
| -------- |:----:|:----:|:----:|:---:|
| 一般表示 |  r   |  w   |  x   |  -  |
| 數字表示 |  4   |  2   |  1   |     |

**e.x.**
#### r - - : = 4
#### rw- : = 6
#### rwx : = 7

#### chown <option> <使用者:群組> <filename> 更改擁有者    
#### <option>
**-R, --recursive**：遞歸地處理，將指定目錄下的所有檔案和子目錄一併處理

#### chmod <option> <mode> <filename> 更改權限
##### +: 增加權限
##### -: 減少權限
##### u: User
##### g: Group
##### o: Other 
##### a: 所有用戶

```bash
chmod o+r test.txt
```	

```bash
chmod 766 test.txt
```	
	
#### chown <options> <user>:<group> file 更改檔案擁有者與群組
-R 可以連目錄下的所有次目錄或檔案同時更改擁有者
```bash
chown -R etcd:etcd /var/lib/etcd-data-new
```
	
## 程式安裝
##### 三種安裝方式

#### 1. apt-get 安裝
##### 以安裝net-tools為例
```bash
sudo apt-get install net-tools 
```	

#### 2. binary 安裝
##### 先安裝curl
```bash
sudo apt-get install curl
```	
##### 安裝 <kubernetes>(https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux)
```bash
curl -LO https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl
```	
##### 改成可執行權限
```bash
chmod +x kubectl
```	

##### 測試kubectl能否執行
```bash
./kubectl --help
```	

##### mv <filename> <path> 移動檔案到路徑底下
```bash
sudo mv kubectl /usr/local/bin/
```	

##### 測試kubectl能否執行
```bash
kubectl --help
```


#### 3. 源碼安裝
<vim網站>(https://www.vim.org/git.php)
<vim download zip>(https://github.com/vim/vim)
##### 到下載位置
```bash
cd Downloads/
```	
##### 解壓縮 vim-master.zip
```bash
unzip vim-master.zip
```
##### 進入vim-mastery資料夾
```bash
cd vim-master/
```	
##### 安裝configure設定
```bash
sudo apt-get install build-essential
```	
##### 觀察有無出錯
```bash
./configure
```	
##### 安裝缺少的套件
```bash
sudo apt-get install libncurses5-dev
./configure
```	
##### 編譯
```bash
make
```	
##### 安裝 vim
```bash
sudo make install
```	

## SSH
<相關參考連結>(https://hiskio.com/courses/609/lectures/32643)
##### 檢查ssh服務
```bash
ps -ef | grep ssh
```
#### 安裝ssh
```bash
sudo apt-get install openssh-server
```

#### 用戶端連接linux
#####  ssh <username>@<server ip>
```cmd
ssh demo@192.168.56.101
```
#### 離開SSH按 Ctrl + D

#### ssh 公鑰&私鑰
##### 在windows用戶端可以用git bash
##### 輸入 ssh-keygen 產生公鑰&私鑰
##### 預設儲存路徑: /c/Users/xxx/.ssh/id_rsa
```git bash
ssh-keygen
```
##### 自訂金鑰名稱
```git bash
ssh-keygen -C "rodes5292@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/fixer2/.ssh/id_rsa): 填路徑與名稱
```
##### 查看公鑰
```git bash
cd .ssh
cat id_rsa.pub
```
##### 傳送公鑰到server
ssh-copy-id <username>@<server ip>
```git bash
ssh-copy-id demo@192.168.56.101
```
```git bash
ssh-copy-id -i id_rsa.pub demo@192.168.56.101
```
##### 之後可以不用輸入密碼直接ssh到server

#### ssh配置
##### 在.ssh資料夾底下建立config
##### config內容
```txt
Host ubuntu
	HostName 192.168.56.101
	User demo
	IdentityFile ~/.ssh/id_rsa
```
##### 之後可以直接輸入ssh xxx 連線
```txt
ssh ubuntu
```
## SCP 檔案傳輸
scp <source file name> <username>@<destination host>:<destination folder>
```git bash
scp rufus-3.15.exe demo@192.168.56.101:/home/demo
```
#### scp -v
##### 傳輸詳細資料
```git bash
scp -v rufus-3.15.exe demo@192.168.56.101:/home/demo
```
#### scp -p 
##### 傳送速度
```git bash
scp -p rufus-3.15.exe demo@192.168.56.101:/home/demo
```
#### scp -C
##### 加速傳輸速度(先壓縮->傳送->解壓)
```git bash
scp -C rufus-3.15.exe demo@192.168.56.101:/home/demo
```

#### 檔案複製回來
##### scp (<username>@<destination host>:<destination folder>) <local file name> 
```git bash
scp demo@192.168.56.101:/home/demo/rufus-3.15.exe D:/rufus_new.exe
```
    
## 輸出log整理
### wc -l
```
command |wc -l
```
### head
#### -n <取出筆數>
```
command |head -n 1
```
### sort
#### -k<以第幾欄來排序>
```
command |sort -k3
```
#### -nr 
反向排序
```
command |sort -nr 
```
### awk
#### '{print $<第幾欄> "," $<第幾欄>}'
變更輸出格式
```
command |awk '{print $2 "," $1}'
```
#### 'NR > <從第幾列開始取值>'
```
command |awk 'NR>1'
```