---
tags: 前端
---
# Linux Cheatsheet 指令大全
## 檔案讀寫
* `source [file]` 讀取檔案內容當作指令
* `[command] < [file]` 讀取檔案內容作為指令參數
* `[cmd1] & [cmd2]` 指令1執行完接指令2
* `[cmd1] && [cmd2]` 指令1執行成功後才接指令2
* `[cmd1] || [cmd2]` 指令1執行失敗後才接指令2
* `[cmd1] < ([cmd2])` 用指令2的stdout輸入到指令1
* `[cmd1] | [cmd2]` 將指令1的stdout輸入到指令2
* ```[command] `cmd2` ``` 也可以改用backtick達到上面方法
* `[command] > [file]` 輸出stdout到檔案裡(覆寫)
* `[command] >> [file]` 輸出stdout到檔案裡(添加)
* `[command] 2> [file]` 輸出stderr
* `[command] 1>&2` 輸出stdout到輸出stderr的檔案
* `[command] 2>&1` 輸出stderr到輸出stdout的檔案
* `man [command]` 查看指令使用手冊
* `pwd` 當前資料夾位置
* `ls -R [path]` 遞迴顯示所有子項目
* `cd /` 到系統根目錄
* `cd ~` 到用戶根目錄
* `cd ..` 回上一層
* `touch [path]` 新增檔案或更新最後修改日期
* `head [file] [lines]` 讓我看看開頭
* `more [file]`或`cat [file]]` 讓我看看全部內容
* `tail [file] [lines]` 讓我看看結尾
* `cat [file] | grep [keyword]` 搜尋內容
* `awk '[regexp]' [file]` 用正規表達式爬出內容
* `file [file]` 檢視檔案型態
* `tree` 檢視資料夾結構
* `less [file]` 互動式檢閱檔案內容
* `nano [file]` 編輯檔案內容
* `find [path] [keyword]` 搜尋檔案
* `locate [file]` 搜尋檔案位置
* `cp -r [old_path] [new_path]` 複製檔案
* `mv [old_path] [new_path]` 移動或重新命名
* `mkdir [path]` 新增資料夾
* `rmdir [path]` 移除資料夾
* `rm -rf [path]` 移除所有東西
* `ln -s [file1] [file2]` 同步檔案內容
* `diff [file1] [file2]` 比對檔案內容
* `export $[variable]` 設定變數內容
* `echo $[variable]` 讓我看看變數內容
* `clear` 清空終端機
* `rsync [local_path] [remote_path]` 更新遠端檔案
## 背景服務
* `nohup [command]` 在背景中執行指令
* `systemctl [restrat|reload|status] [service]` 服務管理
* `service [service] [restrat|reload|status]` 服務管理v2
* `jobs` 查看背景工作
* `bg` 將前台工作調至背景執行
* `fg` 將背景工作調至前台執行
* `lsof` 列出背景工作開啟中的檔案
* `ps aux`或`ps -ef` 列出所有執行緒
* `top` 列出作用中的執行緒
* `htop` 列出作用中的執行緒(human readable版)
* `kill [PID]` 停止執行by索引
* `pkill [name]` 停止執行by名稱
* `killall [keyword]` 停止執行by開頭名稱
* `crontab -e` 設定排程
## 系統與硬體
* `uname -a` 系統版本
* `uptime` 系統使用時間總計
* `history` 使用過的指令
* `lsmod` 查看所有模組
* `modinfo [module]` 查看模組詳細資訊
* `modprobe [module]` 載入模組到內核(kernel)
* `date` 現在日期時間
* `date +'%Y/%m/%d %H:%M:%S'` 輸出格式化日期時間
* `date -d '2022-01-01' +'%Y/%m/%d %H:%M:%S'` 字串轉格式化日期時間
* `cal` 日歷
* `bc` 內建小算盤
* `dmesg` 開機資訊
* `reboot` 重新啟動
* `poweroff`或`shutdown` 關機
* `last reboot` 重啟紀錄
* `iostat` I/O數據
* `vmstat` 虛擬記憶體使用數據
* `mpstat` CPU執行數據
* `df -h` 硬碟狀態(h=human readable;m=MB;g=GB)
* `watch df -h` 監測硬碟使用狀態
* `du -sh` 當前資料夾使用硬碟總容量
* `du -ah` 資料夾下所有檔案硬碟容量
* `free -h` 記憶體狀態
* `fdisk -l` 硬碟切割狀態
* `lspci -tv` 列出PCI裝置
* `lsusb -tv` 列出USB裝置
* `dmidecode` 列出DMI/SMBIOS
* `boisdecode` 列出BIOS
* `lscpu` 列出CPU規格
* `lshw` 裝置管理員
* `ifconfig` 網路介面
* `hdparm -I /dev/disk` 查看硬碟規格
* `hdparm -tT /dev/disk` 查看硬碟讀寫效能
## 網路
* `apt-get install net-tools` 安裝網路工具(ubuntu)
* `ufw [allow|deny] [service|port]` 簡易防火牆設定
* `iptables` 進階IP設定
* -A(append)添加設定,如INPUT
* -i(interface)介面選項,如eth0, lo, ppp0
* -p(protocol)協定類別,如tcp, udp, udplite, icmp, sctp, icmpv6
* -s(source)來源IP位置
* -dport(destination port)連接埠,如22(SSH), 443(https)
* -j(target)目標對策,如ACCEPT, DROP, RETURN
* -F(flush)移除所有設定
* -L(list)列出所有設定
* -D(delete)刪除某編號的設定
* `tcpdump` 查詢封包流量
* `netstat -tupln` 查看port使用狀況
* `nslookup [domain]` 查看網域資訊
* `curl -X POST -H 'Content-Type: application/json' -d '{"key":"value"}' [url]` 發送請求
* `wget -O [path] [url]` 下載檔案
* `ping [url]` 顯示ICMP發送請求結果
* `whois [domain]` 查詢網域所有人
* `dig [domain]` 查詢DNS設定
* `ssh-keygen -R` 產生本機端公私鑰
* `ssh [user]@[ip]` 連線到遠端主機
* `nano /etc/ssh/sshd_config` 編輯連線設定
* `scp [path] [user]@[ip]:[path]` 複製檔案到遠端主機
* `mail -s 'subject' -c 'cc_address' -b 'bcc_address' 'to_address'` 寄出郵件
## 權限
* `whoami` 我誰!!!
* `last` 上次登入人員
* `who` 誰正在系統裡
* `w` 查看線上人員
* `finger [user]` 查看某位用戶
* `adduser [user]` 新增用戶
* `passwd -l '[user]'` 修改用戶密碼
* `userdel -r '[user]'` 移除用戶
* `groupadd [group]` 新增群組
* `usermod -a -G [group] [user]` 把用戶加到群組
* `deluser [user] [group]` 把用戶從群組移除
* `delgroup [group]` 刪除群組
* `su - [user]` 切換身分
* `ls -l` 顯示檔案權限
* 權限分類:r(read)、w(write)、x(read+write)、-(none)
* 代碼組成:User3碼+Group3碼+Other3碼,如-rwxrw-r--
* 數字對應:7=rwx、6=rw-、5=r-x、4=r--
* `chmod +[r讀取w寫入x執行] [path]` 修改存取權限
* `chown [user] [path]` 修改用戶所有權
* `chgrp [group] [path]` 修改群組所有權
## 檔案壓縮(加壓→解壓)
* `tar -cf [.tar] [file]` → `tar -xf [.tar] `
* `gzip -xf [file]` → `gunzip -xf [.gz]`
* `tar -zcvf [file]` → `tar -zxvf [.tar.gz]`
* `bzip2 -d [file]` → `bunzip2 [.bz]`
* `7z -a [.7z] [file]` → `7z -x [.7z]`
* `zip -r [.zip] [file]` → `unzip [.zip]`
* `rar -a [.rar] [file]` → `rar -e [.rar]`
## git指令
* `git config user.name` 設定用戶名稱
* `git config user.email` 設定用戶郵件
* `git config --global credential.helper store` 記住認證
* `git config core.autocrlf true` 避免跳出crlf的警告
* `git init` 初始化
* `git status` 目前節點與檔案
* `git add .` 添加所有更動
* `git commit -m "提交訊息"` 添加節點
* `git rm --cache file` 移除後來被列為忽略的檔案
* `git log --oneline` 顯示提交歷程
* `git reflog` 顯示歷程(包含不在遠端節點上的本機節點)
* `git revert [節點]` 取消節點
* `git reset [節點] --hard` 重置節點
* `git branch -d [分支]` 刪除分支
* `git branch -a` 列出所有分支
* `git checkout [分支]` 移動節點
* `git merge [分支]` 合併節點
* `git rebase [節點]` 將節點添加在最新節點上
* `git remote add [遠端名稱] [遠端網址]` 建立遠端連結
* `git clone [遠端網址]` 下載專案
* `git push [遠端名稱] [分支]` 上傳更新
* `git pull [遠端名稱] [分支]` 下載更新
* `git stash` 封存當前的修改,避免被提交
* `git pop` 打開被封存的修改
## Docker指令
* `docker images` 顯示已下載容器
* `docker stats` 工作管理員
* `docker rm -f [id]` 強制移除容器
* 安裝postgres
* `docker pull postgres`
* `docker run -d --name=psql -p 5432:5432 -e POSTGRES_PASSWORD=密碼 postgres`
* 開通防火牆,接著用HeidiSQL等GUI工具連線試試
* 安裝gitea
* `docker pull gitea/gitea:latest`
* `sudo mkdir -p /var/lib/gitea`
* -d 背景執行、--name 本機端唯一名稱、-p 連接埠轉址、-v 檔案位置、-e 參數設定
* `docker run -d --name=gitea -p 10022:22 -p 10080:3000 -v /var/lib/gitea:/data gitea/gitea:latest`
* `nano /var/lib/gitea/gitea/conf/app.ini`調個`STATIC_URL_PREFIX`
## Postgres安裝
* 啟動postgres docker
`docker run --name pg -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres`
* 進到docker的postgres操作psql指令
`docker exec -it pg psql -U postgres -d postgres`
* 更改密碼
`ALTER USER postgres PASSWORD 'your_new_password';`
* 新增用戶
`CREATE USER new_username WITH PASSWORD 'new_password';`
* 給權限
```
GRANT CONNECT ON DATABASE your_database TO new_username;
GRANT ALL ON SCHEMA public TO new_username;
```
## MySQL安裝
* `apt-get install mysql-server net-tools` 安裝資料庫伺服器
* `netstat -tap | grep mysql` 檢驗安裝是否成功
* `nano /etc/mysql/mysql.conf.d/mysqld.cnf` 編輯網域設定
* `bind-address = chuboy.dev`
* `mysql -u root -p` 使用root身分登入
* `GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION;`
* `flush privileges;` 更新權限操作
* `ufw allow mysql` 開通防火牆
* `service mysql restart` 重開治百病
## SQL基本操作
* constraint: `PRIMARY_KEY | AUTO_INCREMENT | DEFAULT | UNIQUE | NOT_NULL`
* `CREATE TABLE [table]([col] [dtype] [constraint]);`
* `ALTER TABLE [table] [ADD|ALTER|DROP] COLUMN [col] [dtype] [constraint];`
* `DROP TABLE [table];` 移除資料表
* `[TRUNCATE|DELETE FROM] TABLE [table];` 清空資料表
* `SELECT '2330' AS Tic FROM [table] WHERE [col]='' ORDER BY [col] DESC LIMIT [num];`
* `UPDATE [table] SET [col]='2330'`
* `INSERT INTO [table] VALUES ('2330')`
* `DELETE FROM [table] WHERE [col]=''`
* `LOAD DATA INFILE '[.csv]' INTO TABLE [table] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS;`匯入CSV檔(MySQL)
* `COPY DB.表格(欄位) FROM '文字檔的路徑' WITH CSV HEADER DELIMITER AS ',';`匯入CSV檔(PGSQL)
* `SELECT * FROM [table] INTO OUTFILE '[.csv]' FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n';`輸出csv檔
## 直譯語言打包exe
* python
* `python -m venv build/env`
* `build\env\Scripts\activate`
* `pip install pyinstaller fastapi sqlalchemy pydantic uvicorn pyjwt python-multipart itsdangerous httpx`
* `pip freeze > requirements.txt`
* `pyinstaller main.py --onefile --distpath build`
* pip離線部屬
* `pip freeze > requirements.txt`
* `mkdir wheels`
* `pip download -r requirements.txt -d wheels`
* `cp requirements.txt wheels`
* `tar -zcf wheels.tar.gz wheels`
* `scp wheels.tar.gz user@192.168.0.1:/user/server`
* `ssh user@192.168.0.1`
* `tar -zxf wheels.tar.gz`
* `pip install -r wheels/requirements.txt --no-index --find-links wheels`
* javascript
* `npm install --global pkg`
* `pkg -t node16-win-x64 index.js -o index.exe`