Featured image of post Linux & docker tips

Linux & docker tips

Linux docker 相關指令

linux tips

tags: linux

Terminal

文件目錄管理

ls list files 列出目錄及文件名:ls [options] [name]

  • -l 將資料以列表形式呈現,並且包含檔案細部資料。
  • -a 列出所有檔案,包含隱藏檔。
  • -h 可將檔案容易以易讀式呈現;-r:反向排序;-S:用檔案大小排序;-t:用時間排。序。

cd change directory 切換目錄:cd [dirName]

  • ~ 是切換 home 目錄的意思。
  • / 換到絕對路徑,.. 則表示目前目錄位置的上一層目錄;. 則是表示目前所在的目錄。
  • - 切換到上次訪問的目錄;$VAR_NAME 切換到環境變量指定的目錄。

pwd print work directory 顯示目前的目錄

mkdir make directory 創建一個新的目錄:mkdir [-p] dirName

  • -p 確保目錄名稱存在,不存在的就建一個。

rmdir remove directory 刪除一個空的目錄:rmdir [-p] dirName

  • -p 是當子目錄被刪除後使它也成為空目錄的話,則順便一併刪除。

cp copy file 複製文件或目錄:cp [options] [source] [directory]

  • -r--recursive 用於復制目錄及其所有的子目錄和文件,如果要復制目錄,需要使用該選項。
  • -i--interactive 在復制前提示確認,如果目標文件已存在,則會詢問是否覆蓋,回答y時目標文件將被覆蓋;-f--force 強制複製,即使目標文件已存在也會覆蓋,而且不給出提示。
  • -a 此選項通常在復制目錄時使用,它保留鏈接、文件屬性,並複制目錄下的所有內容。
  • -v--verbose 顯示詳細的複製過程;-u--update 僅複製源文件中更新時間較新的文件。
  • -p--preserve 保留源文件的權限、所有者和時間戳信息;-l 不復製文件,只是生成鏈接文件。

rm remove 刪除文件或目錄:rm [options] name

  • -i 刪除前逐一詢問確認。
  • -f 即使原檔案屬性設為唯讀,亦強制刪除,無需確認。
  • -r 將目錄及以下之檔案亦逐一刪除。

mv move file 移動文件與目錄,或修改文件與目錄的名稱:mv [options] [source] [directory]

  • -f 強制搬移,如果檔案存在,不會詢問直接覆蓋;-i 如果目標檔案存在,會詢問是否覆蓋。
  • -u 當源文件比目標文件新或者目標文件不存在時,才執行移動操作。
  • -n 不要覆蓋任何已存在的文件或目錄;-b 當目標文件或目錄存在時,在執行覆蓋前,會為其創建一個備份。

硬碟管理

df disk free 顯示目前系統上各個硬碟分割區的狀況:df [options] [name]

  • -a 列出所有的文件系統。
  • -h 根據大小格式調整顯示單位;-k 以 KBytes 的單位顯示各個文件系統;-m 以 MBytes 的單位顯示各個文件系統。
  • -HM=1000K 替換 M=1024K 的進位方式;-T 顯示文件系統類型。

fdisk 磁碟分區表操作工具:df [options] [device]

  • -l 輸出後面接的裝置的所有分區內容。若不是 fdisk -l 時,則係統將會把整個系統內能夠搜索到的裝置的分區均啟動來。

由於 MBR 分割表不支援超過 2TB 的磁碟,如果您的硬碟大小超過 2TB,就無法使用 fdisk 分割硬碟,請改用 parted 以 GPT 的方式分割。

du disk used 查看資料夾或檔案大小:du [options] [name]

  • -a 列出所有的檔案大小。
  • -h 根據大小格式調整顯示單位;-k 以 KBytes 的單位顯示各個文件系統;-m 以 MBytes 的單位顯示各個文件系統。
  • -s 只顯示總和;-S 顯示目錄內容時, 不包含子目錄大小。

tree 命令用於以樹狀圖列出目錄的內容

  • -a 顯示所有文件和目錄。
  • -d 顯示目錄名稱而非內容。
  • -f 顯示完整的相對路徑名稱,-s:列出文件或目錄大小,-h:可將檔案容易以易讀式呈現;

uname unix name 命令用於顯示操作系統信息

  • -a--all 顯示全部的信息,包括內核名稱、主機名、操作系統版本、處理器類型和硬件架構等。
  • -r--release 顯示內核版本號;-v 顯示操作系統的版本。
  • -n--nodename 顯示主機名;-m--machine 顯示處理器類型,-s--sysname 顯示操作系統名稱。

