<style>
.txt_center{
text-align: center;
}
.pic_center{
display:flex;
justify-content: center;
}
.red_text{
color: #ff2200
}
</style>
# Linux 常用語法
:::warning
如果怕把系統搞壞, 建議先在虛擬機上的系統測試, 並再測試之前建立快照 !!!
:::
## Scp 傳送檔案
:::spoiler
- 檔案
```script
scp 來源檔案路徑 帳號名稱@IP:/目的地路徑
```
- 目錄
```script
scp -r 來源資料夾 帳號名稱@IP:/目的地路徑
```
:::
## find 找檔案
:::spoiler
```script
sudo find ~ -name '檔名' -mtime -'從現在起幾天前變更的檔案'
```
範例: 找副檔名為 <span class="red_text">*.ods</span> 的結果
```script
sudo find ~ -name *.ods -mtime -150
```
:::
## 查看硬體相關
### 查看系統版本
```script
lsb_release -a
```
### 查看硬體狀態
- 檢查SSD
```script
sudo apt install nvme-cli
sudo nvme smart-log /dev/nvme0
```
### 查看主機板
:::spoiler
```script
# 查看可以查詢的硬體參數
sudo dmidecode -t -h
```
```script
sudo dmidecode -t 2
```
:::
### 查看 CPU
- 不需要 sudo 權限
:::spoiler
```script
# 列出CPU數量
cat /proc/cpuinfo | grep "^physical id" | sort | uniq | wc -l
```
```script
cat /proc/cpuinfo | grep "cpu cores"
```
```script
lscpu
```
```script
htop
```
[參考連結](https://www.ltsplus.com/linux/linux-list-cpu-number-cores-number)
[參考連結](https://www.ltsplus.com/linux/linux-get-cpu-info)
:::
### 查看記憶體 (只查RAM有多少)
- 不需要 sudo 權限
:::spoiler
```script
free
```
```script
free -m
```
```script
cat /proc/meminfo
```
:::
### 查看硬碟使用量
:::spoiler
```script
df -h
```
```script
lsblk
```
:::
## 查看目錄大小
```script
# 目錄總體容量大小
du -hs 目錄
```
```script
# 目錄中個別容量大小
du -h 目錄
```
## 查看目錄檔案並做排序顯示
```script
ll -h --sort=size
```
## Screen
一般的 Terminal 只要關閉, 就會真的被關掉.
透過 Screen 開啟的終端機不會發生這樣的狀況,
需透過指定方式`Ctrl+A & Ctrl+D`關閉, 或電腦重新啟動才會關閉.
:::spoiler
- ### 顯示所有screen
```script
screen -ls
```
- ### 創立新視窗
```script
screen -S name
```
- ### 儲存當前狀態後,才關閉視窗
```
Ctrl+A 然後 Ctrl+D
```
- ### 直接關閉視窗
```
Ctrl+D
```
- ### 返回screen
```
screen -r name
```
- ### 刪除screen
```
screen -S name -X quit
```
- ### 取得screen控制權
```
screen -Dr
```
:::
## nohub
類似 screen, 在背景執行程序
背景執行程序, 將程序輸出訊息存在 .log, 錯誤訊息存在 .err
```script
nohup program_script > progress.log 2> progress.err &
```
將上筆執行程序的紀錄儲存
```script
echo $! > save_pid.txt
```
關閉執行程序
```script
kill -9 $(cat save_pid.txt)
```
## 查看程序執行時間
```script
ps -p 要查詢的pid -o pid,cmd,etime,uid,gid
```
## 使用者權限相關
### 建立使用者
:::spoiler
```script
# 建立使用者
sudo useradd -ms /bin/bash 使用者
# 設定密碼
sudo passwd 使用者
```
:::
### 修改使用者 shell 模式
```shell script
chsh -s /bin/bash 使用者
```
### 移除使用者
```script
sudo userdel -rf 使用者
```
### 查看屬於哪個群組
:::spoiler
```script
groups
```
```scrpit
groups 要查詢的使用者
```
:::
### 建立群組
```script
sudo groupadd 群組名稱
```
### 加入群組
<div class="txt_center red_text">
如果還是無法取得權限的話, 登入再登出即可
</div>
```script
sudo adduser 使用者 群組
```
### 退出群組
```script
sudo gpasswd -d 使用者名稱 群組名稱
```
### 查看目標權限
:::spoiler
- 檔案
```scrpit
ls -l file
```
- 資料夾
```scrpit
ls -dl folder
```
:::
### 修改檔案所屬群組
```script
chgrp 將目標改成屬於哪個群組 要被改的檔案目標名稱
```
### 修改讀取檔案權限
<div class="pic_center">
<img src="https://i.imgur.com/fyoGUYf.png">
</div>
:::info
u = 擁有者
g = 群組
o = 其他
a = 全部
加上權限 +
移除權限 -
設定權限 =
:::
:::spoiler
```script
# 使用方式
chmod 權限設定 被設定的目標
```
```script
# 將目標的群組權限加上寫入權限
chmod g+w 被設定的目標
```
```script
# 將目標的其他權限移除執行權限
chmod o-x 被設定的目標
```
```script
# 將目標的擁有者權設定全開
chmod u=rwx 被設定的目標
```
```script
# 將所有群組的執行權限移除
chmod a-x 被設定的目標
```
:::
### 使用root權限
1.透過 sudo
```script
sudo su
```
2.設定 root 密碼
```script
sudo passwd root
```
## 查詢環境變數
```script
env
```
## 查看安裝的套件
查看所有安裝的套件
```script
sudo dpkg -l
```
查看指定的套件
```script
sudo dpkg -l | grep ${套件名稱}
```
## 查看 IP
```script
ip a
```
或
```
hostname -I
```
### 補充文件
[Linux 權限補充](https://statistics.berkeley.edu/computing/unix-permissions)
[Linux 權限補充, 有講到參數含意](
https://www.linux.com/training-tutorials/how-manage-file-and-folder-permissions-linux/)
[Linux 權限補充(鳥哥)](http://linux.vbird.org/linux_basic/0210filepermission/0210filepermission.php)
###### tags: `Linux` `Ubuntu`