Linux高级命令和技巧
Linux高级命令和技巧
高级文件管理命令
find - 查找文件和目录
find命令是一个功能强大的文件查找工具,可以根据各种条件查找文件和目录。
# 在当前目录及其子目录中查找所有.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命令用于从标准输入读取数据,并将其作为参数传递给其他命令。
# 查找.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命令是一个强大的文件同步工具,可以在本地或远程系统之间同步文件。
# 本地同步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命令是一个流编辑器,用于对文本进行替换、删除、插入等操作。
# 替换文本中的字符串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是一种强大的文本处理语言,用于对文本进行分析和处理。
# 打印文件的所有行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命令用于对文本文件进行排序。
# 对文件进行排序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.txtuniq - 去除重复行
uniq命令用于去除文本文件中的重复行,通常与sort命令一起使用。
# 去除重复行(只去除相邻的重复行)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系统服务。
# 查看服务状态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=failedjournalctl - 查看系统日志
journalctl命令用于查看systemd日志。
# 查看所有日志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 -bjournalctl -b -1 # 查看上一次引导的日志htop - 交互式进程查看器
htop命令是一个交互式的进程查看器,是top命令的增强版。
# 启动htoptop
# 常用快捷键# F1: 显示帮助# F2: 设置# F3: 搜索进程# F4: 过滤进程# F5: 切换树状视图# F6: 排序# F7: 降低优先级# F8: 提高优先级# F9: 终止进程# F10: 退出lsof - 列出打开的文件
lsof命令用于列出系统中打开的文件。
# 列出所有打开的文件lsof
# 列出特定用户打开的文件lsof -u username
# 列出特定进程打开的文件lsof -p PID
# 列出特定端口打开的文件lsof -i :8080
# 列出网络连接lsof -i
# 列出TCP连接lsof -i tcp
# 列出UDP连接lsof -i udp
# 列出特定目录下打开的文件lsof +D /path/to/directorynetstat - 网络状态查看
netstat命令用于查看网络连接、路由表、接口统计等信息。
# 查看所有网络连接netstat -a
# 查看TCP连接netstat -at
# 查看UDP连接netstat -au
# 查看监听状态的端口netstat -l
# 查看监听状态的TCP端口netstat -lt
# 查看监听状态的UDP端口netstat -lu
# 查看路由表netstat -r
# 查看接口统计netstat -i
# 查看网络连接和进程netstat -tp高级磁盘管理命令
fdisk - 磁盘分区
fdisk命令用于管理磁盘分区。
# 列出所有磁盘和分区fdisk -l
# 进入磁盘分区模式fdisk /dev/sda
# 在fdisk交互模式中的常用命令# p: 显示分区表# n: 创建新分区# d: 删除分区# t: 修改分区类型# w: 保存更改并退出# q: 退出不保存更改mkfs - 创建文件系统
mkfs命令用于在分区上创建文件系统。
# 在分区上创建ext4文件系统mkfs.ext4 /dev/sda1
# 在分区上创建xfs文件系统mkfs.xfs /dev/sda1
# 在分区上创建FAT32文件系统mkfs.vfat -F 32 /dev/sda1
# 在分区上创建NTFS文件系统mkfs.ntfs /dev/sda1mount - 挂载文件系统
mount命令用于挂载文件系统。
# 挂载分区到目录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 /mntdd - 复制和转换文件
dd命令用于复制和转换文件,常用于创建启动盘、备份分区等。
# 备份整个磁盘到镜像文件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命令用于在网络上传输数据,支持多种协议。
# 下载文件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¶m2=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.comwget - 网络下载工具
wget命令用于从网络上下载文件。
# 下载文件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.txtssh - 安全远程登录
ssh命令用于通过SSH协议安全地远程登录到其他计算机。
# 远程登录到服务器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 noscp - 安全复制文件
scp命令用于通过SSH协议安全地复制文件。
# 本地文件复制到远程服务器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系统的底层包管理工具。
# 安装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/filerpm - RPM包管理
rpm命令是RHEL、CentOS等系统的包管理工具。
# 安装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活动等系统信息。
# 显示系统统计信息vmstat
# 每2秒显示一次,共显示5次vmstat 2 5
# 显示详细信息vmstat -a
# 显示磁盘统计信息vmstat -d
# 显示内存统计信息vmstat -m
# 显示进程统计信息vmstat -p /dev/sda1iostat - 输入/输出统计
iostat命令用于显示CPU和磁盘I/O统计信息。
# 显示CPU和磁盘I/O统计信息iostat
# 每2秒显示一次,共显示5次iostat 2 5
# 显示详细的磁盘统计信息iostat -x
# 显示指定磁盘的统计信息iostat -p sdasar - 系统活动报告
sar命令用于收集、报告和保存系统活动信息。
# 显示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技巧
命令替换
命令替换允许将命令的输出作为另一个命令的参数。
# 使用反引号进行命令替换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变量扩展提供了多种处理变量的方式。
# 基本变量扩展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支持数组,可以存储多个值。
# 定义数组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 colorscolors['red']='#ff0000'colors['green']='#00ff00'colors['blue']='#0000ff'echo "Red: ${colors['red']}"函数
Shell函数允许将一系列命令组合在一起,方便重复使用。
# 定义函数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系统,解决更复杂的问题。通过不断练习和使用,你会逐渐掌握这些命令,并能够灵活运用它们来完成各种任务。
练习
-
使用
find命令查找当前目录及其子目录中所有大于1MB的.txt文件。 -
使用
grep和xargs命令查找当前目录及其子目录中包含”error”的.log文件,并显示这些文件的详细信息。 -
使用
sed命令将文件中所有的”old”替换为”new”。 -
使用
awk命令计算文件中第一列的平均值。 -
使用
rsync命令将本地目录同步到远程服务器。 -
使用
lsof命令查看占用8080端口的进程。 -
使用
dd命令创建一个100MB的测试文件。 -
使用
ssh命令远程登录到服务器并执行命令。 -
使用
scp命令将文件复制到远程服务器。 -
使用Shell函数定义一个计算两个数乘积的函数,并调用它。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!