Linux Commands Cheat Sheet(施工中)

用 Linux 也有一段時間了,想說整理一些常忘記的指令 Cheat Sheet,之後就不用東翻西找ㄌ
以下指令是在 Ubuntu 20.04 上測的
參考資料:1

OS 相關篇

  1. 查詢自己電腦的 Linux 發行版與版號,以下 3 個皆可:

    1
    2
    3
    cat /etc/os-release
    lsb_release -a
    hostnamectl

    Git 篇

    之後可能考慮另外寫一篇。

  2. Git 環境配置 (可以參考這裡)

    1
    2
    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com
  3. Git 初始化

    1
    git init

    創完以後會有一個 .git 的 Directory。

  4. 基本指令─沒有 branch 的狀況

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    git status #查詢現在 git 狀態 (哪些有 track 哪些沒有)
    git add test.cpp #追蹤 test.cpp 的新增/變動
    git add . #追蹤所有的新增/變動
    git commit
    git commit -m "some message" #以上兩者可以增加 commit
    git log #查詢所有 commit (--pretty=oneline)
    git show 320ad6912b5f68adeeadb9862e75a1dde56eea08 #查詢 32...8 這個 commit 的變動,編號可在 git log 中查詢
    git reset 320ad6912b5f68adeeadb9862e75a1dde56eea08 #回到 32...8 這個版本

    git commit --amend #把改動直接加到新的版本
    git ls-files #查詢專案目錄下已被 git 追蹤的檔案

    # 待整理區
    git reset --hard HEAD
    git restore --staged test.cpp #unstage a modification
    git restore test.cpp #discard a modification
    git rm --cached test.cpp
    git rm test.cpp
  5. .gitignore 的寫法

  6. 基本指令─有 branch 的狀況

    1
    2
    3
    4
    5
    6
    git branch # 確認在哪個 branch 中
    git checkout -b new-branch-name #創建一個新的名叫 new-branch-name 的 branch
    git checkout change-to-branch-name #換 branch
    git merge branch-want-to-merge #將目前分支與指定分支合併

    git branch -M master
  7. 基本指令─用 Github 連結 (施工中)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    git remote add origin https://github.com/HNO234/HNO234.github.io.git #把本機的專案加到遠端 GitHub 的 repo
    git clone https://github.com/HNO234/HNO234.github.io.git #把 git 檔案抓下來
    git pull
    git push #以上兩者分別是把 Github 檔案拉/推下來
    git push -u origin current-branch #把改變推上 Github 的 current-branch

    # 待整理區
    git rebase origin/master #把自己的專案的 base
    git remote add origin https://github.com/HNO234/HNO234.github.io.git
    git remote add upstream https://github.com/HNO234/HNO234.github.io.git
    git fetch
    git remote show
    git remote show origin
    git remote -v
    git fetch upstream
    git pull upstream master

    git remote rm origin
    git push --set-upstream origin master
    git remote set-url origin git@github.com:user/repo.git

linux hotspot

sudo dpkg
sudo apt install -f

https://backlog.com/git-tutorial/tw/reference/config.html
https://stackoverflow.com/questions/9257533/what-is-the-difference-between-origin-and-upstream-on-github/9257901#9257901

SSH 篇

1
2
3
4
5
6
ssh-keygen # 不要用 sudo 之類的 (?)/ 儘量放 public 東西



eval `ssh-agent`
ssh-add ~/.ssh/<private_key_file>

待整理區
.ssh/config 內容

scp

telent

ftp

檔案操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ls -al #列出隱藏檔案 + 詳細資訊
cp -r a tmp/ #複製目錄
mkdir -p a/b/c #遞迴建立目錄
ln -s fileA fileC #Soft link/目標被移除後就無法被參照
ln fileC fileD #Hard link/目標被移除後仍然可以被參照
quota #看每個使用者的配額
find ~ "*dd*" #在 Home 下找所有含有 dd substring 的檔案
cat -n demo #列出行號
less large_file #使用 pager 輔助翻頁
head -n 3 file #前三行
tail -n 3 file #末三行 (加上 -f 可關注檔案變化;可改成 less 及 +F)
sort file #檔案內容排序後輸出
grep "regular expression" demo #找特定 regex

#以下 3 個都是計算出現次數之類用的
#字元數
$ wc -c demo
27 demo
#單字數
$ wc -w demo
6 demo
#行數
$ wc -l demo
3 demo

#待整理區
chmod
chown

Tmux 篇

程序管理

1
2
3
4
ps #列出當前程序
top #互動式的執行程序管理界面
htop #上面的改善
renice #在類 Unix 系統中,每個程序都會有一個 niceness 值,用來讓 OS 決定各個程序的優先度,其值分布在 -20 ~ +19,新程序預設為 0,越低代表優先度越高。使用者可以使用 nice 指令使程序執行時使用指定的 niceness 值,但只有系統管理員能夠將 niceness 值設為低於 0 的值

gcin 篇

1. 新增單詞:在設定中點選詞庫選項,之後進去「讓詞音從文章學習詞」

Tricks

  • Ctrl + D 可以直接關掉現在的 terminal

  • Ctrl + L 或 clear 可以清除現在的 terminal 內容

  • Ctrl + A,E 是到一條指令的頭/尾

  • Alt + F,B 是往前或往後一的 word

  • Ctrl + R 是 search shell history

  • Ctrl + K 是剪下行尾

  • Ctrl + U 是剪下行首

  • Ctrl + Y 是貼上

  • Ctrl + W 是砍掉前面一個字

  • Ctrl + X + E 可以開 editor 編輯現有指令

  • Alt + . 可以重複上一指令的參數

1
2
3
sudo !! # 用 sudo 執行前一個指令
reset # 回預設 terminal
cd - # 回到上一個 directory

sudo dpkg –install atom-amd64.deb

for i in *; do mv “$i” “$i.in”; done
for i in *.a.in; do mv “$i” “${i%.a.in}.out”; done
https://linuxhint.com/extract-pdf-pages-linux/
pdftk 110_1_Contest.pdf cat 16-18 output F.pdf

https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331
https://medium.com/fcamels-notes/%E5%9C%A8-linux-%E4%B8%8B%E9%96%8B%E7%99%BC-c-c-%E7%9A%84%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97-735fcd960b0

https://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work

export & /etc/environment