# Linux Ubuntu入門使用筆記
## 版本查看
```
查看作業系統
lsb_release -a
查看顯卡型號
nvidia-smi -L
CUDA toolkit版本
nvcc -V
```
## 文件操作
```
複製檔案或資料夾,-r來源是資料夾,-p保持原有使用者及群組
cp -rp {來源} {目的}
移除檔案,-r移除資料夾類型路徑,-f強制刪除
rm {file_path}
改變權限
chmod 666 {文件或資料夾路徑}
```
## 使用者
```
新增使用者,-m代表建立空的家目錄,-s設定預設shell
sudo useradd {用戶名稱}
sudo useradd -m {用戶名稱} -s /bin/false
新增使用者後請設定密碼
sudo passwd {用戶名稱}
移除使用者,-r連同家目錄一併移除
sudo userdel -r {用戶名稱}
```
> 還有adduser指令,是包裝useradd後的指令,目的是為了讓使用更人性化,因此還會額外建立使用者資訊,個人偏好原汁原味的useradd系列,較輕量化
## 群組管理
```
將使用者添加到sudo群組
sudo usermod -aG sudo
改變檔案擁有者或群組,空白代表不更改,-R資料夾內所有文件一起更改
sudo chown {使用者}:{群組} {檔案}
```
## SSH連線
```
登入遠端主機,請將名稱與IP位址替換成目標主機
ssh -p {port號碼} {username}@{xxx.xxx.xxx.xxx}
```
```
傳輸檔案
scp -P {port} /path/to/local/file.txt username@remote_host:/remote/path/
傳輸folder
scp -P {port} -r /path/to/local/dir username@remote_host:/remote/path/
```
## HARDWARD
### 掛載USB隨身碟
1. 查看主機上有哪些硬體連接
```
lsblk
```
觀察到這顆`disk`沒有掛載(mount)
#### 2. 使用`mount`指令掛載到指定路徑
路徑可以依照個人使用習慣設定,下面示範創建一個資料夾作為掛載對象
```
sudo mkdir /mnt/mount_dir
sudo mount /dev/sdc1 /mnt/mount_dir
```
> 注意是使用part`sdc1`而不是disk`sdc`
#### 3. 可以順利從掛載的路徑存取到USB內容
#### 4. 使用完畢我想要安全退出USB隨身碟
對指定掛載的路徑做`unmount`就可以安全退出
```
sudo unmount /mnt/mount_dir
```
#### 5. 其他問題排除
`unmount`過程出現錯誤時可以,強制unmount
```
umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)
```
<!--
### 未整理Note
`apt update` 和 `apt upgrade` 是兩個在 Linux 系統中用來更新軟體包的命令,它們之間有以下差異:
1. **apt update**:
- `apt update` 用於更新套件清單,它會從套件庫中下載最新的套件資訊,但不會安裝新的套件或升級現有的套件。
- 這個命令用於同步本地套件索引檔案和遠端套件庫中的檔案,確保系統知道可用的新套件和版本。
2. **apt upgrade**:
- `apt upgrade` 用於實際升級已安裝的套件到它們的最新版本。這個命令會檢查已安裝的套件是否有新版本,如果有,則會提示是否進行升級。
- 在使用 `apt upgrade` 前,通常應先運行 `apt update` 以確保套件清單是最新的。
總結來說,`apt update` 是用來更新套件清單的,而 `apt upgrade` 是用來實際升級套件的。在日常使用中,通常應該先運行 `apt update`,然後再根據需要運行 `apt upgrade` 來升級套件。
-->
### [掛載新硬碟](https://linnote.com/how-to-mount-new-disk-linux/)
這邊是有一系列的步驟要執行,根本值得另外寫一篇吧!
#### 1. 列出可用硬體,透過觀察有無分割區可以得知尚未掛載的對象
```
lsblk
```
下圖sda這顆硬碟只有disk沒有像nvme0n1下方有兩個part分區,得知這顆硬碟沒有規劃空間

#### 2. 規劃硬碟空間
這個步驟只是先將硬碟分區規劃而已,並沒有執行格式化的動作
```
sudo fdisk /dev/sda
(格式化的對象要前面要加上/dev)
```
> /dev是什麼?
> linux系統設計,希望讓硬體都是一個路徑,方便使用者存取、使用,/dev就是紀錄這些硬體的路徑上層資料夾
接著會有一系列的使用選項,`m`列出可以使用的指令

使用`n`分割磁碟區,如果沒有要分割成多塊其實一直按enter就可以了,進階的使用請各位自行研究囉
```
n
```

規劃完成,`w`寫入剛剛設定的規劃
```
w
```
用`lsblk`可以看到剛規劃的新part出現了

<!-- 2TB以上的硬碟需要使用不同的格式 -->
#### 3. 格式化硬碟選項
對新的partition格式化
```
sudo mkfs -t ext4 /dev/sda1
```
> 注意: 是對part不是disk喔,所以是sda1
執行訊息大致如下
```
(base) user@hostserver:~$ sudo mkfs -t ext4 /dev/sda1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 976754385 4k blocks and 244195328 inodes
Filesystem UUID: 478a228f-06e7-48fc-a895-807f8643dd27
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
```
<!--  -->
#### 4. 掛載硬碟
一切準備就緒,最後就是將規劃好的硬碟掛載到系統上才能存取內容,有兩種做法
- 一次性掛載: 跟掛載USB一樣,作法直接參考那個章節就行,缺點是下次重新開機,系統可能就找不到了,必須再手動掛載一次
- 自動掛載: 告訴系統硬碟的識別ID,重新開機系統還是能找到
下面介紹自動掛載流程
列出所有可用硬碟的UUID,<font color='red'>找到新分區,並記下UUID</font>
```
sudo blkid
```

創建要掛載的路徑
```
mkdir {要掛載的路徑}
```
修改`/etc/fstab`檔案,這個檔案紀錄了硬碟資訊
```
sudo vim /etc/fstab
在文件中加上這一行,空白對齊其他行即可
UUID={紀錄的UUID} {要掛載的路徑} ext4 defaults 0 0
```
重新掛載,讓新設定生效,`-a`代表所有硬碟
```
sudo mount -a
```
列出硬碟使用狀況,順利的話可以看到新的分區瞜
```
df -h
```
如果還是不靈,可以試著重啟電腦,不然就是fstab檔案格式有問題囉