4177 字
21 分钟

Linux高级命令和技巧

2026-02-05
浏览量 加载中...

Linux高级命令和技巧#

高级文件管理命令#

find - 查找文件和目录#

find命令是一个功能强大的文件查找工具,可以根据各种条件查找文件和目录。

Terminal window
# 在当前目录及其子目录中查找所有.txt文件
find . -name "*.txt"
# 在指定目录中查找所有.txt文件
find /path/to/directory -name "*.txt"
# 忽略大小写查找
find . -iname "*.TXT"
# 查找特定类型的文件
find . -type f -name "*.txt" # 只查找普通文件
find . -type d -name "*dir*" # 只查找目录
find . -type l -name "*link*" # 只查找符号链接
# 查找特定大小的文件
find . -size +10M # 查找大于10MB的文件
find . -size -10k # 查找小于10KB的文件
find . -size 512c # 查找大小为512字节的文件
# 查找特定权限的文件
find . -perm 644 # 查找权限为644的文件
find . -perm -u+x # 查找所有者有执行权限的文件
# 查找特定所有者的文件
find . -user username # 查找所有者为username的文件
find . -group groupname # 查找所属组为groupname的文件
# 查找特定修改时间的文件
find . -mtime -7 # 查找7天内修改过的文件
find . -mtime +30 # 查找30天前修改过的文件
find . -atime -1 # 查找1天内访问过的文件
find . -ctime -1 # 查找1天内状态改变过的文件
# 查找并执行命令
find . -name "*.txt" -exec ls -l {} \; # 查找.txt文件并显示详细信息
find . -name "*.tmp" -delete # 查找并删除.tmp文件
find . -name "*.txt" -exec cp {} backup/ \; # 查找.txt文件并复制到backup目录

xargs - 从标准输入构建和执行命令#

xargs命令用于从标准输入读取数据,并将其作为参数传递给其他命令。

Terminal window
# 查找.txt文件并显示详细信息
find . -name "*.txt" | xargs ls -l
# 查找.txt文件并删除
find . -name "*.txt" | xargs rm
# 查找.txt文件并复制到backup目录
find . -name "*.txt" | xargs -I {} cp {} backup/
# 限制每次执行的命令数量
find . -name "*.txt" | xargs -n 5 ls -l
# 并行执行命令
find . -name "*.txt" | xargs -P 4 -I {} gzip {}

rsync - 远程文件同步#

rsync命令是一个强大的文件同步工具,可以在本地或远程系统之间同步文件。

Terminal window
# 本地同步
rsync -av source/ destination/
# 远程同步(从本地到远程)
rsync -av source/ user@remote:/path/to/destination/
# 远程同步(从远程到本地)
rsync -av user@remote:/path/to/source/ destination/
# 同步时删除目标目录中不存在的文件
rsync -av --delete source/ destination/
# 只同步修改过的文件
rsync -av --update source/ destination/
# 压缩传输以提高速度
rsync -avz source/ destination/
# 查看同步过程
rsync -av --progress source/ destination/

高级文本处理命令#

sed - 流编辑器#

sed命令是一个流编辑器,用于对文本进行替换、删除、插入等操作。

Terminal window
# 替换文本中的字符串
sed 's/old/new/' file.txt # 替换每行第一个匹配
sed 's/old/new/g' file.txt # 替换所有匹配
sed 's/old/new/2' file.txt # 替换每行第二个匹配
# 替换并修改文件
sed -i 's/old/new/g' file.txt
# 删除行
sed '/pattern/d' file.txt # 删除包含pattern的行
sed '1,5d' file.txt # 删除1-5行
sed '5d' file.txt # 删除第5行
# 插入行
sed '1i\Insert this line at the beginning' file.txt # 在第一行前插入
sed '5a\Insert this line after line 5' file.txt # 在第5行后插入
# 替换整个行
sed 's/.*/Replacement line/' file.txt
# 使用正则表达式
sed 's/^\s*//' file.txt # 移除行首空白
sed 's/\s*$//' file.txt # 移除行尾空白
sed 's/^\s*\|\s*$//g' file.txt # 移除行首和行尾空白

