## crontab
參考資料 : https://linux.vbird.org/linux_basic/centos7/0430cron.php
* -u :只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab 工作排程;
* -e :編輯 crontab 的工作內容
* -l :查閱 crontab 的工作內容
* -r :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯。

## screen
參考資料 : https://ithelp.ithome.com.tw/articles/10191930
https://hackmd.io/@NCUmsplab/Bk6BsFP3D
* screen -S {screenName}: 幫 screen 命名
* screen -ls :查看所有在背景執行的screen
* screen -r 3966559 :載入編號為 3966559 的 screen
* Ctrl + a 與 d :將screen放到背景執行
:::spoiler
```
說明
-c file
使定使用的設定檔(預設為 $HOME/.screenrc)
-d [pid.tty.host]
強制將指定的 screen 工作環境卸離
-L
開啟自動紀錄功能
-ls 或 -list
列出目前所有執行中的 screen 工作環境
-r [pid.tty.host]
重新連接執行中的 screen 工作環境
-R
重新連接最近卸離的 screen 工作環境
-U
以 UTF-8 模式執行
-wipe [match]
將廢棄的 screen 工作環境清除
screen 操作指令表:
screen 參數
說明
Ctrl + a 與 c
建立新 screen 視窗
Ctrl + a 與 Ctrl+ a
切換至上一個 screen 視窗
Ctrl + a 與數字鍵 0 到 9
切換至指定編號的 screen 視窗
Ctrl + a 與 n
切換至下一個的 screen 視窗
Ctrl + a 與 p
切換至下一個的 screen 視窗
Ctrl + a 與 w
列出目前所有的 screen 視窗
Ctrl + a 與 "
列出目前所有的 screen 視窗,並可用上下鍵選擇要切換的設窗
Ctrl + a 與 k
關閉目前的 screen 視窗
Ctrl + a 與 d
卸離 screen 工作環境
Ctrl + a 與 Esc鍵(或 Ctrl + a 與 [)
進入複製模式(copy mode),可用方向鍵操作捲軸,或用 / 與 ? 來搜尋,按下空白鍵開始選取要複製的內容,選取完成後再按下第二次空白鍵,即可複製,隨後使用 Ctrl + ] 可貼上複製的內容。
Ctrl + a 與 S
將畫面分割成上下兩個區域
Ctrl + a 與 Q
關閉分割畫面
Ctrl + a 與 Tab鍵
切換分割畫面
Ctrl + a 與 t
顯示目前系統的時間與負載狀況
Ctrl + a 與 a
送出 Ctrl + a
Ctrl + a 與 ?
顯示說明
Ctrl + a 與 v
顯示版本資訊
Ctrl + a 與 x
鎖定 screen 螢幕
Ctrl + a 與 H
開啟或結束 screen 紀錄功能
Ctrl + a 與 C
清除 screen 視窗中的內容
Ctrl + a、D 與 D
強力卸離,卸離 screen 工作環境之後,直接登出
Ctrl + a 與 Ctrl+ g
視覺化鈴聲(visual bell)切換
Ctrl + a 與 i
顯示目前 screen 視窗的資訊
Ctrl + a 與 l
重繪目前 screen 視窗的內容
```
:::
## netstat -tlnp|grep 8778
> OSError: [Errno 98] error while attempting to bind on address ('140.115.70.218', 8778): address already in use
>

# linux 權限相關
## linux 更改主機名稱
sudo hostname {{slurm-login}}
sudo hostnamectl set-hostname 新的主機名稱
https://magiclen.org/linux-change-hostname/
## linux chmod 設定存取權限
- 777 : 讓任何使用者可以讀與寫入
- -R: 一次讓所有子物件都有相同的權限設定

## linux chown 更改檔案擁有者
sudo chown 901:901 /etc/munge/munge.key

# linux 升級 Ubuntu 版本
參考資料: https://www.kwchang0831.dev/dev-env/ubuntu/upgrade-from-20.04-to-22.04
:::spoiler
> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
> sudo apt update -y && sudo apt upgrade -y
> sudo apt dist-upgrade
> sudo apt autoremove
安裝 **updrate-manager-core** 套件
> sudo apt install update-manager-core
> sudo reboot
> sudo do-release-upgrade --check-dist-upgrade-only
> sudo do-release-upgrade
> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
> sudo apt update -y && sudo apt upgrade -y
> sudo apt --purge autoremove
> sudo apt autoclean
:::
# linux 儲存空間相關
## 查看該目錄下「第一層」資料夾的用量
```
du -h --max-depth=1 /workplace/zyxu
```
- 這會列出 /workplace/zyxu 底下每個資料夾的大小,方便你抓出佔用空間的元兇。
## 查看資料夾大小:```du -sh```
• `du`:disk usage(磁碟使用量)
• `-s`:summary,僅顯示總和
• `-h`:human readable,以 KB/MB/GB 顯示更直觀
## 查看已掛載檔案系統的磁碟使用情況:```df -h```

```linux=
# 查看根目錄(/)下 使用空間前20大的檔案位置
du -ahx / | sort -rh | head -n 20
```
```linux=
nlplab@as-1:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2318
loop1 7:1 0 87M 1 loop /snap/lxd/29351
loop2 7:2 0 38.8M 1 loop /snap/snapd/21759
sda 8:0 0 1.7T 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 1.7T 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 1.7T 0 lvm /
sdb 8:16 1 0B 0 disk
sr0 11:0 1 1024M 0 rom
```
## 查看記憶體使用情況: ```nvidia-smi```

## 查看 memory 大小: ```free -h```
https://pin-yi.me/blog/other/linux-clear-swap/

