一、文件与目录操作
列出目录内容
ls:列出当前目录ls -l:显示详细信息(权限、拥有者、大小、修改时间)ls -a:包括隐藏文件(.开头)ls -lh:人性化显示文件大小(K, M, G)ls -lt:按修改时间排序,最新在前ls -lS:按文件大小排序,最大在前
ls -la /etc # 列出 /etc 目录的所有文件(包括隐藏文件) ls -lh ~/Downloads # 显示下载目录文件,以人性化方式显示大小 ls -lt *.log # 按时间排序显示所有日志文件目录切换与查看
pwd:显示当前所在目录的完整路径cd 目录:切换目录cd ..:返回上级目录cd -:返回上次所在目录cd ~:切换到用户主目录
pwd # 显示当前工作目录 cd /var/log # 切换到系统日志目录 cd ../.. # 返回上两级目录 cd - # 快速返回上一个访问的目录 cd ~/Documents # 切换到用户文档目录复制/移动/删除
cp 源 目标:复制文件或目录(加-r递归)cp -i:覆盖前询问cp -p:保留源文件属性(时间戳、权限等)mv 源 目标:移动或重命名mv -i:覆盖前询问rm 文件:删除文件;rm -r 目录:递归删除目录rm -i:删除前询问确认rm -f:强制删除,不询问
cp file1.txt file2.txt # 复制文件 cp -r dir1/ dir2/ # 递归复制目录 cp -ip old.conf new.conf # 复制文件并保留属性,覆盖前询问 mv oldname.txt newname.txt # 重命名文件 mv *.jpg ~/Pictures/ # 移动所有图片到目录 rm -rf temp/ # 强制删除目录及内容(慎用)创建文件与目录
mkdir 目录名:创建目录mkdir -p 路径/目录:创建多级目录touch 文件名:创建空文件或更新时间戳rmdir 目录名:删除空目录tree:以树状图显示目录结构(若未安装可sudo apt install tree)
链接操作
ln -s 源文件 软链接:创建软链接(符号链接)ln 源文件 硬链接:创建硬链接readlink 链接:查看链接指向的实际路径
ln -s /usr/bin/python3 ~/bin/python # 创建 Python 软链接 ln important.txt backup_hard_link.txt # 创建硬链接 readlink /bin/sh # 查看链接指向的实际文件 ls -l /bin | grep '^l' # 查看所有符号链接查看文件内容
cat 文件:一次性显示全文cat -n:显示行号more/less 文件:分页查看,/ + 关键字搜索,n跳到下一个匹配head -n 10 文件:查看前 10 行;tail -n 10 文件:后 10 行tail -f 文件:实时追踪文件新增内容,常用于日志监控file 文件:查看文件类型
二、文本处理与过滤
过滤与查找
grep 模式 文件:查找匹配行;-i忽略大小写;-n显示行号;-v反向查找grep -r 模式 目录:递归搜索目录grep -E '正则表达式':使用扩展正则表达式egrep:等同于grep -Eawk '{print $1,$3}' 文件:按空格分列,打印第 1、3 列cut -d':' -f1 /etc/passwd:以:分割,取第一列sed 's/old/new/g' 文件:替换(默认只输出到标准输出);加-i直接修改文件sed -n '1,10p' 文件:只显示第 1-10 行
grep -n "ERROR" server.log # 查找错误日志,显示行号 grep -r "TODO" ./src # 递归搜索源代码中的 TODO grep -E '^[0-9]{3}-[0-9]{4}排序与去重
sort 文件:排序;sort -n数值排序;-r逆序;-k n指定第 n 列排序uniq 文件:去除相邻重复;uniq -c统计次数;常与sort管道配合:sort abc.txt | uniq -ccomm 文件1 文件2:比较两个已排序文件的异同
统计与比较
wc -l 文件:统计行数;-m字符数;-c字节数;-L最长行长度;-w单词数diff 文件1 文件2:比较文件差异diff -u:以统一格式显示差异cmp 文件1 文件2:二进制比较文件
字符转换
tr 'a-z' 'A-Z' < 文件:小写转大写tr -d '0-9':删除所有数字tr -s ' ':压缩连续空格为单个空格
echo "hello world" | tr 'a-z' 'A-Z' # 转换为大写: HELLO WORLD echo "user123pass456" | tr -d '0-9' # 删除数字: userpass echo "too many spaces" | tr -s ' ' # 压缩空格: too many spaces cat file.txt | tr '\n' ' ' # 将换行符替换为空格
三、权限与拥有者
查看权限
ls -l第一列如-rwxr-xr--:分别是文件类型、用户/组/其他用户的读(r)/写(w)/执行(x) 权限stat 文件:查看文件详细状态信息
修改权限
chmod u+rw 文件:用户添加读写权限;也可用数字模式,如chmod 755 文件chmod g-w 文件:组移除写权限chmod o+x 文件:其他用户添加执行权限chmod -R 755 目录:递归修改目录及子目录权限
chmod 644 file.txt # 设置 rw-r--r-- 权限 chmod u+x script.sh # 给所有者添加执行权限 chmod -R 755 /var/www/html # 递归设置 web 目录权限 chmod a-x sensitive.dat # 移除所有用户的执行权限修改拥有者/所属组
chown user:group 文件:同时修改用户与组chown user 文件或chown :group 文件chown -R user:group 目录:递归修改目录权限
特殊权限
chmod u+s 文件:设置 SUID 权限chmod g+s 目录:设置 SGID 权限chmod +t 目录:设置粘滞位umask:查看默认权限掩码umask 022:设置默认权限掩码
文件属性
lsattr 文件:查看文件特殊属性chattr +i 文件:设置不可修改属性chattr +a 文件:设置只能追加属性
chattr +i /etc/resolv.conf # 防止文件被修改 chattr +a /var/log/secure # 只允许追加内容 lsattr /etc/resolv.conf # 查看文件属性 chattr -i /etc/resolv.conf # 移除不可修改属性
四、进程与作业管理
查看进程
ps -ef:列出所有进程;常与grep结合过滤ps aux:显示详细进程信息pstree:以树状图显示进程关系top/htop:动态监控 CPU/内存/进程(按 q 退出)pgrep 进程名:按名称查找进程 ID
杀死进程
kill PID:温和终止(发送 SIGTERM 信号)kill -9 PID:强制终止(发送 SIGKILL 信号)kill -l:列出所有信号pkill 进程名/killall 进程名:按名杀死killall -u 用户名:杀死指定用户的所有进程
进程优先级
nice -n 10 命令:以较低优先级运行命令renice +10 -p PID:调整运行中进程的优先级
后台与作业控制
command &:后台运行jobs:查看后台作业,fg %1将第 1 个作业拉到前台,bg %1让其后台运行nohup command &:后台运行且忽略挂断信号(退出终端后继续运行)Ctrl+Z:挂起当前进程Ctrl+C:终止当前进程
五、网络与远程操作
网络诊断
ping 主机:连通性测试ping -c 4:只发送 4 个数据包traceroute 主机:路由追踪mtr 主机:结合 ping 和 traceroute 功能netstat -anp:查看端口、连接;常与grep结合ss -tulnp:更现代的端口查看工具nmap 主机:端口扫描(需要安装)
DNS 查询
nslookup 域名:查询 DNS 记录dig 域名:详细 DNS 查询host 域名:简单 DNS 查询
nslookup google.com # 查询域名的 IP 地址 dig @8.8.8.8 example.com # 使用指定 DNS 服务器查询 dig example.com MX # 查询邮件服务器记录 host -t AAAA ipv6.google.com # 查询 IPv6 地址网络配置
ifconfig:查看网络接口(较旧)ip addr show:查看 IP 地址(现代替代 ifconfig)ip route show:查看路由表hostname:显示主机名hostname -I:显示所有 IP 地址
ip addr show eth0 # 显示特定网卡信息 ip route add 192.168.1.0/24 via 192.168.1.1 # 添加静态路由 ip link set eth0 up # 启用网卡 ifconfig eth0 192.168.1.100 # 设置 IP 地址(旧方式) sudo hostnamectl set-hostname newname # 修改主机名文件传输与远程登录
ssh user@host:远程登录ssh -p 端口 user@host:指定端口登录scp 本地 远端/scp user@host:远端 本地:安全复制sftp user@host:安全文件传输rsync -avz 源 目标:增量同步rsync -avz --delete 源 目标:同步并删除目标中源没有的文件
下载工具
wget URL:下载文件wget -c URL:断点续传curl URL:发送网络请求curl -O URL:下载文件curl -H "Header: Value" URL:添加请求头
查看公网 IP
curl -4 ifconfig.co或curl ipinfo.io/ipcurl icanhazip.com
六、磁盘与存储
磁盘使用情况
df -h:查看各分区总量与剩余空间df -i:查看 inode 使用情况du -sh 目录:查看目录总占用;du -h --max-depth=1查看子目录分布du -h | sort -h:按大小排序显示ncdu:交互式磁盘使用分析(需要安装)
块设备管理
lsblk:列出块设备信息blkid:显示块设备属性fdisk -l:列出磁盘分区信息parted -l:列出分区信息(支持 GPT)
lsblk -f # 显示文件系统类型 blkid /dev/sda1 # 显示分区 UUID 和类型 sudo fdisk -l /dev/sda # 查看磁盘分区表 sudo parted /dev/sda print # 显示分区信息文件系统操作
mount 设备 挂载点:挂载文件系统umount 设备/挂载点:卸载文件系统mount -o remount,rw /:重新挂载为读写模式fsck 设备:文件系统检查和修复mkfs.ext4 设备:创建 ext4 文件系统
打包压缩
tar -czvf archive.tar.gz 目录/文件:打包并 gzip 压缩tar -xzvf archive.tar.gz:解压tar -tf archive.tar:查看压缩包内容而不解压zip -r archive.zip 目录/unzip archive.zipgzip 文件/gunzip 文件.gzbzip2 文件/bunzip2 文件.bz2xz 文件/unxz 文件.xz
数据复制与备份
dd if=源 of=目标 bs=块大小:数据复制dd if=/dev/zero of=file bs=1M count=100:创建100M空文件cp --sparse=always 文件 目标:复制稀疏文件
七、查找与批处理
查找文件
find . -name '*.log':当前目录及子目录查找find /path -type f -mtime -7:查找 7 天内修改的文件find . -type f -name 'xiaohub.log.2024-06*' -delete:批量删除find . -size +100M:查找大于 100M 的文件find . -empty:查找空文件或空目录find . -perm 777:查找权限为 777 的文件
快速定位
locate 文件名:快速查找文件(基于数据库)updatedb:更新 locate 数据库which 命令:查找命令的完整路径whereis 命令:查找二进制、源代码和手册页位置type 命令:显示命令类型(别名、内置、外部命令)
批量执行
- 与
find+-exec:find . -name '*.sh' -exec chmod +x {} \; find /var/log -name '*.log' -exec cp {} {}.bak \; find . -type f -exec md5sum {} \; > checksums.txt xargs:find . -name '*.txt' | xargs grep '关键字' find . -name '*.tmp' | xargs rm -f ls *.jpg | xargs -I {} convert {} {}.pngparallel:并行执行命令(需要安装)find . -name '*.jpg' | parallel convert {} {.}.png cat urls.txt | parallel wget {} seq 1 10 | parallel -j4 'echo "Process {}"'
- 与
八、Shell 环境与脚本
环境变量
export VAR=value:临时设置;写入~/.bashrc或~/.profile实现持久echo $VAR:显示变量值env:显示所有环境变量set:显示所有变量(包括局部变量)unset VAR:删除变量source 文件或.:重新加载配置
Shell 配置
~/.bashrc:bash shell 配置文件~/.bash_profile:登录 shell 配置文件~/.bash_history:命令历史记录
常见提示
history:查看历史命令;!n重复第 n 条,!!重复上一条history -c:清除历史记录Ctrl+R:反向搜索历史命令- Tab 自动补全
alias ll='ls -l':自定义快捷命令,写入~/.bashrc生效unalias 别名:删除别名
目录操作
pushd 目录:将目录压入堆栈并切换popd:从堆栈弹出目录并切换dirs:显示目录堆栈
脚本规范
- 首行
#!/bin/bash或#!/usr/bin/env bash - 脚本执行前加执行权限:
chmod +x script.sh - 参数获取:
$1,$2,…;循环for arg in "$@"; do …; done $0:脚本名称$#:参数个数$?:上个命令的退出状态test或[ ]:条件测试[[ ]]:扩展的条件测试(支持正则)
- 首行
九、系统管理
服务与日志
systemctl status 服务名:查看服务状态systemctl start/stop/restart 服务名:启停服务systemctl enable/disable 服务名:开机自启设置journalctl -u 服务名:查看 systemd 日志journalctl -f:实时查看系统日志
定时任务
crontab -e:编辑当前用户 crontabcrontab -l:列出当前用户的定时任务- 格式:
* * * * * command(分 时 日 月 周) /etc/crontab:系统级定时任务
用户与组管理
useradd 用户名/usermod -aG group 用户名/userdel 用户名passwd 用户名:设置用户密码groups 用户名:查看用户所属组id 用户名:显示用户和组 IDsu - 用户名:切换用户sudo 命令:以 root 权限执行命令
系统监控
free -h:查看内存使用情况uptime:系统运行时间和负载dmesg:查看内核消息lsof:列出打开的文件lsof -i :端口:查看端口占用情况vmstat:虚拟内存统计iostat:IO 统计sar:系统活动报告(需要安装 sysstat)
free -h # 显示人性化的内存使用信息 uptime # 显示运行时间和负载 dmesg | tail -20 # 查看最近的内核消息 lsof -i :80 # 查看 80 端口占用 lsof -p 1234 # 查看进程 1234 打开的文件 vmstat 2 5 # 每 2 秒更新一次,共 5 次 iostat -x 1 # 每秒显示详细 IO 统计 sar -u 1 5 # CPU 使用率,每秒更新,共 5 次
十、软件包管理
Debian/Ubuntu(APT)
apt update:更新软件包列表apt upgrade:升级已安装软件包apt install 软件包:安装软件apt remove 软件包:删除软件apt search 关键字:搜索软件包apt show 软件包:显示软件包信息apt autoremove:删除不需要的依赖包
RHEL/CentOS(YUM/DNF)
yum update:更新软件包yum install 软件包:安装软件yum remove 软件包:删除软件yum search 关键字:搜索软件包yum info 软件包:显示软件包信息dnf:新版本的 Fedora/RHEL 使用 dnf 替代 yum
常用工具安装
apt install net-tools:安装传统网络工具(ifconfig 等)apt install vim:安装 vim 编辑器apt install htop:安装 htop 进程监控工具apt install ncdu:安装磁盘使用分析工具
十一、快捷键与技巧
终端快捷键
Ctrl+A:移到行首Ctrl+E:移到行尾Ctrl+U:删除光标前的内容Ctrl+K:删除光标后的内容Ctrl+W:删除光标前的单词Ctrl+L:清屏(等同于 clear)Ctrl+D:退出当前 shell
命令行技巧
!!:重复执行上一条命令- `!## 一、文件与目录操作
列出目录内容
ls:列出当前目录ls -l:显示详细信息(权限、拥有者、大小、修改时间)ls -a:包括隐藏文件(.开头)ls -lh:人性化显示文件大小(K, M, G)ls -lt:按修改时间排序,最新在前ls -lS:按文件大小排序,最大在前
ls -la /etc # 列出 /etc 目录的所有文件(包括隐藏文件) ls -lh ~/Downloads # 显示下载目录文件,以人性化方式显示大小 ls -lt *.log # 按时间排序显示所有日志文件目录切换与查看
pwd:显示当前所在目录的完整路径cd 目录:切换目录cd ..:返回上级目录cd -:返回上次所在目录cd ~:切换到用户主目录
pwd # 显示当前工作目录 cd /var/log # 切换到系统日志目录 cd ../.. # 返回上两级目录 cd - # 快速返回上一个访问的目录 cd ~/Documents # 切换到用户文档目录复制/移动/删除
cp 源 目标:复制文件或目录(加-r递归)cp -i:覆盖前询问cp -p:保留源文件属性(时间戳、权限等)mv 源 目标:移动或重命名mv -i:覆盖前询问rm 文件:删除文件;rm -r 目录:递归删除目录rm -i:删除前询问确认rm -f:强制删除,不询问
cp file1.txt file2.txt # 复制文件 cp -r dir1/ dir2/ # 递归复制目录 cp -ip old.conf new.conf # 复制文件并保留属性,覆盖前询问 mv oldname.txt newname.txt # 重命名文件 mv *.jpg ~/Pictures/ # 移动所有图片到目录 rm -rf temp/ # 强制删除目录及内容(慎用)创建文件与目录
mkdir 目录名:创建目录mkdir -p 路径/目录:创建多级目录touch 文件名:创建空文件或更新时间戳rmdir 目录名:删除空目录tree:以树状图显示目录结构(若未安装可sudo apt install tree)
链接操作
ln -s 源文件 软链接:创建软链接(符号链接)ln 源文件 硬链接:创建硬链接readlink 链接:查看链接指向的实际路径
ln -s /usr/bin/python3 ~/bin/python # 创建 Python 软链接 ln important.txt backup_hard_link.txt # 创建硬链接 readlink /bin/sh # 查看链接指向的实际文件 ls -l /bin | grep '^l' # 查看所有符号链接查看文件内容
cat 文件:一次性显示全文cat -n:显示行号more/less 文件:分页查看,/ + 关键字搜索,n跳到下一个匹配head -n 10 文件:查看前 10 行;tail -n 10 文件:后 10 行tail -f 文件:实时追踪文件新增内容,常用于日志监控file 文件:查看文件类型
二、文本处理与过滤
过滤与查找
grep 模式 文件:查找匹配行;-i忽略大小写;-n显示行号;-v反向查找grep -r 模式 目录:递归搜索目录grep -E '正则表达式':使用扩展正则表达式egrep:等同于grep -Eawk '{print $1,$3}' 文件:按空格分列,打印第 1、3 列cut -d':' -f1 /etc/passwd:以:分割,取第一列sed 's/old/new/g' 文件:替换(默认只输出到标准输出);加-i直接修改文件sed -n '1,10p' 文件:只显示第 1-10 行
grep -n "ERROR" server.log # 查找错误日志,显示行号 grep -r "TODO" ./src # 递归搜索源代码中的 TODO grep -E '^[0-9]{3}-[0-9]{4}排序与去重
sort 文件:排序;sort -n数值排序;-r逆序;-k n指定第 n 列排序uniq 文件:去除相邻重复;uniq -c统计次数;常与sort管道配合:sort abc.txt | uniq -ccomm 文件1 文件2:比较两个已排序文件的异同
统计与比较
wc -l 文件:统计行数;-m字符数;-c字节数;-L最长行长度;-w单词数diff 文件1 文件2:比较文件差异diff -u:以统一格式显示差异cmp 文件1 文件2:二进制比较文件
字符转换
tr 'a-z' 'A-Z' < 文件:小写转大写tr -d '0-9':删除所有数字tr -s ' ':压缩连续空格为单个空格
echo "hello world" | tr 'a-z' 'A-Z' # 转换为大写: HELLO WORLD echo "user123pass456" | tr -d '0-9' # 删除数字: userpass echo "too many spaces" | tr -s ' ' # 压缩空格: too many spaces cat file.txt | tr '\n' ' ' # 将换行符替换为空格
三、权限与拥有者
查看权限
ls -l第一列如-rwxr-xr--:分别是文件类型、用户/组/其他用户的读(r)/写(w)/执行(x) 权限stat 文件:查看文件详细状态信息
修改权限
chmod u+rw 文件:用户添加读写权限;也可用数字模式,如chmod 755 文件chmod g-w 文件:组移除写权限chmod o+x 文件:其他用户添加执行权限chmod -R 755 目录:递归修改目录及子目录权限
chmod 644 file.txt # 设置 rw-r--r-- 权限 chmod u+x script.sh # 给所有者添加执行权限 chmod -R 755 /var/www/html # 递归设置 web 目录权限 chmod a-x sensitive.dat # 移除所有用户的执行权限修改拥有者/所属组
chown user:group 文件:同时修改用户与组chown user 文件或chown :group 文件chown -R user:group 目录:递归修改目录权限
特殊权限
chmod u+s 文件:设置 SUID 权限chmod g+s 目录:设置 SGID 权限chmod +t 目录:设置粘滞位umask:查看默认权限掩码umask 022:设置默认权限掩码
文件属性
lsattr 文件:查看文件特殊属性chattr +i 文件:设置不可修改属性chattr +a 文件:设置只能追加属性
chattr +i /etc/resolv.conf # 防止文件被修改 chattr +a /var/log/secure # 只允许追加内容 lsattr /etc/resolv.conf # 查看文件属性 chattr -i /etc/resolv.conf # 移除不可修改属性
四、进程与作业管理
查看进程
ps -ef:列出所有进程;常与grep结合过滤ps aux:显示详细进程信息pstree:以树状图显示进程关系top/htop:动态监控 CPU/内存/进程(按 q 退出)pgrep 进程名:按名称查找进程 ID
杀死进程
kill PID:温和终止(发送 SIGTERM 信号)kill -9 PID:强制终止(发送 SIGKILL 信号)kill -l:列出所有信号pkill 进程名/killall 进程名:按名杀死killall -u 用户名:杀死指定用户的所有进程
进程优先级
nice -n 10 命令:以较低优先级运行命令renice +10 -p PID:调整运行中进程的优先级
后台与作业控制
command &:后台运行jobs:查看后台作业,fg %1将第 1 个作业拉到前台,bg %1让其后台运行nohup command &:后台运行且忽略挂断信号(退出终端后继续运行)Ctrl+Z:挂起当前进程Ctrl+C:终止当前进程
五、网络与远程操作
网络诊断
ping 主机:连通性测试ping -c 4:只发送 4 个数据包traceroute 主机:路由追踪mtr 主机:结合 ping 和 traceroute 功能netstat -anp:查看端口、连接;常与grep结合ss -tulnp:更现代的端口查看工具nmap 主机:端口扫描(需要安装)
DNS 查询
nslookup 域名:查询 DNS 记录dig 域名:详细 DNS 查询host 域名:简单 DNS 查询
nslookup google.com # 查询域名的 IP 地址 dig @8.8.8.8 example.com # 使用指定 DNS 服务器查询 dig example.com MX # 查询邮件服务器记录 host -t AAAA ipv6.google.com # 查询 IPv6 地址网络配置
ifconfig:查看网络接口(较旧)ip addr show:查看 IP 地址(现代替代 ifconfig)ip route show:查看路由表hostname:显示主机名hostname -I:显示所有 IP 地址
ip addr show eth0 # 显示特定网卡信息 ip route add 192.168.1.0/24 via 192.168.1.1 # 添加静态路由 ip link set eth0 up # 启用网卡 ifconfig eth0 192.168.1.100 # 设置 IP 地址(旧方式) sudo hostnamectl set-hostname newname # 修改主机名文件传输与远程登录
ssh user@host:远程登录ssh -p 端口 user@host:指定端口登录scp 本地 远端/scp user@host:远端 本地:安全复制sftp user@host:安全文件传输rsync -avz 源 目标:增量同步rsync -avz --delete 源 目标:同步并删除目标中源没有的文件
下载工具
wget URL:下载文件wget -c URL:断点续传curl URL:发送网络请求curl -O URL:下载文件curl -H "Header: Value" URL:添加请求头
查看公网 IP
curl -4 ifconfig.co或curl ipinfo.io/ipcurl icanhazip.com
六、磁盘与存储
磁盘使用情况
df -h:查看各分区总量与剩余空间df -i:查看 inode 使用情况du -sh 目录:查看目录总占用;du -h --max-depth=1查看子目录分布du -h | sort -h:按大小排序显示ncdu:交互式磁盘使用分析(需要安装)
块设备管理
lsblk:列出块设备信息blkid:显示块设备属性fdisk -l:列出磁盘分区信息parted -l:列出分区信息(支持 GPT)
lsblk -f # 显示文件系统类型 blkid /dev/sda1 # 显示分区 UUID 和类型 sudo fdisk -l /dev/sda # 查看磁盘分区表 sudo parted /dev/sda print # 显示分区信息文件系统操作
mount 设备 挂载点:挂载文件系统umount 设备/挂载点:卸载文件系统mount -o remount,rw /:重新挂载为读写模式fsck 设备:文件系统检查和修复mkfs.ext4 设备:创建 ext4 文件系统
打包压缩
tar -czvf archive.tar.gz 目录/文件:打包并 gzip 压缩tar -xzvf archive.tar.gz:解压tar -tf archive.tar:查看压缩包内容而不解压zip -r archive.zip 目录/unzip archive.zipgzip 文件/gunzip 文件.gzbzip2 文件/bunzip2 文件.bz2xz 文件/unxz 文件.xz
数据复制与备份
dd if=源 of=目标 bs=块大小:数据复制dd if=/dev/zero of=file bs=1M count=100:创建100M空文件cp --sparse=always 文件 目标:复制稀疏文件
七、查找与批处理
查找文件
find . -name '*.log':当前目录及子目录查找find /path -type f -mtime -7:查找 7 天内修改的文件find . -type f -name 'xiaohub.log.2024-06*' -delete:批量删除find . -size +100M:查找大于 100M 的文件find . -empty:查找空文件或空目录find . -perm 777:查找权限为 777 的文件
快速定位
locate 文件名:快速查找文件(基于数据库)updatedb:更新 locate 数据库which 命令:查找命令的完整路径whereis 命令:查找二进制、源代码和手册页位置type 命令:显示命令类型(别名、内置、外部命令)
批量执行
- 与
find+-exec:find . -name '*.sh' -exec chmod +x {} \; find /var/log -name '*.log' -exec cp {} {}.bak \; find . -type f -exec md5sum {} \; > checksums.txt xargs:find . -name '*.txt' | xargs grep '关键字' find . -name '*.tmp' | xargs rm -f ls *.jpg | xargs -I {} convert {} {}.pngparallel:并行执行命令(需要安装)find . -name '*.jpg' | parallel convert {} {.}.png cat urls.txt | parallel wget {} seq 1 10 | parallel -j4 'echo "Process {}"'
- 与
八、Shell 环境与脚本
环境变量
export VAR=value:临时设置;写入~/.bashrc或~/.profile实现持久echo $VAR:显示变量值env:显示所有环境变量set:显示所有变量(包括局部变量)unset VAR:删除变量source 文件或.:重新加载配置
Shell 配置
~/.bashrc:bash shell 配置文件~/.bash_profile:登录 shell 配置文件~/.bash_history:命令历史记录
常见提示
history:查看历史命令;!n重复第 n 条,!!重复上一条history -c:清除历史记录Ctrl+R:反向搜索历史命令- Tab 自动补全
alias ll='ls -l':自定义快捷命令,写入~/.bashrc生效unalias 别名:删除别名
目录操作
pushd 目录:将目录压入堆栈并切换popd:从堆栈弹出目录并切换dirs:显示目录堆栈
脚本规范
- 首行
#!/bin/bash或#!/usr/bin/env bash - 脚本执行前加执行权限:
chmod +x script.sh - 参数获取:
$1,$2,…;循环for arg in "$@"; do …; done $0:脚本名称$#:参数个数$?:上个命令的退出状态test或[ ]:条件测试[[ ]]:扩展的条件测试(支持正则)
- 首行
九、系统管理
服务与日志
systemctl status 服务名:查看服务状态systemctl start/stop/restart 服务名:启停服务systemctl enable/disable 服务名:开机自启设置journalctl -u 服务名:查看 systemd 日志journalctl -f:实时查看系统日志
定时任务
crontab -e:编辑当前用户 crontabcrontab -l:列出当前用户的定时任务- 格式:
* * * * * command(分 时 日 月 周) /etc/crontab:系统级定时任务
用户与组管理
useradd 用户名/usermod -aG group 用户名/userdel 用户名passwd 用户名:设置用户密码groups 用户名:查看用户所属组id 用户名:显示用户和组 IDsu - 用户名:切换用户sudo 命令:以 root 权限执行命令
系统监控
free -h:查看内存使用情况uptime:系统运行时间和负载dmesg:查看内核消息lsof:列出打开的文件lsof -i :端口:查看端口占用情况vmstat:虚拟内存统计iostat:IO 统计sar:系统活动报告(需要安装 sysstat)
free -h # 显示人性化的内存使用信息 uptime # 显示运行时间和负载 dmesg | tail -20 # 查看最近的内核消息 lsof -i :80 # 查看 80 端口占用 lsof -p 1234 # 查看进程 1234 打开的文件 vmstat 2 5 # 每 2 秒更新一次,共 5 次 iostat -x 1 # 每秒显示详细 IO 统计 sar -u 1 5 # CPU 使用率,每秒更新,共 5 次
十、软件包管理
Debian/Ubuntu(APT)
apt update:更新软件包列表apt upgrade:升级已安装软件包apt install 软件包:安装软件apt remove 软件包:删除软件apt search 关键字:搜索软件包apt show 软件包:显示软件包信息apt autoremove:删除不需要的依赖包
RHEL/CentOS(YUM/DNF)
yum update:更新软件包yum install 软件包:安装软件yum remove 软件包:删除软件yum search 关键字:搜索软件包yum info 软件包:显示软件包信息dnf:新版本的 Fedora/RHEL 使用 dnf 替代 yum
常用工具安装
apt install net-tools:安装传统网络工具(ifconfig 等)apt install vim:安装 vim 编辑器apt install htop:安装 htop 进程监控工具apt install ncdu:安装磁盘使用分析工具
十一、快捷键与技巧
- 终端快捷键
Ctrl+A:移到行首Ctrl+E:移到行尾Ctrl+U:删除光标前的内容Ctrl+K:删除光标后的内容Ctrl+W:删除光标前的单词Ctrl+L:清屏(等同于 clear)Ctrl+D:退出当前 shell
:引用上条命令的最后一个参数
!*:引用上条命令的所有参数command1 && command2:前一个命令成功后才执行后一个command1 || command2:前一个命令失败后才执行后一个command1; command2:顺序执行,不管是否成功$(command):命令替换`command`:命令替换(旧式)
sudo !! # 以 root 权限重新执行上条命令
cd !$ # 切换到上条命令的最后一个参数
echo !* # 显示上条命令的所有参数
mkdir test && cd test # 创建目录并进入
ping -c1 google.com || echo "网络不通" # 网络不通时提示
echo "今天是 $(date +%Y-%m-%d)" # 命令替换显示日期
for file in *.txt; do echo $file; done # 遍历文件
通配符与正则
*:匹配任意多个字符?:匹配单个字符[abc]:匹配中括号内任一字符[a-z]:匹配范围内任一字符{a,b,c}:匹配大括号内任一字符串
重定向与管道
>:输出重定向(覆盖)>>:输出重定向(追加)2>:错误输出重定向&>:标准输出和错误都重定向|:管道,将前一个命令的输出作为后一个命令的输入tee:将输出同时写入文件和标准输出 phone.txt # 正则匹配电话号码格式
ps aux | grep nginx | grep -v grep # 查找 nginx 进程(排除 grep 自身)
awk -F: ‘{print $1,$7}’ /etc/passwd # 显示用户名和 shell
df -h | awk ‘NR>1{print $5,$6}’ # 显示磁盘使用率和挂载点
sed -i ‘s/localhost/127.0.0.1/g’ config.ini # 直接替换文件内容
sed -n ‘/start/,/end/p’ log.txt # 显示两个标记之间的行
排序与去重
sort 文件:排序;sort -n数值排序;-r逆序;-k n指定第 n 列排序uniq 文件:去除相邻重复;uniq -c统计次数;常与sort管道配合:sort abc.txt | uniq -ccomm 文件1 文件2:比较两个已排序文件的异同
统计与比较
wc -l 文件:统计行数;-m字符数;-c字节数;-L最长行长度;-w单词数diff 文件1 文件2:比较文件差异diff -u:以统一格式显示差异cmp 文件1 文件2:二进制比较文件
字符转换
tr 'a-z' 'A-Z' < 文件:小写转大写tr -d '0-9':删除所有数字tr -s ' ':压缩连续空格为单个空格
三、权限与拥有者
查看权限
ls -l第一列如-rwxr-xr--:分别是文件类型、用户/组/其他用户的读(r)/写(w)/执行(x) 权限stat 文件:查看文件详细状态信息
修改权限
chmod u+rw 文件:用户添加读写权限;也可用数字模式,如chmod 755 文件chmod g-w 文件:组移除写权限chmod o+x 文件:其他用户添加执行权限chmod -R 755 目录:递归修改目录及子目录权限
修改拥有者/所属组
chown user:group 文件:同时修改用户与组chown user 文件或chown :group 文件chown -R user:group 目录:递归修改目录权限
特殊权限
chmod u+s 文件:设置 SUID 权限chmod g+s 目录:设置 SGID 权限chmod +t 目录:设置粘滞位umask:查看默认权限掩码umask 022:设置默认权限掩码
文件属性
lsattr 文件:查看文件特殊属性chattr +i 文件:设置不可修改属性chattr +a 文件:设置只能追加属性
四、进程与作业管理
查看进程
ps -ef:列出所有进程;常与grep结合过滤ps aux:显示详细进程信息pstree:以树状图显示进程关系top/htop:动态监控 CPU/内存/进程(按 q 退出)pgrep 进程名:按名称查找进程 ID
杀死进程
kill PID:温和终止(发送 SIGTERM 信号)kill -9 PID:强制终止(发送 SIGKILL 信号)kill -l:列出所有信号pkill 进程名/killall 进程名:按名杀死killall -u 用户名:杀死指定用户的所有进程
进程优先级
nice -n 10 命令:以较低优先级运行命令renice +10 -p PID:调整运行中进程的优先级
后台与作业控制
command &:后台运行jobs:查看后台作业,fg %1将第 1 个作业拉到前台,bg %1让其后台运行nohup command &:后台运行且忽略挂断信号(退出终端后继续运行)Ctrl+Z:挂起当前进程Ctrl+C:终止当前进程
五、网络与远程操作
网络诊断
ping 主机:连通性测试ping -c 4:只发送 4 个数据包traceroute 主机:路由追踪mtr 主机:结合 ping 和 traceroute 功能netstat -anp:查看端口、连接;常与grep结合ss -tulnp:更现代的端口查看工具nmap 主机:端口扫描(需要安装)
DNS 查询
nslookup 域名:查询 DNS 记录dig 域名:详细 DNS 查询host 域名:简单 DNS 查询
网络配置
ifconfig:查看网络接口(较旧)ip addr show:查看 IP 地址(现代替代 ifconfig)ip route show:查看路由表hostname:显示主机名hostname -I:显示所有 IP 地址
文件传输与远程登录
ssh user@host:远程登录ssh -p 端口 user@host:指定端口登录scp 本地 远端/scp user@host:远端 本地:安全复制sftp user@host:安全文件传输rsync -avz 源 目标:增量同步rsync -avz --delete 源 目标:同步并删除目标中源没有的文件
下载工具
wget URL:下载文件wget -c URL:断点续传curl URL:发送网络请求curl -O URL:下载文件curl -H "Header: Value" URL:添加请求头
查看公网 IP
curl -4 ifconfig.co或curl ipinfo.io/ipcurl icanhazip.com
六、磁盘与存储
磁盘使用情况
df -h:查看各分区总量与剩余空间df -i:查看 inode 使用情况du -sh 目录:查看目录总占用;du -h --max-depth=1查看子目录分布du -h | sort -h:按大小排序显示ncdu:交互式磁盘使用分析(需要安装)
块设备管理
lsblk:列出块设备信息blkid:显示块设备属性fdisk -l:列出磁盘分区信息parted -l:列出分区信息(支持 GPT)
文件系统操作
mount 设备 挂载点:挂载文件系统umount 设备/挂载点:卸载文件系统mount -o remount,rw /:重新挂载为读写模式fsck 设备:文件系统检查和修复mkfs.ext4 设备:创建 ext4 文件系统
打包压缩
tar -czvf archive.tar.gz 目录/文件:打包并 gzip 压缩tar -xzvf archive.tar.gz:解压tar -tf archive.tar:查看压缩包内容而不解压zip -r archive.zip 目录/unzip archive.zipgzip 文件/gunzip 文件.gzbzip2 文件/bunzip2 文件.bz2xz 文件/unxz 文件.xz
数据复制与备份
dd if=源 of=目标 bs=块大小:数据复制dd if=/dev/zero of=file bs=1M count=100:创建100M空文件cp --sparse=always 文件 目标:复制稀疏文件
七、查找与批处理
查找文件
find . -name '*.log':当前目录及子目录查找find /path -type f -mtime -7:查找 7 天内修改的文件find . -type f -name 'xiaohub.log.2024-06*' -delete:批量删除find . -size +100M:查找大于 100M 的文件find . -empty:查找空文件或空目录find . -perm 777:查找权限为 777 的文件
快速定位
locate 文件名:快速查找文件(基于数据库)updatedb:更新 locate 数据库which 命令:查找命令的完整路径whereis 命令:查找二进制、源代码和手册页位置type 命令:显示命令类型(别名、内置、外部命令)
批量执行
- 与
find+-exec:find . -name '*.sh' -exec chmod +x {} \; xargs:find . -name '*.txt' | xargs grep '关键字'parallel:并行执行命令(需要安装)find . -name '*.jpg' | parallel convert {} {.}.png
- 与
八、Shell 环境与脚本
环境变量
export VAR=value:临时设置;写入~/.bashrc或~/.profile实现持久echo $VAR:显示变量值env:显示所有环境变量set:显示所有变量(包括局部变量)unset VAR:删除变量source 文件或.:重新加载配置
Shell 配置
~/.bashrc:bash shell 配置文件~/.bash_profile:登录 shell 配置文件~/.bash_history:命令历史记录
常见提示
history:查看历史命令;!n重复第 n 条,!!重复上一条history -c:清除历史记录Ctrl+R:反向搜索历史命令- Tab 自动补全
alias ll='ls -l':自定义快捷命令,写入~/.bashrc生效unalias 别名:删除别名
目录操作
pushd 目录:将目录压入堆栈并切换popd:从堆栈弹出目录并切换dirs:显示目录堆栈
脚本规范
- 首行
#!/bin/bash或#!/usr/bin/env bash - 脚本执行前加执行权限:
chmod +x script.sh - 参数获取:
$1,$2,…;循环for arg in "$@"; do …; done $0:脚本名称$#:参数个数$?:上个命令的退出状态test或[ ]:条件测试[[ ]]:扩展的条件测试(支持正则)
- 首行
九、系统管理
服务与日志
systemctl status 服务名:查看服务状态systemctl start/stop/restart 服务名:启停服务systemctl enable/disable 服务名:开机自启设置journalctl -u 服务名:查看 systemd 日志journalctl -f:实时查看系统日志
定时任务
crontab -e:编辑当前用户 crontabcrontab -l:列出当前用户的定时任务- 格式:
* * * * * command(分 时 日 月 周) /etc/crontab:系统级定时任务
用户与组管理
useradd 用户名/usermod -aG group 用户名/userdel 用户名passwd 用户名:设置用户密码groups 用户名:查看用户所属组id 用户名:显示用户和组 IDsu - 用户名:切换用户sudo 命令:以 root 权限执行命令
系统监控
free -h:查看内存使用情况uptime:系统运行时间和负载dmesg:查看内核消息lsof:列出打开的文件lsof -i :端口:查看端口占用情况vmstat:虚拟内存统计iostat:IO 统计sar:系统活动报告(需要安装 sysstat)
十、软件包管理
Debian/Ubuntu(APT)
apt update:更新软件包列表apt upgrade:升级已安装软件包apt install 软件包:安装软件apt remove 软件包:删除软件apt search 关键字:搜索软件包apt show 软件包:显示软件包信息apt autoremove:删除不需要的依赖包
RHEL/CentOS(YUM/DNF)
yum update:更新软件包yum install 软件包:安装软件yum remove 软件包:删除软件yum search 关键字:搜索软件包yum info 软件包:显示软件包信息dnf:新版本的 Fedora/RHEL 使用 dnf 替代 yum
常用工具安装
apt install net-tools:安装传统网络工具(ifconfig 等)apt install vim:安装 vim 编辑器apt install htop:安装 htop 进程监控工具apt install ncdu:安装磁盘使用分析工具
十一、快捷键与技巧
终端快捷键
Ctrl+A:移到行首Ctrl+E:移到行尾Ctrl+U:删除光标前的内容Ctrl+K:删除光标后的内容Ctrl+W:删除光标前的单词Ctrl+L:清屏(等同于 clear)Ctrl+D:退出当前 shell
命令行技巧
!!:重复执行上一条命令!$:引用上条命令的最后一个参数!*:引用上条命令的所有参数command1 && command2:前一个命令成功后才执行后一个command1 || command2:前一个命令失败后才执行后一个command1; command2:顺序执行,不管是否成功$(command):命令替换`command`:命令替换(旧式)
通配符与正则
*:匹配任意多个字符?:匹配单个字符[abc]:匹配中括号内任一字符[a-z]:匹配范围内任一字符{a,b,c}:匹配大括号内任一字符串
重定向与管道
>:输出重定向(覆盖)>>:输出重定向(追加)2>:错误输出重定向&>:标准输出和错误都重定向|:管道,将前一个命令的输出作为后一个命令的输入tee:将输出同时写入文件和标准输出