awk - 文本处理语言#

awk是一种强大的文本处理语言,用于对文本进行分析和处理。

Terminal window
# 打印文件的所有行
awk '{print}' file.txt
# 打印特定列
awk '{print $1}' file.txt # 打印第一列
awk '{print $1, $3}' file.txt # 打印第一和第三列
awk '{print $0}' file.txt # 打印整行
# 使用分隔符
awk -F"," '{print $1}' file.csv # 使用逗号作为分隔符
# 条件打印
awk '$3 > 50 {print $1, $3}' file.txt # 打印第三列大于50的行
awk '/pattern/ {print $0}' file.txt # 打印包含pattern的行
# 计算
awk '{sum += $1} END {print sum}' file.txt # 计算第一列的和
awk '{sum += $1} END {print sum/NR}' file.txt # 计算第一列的平均值
# 格式化输出
awk '{printf "%-10s %-5d\n", $1, $2}' file.txt
# 内置变量
# NR: 当前行号
# NF: 当前行的字段数
# $0: 整行内容
# $1, $2, ...: 各个字段

sort - 排序文本#

sort命令用于对文本文件进行排序。

Terminal window
# 对文件进行排序
sort file.txt
# 反向排序
sort -r file.txt
# 按数值排序(默认按字典序)
sort -n file.txt
# 按特定列排序
sort -k 2 file.txt # 按第二列排序
sort -k 2n file.txt # 按第二列数值排序
# 去重排序
sort -u file.txt
# 检查文件是否已排序
sort -c file.txt
# 合并已排序的文件
sort -m file1.txt file2.txt
# 按月份排序
sort -M file.txt
# 稳定排序(保持相等键的原始顺序)
sort -s file.txt

uniq - 去除重复行#

uniq命令用于去除文本文件中的重复行,通常与sort命令一起使用。

Terminal window
# 去除重复行(只去除相邻的重复行)
uniq file.txt
# 去除所有重复行(需要先排序)
sort file.txt | uniq
# 显示重复行
sort file.txt | uniq -d
# 显示重复行及其出现次数
sort file.txt | uniq -c
# 显示所有行及其出现次数
sort file.txt | uniq -c
# 只显示出现n次以上的行
sort file.txt | uniq -c | awk '$1 > 2 {print $0}'

高级系统管理命令#

systemctl - 系统服务管理#

systemctl命令用于管理systemd系统服务。

Terminal window
# 查看服务状态
systemctl status service_name
# 启动服务
systemctl start service_name
# 停止服务
systemctl stop service_name
# 重启服务
systemctl restart service_name
# 重新加载服务配置
systemctl reload service_name
# 启用服务(开机自启)
systemctl enable service_name
# 禁用服务(禁止开机自启)
systemctl disable service_name
# 查看所有服务状态
systemctl list-units --type=service
# 查看所有已启用的服务
systemctl list-unit-files --type=service --state=enabled
# 查看所有失败的服务
systemctl list-units --type=service --state=failed

journalctl - 查看系统日志#

journalctl命令用于查看systemd日志。

Terminal window
# 查看所有日志
journalctl
# 查看最近的日志
journalctl -n 100
# 实时查看日志
journalctl -f
# 查看特定服务的日志
journalctl -u service_name
# 查看特定时间段的日志
journalctl --since "2026-02-05 00:00:00" --until "2026-02-05 12:00:00"
# 查看错误日志
journalctl -p err..emerg
# 按时间排序(最新的在前)
journalctl -r
# 查看引导日志
journalctl -b
journalctl -b -1 # 查看上一次引导的日志

htop - 交互式进程查看器#

htop命令是一个交互式的进程查看器,是top命令的增强版。

Terminal window
# 启动htop
top
# 常用快捷键
# F1: 显示帮助
# F2: 设置
# F3: 搜索进程
# F4: 过滤进程
# F5: 切换树状视图
# F6: 排序
# F7: 降低优先级
# F8: 提高优先级
# F9: 终止进程
# F10: 退出

