Leon's Blogging

Coding blogging for hackers.

Linux 指令

| Comments

大部分人都只知道,基本指令 ls cd 等等,但其實還有很多好用的指令

permission - sudo, su, chown, chmod

  • sudo - 暫時切到最高權限
  • su - 切換身份
  • chown - 更改檔案/資料夾的擁有者和群組
1
2
3
sudo chown root:root test.txt
# -R Recursive 所有底下檔案
sudo chown -R root:root test
  • chmod - 更改檔案權限
1
chmod 644 test.txt

screen

可以讓一個終端機當成好幾個來使用

參數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 開新的視窗
screen

# 列出目前所有執行中的 screen 工作環境
screen -ls

# 重新連接執行中的 screen 工作環境
screen -r [pid.tty.host]

# 開啟紀錄功能,會產生log檔案 screenlog.0
screen -L
cat screenlog.0

# 將廢棄的 screen 工作環境清除
screen -wipe

指令

1
2
# 卸離 screen 工作環境
Ctrl + A + D

top

能夠即時顯示系統中各個進程的資源佔用狀況

ps

Process Status的縮寫。用來列出系統中當前運行的那些進程。

ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程信息,就可以使用top命令。

1
2
3
4
# 顯示較詳細的資訊
ps au
# 顯示所有包含其他使用者的行程
ps auxs

df

用來檢查linux伺服器的檔案系統的磁碟空間佔用情況。

1
2
# -h 方便閱讀方式顯示
df -h

du

顯示目錄或是檔案的大小,與df命令不同的是 du 是對文件和目錄磁盤使用的空間的查看。

1
2
# 找目前目錄底下,檔案大小排序的前 5 個
du -sh * | sort -nr | head

find

支援非常多的搜尋選項,可以依照權限、擁有者、群組、檔案類型、日期與大小等條件來搜尋

1
2
# 刪除 css gz js 大於 30 天以上的檔案
find *.css *.gz *.js -mtime +30 | xargs rm -rf

一次刪除多個檔案

1
find . -type f -iname 'filename*' -delete

jobs

可以看到背景目前有的指令狀況

1
2
3
4
5
6
& # 指令後面加上 `&`,可將指令丟到後台中去執行
ctrl + z #前台任務丟到後台中暫停
jobs # 顯示目前所有的 jobs 狀態
[1]  + 93594 running    sleep 10
fg %jobnumber 將後台的任務拿到前台來處理
bg %jobnumber 將任務放到後台中去處理

參考文件:

curl

能夠通過http、ftp等方式下載文件,也能夠上傳文件。

1
2
3
curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz

// -L 如果有做跳轉,-L 可以一直 follow 下去

tar

壓縮,解壓縮

  • x 解壓縮
  • j bzip2
  • z bzip
  • J xz
  • v verbose
  • f 後指定要解的檔案,或是壓縮後的指定檔名
1
tar xf ffmpeg-release-64bit-static.tar.xz

下載 + 解壓縮

1
curl -L https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz | tar Jxvf - -C /usr/local/src/

linux ffmpeg 下載流程

先將原本的 /usr/local/bin/ffmpeg 移除

  1. 下載 curl -O https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
  2. 解壓縮 tar xf ffmpeg-release-64bit-static.tar.xz
  3. 將 ffmpeg 移到 bin/ mv ffmpeg-4.0.2-64bit-static/ffmpeg /usr/local/bin/
  4. 更改權限 chmod +x /usr/local/bin/ffmpeg

  5. 每天一個linux命令(28):tar命令

  6. GNU / Linux 各種壓縮與解壓縮指令

readlink

用來找出符號鏈接所指向的位置,如果是 symbolic link 加上 -f 可以一直查下去直到最後一個

1
readlink -f /usr/bin/awk

ln

ln 建立的連結分為 “硬連結” (hard link) 及 “軟連結” (symbolic link), 預設 ln 會使用 hard link。

1
2
3
# -h hard link
# -s symbolic link
ln -s /home/wordpress /var/www/wpmu
1
2
3
ln -s ~/test.txt link.txt
cat link.txt
# this is text.txt

awk

文本分析工具,它是 Linux 中功能強大的數據處理引擎之一。相對於 grep 的查找,sed 的編輯

