Linux 常用命令入門手冊
截止目前,含有 41+ 命令。
注:這裏只列出常用命令, 基本上能滿足日常工作所需, 如果想要更系統的可能需要翻閱官方手冊。
目錄
- 文件管理
- 系統管理
- 系統設置
- 壓縮、解壓
- 網絡
- 磁盤
- 雞助命令
- 其他
head
顯示某個文件的前十行
# 查看 README.md 前10行
head README.md
# 或者指定多個文件
head README.md package.json
# 指定行數, 覆蓋默認的10行
head -n 100 README.md
tail
顯示指定文件的末尾部分
# 默認爲顯示末尾10行
tail README.md
# 顯示末尾20行
tail -n 20 README.md
# 實時監聽README.md文件變化
tail -f README.md
# 根據文件名進行追蹤, 如果刪除後創建相同的文件名會繼續追蹤
tail -F README.md
# 顯示文件的最後10個字符
tail -c README.md
top
實時查看系統執行中的程序
# 實時監聽進程變化
top
# 顯示2條
top -n 2
# 顯示指定的進程信息
top -pid 620
ls
顯示目錄列表
# 只顯示目錄列表
ls
# 顯示目錄列表的詳細信息
ls -l
# 顯示指定目錄
ls ./src
# 顯示目錄列表詳細信息和大小
ls -lh
# 列出所有文件包括隱藏
ls -a
pwd
顯示當前工作目錄
# 沒有太多有用的參數,用法很簡單
pwd
wc
統計文件的行數、字數、字節數, 常見用於統計代碼行數
# 統計字節數
wc -c README.md
# 統計行數
wc -l README.md
# 統計字數
wc -w README.md
# 統計字符數
wc -m README.md
whoami
顯示自身的用戶名稱, 此命令等價於 id -un
xiejiahe@192 golang % whoami
xiejiahe # 輸出
alias
用於簡化較長的命令
# 列出所有已設置的別名
alias
# 刪除所有別名
unalias -a
# 設置別名
alias ll='ls -l'
wget
用於從網絡下載文件到本地
# 下載某個文件
wget https://www.xiejiahe.com/robots.txt
# 指定下載後文件名
wget -O ro.txt https://www.xiejiahe.com/robots.txt
# 斷開續傳,一般用於大文件,防止重新下載
wget -c https://www.xiejiahe.com/robots.txt
# 使用後臺下載, 對於大文件非常有用
wget -c https://www.xiejiahe.com/robots.txt
tail -f wget-log # 查看後臺下載進度
df
顯示磁盤信息
# 顯示系統磁盤信息
df
# 格式化大小,以kb以上進行顯示
df -h
# 查看全部文件系統信息
df -a
find
指定某個目錄下查找文件
# 在當前目錄遞歸搜索文件名爲 README.md 文件
find . -name README.md
# 通過通配符進行查找, 必須用引號括着, 這裏查找所有後綴爲 .md 文件
find . -name "*.md"
find . -iname "*.md" # 忽略文件大小寫
# 排除文件,只要加 ! , 排除掉所有 .md 後綴的文件
find . ! -name "*.md"
# 根據類型進行過濾搜索
# f 普通文件, l 符號連接
# d 目錄, c 字符設備
# b 塊設備, s 套接字, p Fifo
find . -type f
# 限定目錄遞歸深度
find . -maxdepth 3 # 最大爲3個目錄
find . -mindepth 3 # 最小爲3個目錄
# 可以利用find命令進行代碼統計,如下
# 統計所有後綴爲 .js 文件,忽略掉 node_modules test dist 相關文件
find . -path "*.js" ! -path "*node_modules*" ! -path "*test*" ! -path "*dist*" | xargs wc -l
# 查找文件大小大於 25k 文件
find /root -size +25k
# 查找10天前文件 -mtime 修改時間、 -ctime 創建時間、 -atime 訪問時間
find /root -mtime +10
mkdir
創建目錄
# 在當前目錄下創建 temp 目錄
mkdir temp
# 創建多層目錄
mkdir -p temp/temp2/temp3
# 基於權限創建
mkdir -m 777 temp
touch
創建新的文件
# 創建一個空文件, 如果文件存在只會修改文件的創建時間
touch README.md
ssh
遠程連接服務器工具
# 簡單的連接, 省略了端口號,默認爲22
ssh [email protected]
# 指定端口號連接
ssh -p 23 [email protected]
nohup
程序以掛起方式運行, 不會影響終端交互
因爲程序會以後臺的方式運行,所以終端不會輸出, 默認情況下會在當前目錄生成一個叫 nohup.out
文件,裏面包含了終端內容。
# 例如運行一個 node.js 程序
nohup node main.js
# 在當前目錄會出現 nohup.out 文件,裏面包含了 Hello World
nohuo echo "Hello World"
cd
進入指定目錄
# 進入當前 src 目錄
cd src
# 回到上一次目錄
cd -
# 返回上一級目錄
cd ..
cd ../../.. # 返回多級
# 進入家目錄
cd ~
cd # 或者不帶任何參數
# 將上一個命令的參數作爲cd參數使用
cd !$
echo
輸出字符串或者變量
注: 一般情況下字符串不必加雙引號, 如果包含轉義字符就必須要加
# 在終端輸出 Hello World
echo "Hello World"
echo Hello World # 也可以不加雙引號
echo "Hello\nWorld" # 必須加雙引號, 否則無法轉義
# 輸出變量, 前面加 $ 符號即可, 如果變量不存在輸出爲空
echo $say
# 也可以將內容輸出到指定文件
echo Hello World > 1.txt
time
測試某條命令執行所需花費時間
# time 後面跟着要測試的命令
# 輸出: 0.02s user 0.01s system 0% cpu 6.233 total
time curl https://github.com/xjh22222228/linux-manual
clear
用於清除當前終端所有信息,本質上只是向後翻了一頁,往上滾動還能看到之前的操作信息
注:筆者用得比較多的是 command + K
可以完全清除終端所有操作信息。
clear
rm
刪除指定目錄或文件
注: 使用此命令需要非常小心, 一但刪除無法恢復
# 刪除當前 1.txt 文件
rm 1.txt
# 這條命令比較常用, 強制刪除目錄或文件
# -r 如果是目錄遞歸刪除, -f 強制刪除 不發出任何警告
rm -rf ./src
rmdir
刪除指定空目錄
注:rmdir
實際上用得並不多,因爲不是很靈活,基本上使用 rm
代替
# 刪除當前 temp 空目錄, 如果不是空目錄會發出警告
rmdir temp
# -p 參數可以刪除多層空目錄, 發現temp3是空目錄刪除掉,然後接着往父級找如果還是空目錄繼續刪除...
rmdir -p temp1/temp2/temp3
watch
通常用於監聽1個命令的運行結果、定時執行命令
# 每5秒執行一次 tail 命令, 如果不指定-n 默認爲2秒
watch -n 5 "tail README.md"
# -d 高亮顯示變化內容
watch -n 5 -d "tail README.md"
ping
測試目標地址是否可連接、延遲度
# 測試 github.com 連通性, 按 ctrl + C 停止
ping github.com
# ping 5次後斷開
ping -c 5 xiejiahe.com
# 每5秒ping 一次
ping -i 5 xiejiahe.com
cp
拷貝文件或目錄
# 將當前 README.md 文件拷貝到上一層
cp ./README.md ../README.md
# -a 將原文件屬性一同拷貝
cp -a ./README.md ../README.md
# -r 拷貝目錄
cp -r home ../home
# -i 如果目標文件存在會詢問用戶是否需要覆蓋
cp -i README.md README.md
which
查找某個命令存儲在哪個位置, 輸出絕對路徑, which
會在環境變量 $PATH
設置的目錄裏去查找。
注: 可以通過 echo $PATH
查看設置的目錄.
which top # /usr/bin/top
# 查找pwd發現會找不到,因爲 pwd 是bash的內置命令
which pwd
cat
查看指定文件內容
# 查看 README.md 文件所有內容
cat README.md
cat README.md README2.md # 或者一次性顯示多個文件
# -n 指定顯示行號
cat -n README.md
mv
mv
有2個用途:
- 將文件或目錄移動到另一個位置
- 將文件或目錄重命名
注:實際上 mv
是用來移動文件或目錄,只不過有類似重命名的功能而已。
# 將 README.md 重命名爲 README-2.md, 如果 README-2.md 存在會直接覆蓋。
mv README.md README-2.md
# 將 README.md 移動到上一層目錄
mv README.md ../README.md
# -i 交互式操作,如果目標文件存在則進行詢問是否覆蓋
mv -i README.md ../README.md
cal
顯示當前日曆
cal
# 輸出
June 2020
Su Mo Tu We Th Fr Sa
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 29 30
# 顯示臨近3個月, 只能是3個月
cal -3
last
顯示用戶最近登錄信息
last # root pts/0 Sun Jun 14 00:12 still logged in 192.0.0.0
# 指定顯示條目數
last -n 1
shutdown
將系統關機或重啓操作。
# 立即重啓系統
shutdown -r now
# 關機系統
shutdown -h 關機
# 把前一個關機或重啓取消掉
shutdown -c
# 設定一個時間關機, 加 & 可以繼續用終端命令
shutdown -h 05:33 &
shutdown +5 "5分鐘後關機" # 5分鐘後關機,同時送出警告信息給登入用戶:
reboot
有點類似 shutdown
命令, 用於重新啓動系統。
# 重啓系統
reboot
# -f 強制重啓
reboot -f
# 用於模擬重新啓動系統,不會真實重啓,數據會寫入 /var/log/wtmp
reboot -w
# 在重新啓動之前關閉所有網絡界面
reboot -i
uname
打印系統信息
# 不帶任何參數打印當前操作系統內核名稱
uname # Linux 等價於 uname -s
# 打印系統所有信息
uname -a
# -r 打印系統版本 , 如果次版本號都是偶數,說明是一個穩定版
uname -r # 3.10.0-514.26.2.el7.x86_64
# 打印網絡節點主機名稱
uname -n # Yin.local
# 打印處理器名稱
uname -p # i386
ifconfig
配置或顯示系統網卡的網絡參數
# 顯示所有網絡參數信息
ifconfig
# 配置網卡IP地址
ifconfig eth0 192.168.1.111
who
顯示當前所有用戶登錄信息
# 顯示當前登錄系統的用戶
who
xiejiahe console Jun 15 21:38
xiejiahe ttys001 Jun 15 21:44
xiejiahe ttys002 Jun 15 21:44
xiejiahe ttys003 Jun 15 21:44
xiejiahe ttys004 Jun 15 21:44
xiejiahe ttys005 Jun 15 21:44
# 顯示登錄賬號名和總人數
who -q
# 顯示上次系統啓動時間
who -b # reboot ~ Jun 15 21:38
whereis
用來定位指令的二進制程序、源代碼文件和man手冊頁等相關文件的路徑。
注意:whereis
是從數據庫裏查找的,因此特別快,默認情況下一星期更新一次數據,所以有時會查找刪除的數據或者剛建立的數據無法找到問題。
# 查找 nginx
whereis nginx # nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz /usr/share/man/man3/nginx.3pm.gz
# -b 指定只查找二進制
where -b nginx # nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx
# -m 指定查找說明文件 man
whereis -m nginx # nginx: /usr/share/man/man8/nginx.8.gz /usr/share/man/man3/nginx.3pm.gz
zip
將目錄或文件壓縮爲 .zip
格式
# 壓縮文件
zip README.zip README.md
# 壓縮目錄需要 -r 遞歸處理
zip -r temp.zip temp
# 包含系統隱藏文件
zip -r -S temp.zip temp
# 指定壓縮效率 1-9
zip -r -9 temp.zip temp
unzip
解壓由 zip
壓縮的文件,通常是 .zip
# 將 demo.zip 解壓到當前目錄
unzip demo.zip
# 查看 demo.zip 文件,但不解壓
unzip -v demo.zip
# -d 指定將文件壓縮到 src 目錄下
unzip demo.zip -d src
locate
搜索文件,與 find
命令很像,但更快,因爲是從數據庫裏查找, 通常每天會進行數據更新。
# 搜索 README.md 相關文件
locate README.md
# 忽略大小寫
locate -i README.md
kill
殺死一個正在運行中的程序
注:程序進程id可通過 top
等命令查看。
# 殺死 pid 爲88 進程
kill 88
# 強制殺死
kill -KILL 88
# 徹底殺死進程
kill -9 88
# 顯示信號
kill -l
# 殺死指定用戶的所有進程
kill -u nginx
chmod
修改文件或目錄權限
chmod [參數選項] [mode, 八進制或符號表示] files…
u
符號代表當前用戶。g
符號代表和當前用戶在同一個組的用戶,以下簡稱組用戶。o
符號代表其他用戶。a
符號代表所有用戶。r
符號代表讀權限以及八進制數4。w
符號代表寫權限以及八進制數2。x
符號代表執行權限以及八進制數1。X
符號代表如果目標文件是可執行文件或目錄,可給其設置可執行權限。s
符號代表設置權限suid和sgid,使用權限組合u+s設定文件的用戶的ID位,g+s設置組用戶ID位。t
符號代表只有目錄或文件的所有者纔可以刪除目錄下的文件。+
符號代表添加目標用戶相應的權限。-
符號代表刪除目標用戶相應的權限。=
符號代表添加目標用戶相應的權限,刪除未提到的權限。
# README.md 文件設爲所有用戶可讀取
chmod a+r README.md
# -R 遞歸目錄下所有文件
chmod a+r src/
# 也可以用八進制符號表示
# 3個數字分別爲 x,y,z 表示User、Group、及Other的權限。
# r=4, w=2, x=1
chmod 777 README.md # 等價於 chmod a=rwx README.md
lsof
列出當前系統打開文件的工具
## 列表所有打開文件的的列表
lsof
# 查看指定端口被佔用情況
lsof -i:8080
# -p 列出指定進程號所打開的文件
lsof -p 6112