lsof - 列出打开的文件#

lsof命令用于列出系统中打开的文件。

Terminal window
# 列出所有打开的文件
lsof
# 列出特定用户打开的文件
lsof -u username
# 列出特定进程打开的文件
lsof -p PID
# 列出特定端口打开的文件
lsof -i :8080
# 列出网络连接
lsof -i
# 列出TCP连接
lsof -i tcp
# 列出UDP连接
lsof -i udp
# 列出特定目录下打开的文件
lsof +D /path/to/directory

netstat - 网络状态查看#

netstat命令用于查看网络连接、路由表、接口统计等信息。

Terminal window
# 查看所有网络连接
netstat -a
# 查看TCP连接
netstat -at
# 查看UDP连接
netstat -au
# 查看监听状态的端口
netstat -l
# 查看监听状态的TCP端口
netstat -lt
# 查看监听状态的UDP端口
netstat -lu
# 查看路由表
netstat -r
# 查看接口统计
netstat -i
# 查看网络连接和进程
netstat -tp

高级磁盘管理命令#

fdisk - 磁盘分区#

fdisk命令用于管理磁盘分区。

Terminal window
# 列出所有磁盘和分区
fdisk -l
# 进入磁盘分区模式
fdisk /dev/sda
# 在fdisk交互模式中的常用命令
# p: 显示分区表
# n: 创建新分区
# d: 删除分区
# t: 修改分区类型
# w: 保存更改并退出
# q: 退出不保存更改

mkfs - 创建文件系统#

mkfs命令用于在分区上创建文件系统。

Terminal window
# 在分区上创建ext4文件系统
mkfs.ext4 /dev/sda1
# 在分区上创建xfs文件系统
mkfs.xfs /dev/sda1
# 在分区上创建FAT32文件系统
mkfs.vfat -F 32 /dev/sda1
# 在分区上创建NTFS文件系统
mkfs.ntfs /dev/sda1

mount - 挂载文件系统#

mount命令用于挂载文件系统。

Terminal window
# 挂载分区到目录
mount /dev/sda1 /mnt
# 挂载ISO文件
mount -o loop file.iso /mnt
# 挂载网络共享
mount -t cifs //server/share /mnt -o username=user,password=pass
# 挂载NFS共享
mount -t nfs server:/share /mnt
# 查看已挂载的文件系统
mount
# 卸载文件系统
umount /mnt
# 强制卸载
umount -f /mnt

dd - 复制和转换文件#

dd命令用于复制和转换文件,常用于创建启动盘、备份分区等。

Terminal window
# 备份整个磁盘到镜像文件
dd if=/dev/sda of=/path/to/image.img bs=4M
# 从镜像文件恢复磁盘
dd if=/path/to/image.img of=/dev/sda bs=4M
# 创建启动盘
dd if=/path/to/iso.iso of=/dev/sdb bs=4M status=progress
# 备份分区
dd if=/dev/sda1 of=/path/to/partition.img bs=4M
# 填充零到文件(安全删除)
dd if=/dev/zero of=/path/to/file bs=1M count=100
# 生成随机数据
dd if=/dev/random of=/path/to/random.bin bs=1M count=10

高级网络命令#

curl - 网络数据传输工具#

curl命令用于在网络上传输数据,支持多种协议。

Terminal window
# 下载文件
curl -O https://example.com/file.txt
# 下载文件并重命名
curl -o newname.txt https://example.com/file.txt
# 显示HTTP头
curl -I https://example.com
# 发送GET请求
curl https://example.com/api?param=value
# 发送POST请求
curl -X POST -d "param1=value1&param2=value2" https://example.com/api
# 发送JSON数据
curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://example.com/api
# 使用基本认证
curl -u username:password https://example.com
# 跟随重定向
curl -L https://example.com
# 显示详细信息
curl -v https://example.com

wget - 网络下载工具#

wget命令用于从网络上下载文件。

