常用 Linux 命令和 shell 脚本语言整理

发布于:2025-07-03 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

一、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 -h
              total        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 1500
        inet 192.168.1.181  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 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 0
        TX packets 1140  bytes 201247 (196.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::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 0
        TX packets 2  bytes 102 (102.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 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 0
        TX 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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::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 1000
    link/ether 00:0c:29:ff:08:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.181/24 brd 192.168.1.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 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 1000
    link/ether 52:54:00:42:ec:8d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/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)

[ 5 -gt 3 ] && [ 2 -lt 4 ] → true

|| 逻辑或(OR)

[ 5 -lt 3 ] || [ 2 -lt 4 ]true

! 逻辑非(NOT)

! [ 5 -eq 3 ] → true

(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 "请输入一个数字: " num

if [ "$num" -gt 10 ]; then
    echo "数字大于 10"
elif [ "$num" -eq 10 ]; then
    echo "数字等于 10"
else
    echo "数字小于 10"
fi
(2)case 多条件判断

适用于匹配多个固定值的情况。

case 变量 in
    "值1")
        # 如果变量的值等于值1,则执行程序1 
        ;;
    "值2")
        # 如果变量的值等于值2,则执行程序2 
        ;;
    *)
        # 默认情况(类似 else)
        ;;
esac

示例:

#!/bin/bash
read -p "请输入 yes/no: " choice

case "$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"; do
    echo "水果: $fruit"
done

# 遍历数字范围(1~5)
for i in {1..5}; do
    echo "数字: $i"
done

# 遍历命令输出
for file in $(ls); do
    echo "文件: $file"
done
(4)while 循环

当条件成立时循环

while [ 条件 ]; do
    # 循环体
done

 示例:

#!/bin/bash
count=1
while [ "$count" -le 5 ]; do
    echo "计数: $count"
    ((count++))
done
(5)until 循环

直到条件成立时停止

until [ 条件 ]; do
    # 循环体
done

示例:

#!/bin/bash
count=1
until [ "$count" -gt 5 ]; do
    echo "计数: $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; do
    echo "行内容: $line"
done < filename.txt

# IFS 是 shell 中的一个特殊环境变量,它定义了字段分隔符

#!/bin/bash
# 处理冒号分隔的/etc/passwd文件
while IFS=':' read -r username _ uid gid desc home shell; do
    echo "用户: $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


网站公告

今日签到

点亮在社区的每一天
去签到