ftp 命令設置文件系統相關功能。ftp [- dignv][主機名稱或IP地址]

  • -d 詳細顯示指令執行過程,便於除錯或分析程序執行的情形; -i 關閉互動模式,不詢問任何問題; -v 顯示指令執行過程;-g 關閉本地主機文件名稱支持特殊字符的擴充特性; -n 不使用自動登陸。
  • quit 結束遠端伺服器的 ftp 會話,然後結束。
  • 常用 FTP 命令
    • ! 對本地電腦下 command。e.g.!ls
    • open 連接到指定的 ftp 伺服器。open [computer] [port]
    • close 結束與遠端伺服器的 ftp 會話,並保留在提示字元中 ftp>
    • help 命令或 ? 列出所有可用的FTP命令;cd 命令切換遠端伺服器目錄;lcd 命令切換本地電腦目錄;ls命令列出當前遠程目錄文件與目錄; pwd顯示遠端伺服器上的當前工作目錄。
    • delete 命令刪除當前遠程目錄中的文件; mkdir命令在當前遠程目錄中創建一個新目錄; rmdir 刪除當前遠程目錄中的目錄。
    • get 將一個文件從遠程複製到本地電腦; mget 命令將多個文件從遠程複製到本地電腦; put 命令將一個文件從本地上傳到遠端伺服器; mput 命令將多個文件從本地上傳到遠端伺服器。

tar 用於打包檔案產生 tar 包,也可以將檔案打包並壓縮

  • 以下五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。
    • -c 建立壓縮檔案
    • -x 解壓
    • -t 查看內容
    • -r 向壓縮歸檔文件末尾追加文件
    • -u 更新原壓縮包中的文件
  • 下面的參數是根據需要在壓縮或解壓檔案時可選的。
    • -z 有gzip屬性的; -j 有bz2屬性的; -Z 有 compress 屬性的; -v 顯示所有過程; -O將文件解開到標準輸出
  • -f 目標檔案,這個參數是最後一個參數,後面只能接檔案名。

grep global regular expression 命令用於查找文件裡符合條件的字符串或正則表達式。grep [ options ] pattern [ files ]

pattern - 表示要查找的字符串或正則表達式。
files - 表示要查找的文件名,可以同時查找多個文件,如果省略files 參數,則默認從標準輸入中讀取數據。

  • -r 遞歸查找子目錄中的文件。
  • -i 忽略大小寫進行匹配;-v 反向查找,只打印不匹配的行。
  • -n顯示匹配行的行號;-l只打印匹配的文件名。-c只打印匹配的行數。

find 用於在指定目錄下查找文件和目錄。find [path] [expression]

path是要查找的目錄路徑,可以是一個目錄或文件名,也可以是多個路徑,多個路徑之間用空格分隔,如果未指定路徑,則默認為當前目錄。 expression是可選參數,用於指定查找的條件,可以是文件名、文件類型、文件大小等等。

  • -name pattern:按文件名查找,支持使用通配符*和?。
  • -type type:按文件類型查找,可以是f(普通文件)、d(目錄)、l(符號鏈接)等。
  • -size [+-]size[cwbkMG]:按文件大小查找,支持使用 +- 表示大於或小於指定大小,單位可以是 c (字節)、 w (字數)、 b (塊數)、 k (KB)、 M (MB)或 G (GB)。
  • -mtime days:按修改時間查找,支持使用 +- 表示在指定天數前或後,days 是一個整數表示天數; -user username:按文件所有者查找; -group groupname:按文件所屬組查找。

man manual 後面加上其他指令,就可以看到指令的文件及其他說明。
time 命令的用途,在於量測特定指令執行時所需消耗的時間及系統資源等資訊。
lshw lspci htop tmux touch chmod ssh scp

net-tools

ifconfig ethtool netstat nameif ipmaddr route

vi/vim

git

後臺相關

& 這個用在一個命令的最後,可以把這個命令放到後臺執行;
ctrl + z 可以將一個正在前臺執行的命令放到後臺,並且暫停;
jobs 檢視當前有多少在後臺執行的命令;
fg 將後臺中的命令調至前臺繼續執行;
bg 將一個在後臺暫停的命令,變成繼續執行;
ps 列出系統中正在執行的程序;
kill 傳送訊號給一個或多個程序(經常用來殺死一個程序),kill還能給程序傳送其它訊號,使用kill -l 可以察看kill支援的訊號;
watch 一個可以定期執行指令的實用工具,臨時需要定期執行指令時特別有用,-n:更新間隔時間,時間精細度可支援到 0.1 秒,-d:每次畫面更新時,將產生差異的部分輸出反白顯示;

Nvidia

nvidia-smi Nvidia 所提供的 NVIDIA System Management Interface 管理工具可以直接查詢驅動程式與顯示卡的資訊,-L 參數可列出所有插在電腦上的 GPU 卡,-q 參數可列出 GPU 卡非常詳細的資訊;

GCC

-c : 只做編譯(不做連結)
-S : 輸出組譯碼
-E : 將預處理結果顯示
-o filename : 指定輸出檔名
-ansi : 程式要求依據ansi c標準
-Dmacro : 使定義巨集(marco)為有效
-Dmarco=defn : 使定義巨集(marco)為defn
-Wa,option : 將選項(option)傳給組譯器
-wl,option : 將選項(option)傳給連結器
-I : 追加include檔案的搜尋路徑
-L : 追加library檔案的搜尋路徑
-l : 指定連結的函式庫
-Wall : 顯示所有的警告訊息
-g : 編入除錯資訊(要使用GDB除錯一定要加)
-O2 : 做最佳化