Terminal window
# 下载文件
wget https://example.com/file.txt
# 下载文件并重命名
wget -O newname.txt https://example.com/file.txt
# 递归下载(镜像网站)
wget -r https://example.com
# 后台下载
wget -b https://example.com/largefile.zip
# 断点续传
wget -c https://example.com/largefile.zip
# 限制下载速度
wget --limit-rate=100k https://example.com/largefile.zip
# 批量下载
wget -i urls.txt

ssh - 安全远程登录#

ssh命令用于通过SSH协议安全地远程登录到其他计算机。

Terminal window
# 远程登录到服务器
ssh username@hostname
# 使用特定端口
ssh -p 2222 username@hostname
# 使用密钥登录
ssh -i ~/.ssh/id_rsa username@hostname
# 执行远程命令
ssh username@hostname "ls -la"
# 端口转发
# 本地端口转发
ssh -L local_port:remote_host:remote_port username@hostname
# 远程端口转发
ssh -R remote_port:local_host:local_port username@hostname
# 动态端口转发(SOCKS代理)
ssh -D local_port username@hostname
# 禁用密码登录(只允许密钥登录)
# 在服务器的/etc/ssh/sshd_config中设置
# PasswordAuthentication no

scp - 安全复制文件#

scp命令用于通过SSH协议安全地复制文件。

Terminal window
# 本地文件复制到远程服务器
scp local_file.txt username@hostname:/path/to/destination/
# 远程服务器文件复制到本地
scp username@hostname:/path/to/remote_file.txt /path/to/local/
# 复制目录
scp -r local_directory/ username@hostname:/path/to/destination/
# 使用特定端口
scp -P 2222 local_file.txt username@hostname:/path/to/destination/
# 使用压缩
scp -C local_file.txt username@hostname:/path/to/destination/

高级包管理命令#

dpkg - Debian包管理#

dpkg命令是Debian系统的底层包管理工具。

Terminal window
# 安装deb包
dpkg -i package.deb
# 卸载包
dpkg -r package_name
# 完全卸载包(包括配置文件)
dpkg -P package_name
# 列出已安装的包
dpkg -l
# 查看包的详细信息
dpkg -s package_name
# 查看包的文件列表
dpkg -L package_name
# 查看文件属于哪个包
dpkg -S /path/to/file

rpm - RPM包管理#

rpm命令是RHEL、CentOS等系统的包管理工具。

Terminal window
# 安装rpm包
rpm -ivh package.rpm
# 升级包
rpm -Uvh package.rpm
# 卸载包
rpm -e package_name
# 列出已安装的包
rpm -qa
# 查看包的详细信息
rpm -qi package_name
# 查看包的文件列表
rpm -ql package_name
# 查看文件属于哪个包
rpm -qf /path/to/file
# 验证包
rpm -V package_name

高级系统监控命令#

vmstat - 虚拟内存统计#

vmstat命令用于显示虚拟内存、进程、CPU活动等系统信息。

Terminal window
# 显示系统统计信息
vmstat
# 每2秒显示一次,共显示5次
vmstat 2 5
# 显示详细信息
vmstat -a
# 显示磁盘统计信息
vmstat -d
# 显示内存统计信息
vmstat -m
# 显示进程统计信息
vmstat -p /dev/sda1

iostat - 输入/输出统计#

iostat命令用于显示CPU和磁盘I/O统计信息。

Terminal window
# 显示CPU和磁盘I/O统计信息
iostat
# 每2秒显示一次,共显示5次
iostat 2 5
# 显示详细的磁盘统计信息
iostat -x
# 显示指定磁盘的统计信息
iostat -p sda

sar - 系统活动报告#

sar命令用于收集、报告和保存系统活动信息。

Terminal window
# 显示CPU使用情况
sar
# 每2秒显示一次,共显示5次
sar 2 5
# 显示内存使用情况
sar -r
# 显示磁盘I/O统计
sar -d
# 显示网络统计
sar -n DEV
# 显示进程统计
sar -q
# 保存系统活动信息
sar -o datafile 1 10
# 从数据文件中读取信息
sar -f datafile

高级Shell技巧#

命令替换#

命令替换允许将命令的输出作为另一个命令的参数。