* Mem:記憶體的使用資訊
* Swap:交換空間的使用資訊
* total:系統總共的可用實體記憶體大小
* used:已被使用的實體記憶體大小
* free:還剩下多少可用的實體記憶體
* shared:被共享使用的實體記憶體大小
* buff/cache:被 buffer 和 cache 使用的實體記憶體大小
* available:可被 應用程式 使用的實體記憶體大小
## 清除 Swap 使用空間
> [!Note] 清除 Swap 使用空間
> sync
> swapoff -a && swapon -a
# linux 使用者相關
## linux 新增使用者
https://blog.gtwang.org/linux/linux-useradd-command-tutorial-examples/#google_vignette
```linux=
useradd test2 -p test2 -d /home/test2 -u 1302 -s /bin/bash
```
## linux 修改密碼
passwd test2
## linux 刪除使用者
userdel -r test2
## linux 查看使用者id
https://officeguide.cc/linux-id-command-tutorial-examples/
```linux=
# 查詢目前使用者的帳號 ID 與各群組 ID 資訊
id
```
> uid=1600(zyxu) gid=1600(zyxu) groups=1600(zyxu
```linux=
# 查看所有使用者
cat /etc/passwd
```
### 修改使用者 uid 與 gid
```linux=
usermod -u 1600 zyxu
groupmod -g 1600 zyxu
```
# NFS(網絡文件系統)共享
可以讓不同機器存取同個資料夾
### 使用 NFS(網絡文件系統)共享
* 在 **sm-1**(要共享的主機)上設定:
* 安裝 NFS 服務端 : ```sudo apt install nfs-kernel-server```
* 配置要共享的目錄 : ```sudo nano /etc/exports```
* 輸入: /llm_model 140.113.30.219(rw,sync,no_subtree_check)
:::info
* /llm_model: 要共享的資料夾目錄。
* 140.113.30.219: 要共享的主機IP
* rw: 允許讀寫。
* sync: 確保寫入操作立即同步到磁盤。
* no_subtree_check: 避免子目錄檢查,提升性能。
:::
* 重新啟動 NFS 服務 :
```
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
```
* 檢查 NFS 共享狀態 : ```sudo exportfs -v```

* 在其他台主機上設定:
* 安裝 NFS 客戶端: ```sudo apt install nfs-common```
* 掛載共享目錄 : ( 140.113.30.218為 **sm-1** 的 IP )
```
sudo mkdir -p /llm_model
sudo mount 140.113.30.218:/llm_model /llm_model
```
* 驗證掛載 使用 ```df -h``` 確認共享目錄是否成功掛載:```df -h```
* 永久掛載 : 在 ```vi /etc/fstab``` 中添加:
```
140.113.30.218:/llm_model /llm_model nfs defaults 0 0
```
# NAS 掛載方法
更新 nas ip
```bash=
sudo umount -l /workplace
vi /etc/fstab
sudo mount -a
```
## 相同區域網域下:
```
# Linux 掛載 NFS 分享
sudo mount -t nfs NAS_IP:/export/path /mnt/point
sudo mount -t nfs 140.113.30.206:/volume1/homes /workplace
```
輸入:
```
vi /etc/fstab
```
之後加上
```
140.113.30.220:/volume1/homes /workplace nfs defaults 0 0
140.113.30.206:/volume1/homes /workplace nfs defaults 0 0
```
## 不同區域網域下
讓不同的機器能連結到固定ip的NAS
```
sudo mount -t cifs //140.113.30.220/homes /workplace -o username=NAS帳號,password=NAS密碼
```
你的指令
```bash
sudo mount -t cifs //NAS_IP/share /workplace -o username=帳號,password=密碼,vers=3.0,iocharset=utf
```
**只會在此開機階段有效**,**重開機後就會自動消失(解除掛載)**。
### 為什麼?
- mount 指令直接掛載(不論 nfs/cifs/ext4 都一樣),只是「暫時」的。
- Linux 系統每次開機都會重新建立掛載點,必須靠 `/etc/fstab` 來維持永久掛載設定。
- 除非有寫進 systemd 自動掛載服務、crontab 或桌面自動掛載軟體,否則手動 mount 只在這次開機有效。
## 如何「開機自動掛載」?
**要讓檔案系統每次自動掛載,請編輯 `/etc/fstab` 加入一行設定:**
1. 用 sudo 權限編輯 `/etc/fstab`
```bash
sudo nano /etc/fstab
```
2. 追加一行(將以下資訊根據實際情況改掉):
```
//NAS_IP/share /workplace cifs username=帳號,password=密碼,vers=3.0,iocharset=utf8 0 0
```
- iocharset 用 utf8 沒錯!(最後不要打成 utf)
- 若有安全顧慮,密碼區塊建議寫成 credentials=/path/to/你的密碼檔 ,參見下方補充
3. 儲存離開
4. 重新掛載(驗證語法沒打錯):
```bash
sudo mount -a
```
## 補充:密碼隱私寫法
不要在 fstab 直接寫明密碼,可用 credentials 檔:
建立一個檔案 `/home/你的用戶/.nas-cred`:
```
username=你的帳號
password=你的密碼
```
然後 fstab 寫:
```
//NAS_IP/share /workplace cifs credentials=/home/你的用戶/.nas-cred,vers=3.0,iocharset=utf8 0 0
```
**設檔案權限避免其他人讀到:**
```bash
chmod 600 /home/你的用戶/.nas-cred
```
## 小結
- 用 mount 指令手動掛載,重開機就會消失。
- 寫進 /etc/fstab,重開機自動掛載(若掛載失敗不用緊張,會顯示開機警告)。
- 推薦用 credentials 檔案寫帳密,提高安全性。
- 語法建議用 iocharset=utf8(不要少 8)。
如需範例或特殊參數(如 nofail、自動絡斷重連等),再告知你的需求即可!