干了这么多年Linux,经常碰到刚入行的同事问我:“Linux命令那么多,到底该学哪些?”说实话,网上各种“命令大全”一搜一大把,但绝大多数都是把man手册翻译了一遍,看着厚厚一页,真正用到的时候还是抓瞎。我平时工作里最常用的,翻来覆去其实就那么几十条。这篇文章我就从实际运维和日常开发的角度,把这些年真正高频、能救命的命令整理出来,不讲虚的,每条都告诉你它是干什么的、为什么这么用、踩过什么坑,希望能给正在啃命令的你一条捷径。
无论你是刚接触服务器的新手,还是被分配了Linux环境开发任务的程序员,或者是准备面试的运维实习生,这份清单都适用。我尽量做到:常用命令全覆盖,关键参数有解释,坑点有提示。这样你在实操的时候,可以把它当成一份随时查阅的速查手册。
1. 文件与目录操作:每天打交道最多的基础命令
文件和目录操作是Linux的基石,这部分不熟练,后面什么都白搭。网上的命令大全里这部分列了几十条,但真正高频的其实就那么几个,我挨个说。
1.1 删除文件夹的命令到底怎么用才安全
“linux删除文件夹命令”常年霸占热搜榜,原因很简单——rm命令太危险了。我见过不止一次,有人想把当前目录下的临时文件删掉,结果rm -rf /tmp/* /var/tmp/*中间多打了个空格,差点把根目录删了。
先看最基础的用法:
bash复制# 删除空目录
rmdir empty_dir
# 删除文件
rm file.txt
# 递归删除目录及其内容(最常用,也最危险)
rm -r dir_name
# 强制删除,不提示确认
rm -rf dir_name
关于rm -rf,网上有个梗叫“删库跑路”,虽然是玩笑,但真不是危言耸听。我的建议是:在root权限下,能不敲rm -rf就不敲,尤其不要在路径后面用变量。比如你写了个脚本rm -rf $DIR/*,万一$DIR没赋值成功,命令就变成了rm -rf /*,系统直接报废。
我自己有个习惯,删除重要目录前,先执行ls确认路径,再用pwd看下当前位置。另外,但凡是在生产服务器上删东西,我几乎不用rm,而是用一个更安全的方案——先mv到/tmp或者一个专门的trash目录,观察几天确实没用了再真正删。这个习惯帮我避免了很多次“手滑事故”。
注意:
rm -rf对软链接也有效,删除软链接本身不会删除链接指向的真实文件,但如果你在路径末尾加了斜杠(比如rm -rf symlink/),那删的就是目标目录里的内容了,这点特别容易踩坑。
1.2 新建文件和目录的几个常用姿势
创建文件有几种方式,不同场景用不同方法。
bash复制# 创建单个空文件
touch newfile.txt
# 批量创建文件
touch file1.txt file2.txt file3.txt
# 创建多层目录(-p参数最关键,父目录不存在时自动创建)
mkdir -p /data/logs/2024/08
# 同时创建多个目录
mkdir -p /data/{images,videos,docs}
这里mkdir -p中的-p是parents的缩写,这个参数一定要养成习惯带上。如果不加-p,上级目录不存在时直接报错,一次次的错误提示会让你怀疑人生。
touch命令还有个妙用:当你要基于某个现有文件修改时间戳来触发编译或日志切割时,touch -t 202408010000 file.log可以指定精确时间。这个在排查问题时很有用,比如你怀疑某个日志文件被改动过,可以通过时间戳判断。
1.3 文件和目录查看:ls、du、find三板斧
ls大家都会用,但要提醒几个容易被忽略的参数:
bash复制# 显示所有文件(包括隐藏文件)
ls -a
# 显示详细信息,并以人类可读的大小显示
ls -lh
# 按时间排序(最新在前)
ls -lt
# 递归列出所有子目录
ls -R
查看目录大小,用du比ls更直观:
bash复制# 查看当前目录下各子目录大小,-h表示人类可读,-s表示汇总,-d指定深度
du -sh *
du -h --max-depth=1 /data
# 找出当前目录下最大的前5个文件
du -ah . | sort -rh | head -5
这个命令组合是我排查磁盘占用时的经典开场动作。很多时候磁盘告警,一执行du -sh *,立马就能定位到是哪个目录在疯长。
find是文件查找的神器,参数比Windows的搜索强大太多:
bash复制# 按文件名查找(-iname忽略大小写)
find /data -name "*.log"
# 按文件大小查找(大于100MB的文件)
find /data -size +100M
# 按修改时间查找(最近7天内修改过的)
find /data -mtime -7
# 找到并执行操作(比如删除7天前的旧日志)
find /data/logs -name "*.log" -mtime +30 -delete
注意find的-delete参数,和rm一样危险,必须确认筛选条件没问题再执行。我一般在用-delete之前,会先不加这个参数跑一遍,确认输出的文件列表是对的,才真正执行删除。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 用户与权限管理:新建用户到权限控制的完整链路
“linux新建用户”也是高频搜索词。用户权限这块,既是新人容易懵的地方,也是面试爱考的点。这部分命令不多,但每个都牵涉安全,必须讲透。
2.1 新建用户的完整流程与常见坑
新建一个用户,不只是执行一条useradd命令就完了。很多新手建完用户,登录发现没有家目录,或者没有密码,一脸懵。实际上,一套完整的新用户流程是:
bash复制# 创建用户并同时创建家目录,指定默认shell
useradd -m -s /bin/bash username
# 设置或修改密码
passwd username
# 查看用户信息(确认创建成功)
id username
这里-m参数是create home directory,必须带上,否则不会自动生成/home/username目录。-s指定登录shell,如果忘了指定,默认可能是/bin/sh,在有些系统上提示符啥的都比较简陋,体验不好。
还有一个非常容易忽略的点:useradd和adduser的区别。在Debian/Ubuntu系里,adduser是一个交互式脚本,会自动创建家目录、设置密码、创建用户组,更推荐新手使用。而在CentOS/RHEL系里,adduser只是useradd的软链接,啥都不会帮你做。所以你在网上搜命令时,看到这两种写法不统一,不是人家错了,是系统发行版不一样,这个一定要分清楚。
用户建好后,如果要让他有sudo权限:
bash复制# 方法一:直接编辑sudoers文件
visudo
# 在文件中添加:username ALL=(ALL) ALL
# 方法二:加入sudo组(CentOS/RHEL上wheel组,Ubuntu上sudo组)
usermod -aG wheel username
usermod -aG sudo username
2.2 权限修改:chmod和chown的实战用法
权限是Linux用户管理的核心。理解权限模型前,先记住一个公式:Linux权限分为读(r=4)、写(w=2)、执行(x=1)三种,分别针对文件所有者、所属组、其他人三个维度。
bash复制# 数字方式设置权限(最常见的用法)
chmod 755 script.sh # 所有者rwx,组和其他人r-x
# 递归修改目录权限
chmod -R 755 /data/web
# 给脚本增加执行权限
chmod +x deploy.sh
# 修改文件所有者
chown user1 file.txt
# 同时修改所有者和所属组
chown user1:group1 file.txt
# 递归修改目录归属
chown -R user1:group1 /data/web
这里数字权限的计算逻辑很简单:r是4,w是2,x是1,把需要赋予的权限相加就得到一位数字。比如755 = 所有者4+2+1=7,组4+0+1=5,其他人4+0+1=5。
关于chown -R这个参数,我提醒一句:如果目录里文件特别多(比如几万个静态文件),递归修改权限可能会比较慢,要耐心等待,不要中途Ctrl+C,不然权限改到一半,后面会出现一些莫名其妙的问题。
还有一个高频场景,是修改文件所有者为当前用户并授权,很多从Windows转过来的朋友会把“以管理员身份运行”的习惯带过来,在Linux里直接改成777,图省事。千万别这样。chmod 777意味着所有用户都能读写执行,这是安全大忌。正确做法是:文件是谁的,就给谁对应的权限,组和其他用户只给确实需要的权限(一般是只读或执行)。
3. 运维排查高频命令:从系统负载到端口连通性
运维场景下,你接手一台服务器,第一件事就是摸清它的状态。这部分命令熟不熟练,直接决定你排查故障的速度。热搜词里“linux常用命令大全运维”被点得很多,这块内容就是运维的真正核心。
3.1 系统状态三件套:top、free、df
系统卡了,磁盘满了,内存不够了,这三个问题基本覆盖了80%的日常故障。
bash复制# 实时查看系统负载、进程状态
top
# 更直观的版本(CentOS 7+或新系统自带)
htop
# 查看内存使用情况(-h人类可读,-m以MB为单位)
free -h
# 查看磁盘分区使用率
df -h
# 查看inode使用率(小文件特别多时,即使磁盘有空间也可能报no space)
df -i
top一打开,先看load average,三个数值分别代表1分钟、5分钟、15分钟的平均负载。如果三个数都大于CPU核数,说明系统过载了。再看%CPU和%MEM列,就能定位是哪个进程在吃资源。
free -h一执行,重点看used和available两列。很多人看到used很高就紧张,其实Linux有页面缓存(page cache)机制,内存利用率高不代表不够用,available才代表真正可用的内存。
df -i这个命令最容易忽略。有一次我碰到一个服务突然写不了日志,df -h看磁盘空间还很充足,结果就是df -i一执行才发现,inode用满了——原因是日志目录里产生了海量的小文件,每个文件占一个inode,inode耗尽后即使有空间也没法创建新文件。这个坑我印象特别深,所以排查磁盘问题的时候,这两条命令要一起看。
3.2 网络排查与端口连通性:从telnet到curl
热搜词里有“telnet命令怎么用”,这个命令很多新人不理解,明明现在已经很少用telnet去远程登录服务器了,怎么还经常提它?实际上,telnet在运维里的最大价值是测试远程端口是否开放。
bash复制# 测试本机到目标主机的指定端口是否连通
telnet 192.168.1.100 3306
# 如果连通,会显示Connected to;如果不通,会卡住然后报超时
telnet退出方式也别搞忘了:Ctrl+]然后输入quit回车。
在云服务器环境里,很多安全组策略导致端口不通,用telnet一测就能区分是网络问题还是应用问题。比telnet更全能的排查命令是curl:
bash复制# 测试HTTP接口连通性(-I只获取响应头)
curl -I http://localhost:8080/api/health
# 带超时时间测试(-m设置最大请求时间,-v显示详细过程)
curl -m 5 -v http://192.168.1.10/api
# POST请求测试
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://localhost:8080/api
另外,最近几年新系统里默认可能没装telnet,可以用nc(netcat)替代:
bash复制# 等价于telnet测试端口
nc -zv 192.168.1.100 3306
-z表示不发送数据只扫描端口,-v显示详细信息。这条命令在排查MYSQL、Redis、Nginx等服务的端口连通性时非常好用。
3.3 进程与端口占用:ps、ss、netstat的组合用法
“8080端口被谁占了?”可能是运维群和开发群里出现频率最高的一句话。排查这个问题的标准流程是这样的:
bash复制# 查看某个端口被哪个进程占用(新版系统推荐ss命令)
ss -tlnp | grep 8080
# 老系统的netstat命令
netstat -tlnp | grep 8080
# 找到PID后,查看进程详细信息
ps -ef | grep PID
# 查看完整命令路径
ls -l /proc/PID/exe
ss是netstat的替代品,信息显示更清晰,速度更快。这些命令里-t显示TCP、-l显示监听状态、-n不解析域名(加速显示)、-p显示进程信息(需要root权限)。
如果PID拿到了,想终止这个进程:
bash复制# 正常终止
kill PID
# 强制终止(实在杀不掉时用,SIGKILL)
kill -9 PID
# 按进程名终止全部
pkill -9 -f "process_name"
这里提醒一下,kill -9是最后手段,它会直接让进程“猝死”,不给你机会保存状态或释放资源。能先kill(SIGTERM,PID默认发15信号)就先用普通kill,让进程优雅退出。有些资深运维一上来就是kill -9,这不是好习惯。
4. 文本处理与编辑:grep、sed、vim三板斧
Linux世界里,“一切皆文件”,配置改错了、日志找错了,都离不开文本处理。这块命令是拉开“会用Linux”和“玩得转Linux”差距的分水岭。
4.1 日志过滤与统计:grep的不完全指南
grep是运维排查日志时最依赖的命令,没有之一。但很多人的用法只停留在grep "error" app.log这个层面,太初级了。
bash复制# 递归搜索某个目录下所有文件(-r递归,-n显示行号)
grep -rn "error" /data/logs/
# 忽略大小写搜索(-i)
grep -i "error" app.log
# 统计匹配的行数(-c)
grep -c "Exception" app.log
# 显示匹配行的前后几行内容(-A后几行、-B前几行、-C前后各几行)
grep -C 5 "OutOfMemoryError" error.log
# 使用正则表达式匹配(-E,等同于egrep)
grep -E "ERROR|FATAL" app.log
# 只输出匹配到的内容(-o),常用于提取IP或特定字段
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log | sort | uniq -c | sort -rn
最后这条命令组合非常经典,作用是从Nginx访问日志里提取所有IP,统计每个IP出现的次数并排序。分析谁在刷接口、哪个IP访问量异常,这一条命令全部搞定,效率极高。
4.2 日志实时跟踪:tail命令的几个实用参数
日志排查还有一个高频操作:实时跟踪日志文件。
bash复制# 实时查看日志新增内容(-f跟随后台运行)
tail -f application.log
# 查看最后100行日志
tail -100 application.log
# 如果日志文件按天切割,可以跟踪所有匹配的文件
tail -f /data/logs/app-*.log
tail -f是观察服务启动日志、请求日志的黄金选择。用的时候配合grep做过滤更高效:
bash复制tail -f app.log | grep --line-buffered "ERROR"
注意这里的--line-buffered参数很重要,它让grep在每读到一行匹配内容时立即输出,而不是等缓冲区满了才输出。不加这个参数,你可能会觉得日志“卡住了”,其实是grep的缓冲机制在作怪。
4.3 vim实用操作:新手学会这10个就够用
热搜词里“vim命令”排名靠前,但vim的完整教程能写一本书,新手没必要全学。我根据自己带新人的经验,整理了一份最小可用集:
bash复制# 打开文件
vim /etc/nginx/nginx.conf
# 进入编辑:按 i(光标前插入)或 a(光标后插入)
# 保存退出:Esc进入普通模式,输入:wq回车
# 不保存退出:Esc后输入:q!回车
# 快速跳转(普通模式下)
gg # 跳到文件第一行
G # 跳到文件最后一行
0 # 跳到行首
$ # 跳到行尾
搜索和替换也是必须会的:
bash复制# 搜索某个关键词(普通模式下输入/关键词)
/error
# 查找下一个,按 n;查找上一个,按 N
# 全局替换一个词(末行模式下)
:%s/old/new/g
# 替换前确认(加c参数,每次替换询问y/n)
:%s/old/new/gc
我特别要提一点:很多新手在vim里不知道怎么退出,直接在知乎上问“vim怎么退出”,然后被老手们调侃“关机重来”。其实只要记住,按一下Esc确保在普通模式,输入:,再输入q回车,就退出了。想保存退出就:wq,不保存就:q!。这三步真的不离谱,你只要练上十几遍,就没有退不出来的问题了。
sed也是文本处理的重器,重点掌握s///替换和-i参数就够用:
bash复制# 把文件里的IP批量替换成新IP
sed -i 's/192.168.1.1/192.168.1.2/g' config.properties
# 删除文件里的空行
sed -i '/^$/d' data.txt
# 打印文件第10行到第20行
sed -n '10,20p' app.log
sed -i和rm -rf一样属于高危操作,它会直接修改源文件。务必确认表达式正确再执行,最好先不加-i跑一遍看输出对不对,确认无误后再加上-i真正落盘。
5. 远程操作与文件传输:scp和rsync的高效姿势
“linux scp命令”和“windows与linux共享文件”也是高频搜索词,这说明跨机传输是日常真实需求。两块内容合并来说,把文件传输这件事讲透。
5.1 scp命令的基础用法与路径格式
只要你的跳板机或服务器开了SSH服务,就可以用scp在机器之间传文件。scp的路径格式和SSH一致,核心区别在于:源路径在远程时,要在前面加用户名@主机名:前缀。
bash复制# 本地上传到远程
scp local_file.txt root@192.168.1.100:/data/
scp local_file.txt root@192.168.1.100:/data/remote_file.txt
# 远程下载到本地
scp root@192.168.1.100:/data/remote_file.txt ./
scp root@192.168.1.100:/data/remote_file.txt /local/path/
# 递归传输整个目录(-r参数)
scp -r /data/web/ root@192.168.1.100:/data/web/
# 指定端口传输(SSH不是默认22端口时,-P大写)
scp -P 2222 local_file.txt root@192.168.1.100:/data/
scp的坑主要在路径和端口上。路径没写全会导致文件传错位置,端口参数必须是大写的-P,小写的-p是保留修改时间戳的,搞混了你就会发现“诶,怎么连不上了”。
如果需要传大量小文件,scp效率会很低,因为每个文件都要经过一次加密握手。这时候就该rsync上场了。
5.2 rsync同步命令:增量传输的王者
rsync是增量同步工具,它只传输差异部分,比scp效率高一个数量级。日志备份、代码发布、目录镜像,用到rsync的场景非常多。
bash复制# 基本同步(把本目录同步到远程)
rsync -av /data/web/ root@192.168.1.100:/data/web/
# 删除源端没有的文件(保持两端完全一致,-delete参数)
rsync -av --delete /data/web/ root@192.168.1.100:/data/web/
# 排除某些文件或目录(--exclude参数)
rsync -av --exclude="*.log" --exclude="cache/" /data/web/ root@192.168.1.100:/data/web/
# 断点续传 + 流量限速(大文件传输时非常有用)
rsync -av --partial --bwlimit=2000 large_file.iso root@192.168.1.100:/data/
参数解读:-a是归档模式,相当于-rlptgoD,保留权限、所有者、时间戳等属性;-v是显示详细输出。这两个参数基本是固定搭配,直接-av就对了。
我自己在发布前端静态资源到服务器时,几乎都用rsync。第一次全量同步,之后每次部署只传改动的几个文件,几秒钟就完成。这个效率体验,用过的人都说好。
注意:rsync的源路径末尾有没有斜杠,意义完全不同。
/data/web/表示“把目录里的内容同步过去”,而/data/web表示“把目录本身同步过去”,结果会在目标端多出一层目录嵌套。这个细节是rsync最容易让人懵的地方,没有之一。
5.3 Windows与Linux互传文件的其他姿势
Windows和Linux之间的文件互传,除了用scp/rsync,还有几个思路:
- 用SFTP客户端工具(如WinSCP、FileZilla),基于SSH协议,图形化界面上传下载,适合一次传少量文件。
- 在Linux上起Samba服务,Windows直接通过
\\IP\share访问,适合需要长期共享目录的场景。 - 在Windows侧用
tar(新版Win10+自带)压缩后通过scp传,适用于传大量小文件。
直接编辑远程文件的高效方案,可以试试sshfs:
bash复制# 把远程目录挂载到本地,像操作本地目录一样编辑
sshfs root@192.168.1.100:/data /mnt/remote
挂载后,本地IDE直接打开/mnt/remote下的文件编辑保存,等于直改远程代码,调试效率提升不是一点点。用完记得卸载:fusermount -u /mnt/remote。
6. 进程后置与任务调度:nohup、crontab的实战
运维里有一种需求特别常见:一个服务或者脚本,需要它在后台长期运行,或者定时执行。这块命令属于“平时不常用,一用能救命”的类型。
6.1 后台运行命令:nohup和&的配合使用
在终端里启动一个进程后,如果终端关闭,进程会收到挂断信号(SIGHUP)而退出。这就是为什么你启动一个服务,登录退出后发现服务停了。
bash复制# nohup命令可以让进程忽略挂断信号,配合&放到后台运行
nohup python manage.py runserver 0.0.0.0:8000 > server.log 2>&1 &
# 分解说明
# nohup ... & 让命令在后台运行,不随终端退出而终止
# > server.log 把标准输出重定向到server.log
# 2>&1 把标准错误也重定向到同一個文件
这条命令是我启动各种长期运行服务时的标配。日志文件的路径根据实际情况调整,很多时候还要加一个-u参数(python等解释器场景)禁用缓冲,确保日志实时写入。
如果想要追踪启动过程,可以之后执行tail -f server.log。要确认进程是否真的在运行,用ps -ef | grep python查看。
如果Linux系统支持systemd,更推荐的方案是写一个systemd服务单元,让服务开机自启、崩溃自动重启。但nohup在小脚本、临时任务场景下依然是最轻量高效的方案。
6.2 定时任务:crontab的五个时间字段
定时备份、定时清理日志、定时拉取数据,这些需求都逃不开crontab。crontab的配置文件很简单,但五个时间字段的排列组合,是新手最懵的地方。
bash复制# 编辑当前用户的定时任务
crontab -e
# 查看定时任务
crontab -l
其语法格式是:分 时 日 月 周 命令。
bash复制# 每天早上3点执行备份脚本
0 3 * * * /data/scripts/backup.sh
# 每10分钟检查一次服务状态
*/10 * * * * /data/scripts/check_service.sh
# 每周六凌晨2点执行日志清理
0 2 * * 6 /data/scripts/clean_logs.sh
# 每天0点,6点,12点,18点各执行一次
0 0,6,12,18 * * * /data/scripts/task.sh
# 每月1号和15号凌晨1点执行
0 1 1,15 * * /data/scripts/monthly_task.sh
五个字段的含义,用一个表格说清楚:
| 字段 | 取值范围 | 含义 |
|---|---|---|
| 第1位 | 0-59 | 分钟 |
| 第2位 | 0-23 | 小时 |
| 第3位 | 1-31 | 日期 |
| 第4位 | 1-12 | 月份 |
| 第5位 | 0-7(0和7都代表周日) | 星期 |
crontab的坑也不少,我遇到过的有:脚本执行了但没效果,查了半天发现是脚本里用了相对路径;脚本报了错但没日志,排查困难;环境变量和登录shell不一致,导致脚本里某些命令找不到。我的经验是,在crontab里执行脚本,路径一律写绝对路径,并且把脚本输出重定向到日志文件:
bash复制0 3 * * * /usr/bin/bash /data/scripts/backup.sh >> /data/logs/backup.log 2>&1
7. 命令查询与效率技巧:学会这些,少走半年弯路
最后这部分,我称之为“Linux使用效率的隐藏加成”。这些命令不解决具体问题,但能帮你少翻很多次文档,少做很多次重复劳动。也是真正从“新手”向“熟练用户”过渡的分水岭。
7.1 记不住命令怎么办:man、help和history
“命令太多记不住”是新人最大的焦虑,其实完全没必要,Linux自带的查询机制已经够用了。
bash复制# 查看命令的完整手册
man ls
# 查看命令的简要帮助(man有时太长,用--help快速定位)
ls --help
# 查看shell内建命令的帮助(比如cd、echo这些)
help cd
# 查看命令的具体路径
which python
type -a python
man手册有分页器的概念,按/搜索关键词,按q退出。很多人看man手册一会儿就迷失了,我的经验是先看DESCRIPTION和EXAMPLES,参数细节遇到再查,不用从头读到尾。
history命令也值得养成习惯:
bash复制# 查看历史命令
history
# 清空历史(有安全顾虑时)
history -c
# 执行历史中的某条命令(!加上序号)
!1024
# Ctrl+R反向搜索历史命令,输入关键词即可快速找到
# (这是我用得最多的快捷键,没有之一)
Ctrl+R这个快捷键,如果只能教给新手一个操作,我就教这个。输入几个关键词,历史命令自动补全,效率提升极其明显。
7.2 alias别名:把你的高频命令变短
如果你发现某条命令组合每次都要敲一长串,那就给它取个别名。
bash复制# 临时设置别名
alias ll='ls -lht'
# 查看所有已设置的别名
alias
# 删除别名
unalias ll
但临时别名重启终端就失效了。要永久生效,把它写进shell的配置文件中。以bash为例:
bash复制echo "alias ll='ls -lht'" >> ~/.bashrc
source ~/.bashrc
有个细节要注意:如果你用了zsh,配置文件是~/.zshrc,改错文件会导致别名不生效。另外,别名不要取成已有命令的名字,比如alias ls='ls --color=auto'可以覆盖,但alias cp='cp -i'在某些系统上可能引起误判,还是稳妥点好。
7.3 组合命令与管道:一键完成的效率革命
Linux命令真正的威力在于组合。管道符|把前一个命令的输出传给下一个命令作为输入,几个简单命令一组合,就能完成相当复杂的任务。
bash复制# 查看当前目录下文件数量(包括隐藏文件)
ls -la | wc -l
# 查看Nginx日志中访问量TOP10的IP
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# 杀掉所有python相关进程(慎用,确认无误再执行)
ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9
# 实时监控每分钟请求量
tail -f access.log | awk '{print $4}' | cut -d: -f1 | uniq -c
这些组合命令,每条都是一个完整的“小工具”。我经常在面试里让候选人对日志做统计分析,能熟练写出管道组合的人,基本功基本都不会差。核心思路就是:一个命令解决一个问题,多个命令配合解决一个系统问题。
awk和sed这两个文本处理神器,熟练使用后能解决90%的日志分析需求。比如awk '{print $1}'提取第一列,sed 's/foo/bar/g'替换字符串,这些都是必须要会的。
8. 常用服务管理:systemctl和日志查看
既然聊到运维,服务管理这边也必须聊透。现在主流Linux发行版都使用systemd,service和chkconfig基本被systemctl替代了。这部分内容虽然不是命令大全里的“标准内容”,但实际工作中依赖度极高。
8.1 systemctl的日常操作和开机自启配置
bash复制# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 重新加载配置(不中断服务,改配置后用它)
systemctl reload nginx
# 查看服务状态(是否在运行、最近日志等)
systemctl status nginx
# 设置开机自启
systemctl enable nginx
# 取消开机自启
systemctl disable nginx
systemctl status输出信息很全,出了“Active: active (running)”表示正常,“Active: failed”说明服务挂了或启动失败。排查问题时,先跑这条,再看下面的日志片段,通常能快速定位。
服务配置文件的排查路径也要知道:systemd的服务单元文件一般在/etc/systemd/system/下,以.service结尾。如果你要新增一个自定义服务,参考已有文件的格式写一个就行。
8.2 journalctl看服务日志的几个高效姿势
systemd的日志统一由journald管理,查看日志用journalctl。
bash复制# 查看某个服务的日志
journalctl -u nginx
# 只看最近1小时的日志
journalctl -u nginx --since "1 hour ago"
# 实时跟踪日志输出
journalctl -u nginx -f
# 查看上一次启动后的日志(排查系统重启原因时很有用)
journalctl -b -1 -e
# 查看指定时间段的日志
journalctl --since "2024-08-01 00:00:00" --until "2024-08-01 12:00:00"
journalctl -u nginx -f基本等于tail -f的效果,但多了一个好处:如果应用写的是标准输出(stdout/stdout重定向),不用配置文件路径,直接就能看到。这在排查容器化应用和systemd托管应用时特别省事。
有一个时间段参数--since特别好用,比如服务做了一次变更,怀疑变更导致问题,直接journalctl -u app --since "10:00"只看变更之后的日志,效率高很多。
9. 命令记不住怎么办:构建你自己的命令速查表
写到这里,我猜有人会问:“命令这么多,怎么可能全记住?”我的答案是:不用全记住,但必须会查、会组合、会构建自己的速查表。就像我们记英语单词,核心词汇要滚瓜烂熟,生僻词知道去哪里查就足够了。
9.1 建立你的高频命令清单
根据我的经验,日常工作中真正高频的Linux命令大概在50-80条左右。建议你分门别类维护一份自己的速查表。我自己的速查表结构大致是这样的:
| 分类 | 代表性命令 | 说明 |
|---|---|---|
| 文件操作 | ls, cd, cp, mv, rm, find, du | 最基础,必须熟练 |
| 查看文件 | cat, tail, head, less, grep | 日志查看与过滤 |
| 用户权限 | useradd, passwd, chmod, chown, sudo | 用户与权限管理 |
| 进程管理 | ps, top, kill, nohup, systemctl | 服务与进程控制 |
| 网络排查 | ss, telnet, curl, ping | 网络连通性诊断 |
| 文本处理 | vim, sed, awk | 文件编辑和内容处理 |
| 压缩解压 | tar, zip, unzip | 打包与传输 |
| 系统查询 | free, df, uname, whoami | 系统信息查看 |
9.2 背命令的高效方法:案例驱动而非死记硬背
我一个很深的体会是:命令是“用”出来的,不是“背”出来的。遇到一个场景——磁盘满了、端口被占用、日志没有输出——带着问题去查命令,用一次很难忘掉。反而是拿着命令大全从头背,背完一周忘光。
所以我给新人的建议是:不要打开一篇命令大全开始背,而是定一个真实任务,比如“我要在服务器上部署一个Nginx,设置开机自启,写一个每日备份脚本”。在这个任务里,你会自然用到上传文件(scp)、解压(tar)、编译(make)、用户管理(useradd)、服务管理(systemctl)、定时任务(crontab)等一系列命令。任务完成,这套命令也自然进脑子了。
9.3 网上资料的选择建议
网上搜命令大全,有两个地方质量比较高:一是Linux自带的man手册,权威但不易读;二是各路博主写的实战类文章,可读性强但水平参差不齐。我的建议是:以man手册为准,以实战文章为辅。遇到命令不确定时,第一反应查man,比看网上二手资料靠谱得多。尤其涉及rm、chmod这类危险操作,一定要看官方文档确认参数含义。
另外,很多博客文章带着明显的AI生成痕迹,内容相似度极高,语言模板化,这种资料参考价值很低。我更倾向于看那些有个人实践、有踩坑经验的帖子,因为这类内容往往包含文档里没有的细节。
回到最初的问题:Linux命令大全到底怎么用?我的答案从来不是“背下来”,而是“把它当工具书,用的时候能快速查到正确的命令和参数,同时知道哪里有坑”。如果你能把这篇文章里的命令熟练运用,配合man手册随时查漏补缺,基本已经超过了大多数“只会用鼠标点”的同行。把这些核心命令练到条件反射的程度,剩下的事情,交给经验和时间就好了。
