说实话,看到“Linux 命令大全”这个标题,我第一反应是:网上这类文章已经多得烂大街了,但绝大多数都是把命令像字典一样罗列出来,记不住也用不上。我写这篇东西的出发点不一样:按真实工作场景来拆解命令。你排查故障时用哪些,部署服务时用哪些,处理文本时用哪些,我把它们串成一条条“肌肉记忆”,而不是孤立地堆给你。文章覆盖了文件操作、文本处理、权限管理、网络传输、进程监控、软件安装,最后还有一套组合命令的效率技巧,适合刚接触 Linux 的新手,也适合准备面试或者日常运维的兄弟拿来查漏补缺。
1. 文件与目录操作:最基础也最容易出事的一类命令
1.1 移动与回退:cd 系命令的高频细节
cd 应该是每个 Linux 用户敲得最多的命令之一,但很多人只停留在 cd /xxx 进入目录这个层面。实际工作中,cd - 这条命令非常救命:它能在你刚访问过的两个目录之间快速切换。比如你在 /var/log/nginx 里看日志,突然要去 /etc/nginx/conf.d 改配置,改完想回到日志目录继续排查,直接 cd - 就回去了,不用敲一长串绝对路径。这个操作在 Xshell 等终端工具里同样有效,本质是 shell 记住了 OLDPWD 环境变量。
还有一个容易忽略的是 cd ~ 和裸敲 cd。前者明确回到当前用户的家目录,后者默认也是回家目录,但习惯上我建议写清楚 cd ~,尤其在脚本里,裸 cd 的可读性和意图都不够明确。另外 cd ../.. 可以一次向上回退两级,这在层级很深的项目目录里效率很高,比如 cd /opt/project/src/utils 想回到 /opt/project,直接 cd ../.. 即可。
路径中含有空格或特殊字符时,记得用引号包起来,比如 cd "My Documents"。很多新手在这里踩坑,报 No such file or directory 时先检查是不是空格没处理。
1.2 删除文件夹:rm 的真实威力与自保姿势
rm 是被神化也是被骂得最多的一条命令。rm -rf 的威力不需要我再强调,网上各种“删库跑路”的段子都跟它有关。我想重点分享的是:怎么在真实环境里安全地使用它。
先区分几条常用形态:rm file 删普通文件;rm -r dir 递归删除目录及其内容;rm -f file 强制删除,不提示;组合起来就是经典的 rm -rf dir。这里有个细节:-f 不是“快速”的意思,而是 force,它在文件不存在时不会报错,也不会因为文件只读而停下来问你。
我自己的自保姿势是这样的:先在 .bashrc 里给 rm 设置一个别名,把它指向 rm -i,这样每次删除前都会二次确认。但这只是第一道保险,真正要命的是防止手滑敲出类似 rm -rf / 或 rm -rf /* 这种命令。我的习惯是删除重要目录前,先 ls 看一眼当前路径,确认自己确实在该目录下,再用 pwd 验证一遍,最后才执行 rm。另外建议优先用 mv 把要删的目录先挪到 /tmp 下,观察几天确认没问题再彻底删。比如 mv /opt/old_app /tmp/old_app_backup,这比直接 rm 多了一个后悔的机会。
删除文件夹还有一个很实用的场景:清理日志和缓存。比如 find /var/log -name "*.log" -mtime +30 -delete,删除 30 天前的日志文件,这比手动翻目录再删要高效得多。
1.3 查找与定位:find 用法和常见坑
find 是定位文件的利器,但很多人只会 find / -name "xxx",然后被一大串 Permission denied 刷屏。这里有两个改进方向。
第一个改进是用 -type 限定类型。比如找配置文件不想要目录,就写 find /etc -type f -name "*.conf";如果只想找目录,就把 -type f 换成 -type d。结合起来,能过滤掉大量不相关结果。第二个改进是利用 -mtime 按时间过滤。find /opt -type f -mtime -7 找出 7 天内被修改过的文件,这在排查“哪个文件最近被动过”时非常好用。
find 配合 -exec 可以实现“找到就处理”。比如把某个目录下所有 .txt 文件批量改成 .bak:
bash复制find /data -type f -name "*.txt" -exec mv {} {}.bak \;
这里 {} 是 find 找到的每个文件的占位符,末尾的 \; 是命令结束符,容易被遗漏。不过我自己更推荐配合 xargs 使用,后面我会单独讲。
还有一个高频需求:按大小找文件。排查磁盘占用时,find / -type f -size +500M 能快速找出超过 500MB 的大文件,配合 -exec ls -lh {} \; 看详细信息,比一层层 du 效率高得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文本查看与处理:读日志、改配置全靠这套组合拳
2.1 查看文件:从 cat 到 tail -f 的升级路线
cat 适合看小文件,比如 cat /etc/hosts。但如果你拿它看一个上百 MB 的日志,终端会直接卡死,屏幕刷满内容,啥也看不了。所以我在生产环境几乎不用 cat 看大文件,而是用 less。less 支持翻页、搜索、跳转,按 / 输入关键词回车就能高亮匹配内容,按 n 跳到下一个匹配项。看配置、看日志,less 都是首选。
另一个高频操作是 tail。查应用最新日志几乎离不开 tail -f app.log,它会持续输出新增内容,Ctrl+C 退出。tail -n 100 app.log 则显示最后 100 行,适合先快速看一眼有没有报错。与此对应的是 head -n 20 file,查看文件开头部分,常用于确认配置文件的头部注释和格式。
还有个我非常推荐的小命令:wc -l。wc -l file 统计文件行数,比如检查业务日志一天生成了多少行,或者统计明细文件有多少条记录,都是一秒出结果。grep -c "ERROR" app.log 也能统计错误次数,但 wc -l 更纯粹,它只关心行数。
2.2 过滤与统计:grep 和 awk 的实战场景
grep 是我在服务器上最依赖的命令,没有之一。最基础也最常用的是 grep "关键字" 文件,但我建议每个人都要学会它的几个进阶选项:
grep -r "关键字" /目录:递归搜索目录下所有文件内容,排查代码里哪里引用了某个函数、哪些配置文件里包含某个 IP,都用这个。grep -i:忽略大小写,匹配error、Error、ERROR时特别有用。grep -E:支持正则表达式扩展,比如grep -E "ERROR|WARN" app.log一次匹配两种级别。grep -l:只输出包含关键字的文件名,不输出具体内容行,适合在海量文件里定位哪些文件有目标内容。grep -v:反向匹配,排除某些行。比如日志里全是 INFO 刷屏,你想看非 INFO 的异常行,就可以grep -v "INFO" app.log。
awk 则强在“按列处理”。默认按空格或 Tab 分割行,$1、$2 分别表示第一列、第二列。比如从日志里统计每个 IP 的访问次数:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -rn
这一行组合了四条命令:awk 取出第一列 IP,sort 排序,uniq -c 去重并计数,再 sort -rn 按次数倒序。这是分析访问日志的黄金组合。另一个实用场景是按条件过滤行,比如打印第五列大于 100 的行:
bash复制awk '$5 > 100 {print $0}' data.txt
$0 表示整行。初学 awk 不需要背太多语法,先把 $1、$NF(最后一列)、NR(行号)这三个概念搞懂,就能解决大部分日常需求。
2.3 批量替换:sed 一条命令改完整个项目
sed 是做批量文本替换最好用的工具。最常见的是在脚本或配置文件里批量改参数:
bash复制sed -i 's/old_string/new_string/g' config.txt
-i 表示直接修改原文件,s 是替换命令,g 表示全局替换(每一行所有匹配都要替换,而不是只替换第一个)。如果要去掉 -i,则会把替换结果输出到终端而不改文件,适合先预览一遍结果,确认没问题再真正写入。
我经历过一个实际案例:一套旧系统的数据库地址要从 192.168.1.10 迁移到 192.168.2.20,配置分散在十几个目录下的几十个文件里。手动一个个改既慢又容易漏,用一条命令就搞定了:
bash复制grep -rl "192.168.1.10" /etc/myapp/ | xargs sed -i 's/192.168.1.10/192.168.2.20/g'
先 grep -rl 找出所有包含旧 IP 的文件,再把这些文件名通过管道传给 sed 做批量替换。这个组合我在迁移、版本升级、域名切换场景中反复使用,可靠性很高。使用 sed -i 前如果怕改错,建议先 cp 备份原文件,或者用 sed -i.bak 这种写法,会自动生成一个 .bak 后缀的备份文件。
3. 用户与权限管理:新建用户、授权、排错一条龙
3.1 新建用户不是只有 useradd
useradd 是创建用户的标准命令,但很多人只敲 useradd zhangsan,随后发现这个用户既没有家目录,shell 也不对,登录体验很奇怪。这是因为 Linux 的 useradd 默认行为比较“精简”,它不会自动创建家目录,也不会帮你设置默认 shell。
我在生产环境建用户,通常会用这样一条完整命令:
bash复制useradd -m -U -s /bin/bash zhangsan
参数含义:-m 自动创建家目录 /home/zhangsan;-U 同时创建同名用户组;-s /bin/bash 指定登录 shell 为 bash。如果忘了加 -m,你可以事后补救:
bash复制mkdir -p /home/zhangsan
chown -R zhangsan:zhangsan /home/zhangsan
还有一个很容易被忽略的点:/etc/skel/ 目录。useradd -m 创建家目录时,会自动把 /etc/skel/ 下的隐藏文件(如 .bashrc、.profile)复制到新用户家目录里。如果公司有一套统一的 shell 配置,放在 /etc/skel/ 下,新建用户就自动拥有这套环境,非常省心。
创建完用户后要设置密码,命令是 passwd zhangsan,然后按提示输两次密码。注意 passwd 不带用户名时,修改的是当前登录用户的密码,这个区别要记住。
3.2 chmod/chown:权限数字背后的计算逻辑
chmod 和 chown 是权限管理的两大核心命令。chown 用于修改文件属主和属组,比如 chown zhangsan:developers project.log 把文件属主改成 zhangsan、属组改成 developers。这个命令在部署应用时非常常用,比如你把代码传到服务器后,需要把目录属主改成运行用户,否则应用都读不了文件。
chmod 修改的是读(r=4)、写(w=2)、执行(x=1)权限。数字模式是很多人觉得难记的地方,其实原理很简单:把所有者的权限数字相加,得到第一位数;属组的权限数字相加,得到第二位数;其他用户的权限数字相加,得到第三位数。所以 chmod 755 表示:所有者 rwx(4+2+1=7)、属组 r-x(4+1=5)、其他用户 r-x(5)。常见的还有 chmod 644(文件:所有者可读写,其他只读)和 chmod 700(仅所有者可读写执行)。
符号模式也值得掌握:chmod u+x script.sh 给所有者加执行权限;chmod g-w file 去掉属组的写权限;chmod a+x file 对所有用户加执行权限。我个人的习惯是:脚本文件给 755,普通配置文件给 644,涉及密钥和密码的文件给 600 甚至 400。不要图省事给目录 777,这等于把大门敞开,安全隐患很大。
3.3 sudo 和 visudo:授权要谨慎
普通用户需要执行特权命令时,靠的是 sudo。但你有没有遇到过 sudo: xxx is not in the sudoers file. This incident will be reported. 这个报错?这就是用户没有被授权使用 sudo。
管理 sudo 授权必须用 visudo 命令编辑 /etc/sudoers 文件,而不是直接用 vim 改。因为 visudo 在保存时会做语法检查,如果格式写错,它会提示你,避免把 sudoers 文件改坏导致所有用户都无法提权。
最简单的授权方式是在文件末尾添加一行:
code复制zhangsan ALL=(ALL:ALL) ALL
这表示 zhangsan 可以在任何主机上以任何用户身份执行任何命令。如果只想授权某些命令,可以更精细地写:
code复制zhangsan ALL=(ALL) /usr/bin/systemctl, /bin/systemctl
这样 zhangsan 就只能用 systemctl 命令,其他特权命令还是没权限。更稳妥的方式是授权给组而不是单个用户:%developers ALL=(ALL) ALL,这样整个 developers 组的成员都能 sudo,管理起来更方便。
授权后,用户执行 sudo command 时第一次要输自己的密码。如果不想每次输密码,可以在 sudoers 里加 NOPASSWD 标志,但生产环境不建议,风险太大。
4. 网络连接与远程文件传输:从探测端口到同步文件
4.1 telnet 不只是连设备,更是端口连通性探测器
提到 telnet,不少人觉得它是“上古协议”,用来连网络设备的。但运维场景里,telnet 命令最常见的用途其实是“测端口通不通”。比如你部署了一个服务监听在 8080 端口,想确认网络层面通不通,直接:
bash复制telnet 192.168.1.20 8080
如果端口通,屏幕会显示连接成功,甚至进入对方的 banner 界面;如果不通,会提示 Connection refused 或者直接卡住超时。这个探测方式比 ping 更精确,因为 ping 只测主机通不通,管不到端口是否开放。
没有 telnet 命令的时候,可以用 nc -zv 192.168.1.20 8080 代替,效果类似。但有些最小化安装的系统默认没有 nc,这时候 telnet 反而是现成的工具。很多云服务器和容器镜像里都自带 telnet 客户端,所以它作为端口探测工具的地位至今没被完全取代。
测试端口连通性时,还有一个高频需求:查看本机端口监听情况。这时候用 netstat -tlnp 或 ss -tlnp。-t 显示 TCP、-l 只看监听状态、-n 不做域名解析(更快)、-p 显示对应进程 PID。ss 是 netstat 的现代替代品,输出更快,推荐优先使用。看到端口被占用时,先记下 PID,再用 ps -ef | grep 进程号 查是什么程序占用的,这是我日常排查端口冲突的标准操作。
4.2 ssh/scp 日常操作与免密配置
SSH 是连接 Linux 服务器的基本方式,ssh root@192.168.1.20 是最简单的用法。日常工作中几个高频点说一下。第一是自定义端口,如果 SSH 服务改了端口,需要 ssh -p 2222 user@host。第二是免密登录,这是需要重点掌握的技能,配置步骤如下。
先在本地生成密钥对:
bash复制ssh-keygen -t rsa -b 4096
一路回车后会生成 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。然后把公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件里:
bash复制ssh-copy-id user@192.168.1.20
这样以后再登录就不需要输密码了。如果启用免密后依然要输密码,大概率是服务器端 ~/.ssh 目录或 authorized_keys 文件权限不对。SSH 对权限要求很严:~/.ssh 目录权限应为 700,authorized_keys 文件权限应为 600。用 chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys 修复,基本都能解决。
scp 是跨机器传文件最直接的工具。从本地传到服务器:
bash复制scp /local/file user@192.168.1.20:/remote/path/
从服务器拉回到本地:
bash复制scp user@192.168.1.20:/remote/file /local/path/
传整个目录加 -r。如果 SSH 端口不是默认 22,需要用 -P 端口号(注意是大写 P,跟 ssh 的 -p 不同)。传输大文件时,建议加 -C 开启压缩,能明显缩短耗时。
4.3 curl/wget 和端口占用排查
curl 是调试 HTTP 接口的神器。curl -I https://example.com 只看响应头,用来判断页面是否正常、有没有重定向;curl -X POST -d '{"key":"value"}' https://example.com/api 模拟 POST 请求,调试接口时几乎每天都要用。-H 参数可以添加请求头,比如 curl -H "Content-Type: application/json" -X POST -d '{"name":"test"}' http://localhost:8080/api。
wget 则更适合下载文件。wget https://example.com/file.tar.gz 下载到当前目录;wget -c 支持断点续传,下载大文件时中断了,再执行一次能接着下,不用从头再来。这在下载安装包时非常实用。
排查端口占用时,我习惯先用 ss -tlnp | grep 8080 看哪个进程在监听,然后用 lsof -i:8080 补充确认。lsof 需要安装,但它能看到更多连接细节。如果端口被占用且不明确是哪个进程,lsof -i:8080 会直接显示 PID 和进程名,省去了额外查询的时间。
5. 进程、服务与系统状态:服务器“体检”必备命令
5.1 看进程不要只会 ps aux
ps aux 是查看进程列表的经典组合,输出的信息包括了进程所属用户、PID、CPU 占用、内存占用、启动命令等。但只看 ps aux 是不够的,配合 grep 才是日常:
bash复制ps aux | grep nginx
这样能快速找到 Nginx 相关进程。不过这里有个细节:因为 grep 命令本身也会出现在结果里,所以经常能看到一条 grep --color=auto nginx 的进程,这是正常的,不用大惊小怪。想彻底排除它,可以写成 ps aux | grep [n]ginx 这种小技巧,grep 自己就不会匹配到自己了。
查看“进程树”可以用 pstree -p,能直观看出哪个进程是父进程、哪些是子进程。排查僵尸进程(状态为 Z)时很有用,比如你可以发现某个子进程没有被父进程正确回收,顺着树找到父进程去处理。
5.2 看资源:df、du、free 三兄弟
系统卡顿或者磁盘告警时,你会用到这三个命令。df -h 查看磁盘分区使用情况,-h 以人类可读的 GB、MB 格式显示。看到某个分区使用率到 100%,你就要考虑清理文件或者扩容了。du -sh /opt/* 查看指定目录下每个子目录的大小,用来定位是哪个目录占用了大量空间。注意 du 和 df 的结果可能不一致,这是正常现象,因为有些文件已被删除但进程仍然持有句柄,df 显示的占用不会立即释放;这时候可以用 lsof | grep deleted 找出这些“已删但未释放”的文件,重启对应进程才能回收空间。
free -h 查看内存使用情况。重点关注 available 列,它表示实际可用的内存。如果 available 很小,说明内存吃紧。另外一个常见误区是:看到 used 很高就觉得内存不够了。其实 Linux 会合理利用空闲内存做缓存(buff/cache),这在 free -h 里显示为单独一列。只要 available 充足,used 高并不是问题。
5.3 系统服务管理:systemctl 在实战中的注意点
现代 Linux 发行版大多使用 systemd 管理服务,所以 systemctl 是必须要掌握的。几个核心操作:
bash复制systemctl status nginx # 查看服务状态
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl enable nginx # 设置开机自启
systemctl disable nginx # 取消开机自启
systemctl daemon-reload # 重载 systemd 配置
实际工作中有个坑:修改了服务的配置文件后,直接 systemctl restart 并不总能生效——如果服务本身是以自定义脚本方式启动的,或者改了 unit 文件本身,你需要先 systemctl daemon-reload 再 restart。另一个坑是:systemctl status 打印的信息里,如果显示 Active: failed (Result: exit-code),通常说明服务启动脚本有问题。此时直接用 systemctl status nginx -l 查看完整日志,或者 journalctl -u nginx 看 systemd 日志,比盲目重启更有效。
如果你管理的是传统 SysV init 服务,可能要用 service nginx start 这类命令。但新系统基本都是 systemd,所以优先掌握 systemctl 就够了。
6. 软件安装、git 与 vim:日常工作流里的“半条命”
6.1 用命令装好一个 Nginx:apt/yum 实战流程
Linux 安装软件最主流的方式是包管理器。Debian/Ubuntu 系用 apt,CentOS/RHEL 系用 yum 或 dnf。以 Ubuntu 安装 Nginx 为例,标准流程是:
bash复制apt update
apt install -y nginx
apt update 会刷新软件源索引,不是必须的,但在新系统上是良好习惯,能避免“包找不到”的问题。-y 表示安装过程中的确认提示自动选择 yes,避免卡住。安装完成后,systemctl enable --now nginx 可以同时设置开机自启并立即启动。
CentOS 系对应是:
bash复制yum install -y nginx
如果默认源里没有 Nginx,可能要先安装 EPEL 源:yum install -y epel-release。装完软件后,查看版本是刚需:nginx -v。但如果你用 nginx -V(大写 V),会输出更详细的编译参数和模块信息,排错时能看出编译了哪些模块、配置文件默认加载路径是怎样的。
6.2 git 提交与回滚:别再只会 git add .
git 是代码管理的灵魂,但很多人只会天天 git add .、git commit -m "update"、git push 三板斧,遇到要回滚就慌了。先把最基本的正确提交流程写出来:
bash复制git status # 查看当前工作区状态
git diff # 查看未暂存的具体改动
git add file1 file2 # 精确添加文件,而不是无脑 git add .
git commit -m "feat: 添加用户登录接口"
git push origin main
提交信息别写“update”“fix”这种没营养的内容,好的提交信息应该是给未来同事和未来的自己看的,写清楚“做了什么、为什么做”。比如 fix: 修复用户登录时验证码过期未刷新问题。
遇到提交完发现写错了,用 git commit --amend -m "新的提交信息" 修改最近一次提交信息。想撤销提交但保留工作区改动,用 git reset --soft HEAD~1;想彻底回退到上一个提交(工作区也变回旧版本),用 git reset --hard HEAD~1。注意 --hard 会把本地未提交的改动也丢掉,执行前必须三思。查看提交历史用 git log --oneline,一行一条提交,非常清爽。
6.3 vim 入门:从打开文件到保存退出
在服务器上改配置文件,绕不开 vim。很多新手被 vim 卡在“怎么退出”这道坎上,其实关键就是记住:vim 有普通模式、插入模式、命令模式三种状态。刚启动 vim 时处于普通模式,此时输入 i 进入插入模式(屏幕左下角会显示 -- INSERT --),这时候才能正常改字。改完按 Esc 回到普通模式,再输入 :wq 回车,保存并退出。:q! 则是不保存强制退出。
常用操作还有:普通模式下按 dd 删除当前行;按 yy 复制当前行;按 p 粘贴到下一行;输入 /关键词 搜索,按 n 跳到下一个匹配。如果只想简单看文件,用 vim file 打开后输入 :q 退出即可。
用 vim 最容易踩的坑是:按了 Ctrl+S 想保存,结果终端卡住了。这是终端软件把 Ctrl+S 当作暂停输出信号(XOFF)了,解决办法是按 Ctrl+Q 恢复。记住这个,能少很多尴尬。
7. 命令组合与效率技巧:从“会命令”到“会用命令”
7.1 管道和 xargs:命令之间的“串联电路”
管道 | 是 Linux 命令设计的灵魂。它把前一条命令的输出,作为后一条命令的输入,从而把两个甚至多个简单命令组合成一个强大指令。刚才提到的 ps aux | grep nginx、awk '{print $1}' access.log | sort | uniq -c | sort -rn 都是典型例子。
但当你想把前一条命令的“输出结果”作为“参数”传给后一条命令时,管道就不够用了,这时候要上 xargs。比如找出所有 PHP 进程并强制结束:
bash复制ps aux | grep php | grep -v grep | awk '{print $2}' | xargs kill -9
这里 awk '{print $2}' 提取出 PID,然后 xargs kill -9 把一堆 PID 当作参数传给 kill。如果不加 grep -v grep,很可能会把自己的 grep 进程也杀掉。xargs 处理文件名带空格的情况时,建议配合 -0 参数使用:find . -name "*.log" -print0 | xargs -0 rm -f。-print0 让 find 用空字符分隔结果,-0 让 xargs 按空字符识别,这样文件名里即使有空格也不会出错。
7.2 历史命令和别名:把重复操作压到最少
history 命令能查看你敲过的所有命令。往上翻历史记录用键盘方向键,但更高效的是 Ctrl+R 反向搜索:按下 Ctrl+R 后输入关键词,会自动匹配历史里最接近的一条命令,再按一次继续往前翻,找到后回车执行。这比我翻记录快多了。
!! 表示上一条命令,sudo !! 是经典用法:你敲了一条命令发现权限不够,提示 Permission denied,直接在开头加 sudo 再执行 sudo !! 就行,不用重新敲一遍。!$ 表示上一条命令的最后一个参数,比如你 cat /etc/nginx/nginx.conf 后想编辑这个文件,直接 vim !$ 就能打开同一个路径。
alias 命令可以给常用命令起别名。比如在 .bashrc 里加一行 alias ll='ls -alF',以后敲 ll 就是列表详情。把安全别名写进去,比如 alias rm='rm -i',能有效防止误删。修改 .bashrc 后执行 source ~/.bashrc 使配置立即生效,不用重新登录。
7.3 几条组合命令实战:直接抄作业
最后分享几个我平时几乎天天用的组合命令,可以直接抄走。
查看当前系统负载和运行时长:
bash复制uptime
找出占用内存最高的前 5 个进程:
bash复制ps aux --sort=-%mem | head -5
这个写法比 ps aux | sort -k4 -rn | head -5 更简洁,推荐使用。
统计 Nginx 访问日志里访问量最大的前 10 个 IP:
bash复制awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
备份某个目录(打包压缩并带时间戳):
bash复制tar czf /backup/app_$(date +%Y%m%d_%H%M%S).tar.gz /opt/myapp
这条命令用 $(date +%Y%m%d_%H%M%S) 动态生成时间戳,备份文件自动带上日期,归档管理很舒服。tar 的 czf 分别表示:创建归档、gzip 压缩、指定文件名。
批量把当前目录下所有 .png 图片改名加前缀:
bash复制for f in *.png; do mv "$f" "pic_$f"; done
这是一小段 shell 循环,不需要写脚本文件就能处理批量任务。类似的循环结构在命令行里能解决大量重复性工作,值得花十分钟掌握。
我在实际工作中最大的体会是:Linux 命令不是靠背出来的,是靠用出来的。你不需要记住所有参数的组合,但一定要知道“遇到这类问题该往哪个方向查”。把这篇文章里提到的命令多敲几遍,敲到自己手熟,比收藏一百篇“命令大全”都管用。遇到忘了的,优先用 man 命令名 查官方手册,其次再搜网络资料。记住:组合命令才是效率的放大器,单独记每个命令只是起点。
