📁 一、文件与目录操作
1.ls- 列出目录内容
# 基本用法ls# 列出当前目录内容ls/home# 列出指定目录内容# 常用选项ls-l# 长格式显示(详细信息)ls-a# 显示所有文件(包括隐藏文件)ls-lh# 人性化显示文件大小(K/M/G)ls-t# 按修改时间排序ls-R# 递归显示子目录ls-la ~# 组合:详细显示家目录所有文件# 示例输出解释# drwxr-xr-x 2 user group 4096 Jan 1 10:00 Documents# ↑权限 ↑链接数 ↑所有者 ↑大小 ↑修改时间 ↑文件名2.cd- 切换目录
cd/home/user# 切换到绝对路径cdDocuments# 切换到相对路径cd..# 返回上一级目录cd~ 或cd# 返回家目录cd-# 返回上次所在目录3.pwd- 显示当前目录
pwd# 输出:/home/user/Documents4.mkdir- 创建目录
mkdirnew_dir# 创建单个目录mkdirdir1 dir2 dir3# 创建多个目录mkdir-p parent/child/grand# 创建多级目录mkdir-m755secure_dir# 创建时设置权限5.rmdir/rm- 删除目录/文件
# rmdir(只能删除空目录)rmdirempty_dir# rm(功能更强大)rmfile.txt# 删除文件rm-r dir_name# 递归删除目录及其内容rm-f file.txt# 强制删除(不提示)rm-i file.txt# 交互式删除(逐个确认)rm-rf dir_name# ⚠️ 强制递归删除(危险!)6.cp- 复制文件/目录
cpsource.txt dest.txt# 复制文件cp-r source_dir dest_dir# 递归复制目录cp-asourcedest# 归档模式(保留属性)cp-usourcedest# 只复制更新的文件cp-vsourcedest# 显示复制进度# 示例cp*.txt backup/# 复制所有txt文件cpfile{1..3}.txt /backup/# 复制多个文件7.mv- 移动/重命名
mvold.txt new.txt# 重命名文件mvfile.txt /tmp/# 移动到其他目录mv*.pdf ~/Documents/# 移动所有PDF文件mv-i file.txt dest/# 交互模式(覆盖前询问)mv-n file.txt dest/# 不覆盖已存在文件8.touch- 创建空文件/更新时间戳
touchnewfile.txt# 创建空文件touchexisting.txt# 更新文件时间戳为当前时间touch-t202401011200file# 设置特定时间戳touchfile{1..10}.txt# 创建多个文件9.file- 查看文件类型
filedocument.pdf# 输出:PDF document, version 1.4filescript.sh# 输出:Bourne-Again shell scriptfileimage.jpg# 输出:JPEG image data📄 二、文件内容查看与编辑
10.cat- 连接并显示文件
catfile.txt# 显示整个文件catfile1.txt file2.txt# 连接多个文件cat>newfile.txt# 创建新文件(Ctrl+D结束)catfile1.txt file2.txt>combined.txt# 合并文件cat-n file.txt# 显示行号11.less/more- 分页查看
lesslargefile.log# 分页查看(可向前向后翻)# less常用操作:# 空格:下一页 b:上一页 /搜索词:搜索 q:退出# g:文件开头 G:文件末尾 :n:下一个文件 :p:上一个文件morelargefile.log# 基础分页(只能向前)12.head/tail- 查看开头/结尾
headfile.txt# 显示前10行head-n20file.txt# 显示前20行head-c100file.txt# 显示前100字节tailfile.log# 显示最后10行tail-n50file.log# 显示最后50行tail-f /var/log/syslog# 实时跟踪日志(监控新增内容)tail-F file.log# 跟踪文件(即使被重命名)13.grep- 文本搜索
grep"error"logfile.txt# 搜索包含"error"的行grep-i"error"logfile.txt# 忽略大小写grep-r"pattern"/path/to/dir# 递归搜索目录grep-v"success"file.txt# 显示不匹配的行grep-n"pattern"file.txt# 显示行号grep-c"pattern"file.txt# 统计匹配行数grep-E"pattern1|pattern2"file# 使用扩展正则表达式egrep"pattern1|pattern2"file# 同上# 组合使用psaux|grepssh# 查找SSH进程ls-la|grep"^d"# 只显示目录14.find- 查找文件
# 基本查找find/home -name"*.txt"# 按名称查找find.-type f# 查找普通文件find/var -type d# 查找目录find/ -name"config"-type f# 组合条件# 按时间查找find.-mtime -7# 7天内修改的文件find.-mmin -60# 60分钟内修改的find.-atime +30# 30天前访问的# 按大小查找find/var/log -size +10M# 大于10MB的文件find.-size -100k# 小于100KB的文件# 按权限查找find/ -perm644# 权限为644的文件find.-user root# root用户的文件# 执行动作find.-name"*.tmp"-delete# 查找并删除find.-name"*.sh"-execchmod+x{}\;# 查找并加执行权限find/tmp -empty# 查找空文件/目录15.locate- 快速查找(基于数据库)
locatefilename# 快速查找(需要先更新数据库)sudoupdatedb# 更新locate数据库locate-i"readme"# 忽略大小写locate-n20"*.conf"# 限制结果数量✏️ 三、文本处理
16.sed- 流编辑器
sed's/old/new/g'file.txt# 替换文本sed-i's/foo/bar/g'file.txt# 直接修改文件sed'1,5d'file.txt# 删除1-5行sed'/pattern/d'file.txt# 删除匹配行sed-n'10,20p'file.txt# 打印10-20行sed's/^/# /'file.txt# 每行开头加注释sed'/^$/d'file.txt# 删除空行17.awk- 文本处理语言
awk'{print$1}'file.txt# 打印第一列awk-F:'{print$1,$3}'/etc/passwd# 指定分隔符为冒号awk'$3> 1000'/etc/passwd# 第三列大于1000的行awk'{sum+=$1} END{print sum}'data.txt# 求和awk'NR==10'file.txt# 打印第10行awk'/error/'logfile.txt# 打印包含error的行awk'{print NF}'file.txt# 打印每行列数18.sort- 排序
sortfile.txt# 默认排序sort-r file.txt# 逆序排序sort-n numbers.txt# 按数值排序sort-u file.txt# 去重sort-k2,2 data.txt# 按第二列排序sort-t: -k3 -n /etc/passwd# 按冒号分隔的第三列数值排序19.uniq- 去重
uniqfile.txt# 去除连续重复行sortfile.txt|uniq# 完全去重uniq-c file.txt# 统计出现次数uniq-d file.txt# 只显示重复行uniq-u file.txt# 只显示不重复行20.cut- 剪切文本
cut-d: -f1 /etc/passwd# 以冒号分隔,取第一列cut-c1-10 file.txt# 取每行1-10字符cut-f2,4 data.txt# 取第2和第4列(默认tab分隔)21.wc- 字数统计
wcfile.txt# 输出:行数 单词数 字节数 文件名wc-l file.txt# 只统计行数wc-w file.txt# 只统计单词数wc-c file.txt# 只统计字节数wc-m file.txt# 统计字符数ls|wc-l# 统计文件数量22.diff- 比较文件差异
difffile1.txt file2.txt# 比较两个文件diff-u file1.txt file2.txt# 统一格式输出diff-r dir1 dir2# 递归比较目录diff-Naur old/ new/>patch.patch# 生成补丁文件🔐 四、权限管理
23.chmod- 修改权限
# 数字模式(八进制)chmod755script.sh# rwxr-xr-xchmod644file.txt# rw-r--r--chmod600private.key# rw-------# 符号模式chmodu+x script.sh# 给所有者加执行权限chmodg-w file.txt# 移除组写权限chmodo=r file.txt# 其他人只读chmoda+x script.sh# 所有人加执行权限chmod-R755directory/# 递归修改# 权限对应关系# u=user g=group o=others a=all# r=4 w=2 x=124.chown- 修改所有者
chownuser:group file.txt# 修改所有者和组chownuser file.txt# 只修改所有者chown:group file.txt# 只修改组chown-R user:group directory/# 递归修改25.chgrp- 修改所属组
chgrpdevelopers file.txt# 修改文件所属组chgrp-R www-data /var/www/# 递归修改26.umask- 设置默认权限掩码
umask# 显示当前umaskumask022# 设置umask(目录:755,文件:644)umask027# 更严格的umask📊 五、磁盘与文件系统
27.df- 磁盘空间使用情况
df-h# 人性化显示(推荐)df-i# 显示inode使用情况df-T# 显示文件系统类型df/home# 查看特定分区28.du- 目录/文件大小
du-sh directory/# 显示目录总大小du-sh *# 显示当前目录各文件大小du-h --max-depth=1# 显示一级子目录大小du-csh *.log# 显示多个文件总大小29.mount/umount- 挂载/卸载
mount# 显示已挂载的文件系统mount/dev/sdb1 /mnt# 挂载设备mount-t nfs server:/path /mnt# 挂载NFSumount/mnt# 卸载umount-l /mnt# 懒卸载(解除挂载点但等程序释放)30.fdisk/lsblk- 磁盘分区
sudofdisk-l# 列出所有磁盘分区lsblk# 树状显示块设备lsblk -f# 显示文件系统信息31.fsck- 文件系统检查修复
sudofsck/dev/sda1# 检查文件系统(需先卸载)fsck-y /dev/sda1# 自动修复错误🔄 六、进程管理
32.ps- 查看进程
psaux# 查看所有进程详细信息ps-ef# 标准格式ps-u username# 查看特定用户进程ps-p PID# 查看特定PIDpsaux --sort=-%cpu# 按CPU使用率排序psaux --sort=-%mem# 按内存使用率排序psaux|grepnginx# 查找nginx进程33.top/htop- 实时进程监控
top# 实时显示进程状态# top交互命令:# P:按CPU排序 M:按内存排序 k:杀死进程 q:退出# 1:显示各CPU核心htop# 增强版top(需安装)34.kill- 结束进程
kill1234# 发送TERM信号(正常结束)kill-91234# 发送KILL信号(强制结束)kill-151234# 发送TERM信号(同kill)kill-HUP1234# 发送HUP信号(重启进程)killallprocess_name# 结束所有同名进程pkillfirefox# 按进程名结束35.pstree- 树状显示进程
pstree# 显示进程树pstree -p# 显示PIDpstree -u# 显示用户名36.jobs/bg/fg- 作业控制
sleep100&# 后台运行jobs# 查看后台作业fg%1# 将作业1调到前台bg%1# 将作业1调到后台继续运行Ctrl+Z# 挂起当前前台作业37.nohup- 后台运行且不挂断
nohup./server.sh>output.log2>&1&# 解释:2>&1 表示将标准错误重定向到标准输出🌐 七、网络相关
38.ping- 测试网络连通性
pinggoogle.com# 持续pingping-c48.8.8.8# ping 4次ping-i2example.com# 2秒间隔pingping-s1000target# 指定包大小39.ifconfig/ip- 网络配置
ifconfig# 显示网络接口(旧命令)ipaddr show# 显示IP地址(推荐)iplinkshow# 显示网络接口iproute show# 显示路由表40.netstat- 网络统计
netstat-tulnp# 查看监听端口和进程netstat-an# 查看所有连接netstat-r# 查看路由表netstat-s# 显示网络统计41.ss- socket统计(netstat替代)
ss -tulnp# 同netstat -tulnpss -at# 显示所有TCP连接ss -s# 显示统计信息42.curl- 数据传输工具
curlhttps://example.com# 获取网页内容curl-o file.txt https://example.com# 保存到文件curl-O https://example.com/file.zip# 下载文件curl-I https://example.com# 只显示HTTP头curl-X POST -d'data'URL# POST请求curl-u user:pass URL# 基本认证43.wget- 下载工具
wgethttps://example.com/file.zip# 下载文件wget-c URL# 断点续传wget-r -l1 URL# 递归下载一级链接wget-O newname.zip URL# 指定保存文件名wget--limit-rate=100k URL# 限制下载速度44.ssh- 安全远程登录
sshuser@hostname# 登录远程主机ssh-p2222user@hostname# 指定端口ssh-i key.pem user@hostname# 使用密钥登录ssh-L8080:localhost:80 user@hostname# 本地端口转发ssh-R8080:localhost:80 user@hostname# 远程端口转发45.scp- 安全复制
scpfile.txt user@remote:/path/# 本地到远程scpuser@remote:/path/file.txt ./# 远程到本地scp-r dir/ user@remote:/path/# 递归复制目录scp-P2222file.txt user@remote:/path/# 指定端口46.rsync- 远程同步
rsync-av source/ dest/# 本地同步rsync-avz source/ user@remote:/dest/# 远程同步(压缩)rsync-av --delete source/ dest/# 删除dest中多余文件rsync-av --progress source/ dest/# 显示进度rsync-av --exclude='*.tmp'source/ dest/# 排除文件47.traceroute/mtr- 路由跟踪
traceroutegoogle.com# 显示到目标的路由mtrgoogle.com# 实时路由跟踪(需安装)48.host/nslookup/dig- DNS查询
hostexample.com# DNS查询nslookupexample.com# 交互式DNS查询digexample.com# 详细DNS查询digexample.com MX# 查询MX记录📦 八、包管理
49.APT(Debian/Ubuntu)
sudoaptupdate# 更新包列表sudoaptupgrade# 升级所有包sudoaptinstallpackage# 安装包sudoaptremove package# 移除包(保留配置)sudoaptpurge package# 完全移除包sudoaptautoremove# 移除不需要的依赖sudoaptsearch keyword# 搜索包aptshow package# 显示包信息50.YUM(RHEL/CentOS 7)
sudoyum update# 更新包sudoyuminstallpackage# 安装sudoyum remove package# 移除sudoyum search keyword# 搜索yum info package# 包信息51.DNF(RHEL/CentOS 8+/Fedora)
sudodnf updatesudodnfinstallpackagesudodnf remove package52.pacman(Arch Linux)
sudopacman -Syu# 更新系统sudopacman -S package# 安装sudopacman -R package# 移除sudopacman -Ss keyword# 搜索🛠️ 九、系统信息与监控
53.uname- 系统信息
uname-a# 所有信息uname-r# 内核版本uname-m# 机器架构uname-s# 内核名称54.who/w- 登录用户
who# 显示登录用户who-b# 系统启动时间w# 显示用户及活动55.uptime- 运行时间
uptime# 输出:10:30:00 up 10 days, 1:00, 2 users, load average: 0.00, 0.01, 0.0556.free- 内存使用
free-h# 人性化显示(推荐)free-m# 以MB显示free-g# 以GB显示57.vmstat- 虚拟内存统计
vmstat1# 每秒刷新一次vmstat-s# 显示内存统计摘要58.iostat- I/O统计
iostat -x1# 每秒显示扩展I/O统计59.sar- 系统活动报告
sar -u13# CPU使用率,每秒1次,共3次sar -r13# 内存使用sar -b13# I/O统计60.dmesg- 内核消息
dmesg# 显示所有内核消息dmesg|tail-20# 显示最后20条dmesg|greperror# 查找错误dmesg-T# 显示人类可读的时间戳61.journalctl- 系统日志
journalctl -xe# 查看最新日志(详细)journalctl -f# 实时跟踪日志journalctl -u nginx.service# 查看特定服务日志journalctl --since"2024-01-01"--until"2024-01-02"journalctl -p err -b# 本次启动的错误日志📝 十、压缩与归档
62.tar- 归档工具
# 创建归档tar-cvf archive.tar files/# 创建tar归档tar-czvf archive.tar.gz files/# 创建gzip压缩归档tar-cjvf archive.tar.bz2 files/# 创建bzip2压缩归档tar-cJvf archive.tar.xz files/# 创建xz压缩归档# 提取归档tar-xvf archive.tar# 提取tartar-xzvf archive.tar.gz# 提取gzip压缩归档tar-xjvf archive.tar.bz2# 提取bzip2压缩归档tar-xJvf archive.tar.xz# 提取xz压缩归档# 查看内容tar-tvf archive.tar# 列出归档内容63.gzip/gunzip- gzip压缩
gzipfile.txt# 压缩为file.txt.gzgunzip file.txt.gz# 解压gzip-9 file.txt# 最高压缩比gzip-d file.txt.gz# 解压(同gunzip)64.bzip2/bunzip2- bzip2压缩
bzip2file.txt# 压缩为file.txt.bz2bunzip2 file.txt.bz2# 解压65.zip/unzip- ZIP压缩
ziparchive.zip file1 file2# 创建ZIPunziparchive.zip# 解压ZIPunzip-l archive.zip# 列出ZIP内容zip-r archive.zip directory/# 压缩目录66.7z- 7-Zip压缩
7z a archive.7z files/# 创建7z归档7z x archive.7z# 解压7z7z l archive.7z# 列出内容🎯 十一、其他实用命令
67.alias- 命令别名
aliasll='ls -la'# 创建别名aliasrm='rm -i'# 安全删除(交互式)unaliasll# 删除别名alias# 显示所有别名68.history- 命令历史
history# 显示历史命令history10# 显示最近10条!100# 执行历史记录第100条!!# 执行上一条命令!ssh# 执行最近以ssh开头的命令Ctrl+R# 反向搜索历史history-c# 清除历史69.which/whereis/type- 查找命令位置
whichls# 显示命令路径whereisls# 显示命令路径和手册页typels# 显示命令类型(内置/外部)type-als# 显示所有同名命令70.man/info- 帮助文档
manls# 查看手册页man-k keyword# 搜索手册页whatisls# 简短描述infols# 查看info文档ls--help# 命令自带帮助71.time- 命令执行时间
timels-R /# 测量命令执行时间/usr/bin/time -vcommand# 详细统计信息72.watch- 定期执行命令
watch-n1'date'# 每秒执行date命令watch-d'ls -l'# 高亮显示变化73.cron/crontab- 定时任务
crontab-e# 编辑当前用户cron任务crontab-l# 列出cron任务crontab-r# 删除所有cron任务# crontab格式:分 时 日 月 周 命令# 示例:每天2:30执行备份302* * * /home/user/backup.sh74.at- 一次性定时任务
echo"command"|at2:30 tomorrow# 明天2:30执行atq# 查看等待的任务atrm1# 删除任务1🔧 十二、用户与组管理
75.useradd/adduser- 添加用户
sudouseraddusername# 创建用户sudouseradd-m username# 创建用户并创建家目录sudouseradd-s /bin/bash username# 指定shellsudoadduser username# 交互式创建用户(推荐)76.usermod- 修改用户
sudousermod-aG groupname username# 添加用户到组sudousermod-s /bin/zsh username# 修改shellsudousermod-L username# 锁定用户sudousermod-U username# 解锁用户77.userdel- 删除用户
sudouserdelusername# 删除用户sudouserdel-r username# 删除用户及家目录78.passwd- 修改密码
passwd# 修改当前用户密码sudopasswdusername# 修改其他用户密码passwd-l username# 锁定用户密码passwd-u username# 解锁用户密码79.groupadd/groupdel/groupmod- 组管理
sudogroupaddgroupname# 创建组sudogroupdelgroupname# 删除组sudogroupmod-n newname oldname# 重命名组80.id- 显示用户信息
id# 当前用户信息idusername# 指定用户信息id-Gn username# 显示用户所有组81.whoami- 显示当前用户名
whoami# 输出:当前用户名82.su- 切换用户
su- username# 切换到用户(加载环境变量)suusername# 切换到用户(不加载环境变量)su-# 切换到root83.sudo- 以超级用户执行
sudocommand# 以root执行命令sudo-u usernamecommand# 以指定用户执行sudo-i# 切换到root shellsudo-l# 查看可用的sudo命令💾 十三、备份与恢复
84.dd- 磁盘复制与转换
ddif=/dev/sdaof=backup.imgbs=4M# 备份整个磁盘ddif=backup.imgof=/dev/sdb# 恢复备份ddif=/dev/zeroof=file.txtbs=1Mcount=100# 创建100MB空文件ddif=/dev/urandomof=random.binbs=1Mcount=10# 创建随机文件85.rsync- 增量备份
rsync-av --link-dest=/path/to/previous/backup /source/ /backup/current/🚀 十四、性能调优
86.ulimit- 用户资源限制
ulimit-a# 显示所有限制ulimit-n4096# 设置打开文件数限制ulimit-u unlimited# 设置进程数无限制87.sysctl- 内核参数
sysctl -a# 显示所有内核参数sysctl kernel.hostname# 显示特定参数sudosysctl -w net.ipv4.ip_forward=1# 修改参数📋 十五、Shell内置命令
88.echo- 输出文本
echo"Hello World"# 输出文本echo-e"Line1\nLine2"# 解释转义字符echo$PATH# 输出变量echo~# 输出家目录89.export- 设置环境变量
exportPATH=$PATH:/new/path# 添加PATHexportVAR=value# 设置变量export-n VAR# 取消导出90.source/.- 执行脚本
sourcescript.sh# 在当前shell执行.script.sh# 同上91.read- 读取输入
readvar# 读取输入到变量read-p"Enter name: "name# 带提示read-s password# 静默输入(密码)read-t5timeout# 5秒超时🎨 十六、终端控制
92.clear- 清屏
clear# 清屏Ctrl+L# 快捷键清屏93.reset- 重置终端
reset# 重置终端设置(解决乱码)94.tput- 终端控制
tput cols# 获取列数tput lines# 获取行数tput setaf1# 设置前景色为红色tput bold# 加粗tput sgr0# 重置样式📊 实用命令组合示例
查找大文件
find/ -type f -size +100M2>/dev/null|xargsdu-h|sort-rh|head-20统计文件类型数量
find.-type f|sed's/.*\.//'|sort|uniq-c|sort-nr监控网络连接
watch-n1"netstat -an | grep ESTABLISHED | wc -l"批量重命名
# 将.jpg改为.pngrename's/\.jpg$/\.png/'*.jpg# 或用for循环forfilein*.txt;domv"$file""${file%.txt}.md";done计算目录大小并排序
du-sh *|sort-h查看实时日志
tail-f /var/log/syslog|grep-E"(error|fail|crit)"备份数据库
mysqldump -u user -p database|gzip>backup_$(date+%Y%m%d).sql.gz⚠️ 危险命令警告
rm-rf /# 删除根目录(绝对不要执行!):(){:|:&};:# Fork炸弹(不要尝试)ddif=/dev/randomof=/dev/sda# 破坏磁盘数据>/dev/sda# 清空磁盘chmod-R777/# 修改整个系统权限记住:在执行破坏性命令前,先确认当前目录和命令参数,特别是使用通配符时。
📚 获取帮助
mancommand# 完整手册command--help# 快速帮助infocommand# 详细文档whatiscommand# 简要描述aproposkeyword# 相关命令搜索