---
# System prepended metadata

title: 熟悉開發環境
tags: [軟體組]

---

# 熟悉開發環境

[TOC]

## 開發板

### RPI (Raspberry Pi)

運行 Linux 作業系統的小型電腦。價格低、體積小，用來連接和控制各種外接設備，常用於物聯網和機器人應用。

![](https://hackmd.io/_uploads/SykimeyWT.png)

### Jetson Series

由 NVIDIA 推出的高性能嵌入式計算平台，特別針對機器學習和人工智慧應用而設計。

![](https://hackmd.io/_uploads/BkxAXxyZa.png)

## Linux

### 簡介

Linux 是一個免費、開源的作業系統，其中包含許多不同的發行版本 (Ubuntu, CentOS, ...)。

優點：
- 開源、免費
- 安全、穩定
- 完善開發環境
- 高度自定義

操作介面：
- CLI (Command Line Interface): bash, tcsh
- GUI (Graphical User Interface): GNOME, KDE

### 基本指令

#### 指令架構
```
<command> <argument1> <argument2> ...
```
- 一行指令通常由指令本身與零或多個參數組成
#### man (manual)
```
man <command>
```
- 查看指令的使用手冊
- `h` for help and `q` for quit
#### help
```
<command> --help
```
- 查看指令說明
#### pwd (print working directory)
```
pwd
```
- 查看當前所在路徑
:::info
:star2: Path
- absolute path
    - /home/orca-auv
- relative path
    - ../orca-auv
- `/`: root directory
- `~`: home directory
- `.`: current working directory
- `..`: parent directory
:::

#### ls (list)
```
ls <directory>
```
- 列出檔案
- 常用參數：
    - `-a`：顯示所有檔案集目錄，包括隱藏檔案目錄
    - `-l`：顯示檔案的完整資訊
#### cd (change directory)
```
 cd <directory>
```
- 切換資料夾
- 常用：
    - `cd ..`：到上一層
    - `cd ~` or `cd`：到家目錄
    - `cd -`：到前一個所在資料夾
#### touch
```
touch <path>
```
- 新增檔案
#### cp (copy)
```
cp <source> <dest>
```
- 複製檔案
#### mv (move)
```
mv <source> <dest>
```
- 移動檔案
:::warning
:warning: 在使用cp與mv時，如果<dest>本來就已經存在將會被覆蓋
:::
#### rm (remove)
```
rm <file>
```
- 刪除檔案
- 常用參數
   - `-r`：刪除資料夾
#### mkdir (make directory)
```
mkdir <directory>
```
- 新增資料夾
- 常用參數
    - `-p`：make parent directories as needed
#### cat (concatenate)
```
cat <file>
```
- 印出檔案內容
#### grep
```
grep <patterns> <file>
```
```
<command> | grep <patterns>
```
- 篩選並印出特定 pattern
#### less
```
less <file>
```
```
<command> | less
```
- 分頁檢視檔案
- `h` for help and `q` for quit
#### ps
```
ps
```
- 列出現在登入的 user 開啟的 process
```
ps aux
```
- 列出電腦上所有 process
#### kill
```
kill <pid>
pkill <pattern>
```
- 停止某個 process
#### sudo
```
sudo <command>
```
- 以 root 權限執行 command
    
### 常用快捷鍵
    

| shortcut | command  |          |
| -------- | -------- | -------- |
| `^C` | exit | 中斷程序 |
| `^D` | quit | 離開session |
| `^Z` | | 將程序丟到背景     |
| `^L` | clear     | 清空介面|
| `^U` | | 清空命令行 |
| `^W` | | 刪掉前一個字 |
| `^P` or `Up` | | 上一個指令 |
| `^N` or `Down`| | 下一個指令 |
| `^R` | | 搜尋之前的指令 |
    
### 常用工具

#### apt
- 套件管理工具
```
sudo apt update
sudo apt get install <pkg>
```
#### ssh (Secure Shell Protocol)
- 用來連線到遠端電腦
```
ssh <hostname>@<ip_addr>
```
- `ssh-keygen`：產生自己的一對公私鑰
- `ssh-copy-id`：將自己的公鑰放到遠端上
- `~/.ssh/`：存放相關設定
#### vim
- 文字編輯器
```
vim <file>
```
- `i`：進入 INSERT mode (預設為 NORMAL)
- `ESC`/`Ctrl-c`：退出 INSERT mode
- 基礎操作 (皆再 NORMAL mode 進行)：
    - `j`：游標往下
    - `k`：游標往上
    - `h`：游標往左
    - `l`：游標往右
    - `v`：選取
    - `y`：複製
    - `d`：刪除
    - `p`：貼上
    - `:wq`：儲存並退出
- 個人化設定：`~/.vimrc`
#### tmux (terminal multiplexer)
```
tmux ls
tmux attach -t <session_name>
tmux new -s <session_name>
```
- 終端機管理工具
    - 分割視窗
    - 保留上次的工作階段
- 常用操作 (prefix key：`Ctrl-b`)
    - `%`：水平分割
    - `"`：垂直分割
    - `<arrow>`：切換視窗
    - `c`：新增頁面
    - `n`：切換頁面
    - `d`：離開tmux(不關閉session)
- 個人化設定：`~/.tmux.conf`
## 其它

### VSCode SSH

https://code.visualstudio.com/docs/remote/ssh

### WSL

https://learn.microsoft.com/zh-tw/windows/wsl/install