目錄
一、Linux 命令大全
1、文件和目錄操作
(1)ls 列出目錄內容
(2)pwd 查看當前目錄
(3)cd 切換目錄
(4)mkdir 創建目錄
(5)cp 復制文件或目錄
(6)mv?移動或重命名文件
(7)rm 刪除文件或目錄
(8)touch 創建空文件或更新時間戳
(9)?find 查找文件
2、文件內容操作
(1)cat 查看文件內容
(2)less/more ?分頁查看文件
(3)head/tail 查看文件開頭/結尾
(4)grep?文本搜索
(5)sed?流編輯器
(6)awk 文本處理
3、系統信息
(1)ps 查看進程
(2)top 系統監控
(3)free 內存使用
(4)df 磁盤空間使用
(5)du 目錄大小
4、網絡相關
(1)ping ?網絡連通性測試
(2)ifconfig/ip?網絡接口配置
(3)netstat - 網絡統計
(4)ssh 遠程登錄
(5)scp 安全復制
5、權限管理
(1)chmod 修改權限
(2)chown 修改所有者
6、壓縮和解壓
(1)tar 打包和解包
(2)zip/unzip ZIP壓縮
二、shell?腳本語言
1、shell 的變量
(1)常用系統變量
(2)自定義變量
(3)特殊變量
2、運算符
(1)算術運算符
(2)關系運算符
(3)字符運算符
(4)邏輯運算符
(5)文件測試運算符
3、流程控制
(1)if 判斷
(2)case 多條件判斷
(3)for 循環
(4)while 循環
(5)until 循環
(6)循環控制
4、函數
(1)系統函數
(2)自定義函數
5、shell 內置工具
(1)read
(2)cut
(3)sed
(4)awk
(5)sort
一、Linux 命令大全
1、文件和目錄操作
(1)ls 列出目錄內容
# 按修改時間順序排序
[root@host181 test1]# ls -lrt
total 4
-rw-r--r-- 1 root root 0 Jun 22 19:37 2.log
-rw-r--r-- 1 root root 0 Jun 22 20:54 3.log
-rw-r--r-- 1 root root 0 Jun 24 23:31 4.log
-rw-r--r-- 1 root root 43 Jun 24 23:33 1.log# 列出隱藏目錄
[root@host181 test1]# ls -la
total 4
drwxr-xr-x 2 root root 58 Jun 24 23:31 .
drwxr-xr-x 7 root root 71 Jun 22 19:30 ..
-rw-r--r-- 1 root root 43 Jun 24 23:33 1.log
-rw-r--r-- 1 root root 0 Jun 22 19:37 2.log
-rw-r--r-- 1 root root 0 Jun 22 20:54 3.log
-rw-r--r-- 1 root root 0 Jun 24 23:31 4.log
[root@host181 test1]#
(2)pwd 查看當前目錄
[root@host181 test1]# pwd
/root/testdir/test1
(3)cd 切換目錄
# 切換到家目錄下
cd ~# 回到到上次所在目錄下
cd - # 回到到上級目錄
cd ..# 切換到絕對路徑
cd /xxx/xxx# 切換到相對路徑
cd xxx
(4)mkdir 創建目錄
# 創建多級目錄
[root@host181 test1]# mkdir -pv logs/serve/lib
mkdir: created directory ‘logs’
mkdir: created directory ‘logs/serve’
mkdir: created directory ‘logs/serve/lib’# 創建單個目錄
mkdir dir1
(5)cp 復制文件或目錄
# 復制文件
cp file1 file2 # 遞歸復制目錄
cp -r dir1 dir2
(6)mv?移動或重命名文件
# 重命名文件
mv oldname newname# 移動文件
mv file1 /target/dir/
(7)rm 刪除文件或目錄
# 刪除文件
rm file.txt# 遞歸刪除目錄
rm -r directory# 強制刪除不提示
rm -f *.log
(8)touch 創建空文件或更新時間戳
# 創建新文件
touch newfile.txt# 設置特定時間戳
[root@host181 test1]# touch -t 202401010000 file.txt
[root@host181 test1]# ll file.txt
-rw-r--r-- 1 root root 0 Jan 1 2024 file.txt
[root@host181 test1]#
(9)?find 查找文件
# / 目錄下查找 2.log 文件
[root@host181 test1]# find / -name "2.log"
/root/testdir/test1/2.log
[root@host181 test1]#
2、文件內容操作
(1)cat 查看文件內容
# 顯示文件內容
cat file.txt
(2)less/more ?分頁查看文件
# 可上下翻頁
less largefile.log# 只能向下翻頁
more largefile.log
(3)head/tail 查看文件開頭/結尾
# 顯示前10行
head -n 10 file.txt # 顯示后20行
tail -n20 file.txt# 實時跟蹤日志
tail -f test.log
(4)grep?文本搜索
# 搜索包含error的行
grep "error" logfile # 忽略大小寫
grep -i "warning" file # 忽略大小寫
(5)sed?流編輯器
# 替換文本
sed -i 's/old/new/g' file # 原地編輯并備份,會生成一個 file.bak 的備份文件
sed -i.bak 's/foo/bar/' file
(6)awk 文本處理
# 打印第一列
awk '{print $1}' file# 打印以:為分隔的第一列
awk -F: '{print $1}' file
3、系統信息
(1)ps 查看進程
# 查看所有進程
ps -ef# 查看當前賬戶進程
ps -ux# 查找指定xxx進程
ps -ef|grep xxx
(2)top 系統監控
[root@host181 test1]# top
top - 00:09:14 up 49 min, 1 user, load average: 0.00, 0.01, 0.02
Tasks: 161 total, 2 running, 159 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863000 total, 935332 free, 514628 used, 413040 buff/cache
KiB Swap: 2098172 total, 2098172 free, 0 used. 1146600 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 125708 4164 2616 S 0.0 0.2 0:00.72 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 5 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kworker/u256:0 6 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.12 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
(3)free 內存使用
[root@host181 test1]# free -htotal used free shared buff/cache available
Mem: 1.8G 502M 913M 22M 403M 1.1G
Swap: 2.0G 0B 2.0G
[root@host181 test1]#
(4)df 磁盤空間使用
[root@host181 test1]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 895M 0 895M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 11M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda3 48G 6.6G 42G 14% /
/dev/sda1 297M 163M 134M 55% /boot
tmpfs 182M 12K 182M 1% /run/user/42
tmpfs 182M 0 182M 0% /run/user/0
[root@host181 test1]#
(5)du 目錄大小
[root@host181 test1]# du -sh *
4.0K 1.log
0 2.log
0 3.log
0 4.log
0 dir1
0 dir2
0 file.txt
0 logs
[root@host181 test1]# du -sh /root/testdir/
4.0K /root/testdir/
[root@host181 test1]#
4、網絡相關
(1)ping ?網絡連通性測試
[root@host181 test1]# ping -c 4 www.baidu.com
PING www.baidu.com (36.152.44.93) 56(84) bytes of data.
64 bytes from 36.152.44.93 (36.152.44.93): icmp_seq=1 ttl=52 time=35.7 ms
64 bytes from 36.152.44.93 (36.152.44.93): icmp_seq=2 ttl=52 time=35.8 ms
64 bytes from 36.152.44.93 (36.152.44.93): icmp_seq=3 ttl=52 time=37.6 ms
64 bytes from 36.152.44.93 (36.152.44.93): icmp_seq=4 ttl=52 time=35.5 ms--- www.baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 35.571/36.209/37.658/0.865 ms
[root@host181 test1]#
(2)ifconfig/ip?網絡接口配置
[root@host181 test1]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.1.181 netmask 255.255.255.0 broadcast 192.168.1.255inet6 fe80::ee63:14dd:db70:74b2 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:ff:08:8a txqueuelen 1000 (Ethernet)RX packets 17351 bytes 1455172 (1.3 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 1140 bytes 201247 (196.5 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 2 bytes 102 (102.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2 bytes 102 (102.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255ether 52:54:00:42:ec:8d txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@host181 test1]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:ff:08:8a brd ff:ff:ff:ff:ff:ffinet 192.168.1.181/24 brd 192.168.1.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::ee63:14dd:db70:74b2/64 scope link noprefixroute valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:42:ec:8d brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:42:ec:8d brd ff:ff:ff:ff:ff:ff
[root@host181 test1]#
(3)netstat - 網絡統計
# 監聽端口和進程
netstat -tulnp # 路由表
netstat -r # 查看ipv4路由表
route -4n# 查看ipv6路由表
route -6n
(4)ssh 遠程登錄
ssh -p 22 user@host
(5)scp 安全復制
# 上傳
scp file user@host:/path # 下載
scp user@host:file .
5、權限管理
(1)chmod 修改權限
# 設置權限
chmod 755 script.sh # 添加執行權限
chmod +x file
(2)chown 修改所有者
# 修改所有者和組
chown user:group file
6、壓縮和解壓
(1)tar 打包和解包
# 創建tar.gz壓縮包
tar -czvf archive.tar.gz dir/ # 解壓tar.gz包
tar -xzvf archive.tar.gz
(2)zip/unzip ZIP壓縮
# 創建zip
zip -r archive.zip dir/ # 解壓zip
unzip archive.zip
二、shell?腳本語言
1、shell 的變量
(1)常用系統變量
變量名 | 說明 |
$PWD | 當前工作目錄 |
$HOME | 當前用戶的家目錄 |
$SHELL | 當前使用的 Shell |
$USER | 當前登錄的用戶名 |
$HOSTNAME | 當前主機名 |
[root@host181 testdir]# echo $PWD
/root/testdir
[root@host181 testdir]# echo $HOME
/root
[root@host181 testdir]# echo $SHELL
/bin/bash
[root@host181 testdir]# echo $USER
root
[root@host181 testdir]# echo $HOSTNAME
host181
(2)自定義變量
在bash中,變量默認類型都是字符串類型
定義變量:變量=值
撤銷變量:unset 變量
(3)特殊變量
變量 | 說明 |
---|---|
$0 | 當前腳本的文件名 |
$1 ,?$2 , ...,?$9 | 腳本的第 1~9 個參數 |
${10} ,?${11} , ... | 第 10 個及以后的參數(需要用?${ } ?語法) |
$# | 傳遞給腳本的參數個數 |
$? | 上一個命令的退出狀態(0=成功,非0=失敗) |
$RANDOM | 隨機數 |
2、運算符
(1)算術運算符
用于數值計算
運算符 | 說明 | 示例 |
---|---|---|
+ | 加法 | echo $((5 + 3)) ?→?8 |
- | 減法 | echo $((10 - 2)) ?→?8 |
* | 乘法 | echo $((2 * 4)) ?→?8 |
/ | 除法(取整) | echo $((10 / 3)) ?→?3 |
% | 取模(余數) | echo $((10 % 3)) ?→?1 |
** | 冪運算(Bash 支持) | echo $((2 ** 3)) ?→?8 |
++ | 自增 | x=5; ((x++)); echo $x ?→?6 |
-- | 自減 | x=5; ((x--)); echo $x ?→?4 |
(2)關系運算符
用于數值比較
運算符 | 說明 | 示例 |
---|---|---|
-eq | 等于(Equal) | [ 5 -eq 5 ] ?→?true |
-ne | 不等于(Not Equal) | [ 5 -ne 3 ] ?→?true |
-gt | 大于(Greater Than) | [ 5 -gt 3 ] ?→?true |
-lt | 小于(Less Than) | [ 5 -lt 10 ] ?→?true |
-ge | 大于等于(Greater or Equal) | [ 5 -ge 5 ] ?→?true |
-le | 小于等于(Less or Equal) | [ 5 -le 5 ] ?→?true |
(3)字符運算符
用于字符串比較
運算符 | 說明 | 示例 |
---|---|---|
= | 字符串相等 | [ "abc" = "abc" ] ?→?true |
!= | 字符串不相等 | [ "abc" != "def" ] ?→?true |
-z | 字符串為空 | [ -z "" ] ?→?true |
-n | 字符串非空 | [ -n "abc" ] ?→?true |
str1 > str2 | 按字典序大于 | [[ "b" > "a" ]] ?→?true |
str1 < str2 | 按字典序小于 | [[ "a" < "b" ]] ?→?true |
(4)邏輯運算符
運算符 | 說明 | 示例 |
---|---|---|
&& | 邏輯與(AND) |
|
|| | 邏輯或(OR) | [ 5 -lt 3 ] ||?[ 2 -lt 4 ] |
! | 邏輯非(NOT) |
|
(5)文件測試運算符
運算符 | 說明 | 示例 |
---|---|---|
-e | 文件/目錄是否存在 | [ -e file.txt ] ?→?true |
-d | 是目錄 | [ -d /tmp ] ?→?true |
-r | 可讀 | [ -r file.txt ] ?→?true |
-w | 可寫 | [ -w file.txt ] ?→?true |
-x | 可執行 | [ -x /bin/bash ] ?→?true |
-s | 文件非空 | [ -s file.txt ] ?→?true |
3、流程控制
(1)if 判斷
if [ 條件1 ]; then# 條件1成立時執行
elif [ 條件2 ]; then# 條件2成立時執行
else# 所有條件都不成立時執行
fi
?示例:
#!/bin/bash
read -p "請輸入一個數字: " numif [ "$num" -gt 10 ]; thenecho "數字大于 10"
elif [ "$num" -eq 10 ]; thenecho "數字等于 10"
elseecho "數字小于 10"
fi
(2)case 多條件判斷
適用于匹配多個固定值的情況。
case 變量 in"值1")# 如果變量的值等于值1,則執行程序1 ;;"值2")# 如果變量的值等于值2,則執行程序2 ;;*)# 默認情況(類似 else);;
esac
示例:
#!/bin/bash
read -p "請輸入 yes/no: " choicecase "$choice" in[Yy][Ee][Ss]|"y"|"Y")echo "你輸入了 yes";;[Nn][Oo]|"n"|"N")echo "你輸入了 no";;*)echo "輸入無效";;
esac
(3)for 循環
遍歷列表或范圍。
for 變量 in 列表; do# 循環體
done
?示例:
#!/bin/bash
# 遍歷列表
for fruit in "apple" "banana" "orange"; doecho "水果: $fruit"
done# 遍歷數字范圍(1~5)
for i in {1..5}; doecho "數字: $i"
done# 遍歷命令輸出
for file in $(ls); doecho "文件: $file"
done
(4)while 循環
當條件成立時循環
while [ 條件 ]; do# 循環體
done
?示例:
#!/bin/bash
count=1
while [ "$count" -le 5 ]; doecho "計數: $count"((count++))
done
(5)until 循環
直到條件成立時停止
until [ 條件 ]; do# 循環體
done
示例:
#!/bin/bash
count=1
until [ "$count" -gt 5 ]; doecho "計數: $count"((count++))
done
(6)循環控制
命令 | 說明 |
---|---|
break | 跳出當前循環 |
continue | 跳過本次循環,進入下一次 |
exit | 退出腳本(可帶狀態碼) |
4、函數
(1)系統函數
basename 提取文件名
[root@host181 test1]# ls -lrt
total 8
-rw-r--r-- 1 root root 0 Jan 1 2024 file.txt
-rw-r--r-- 1 root root 0 Jun 22 19:37 2.log
-rw-r--r-- 1 root root 0 Jun 22 20:54 3.log
-rw-r--r-- 1 root root 0 Jun 24 23:31 4.log
drwxr-xr-x 3 root root 19 Jun 24 23:52 logs
drwxr-xr-x 2 root root 6 Jun 24 23:53 dir1
drwxr-xr-x 2 root root 6 Jun 24 23:53 dir2
-rw-r--r-- 1 root root 558 Jun 25 02:07 1.log.bak
-rw-r--r-- 1 root root 555 Jun 25 02:08 1.log
[root@host181 test1]# pwd
/root/testdir/test1[root@host181 test1]# basename /home/user/test1/1.log
1.log# 去掉文件后綴
[root@host181 test1]# basename /home/user/test1/1.log .log
1
[root@host181 test1]#
dirname 提取文件所在絕對路徑
[root@host181 test1]# dirname /home/user/test1/1.log
/home/user/test1
[root@host181 test1]#
(2)自定義函數
# 方式1(推薦,兼容性強)
函數名() {# 函數體
}# 方式2(Bash 擴展語法)
function 函數名 {# 函數體
}# 方式3 return 帶上返回值(0~255)
函數名() {# 函數體return 0;
}
5、shell 內置工具
(1)read
# 從文件中讀取數據
#!/bin/bash
while read line; doecho "行內容: $line"
done < filename.txt
# IFS 是 shell 中的一個特殊環境變量,它定義了字段分隔符
#!/bin/bash
# 處理冒號分隔的/etc/passwd文件
while IFS=':' read -r username _ uid gid desc home shell; doecho "用戶: $username (UID: $uid, 主目錄: $home)"
done < /etc/passwd
(2)cut
參數 | 說明 |
---|---|
-d | 指定字段分隔符(默認是制表符?\t ) |
-f | 選擇字段(列) |
-c | 按字符位置剪切 |
-b | 按字節位置剪切 |
--complement | 反選(顯示未被選中的部分) |
示例:以 “,” 號分隔,提取第1、2列字段
示例:按字符位置提取
(3)sed
參數 | 說明 |
---|---|
-n | 只輸出處理過的行(默認會輸出所有行) |
-i | 直接修改文件(慎用,建議先不加?-i ?測試) |
-e | 指定多個命令 |
-r | 使用擴展正則表達式(`+? ()` 等不需要轉義) |
-f | 從腳本文件讀取?sed ?命令 |
# 批量替換文件內容
# 替換每行第一個 "apple" 為 "orange"(不修改原文件)
sed -i 's/apple/orange/' file.txt# 替換所有 "apple"(全局替換)
sed -i 's/apple/orange/g' file.txt# 替換第2行開始的 "apple"
sed -i '2,$ s/apple/orange/' file.txt# 只替換包含 "banana" 的行中的 "apple"
sed -i '/banana/ s/apple/orange/' file.txt# 使用擴展正則表達式(`+` 匹配1次或多次)
sed -i -r 's/a+/AAA/' file.txt
#?刪除日志文件中的空行
# 刪除第3行
sed -i '3d' file.txt# 刪除空行
sed -i '/^$/d' file.txt# 刪除包含 "error" 的行
sed -i '/error/d' file.txt# 刪除從第2行到第4行
sed -i '2,4d' file.txt
?
# 插入/追加文本
# 在每行前插入 "INSERT: "
sed -i 'i\INSERT: ' file.txt# 在第2行前插入 "INSERT: "
sed -i '2i\INSERT: ' file.txt# 在包含 "world" 的行后追加 "APPEND: Hello"
sed -i '/world/ a\APPEND: Hello' file.txt# 替換整行(將包含 "old" 的行替換為 "new line")
sed -i '/old/ c\new line' file.txt
(4)awk
# 提取文件的第一列(默認空格分隔)
awk '{print $1}' file.txt# 指定分隔符(如逗號)
awk -F ',' '{print $2}' data.csv# 打印最后一列
awk '{print $NF}' file.txt# 打印文件名和行號(調試用)
awk '{print FILENAME, NR, $0}' file.txt
?
(5)sort
# 按字母排序
sort file# 按數字大小排序
sort -n file# 去重排序
sort -u file# 反向排序
sort -r file