1
2
3
4
5
6
7
# awk 動作 文件名
awk '{print $0}' test.txt
# $0 印出所有的,$1, $2..,則是根據指的是第1個字段, 第2個字段..
awk -F '/' '/MA/ { print $1 }' test.txt
# 打印包含 MA 的行中的第一個單詞。
pwd | awk -F '/' '{print NR ") " $NF}'
# -F 指定分隔參數,NF 表示當前行有多少段落,$NF 最後一個字段

另外也提供了一些 func

1
2
3
4
tolower():轉小寫
length():字串長度
substr():子字串
rand():隨機數

/dev/null

/dev/null 在 Unix 或 Linux 就像黑洞, 會將任何導入的東西吃掉, 簡單來說就是程式會照常執行, 但不會輸出任何執行結果

所以當要清空 file 內容時也可以執行

1
2
cat /dev/null > access.log # 將空的內容丟給 access.log
cp /dev/null access.log # 複製一份空的蓋掉原本的檔案

2>&1

>/dev/null 2>&1

代表將左邊執行的結果丟給 /dev/null

> 是重新導向的意思,當左右兩邊沒有數字時,代表它會讀取左方程式的標準輸出 (也就是 fd=1) 重新導向給右邊的東西

因此 2>&1 代表將標準錯誤輸出導向給 &1 (fd),而為什麼後面要加 & 因為如果沒有加的話系統會誤以為是檔案名稱,而不是 fd.

  • 標準輸入 stdin (fd 是 0)
  • 標準輸出 stdout (fd 是 1)
  • 標準錯誤輸出 stderr (fd 是 2)

fd: file descriptor, 檔案描述子

參考文件

scp

複製本機檔案到遠端機器,也可以反向

1
2
3
4
5
6
7
scp [帳號@來源主機]:來源檔案 [帳號@目的主機]:目的檔案

# 從本地端複製到遠端
scp /path/file1 myuser@192.168.0.1:/path/file2

# 從遠端複製到本地端
scp myuser@192.168.0.1:/path/file2 /path/file1

xargs

xargs 這個指令會標準輸入(standard input)讀取資料,並以空白字元或換行作為分隔,將輸入的資料切割成多個字串,並將這些字串當成指定指令(預設為 /bin/echo)執行時的參數。

1
2
3
4
5
6
xargs

arg1 arg2
arg3

# arg1 arg2 arg3
1
2
3
4
echo a b c d e f | xargs -n 3

# echo a b c
# echo d e f

> & >>

1
2
echo hi > test # 覆蓋整個檔案
echo hello >> test # 夾在檔案最後一行

envsubst

The envsubst program substitutes the values of environment variables.

利用環境變數(environment variables)搭配 envsubst 來產生設定檔。

1
2
3
# myconfig
My name is ${USER}
My home path is ${HOME}
1
2
3
envsubst < myconfig.conf
# My name is foo
# My home path is /home/foo

重新導向產生設定檔案

1
envsubst < myconfig.conf > config.conf

如果只想替換某個變數

1
envsubst '$USER' < myconfig.conf > config.conf

getent

查看系統的數據庫中的相關記錄

1
getent group

nohub

讓程式可以在離線或登出系統後繼續執行

開頭 nohup 結尾 &

1
2
3
4
5
6
7
8
# 讓程式登出後可繼續執行
nohup /path/my_program &

# 執行後會產生
nohup.out

# 可以使用 tail 看最新的輸出
tail -f nohup.out

grep

find all files

1
2
3
4
5
6
grep -rnw '/path/to/somewhere/' -e 'pattern'

# -r or -R is recursive,
# -n is line number, and
# -w stands for match the whole word.
# -l (lower-case L) can be added to just give the file name of matching files

netstat

列出所有 listening

1
2
3
4
netstat -l

# 包含 non listening
netstat -a

列出 TCP, UDP

1
2
3
4
5
# TCP
netstat -at

# UDP
netstat -au

列出統計數據

1
netstat -s

查出程式

1
2
3
# 使用 TCP 的程式
netstat -pt
netstat -ap | grep xxx

不要解析 DNS

1
netstat -an

Comments