虛擬機安裝步驟

下載VM軟體ubuntu映像檔

開啟VM軟體後建立新機器,將映像檔掛載到光碟機進行安裝,之後按步驟安裝。 (圖形控制器選擇VBoxSVGA可以任意縮放模擬器視窗)

  • linux終端機快捷鍵
1
Ctrl+Alt+T
  • 安裝 vim
1
$ sudo apt install vim 
  • 安裝 git
1
$ sudo apt install git 
  • 安裝 clip
1
$ sudo apt install geomview 
  • 下載 chrome
1
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  • 安裝 chrome
1
$ sudo apt install -y -f ./google-chrome-stable_current_amd64.deb
  • 建立捷徑
1
/usr/share/applications/google-chrome.desktop
  • 將路徑指向
1
http://wiki.csie.ncku.edu.tw/linux/schedule

SSH key 產生的方法

($ 開頭的表示法,就是說明在 Linux 終端機輸入命令)

:::info 透過以下命令檢查是否有現存的 ssh key

1
$ ls -al ~/.ssh
  • 如果已有 ssh key,跳到步驟 5
  • 若沒有從步驟 1 開始 :::

1. 輸入命令

1
$ ssh-keygen -t rsa -C "[email protected]"

後面那是自己申請 Github 所使用的信箱。之後 ssh 程式會要求輸入 passphrase

2. 直接按下 Enter 鍵即可。

Enter file in which to save the key (/Users/[you]/.ssh/id_rsa): [Press enter]

3. 輸入一個 passphrase,如不想輸入直接按下 Enter 鍵即可。

1
2
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

4. 此時顯示的是你 SSH Key 的 fingerprint

1
2
3
4
Your identification has been saved in /Users/[you]/.ssh/id_rsa.
Your public key has been saved in /Users/[you]/.ssh/id_rsa.pub.
The key fingerprint is:
0x:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db [email protected]

5. 將剛剛產生的 key 加入 ssh-agent

  • 如果你使用的是 Linux 或 msysgit 等軟體,則輸入以下命令
1
2
3
# start the ssh-agent in the background
$ eval `ssh-agent -s`
Agent pid 59566
  • 將剛剛產生的 key 加入 ssh-agent
1
$ssh-add ~/.ssh/id_rsa

6. 到 Github 網站加入你的 SSH key

將 SSH key 複製到你的剪貼簿,如果你的 key 檔案名稱不為 id_rsa.pub,請自行將以下程式碼中 id_rsa.pub 修改成你的檔案名稱。

1
2
$ clip < ~/.ssh/id_rsa.pub
#Copies the contents of the id_rsa.pub file to you clipboard
  • 登入github點選右上角settings

  • 點選SSH and GPG Keys

  • 選擇 Add SSH key

  • Title 可以自己命名辨識,然後貼上key!!!!

  • 按下 Add key就完成啦!

7. 驗證你有沒有綁定

1
2
$ ssh -T [email protected]
#Attempts to ssh to GitHub
  • 你會看到這個 warning,然後輸入"yes"
1
2
3
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no) ?
  • 你將會看到
1
Hi [username]! You've successfully authenticated, but GitHub does not provide shell access.

這樣就成功囉!

  • Ctrl+Alt+T => 開terminal
  • tmux => 多視窗
  • Ctrl+L => clear
  • cat =>列印出文件
  • ls =>清單
  • rm =>刪除
  • cd =>改變路徑
  • cp =>複製

Docker–從入門到實踐

docker build -t image名稱 . 根據dockerfile產生images。"-t" 為指定名稱, “.“為當前位置
docker images 查看所有images。
docker ps -a 列出當前container。"-a"所有檔案, “-s"顯示大小
docker container ls -a 列出當前container。“ls"表列, “-a"所有檔案
docker run -it --shm-size 大小 --rm --gpus all --name container_name -p container_port:local_port -v /home/使用者/data:/data image名稱 bash創建一個container並運行指令。"-i"為互動模式, “-t"為配置虛擬終端, “-d"為後台運行, “–shm-size"為容器可使用共享記憶體大小, “–gpus all"為使用GPU, “–name"container名稱, “-p"為port映射, “–rm"為container終止時自動刪除, “-v 本機位置:container位置"為將主機位置映射到container, “bash"為使用bash shell終端
docker start container名稱 bash 運行已存在container。
docker stop container名稱 bash 停止運行container。
docker restart container名稱 bash 重啟container。
docker exec -it container名稱 bash 進入運行中container。"-i"為互動模式, “-t"為配置虛擬終端, “-d"為後台運行, “bash"為使用bash shell終端 docker rm container_id刪除container。
docker rmi images_id刪除images。

Licensed under CC BY-NC-SA 4.0
最後更新 Sep 16, 2023 00:00 UTC
網站穩定運行
使用 Hugo 建立 ,   主題 StackJimmy 設計