Linux Cmd
find
搜尋檔案
# 在 當前資料夾 下對 檔案名稱 *_spec.rb 做搜尋
$ find . -name "*_spec.rb"
export
設定環境變數
# 環境變數 設定資料庫連線 DSN
$ export GREENLIGHT_DB_DSN='postgres://greenlight:@localhost/greenlight?sslmode=disable'
# 列出環境變數
$ export -p
df
顯示硬碟使用量
short for disk free
Filesystem: 檔案系統 Size: 總容量 Used: 已用容量 Avail: 剩餘容量 Use%: 已用百分比 Mounted on: 掛載點
# -h 以容易識別的格式顯示硬碟空間使用量
$ df -h
# -T 顯示每個分割區所屬的檔案系統名稱
$ df -T
free
顯示記憶體使用情況
# -m 以 MB 作為單位顯示
$ free -m
curl
可以用來做連線資料傳輸
# -d 傳送 data,系統會用 POST
$ BODY='{"title":"The Breakfast Club","year":1986, "runtime":"96 mins","genres":["drama"]}'
$ curl -d "$BODY" localhost:4000/v1/movies
# -i 回傳的時候多顯示 Response header
$ curl -i localhost:4000/v1/healthcheck
# -X 指定 http method
$ BODY='{"title":"Black Panther","year":2018,"runtime":"134 mins","genres":["sci-fi","action","adventure"]}'
$ curl -X PUT -d "$BODY" localhost:4000/v1/movies/2
# -w 顯示額外資訊
$ curl -w "\nTime: %{time_total}s \n" localhost:4000/v1/movies/2
# 同時執行多個 request
$ curl localhost:4000/v1/movies/1 & curl localhost:4000/v1/movies/1 &
# 如果有 query params 的話,整段 url 要用雙引號包起來
$ curl "localhost:4000/v1/movies?page_size=2&page=2"
# 可以用來下載資料
# -O flag 是指把 curl 回來的資訊輸出成檔案
$ curl http://www.some-site.com/some-file.txt -O
for
使用 for loop
# 使用 loop 6次,每次都打 curl
$ for i in {1..6}; do curl http://localhost:4000/v1/healthcheck; done
pgrep
查看正在運行的程序,並列出 PIDs (Process IDs)
# -l 表示查詢結果多顯示程序名稱,這邊的 api 是要查詢的程序名稱
$ pgrep -l api
pkill
送出特別的訊號給程序 (預設是SIGTERM)
# 對 api 的程序送出 SIGKILL 訊號
$ pkill -SIGKILL api
run multiple commands in one line
指令是可以一次下複數個的
# 下完 curl 以後馬上關閉名為 api 的 process
$ curl -d "$BODY" localhost:4000/v1/users & pkill -SIGTERM api &
w
查看目前登入系統的使用者有哪些人
以及他們正在使用的程式
read
read 可以提示使用者輸入字串
並賦值給變數
# 將使用者輸入的字串賦值給 PASSWORD
$ read -p "Enter password for root DB user" PASSWORD
ssh
透過 ssh 連線到遠端機器
# 用 ubuntu 帳號連線至 172.1.1.1
# ubuntu -> username
# 172.1.1.1 -> hostname
$ ssh ubuntu@172.1.1.1
ip 和 username 是可以先寫在 ~/.ssh/config 檔案內的
範例:
Host shou_prod
HostName 172.1.1.1
User ubuntu
這樣的話可以用以下指令連線到機器
$ ssh shou_prod
ufw
uncomplicated firewall
可以用簡單的指令來操作防火牆
範例
# 允許 port 22
$ ufw allow 22
# 允許 port 80
$ ufw allow 80/tcp
# 允許 port 443
$ ufw allow 443/tcp
# 封鎖 port 4000
$ ufw deny 4000
echo
印出資訊
echo Hi
# n flag: do not output the trailing newline
echo -n hello
ls
long list
列出檔案 / 文件夾
# -l 可以多顯示 detail 資訊
# -a 可以顯示隱藏檔案
# -t 照建立時間排序
# -tr 照建立時間反排序
ls
cd
變更當前目錄位置
cd <dir>
# 只輸入 cd 不帶參數的話,會回家目錄
cd
# ~
pwd
顯示當前目錄位置
pwd
mkdir
建立資料夾
mkdir <new directory>
# -p flag 會把不存在的資料夾一並建出來
mkdir -p /tmp/asia/india/bangalore
# 可以一次建立多個資料夾
mkdir Asia Europe Africa America
multiple commands
一次執行多個指令 (用分號隔開)
cd <directory>; mkdir <new directory>; pwd
rm
刪除目錄
# -r flag 是指 recursive,會把目錄底下的東西也全刪了
rm -r /tmp/my_dir
cp
複製目錄
# -r flag 是指 recursive,會把目錄底下的東西也全複製
cp -r my_dir1 /temp/my_dir1
# -v flag 會印出做了什麼
cp -v empty_file.txt empty_dir/
touch
建立新文件
touch new_file.txt
cat
對文件操作
# 對 new_file.txt 插入文字
# 用 ctrl+D 可以跳出輸入畫面
# 其中 > 稱為 redirection symbol
cat > new_file.txt
# 印出文件內容
cat new_file.txt
mv
move (rename) 檔案
mv new_file.txt sample_file.txt
whoami
印出當前使用者
whoami
id
取得當前使用者的詳細資料
id
su
更換使用者 (switch user)
su <other username>
sudo
superuser do
賦予使用者 root 權限執行指令 (不會切換成 root 使用者)
sudo <指令>
wget
下載檔案用的
# -O flag 是指定輸出名稱
wget http://www.some-site.com/some-file.txt -O some-file.txt
man
查看操作手冊
# 查看 echo 的操作手冊
man echo
&
讓指令可以在 background 執行
sh my_script.sh &
jq
可以更好識別 json 的印出指令
# 如果要全部顯示就用 .
# 如果是要搜尋特定節點,比如說 "script",就用 .scripts
jq . employee.json
sed
stream editor,即指串流編輯
# 把 8080 字串改成 9090
# s 是指取代
# g 是指 global,或是換成數字,就會變成只改第幾個匹配的項目
# i flag 是指修改檔案
sed -i 's/8080/9090/g'
nohup
當 linux 使用者登出時,不要關閉 app
# 在背景執行 python app.py,且不會受到使用者登出影響
nohup python app.py &
wc
word count
計算資料的字數/行數
# 印出 filename 的資訊
wc [filename]
# 印出 換行數 (new line) / 字數 (word) / 位元組數 (byte)
# l flag 是指只要行數
wc -l [file]
eval
可以把環境變數當成指令來執行
# 把指令做成參數
mycommand="wc -l department.txt"
# 透過 eval 呼叫
eval $mycommand
unset
刪除環境變數
# 刪除 env 中的 GONORPOXY
unset GONOPROXY
uptime
詢問系統啟動了多久
uptime
# result
21:49 up 10:27, 5 users, load averages: 3.69 3.24 4.32
# 21:49 是系統當前時間
# up 10:27 是指已執行時間
# 5 users 是指使用者總連線數
# load average 是指最近 1, 5, 15 中的系統平均負載
type
可以用 type 來看這個指令是什麼類型的
# 查看 echo 的型別
type echo
# result
echo is a shell builtin
pushd & popd
pushd 會進入對應資料夾,並 push 到 stack
popd 會退回上一次的路徑,並把 stack pop 出來
pushd /etc
popd
more
進入能滾動的文字顯示畫面
more new_file.txt
# [space] 往下滾一面
# [enter] 往下滾一行
# [b] 可以回滾一面
# [/] 可以搜尋
# [q] 結束
less
和 more 類似
less new_file.txt
whatis
用一行敘述描述這個指令是做什麼的
whatis date
apropos
查詢 keyword 相關功能的命令
# 查看 mkdir
apropos mkdir
chsh
更換 shell
chsh
# 系統會要求輸入使用者密碼以及要使用的shell
# 或是直接一道指令
# 例: 把 shell 換成 Bourne Shell
sudo chsh -s /bin/sh shou
env
查看所有環境變數
env
which
查看某個指令的位置
# 查看 kubectl
which kubectl
# result
/usr/local/bin/kubectl
ln
建立 Symbolic link
# 格式 ln -s [目標對象的路徑] [要建立的位置]
# 例: 建立 ~/my_movices 的 symbolic link 指向 /mnt/my_drive/movies
ln -s /mnt/my_drive/movies ~/my_movies