Terminal window
# 使用反引号进行命令替换
ls -l `which bash`
# 使用$()进行命令替换(推荐)
ls -l $(which bash)
# 在变量中使用命令替换
current_dir=$(pwd)
echo "Current directory: $current_dir"
# 在脚本中使用命令替换
files=$(ls *.txt)
for file in $files; do
echo "Processing $file"
done

变量扩展#

Shell变量扩展提供了多种处理变量的方式。

Terminal window
# 基本变量扩展
echo "$VAR"
# 变量不存在时使用默认值
echo "${VAR:-default}"
# 变量不存在时设置默认值并使用
echo "${VAR:=default}"
# 变量存在时使用替代值
echo "${VAR:+alternate}"
# 变量不存在时显示错误信息
echo "${VAR:?error message}"
# 字符串截取
echo "${VAR:0:5}" # 从开始截取5个字符
echo "${VAR:5}" # 从第6个字符开始截取
echo "${VAR: -5}" # 从末尾截取5个字符(注意空格)
# 字符串替换
echo "${VAR/old/new}" # 替换第一个匹配
echo "${VAR//old/new}" # 替换所有匹配
echo "${VAR/#old/new}" # 替换开头的匹配
echo "${VAR/%old/new}" # 替换结尾的匹配
# 字符串长度
echo "${#VAR}"

数组#

Shell支持数组,可以存储多个值。

Terminal window
# 定义数组
fruits=('apple' 'banana' 'cherry')
# 访问数组元素
echo "${fruits[0]}" # 第一个元素
echo "${fruits[1]}" # 第二个元素
echo "${fruits[*]}" # 所有元素(作为单个字符串)
echo "${fruits[@]}" # 所有元素(作为多个字符串)
# 数组长度
echo "${#fruits[@]}"
# 添加元素
fruits+=('date')
# 遍历数组
for fruit in "${fruits[@]}"; do
echo "Fruit: $fruit"
done
# 关联数组(bash 4.0+)
declare -A colors
colors['red']='#ff0000'
colors['green']='#00ff00'
colors['blue']='#0000ff'
echo "Red: ${colors['red']}"

函数#

Shell函数允许将一系列命令组合在一起,方便重复使用。

Terminal window
# 定义函数
greet() {
echo "Hello, $1!"
}
# 调用函数
greet "World"
# 带返回值的函数
add() {
local sum=$(( $1 + $2 ))
echo $sum
}
# 使用函数返回值
result=$(add 5 3)
echo "Sum: $result"
# 函数库
# 可以将常用函数放在一个文件中,然后在其他脚本中 sourcing 该文件
# source functions.sh

总结#

本文介绍了Linux系统中一些高级命令和技巧,包括文件管理、文本处理、系统管理、磁盘管理、网络命令、包管理、系统监控和Shell技巧等方面的内容。

这些高级命令和技巧可以帮助你更高效地管理和操作Linux系统,解决更复杂的问题。通过不断练习和使用,你会逐渐掌握这些命令,并能够灵活运用它们来完成各种任务。

练习#

  1. 使用find命令查找当前目录及其子目录中所有大于1MB的.txt文件。

  2. 使用grepxargs命令查找当前目录及其子目录中包含”error”的.log文件,并显示这些文件的详细信息。

  3. 使用sed命令将文件中所有的”old”替换为”new”。

  4. 使用awk命令计算文件中第一列的平均值。

  5. 使用rsync命令将本地目录同步到远程服务器。

  6. 使用lsof命令查看占用8080端口的进程。

  7. 使用dd命令创建一个100MB的测试文件。

  8. 使用ssh命令远程登录到服务器并执行命令。

  9. 使用scp命令将文件复制到远程服务器。

  10. 使用Shell函数定义一个计算两个数乘积的函数,并调用它。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Linux高级命令和技巧
https://blog.vanilla.net.cn/posts/2026-02-05-linux-advanced-commands/
作者
鹁鸪
发布于
2026-02-05
许可协议
CC BY-NC-SA 4.0

评论区

目录