小贴士:所有命令均经过实战验证,适配CentOS、Ubuntu等主流Linux发行版,Java项目部署、日志排查、进程管理场景直接套用即可~ |
一、基础必备命令(入门必记)
这类命令是操作Linux的基石,不管是切换目录、查看文件,还是创建删除,每天都会用到,记熟能节省大量时间。
cd:切换目录(最常用,没有之一)
cd /home # 切换到根目录下的home文件夹(绝对路径)
cd ../ # 切换到上一级目录
cd ~ # 切换到当前用户的家目录(Java项目一般部署在/usr/local或/home下)
cd ./test # 切换到当前目录下的test文件夹(相对路径)
使用技巧:输入cd + 目录前几个字母,按Tab键可自动补全目录名,避免输错路径;cd - 可切换到上一次所在的目录,适合频繁在两个目录间切换。
ls:查看目录内容
ls # 查看当前目录下的文件/文件夹(不显示隐藏文件)
ls -l # 详细查看,显示权限、大小、修改时间(简称ll,很多Linux系统已别名)
ls -a # 查看所有文件,包括隐藏文件(如.gitignore、.bashrc)
ls -lh # 以人性化单位(K、M、G)显示文件大小,适合查看日志文件大小
使用技巧:ll -t 可按文件修改时间排序(最新的在最上面),快速找到刚更新的日志或配置文件;ll | grep ".jar" 可过滤查看所有jar包,无需单独输入ls命令再过滤。
pwd:查看当前所在路径
实战场景:登录服务器后,忘记自己在哪个目录,直接输pwd即可快速定位,避免误操作。
使用技巧:可将pwd输出的路径复制,搭配cp、mv命令使用,避免手动输入长路径导致错误,比如 cp $(pwd)/test.txt /home/java($(pwd)会自动替换为当前路径)。
mkdir:创建文件夹
mkdir java-project # 创建单个文件夹
mkdir -p /home/java/project # 递归创建多级文件夹(部署项目时常用,避免手动创建多级目录)
使用技巧:创建项目文件夹时,可一次性创建完整路径+项目目录,比如 mkdir -p /home/java/{project,logs,backup},一次性创建项目、日志、备份三个文件夹,提升部署效率。
rm:删除文件/文件夹(慎用!一旦删除无法恢复)
rm test.txt # 删除单个文件
rm -f test.txt # 强制删除文件,不提示确认(避免因文件权限问题删除失败)
rm -rf project # 强制递归删除文件夹及里面所有内容(删除项目、日志文件夹时常用,务必确认路径正确!)
使用技巧:删除前可先执行ls 目标路径,确认要删除的内容;删除大文件夹时,可搭配rm -rf 目标路径/*,避免误删上级目录;线上环境建议少用rm -rf,可先移动到临时文件夹(如/tmp/delete),确认无误后再删除。
cp:复制文件/文件夹
cp test.txt /home/java # 把当前目录的test.txt复制到/home/java目录下
cp -r project /home/backup # 递归复制整个project文件夹(备份项目时常用)
使用技巧:cp -rv 可显示复制的文件详情,方便确认是否复制完整;备份项目时,可搭配日期命名,比如 cp -r project /home/backup/project_$(date +%Y%m%d),避免覆盖历史备份。
mv:移动/重命名文件/文件夹
mv test.txt /home/java # 把test.txt移动到/home/java目录
mv old-name.txt new-name.txt # 重命名文件(比如修改日志文件名称)
使用技巧:重命名日志文件时,可搭配日期,比如 mv app.log app_$(date +%Y%m%d).log,方便按日期归档日志;移动文件时,若目标目录不存在,mv会将文件重命名为目标目录名称,需注意区分。
这部分是重点!针对Java项目部署、日志排查、进程管理等核心场景,整理了最常用的命令,解决日常开发90%的服务器问题。
cat:查看文件内容(适合小文件,如配置文件)
cat application.yml # 查看SpringBoot项目配置文件
cat /etc/profile # 查看系统环境变量配置(配置Java环境时会用到) 使用技巧:cat -n 文件名 可显示行号,方便定位配置文件中的特定配置(如数据库地址、端口);cat 文件1 文件2 可将两个文件内容合并显示,适合对比两个配置文件的差异。
more/less:分页查看文件(适合大文件,如日志)
more app.log # 分页查看日志,按空格键翻页,按q退出
less app.log # 比more更灵活,按上下键滚动,按q退出,支持搜索(输入/关键词,按n下一个)
使用技巧:less 文件名 中,按/关键词搜索后,按N可反向查找;按G跳至文件末尾,按gg跳至文件开头,快速定位日志首尾内容;退出less后,终端不会残留文件内容,比more更友好。
tail:实时查看日志(排查线上问题神器)
tail -f app.log # 实时监控日志输出(项目运行时,查看接口报错、程序日志)
tail -100f app.log # 实时查看最后100行日志(避免日志过多刷屏) tail -n 200 app.log # 查看最后200行日志(快速定位最新报错)
使用技巧:tail -f app.log | grep "ERROR" 可实时过滤错误日志,避免无关日志干扰;tail -n +100 app.log 可查看从第100行开始的日志,适合跳过前面的无用日志;按Ctrl+C可退出实时监控。

vi/vim:编辑文件(修改配置、临时修改脚本)
vim application.yml # 编辑配置文件
核心操作(新手必记):
- 进入编辑模式:按i键
- 退出编辑模式:按Esc键
- 保存并退出:输入:wq 回车
- 不保存退出:输入:q! 回车(修改错误配置时常用)
使用技巧:vim中按/关键词可快速搜索配置(如搜索server.port),按n跳转下一个;按dd可删除当前行,按yy复制当前行,按p粘贴,适合快速修改配置;修改配置前,可先执行:set nu显示行号,方便定位修改位置。
Java项目部署后,经常需要查看进程是否运行、停止进程、重启进程,这几个命令必须熟练掌握。
ps:查看进程
ps -ef # 查看所有进程(详细信息,包括进程ID、用户、启动时间) ps -ef | grep java # 过滤出所有Java进程(最常用,查看项目是否启动)
ps -ef | grep spring-boot # 过滤指定Java项目进程(根据项目名称筛选)
使用技巧:ps -ef | grep java | grep -v grep 可过滤掉grep自身的进程,只显示真实的Java进程;ps aux | grep java 可显示进程的CPU、内存占用率,快速判断是否有进程资源占用过高。
kill:终止进程
kill -9 12345 # 强制终止进程ID为12345的进程(12345是ps命令查到的PID)
实战场景:项目部署失败、进程卡死时,用ps查到PID,再用kill -9强制终止,避免占用端口。
使用技巧:可一次性终止多个Java进程,比如 ps -ef | grep java | awk '{print $2}' | xargs kill -9(谨慎使用,会终止所有Java进程);先执行kill PID(无参数),尝试正常终止进程,无法终止时再用kill -9强制终止,减少对系统的影响。
nohup:后台运行进程(部署Java项目必备)
nohup java -jar spring-boot-project.jar & # 后台启动Java项目,日志输出到nohup.out
nohup java -jar spring-boot-project.jar > app.log 2>&1 & # 后台启动,日志输出到指定文件(推荐,方便后续查看) 说明:&表示后台运行,2>&1表示将错误日志也输出到指定文件,避免日志分散。 使用技巧:启动时可指定JVM参数,比如 nohup java -Xms512m -Xmx1024m -jar xxx.jar > app.log 2>&1 &,优化项目运行内存;启动后执行echo $! 可查看刚启动进程的PID,方便后续管理;若想让进程断开连接后仍运行,可搭配screen命令(需提前安装)。
Java项目通常需要占用指定端口(如8080、8090),端口占用是常见问题,这两个命令能快速解决。
netstat:查看端口占用情况
netstat -an | grep 8080 # 查看8080端口是否被占用
netstat -tuln # 查看所有正在监听的端口(了解服务器端口使用情况)
补充:部分Linux系统默认没有netstat,可通过yum install net-tools安装。
使用技巧:netstat -anp | grep 8080 可直接显示占用8080端口的进程PID和名称,无需单独执行lsof命令;netstat -tuln | grep 80 可快速查看80端口相关的监听情况,排查web项目访问问题。
lsof:查看端口占用的进程(更精准)
lsof -i:8080 # 查看8080端口被哪个进程占用(直接显示PID,方便kill)
实战场景:启动项目时提示“端口已被占用”,用lsof查到占用进程,kill后重新启动即可。
使用技巧:lsof -i | grep java 可查看所有Java进程占用的端口,快速了解项目端口使用情况;lsof -p 12345 可查看PID为12345的进程占用的所有资源(端口、文件等),排查进程异常占用问题。
开放端口(CentOS为例)
firewall-cmd --zone=public --add-port=8080/tcp --permanent # 开放8080端口(永久生效)
firewall-cmd --reload # 重新加载防火墙配置(开放端口后必须执行)
实战场景:项目部署后,外部无法访问,大概率是端口未开放,执行上述命令即可。
使用技巧:firewall-cmd --list-ports 可查看已开放的所有端口,确认端口是否开放成功;firewall-cmd --remove-port=8080/tcp --permanent 可删除已开放的端口,无需修改配置文件;Ubuntu系统可用ufw命令(如ufw allow 8080),注意区分系统差异。
Linux权限严格,Java项目部署时,经常会遇到“权限不足”的问题,这几个命令能快速解决。
chmod:修改文件/文件夹权限
chmod 777 app.log # 给所有用户赋予读、写、执行权限(临时测试用,不推荐线上使用)
chmod 755 java-project # 赋予所有者读、写、执行权限,其他用户读、执行权限(推荐,安全)
chmod +x start.sh # 给脚本文件添加执行权限(启动项目的脚本,必须添加执行权限才能运行)
使用技巧:chmod -R 755 文件夹 可递归修改文件夹及内部所有文件的权限,适合部署项目时批量设置权限;记住权限数字含义(r=4,w=2,x=1),7=4+2+1(读+写+执行),5=4+1(读+执行),避免记混权限参数;线上项目建议最小权限原则,避免777权限导致安全风险。
chown:修改文件/文件夹所有者
chown -R java:java /home/java/project # 将project文件夹及内容的所有者改为java用户(避免权限不足导致项目无法启动)
使用技巧:chown -R 用户名:用户组 路径,可同时修改所有者和所属组;修改前用id 用户名 确认用户是否存在,避免输入错误用户名;部署项目时,建议将项目文件夹所有者改为非root用户,提升服务器安全。
掌握这些命令,能进一步提升服务器操作效率,解决更复杂的场景问题。
find:查找文件/文件夹
find / -name "app.log" # 从根目录开始查找名为app.log的文件(查找日志文件常用)
find /home/java -name "*.jar" # 在/home/java目录下查找所有jar包(查找Java项目包)
使用技巧:find /home/java -mtime -1 可查找近1天内修改过的文 件,快速找到刚更新的项目包或日志;find / -name "*.log" -size +100M 可查找大于100M的日志文件,及时清理大日志,避免占用磁 盘;find 路径 -type f -name "*.yml" 可只查找配置文件,过滤文件 夹。
grep:搜索文件内容(排查日志报错神器)
grep "Exception" app.log # 在app.log中搜索包含Exception的行(快速定位报错信息)
grep -n "ERROR" app.log # 搜索ERROR信息,并显示行号(方便定位报错位置)
grep -r "userId=123" /home/java/logs # 递归搜索logs文件夹下,包含userId=123的所有文件(排查特定用户的操作日志)
使用技巧:grep -i "error" app.log 可忽略大小写搜索,避免因日志中大小写不一致导致漏查;grep -A 5 "ERROR" app.log 可显示报错行及后面5行内容,查看报错上下文;grep -B 5 "Exception" app.log 可显示报错行及前面5行内容,定位报错原因。
tar:压缩/解压文件(备份、传输项目必备)
tar -zcvf project.tar.gz /home/java/project # 压缩project文件夹为project.tar.gz
tar -zxvf project.tar.gz # 解压tar.gz压缩包到当前目录
tar -zxvf project.tar.gz -C /home/java # 解压到指定目录/home/java
使用技巧:tar -zcvf 压缩包名 文件夹 --exclude=日志文件夹 可压缩时排除日志文件夹,减小压缩包体积;解压时加上-v参数,可显示解压的文件详情,确认是否解压完整;压缩大项目时,可搭配pigz命令(需安装)提升压缩速度,如tar -cvf - 文件夹 | pigz > 压缩包名.tar.gz。
df:查看磁盘空间
df -h # 以人性化单位显示磁盘分区的空间使用情况(查看服务器磁盘是否满了,避免日志占满磁盘导致项目崩溃)
使用技巧:df -h | sort -k5 -r 可按磁盘使用率从高到低排序,快速找到占用磁盘最多的分区;du -sh /home/* 可查看/home目录下各文件夹的大小,定位大文件或文件夹,排查磁盘满的原因。
top:查看系统资源占用
top # 实时查看CPU、内存、进程的资源占用情况(项目卡顿、服务器变慢时,排查是否有进程占用过高资源) 按q退出,按P按CPU占用排序,按M按内存占用排序。
使用技巧:top -p 12345 可只查看PID为12345的进程资源占用,专注监控单个Java项目;按k键,输入PID可直接终止占用过高的进程,无需退出top再执行kill命令;按1可查看每个CPU核心的占用情况,判断是否存在CPU核心过载问题。
命令 | 功能 | 实战场景 | 核心技巧 |
ps -ef | grep java | 查看Java进程 | 确认项目是否启动 | 搭配grep -v grep过滤自身进程,ps aux查看资源占用 |
tail -f app.log | 实时查看日志 | 排查线上接口报错 | 搭配grep过滤错误日志,按Ctrl+C退出监控 |
kill -9 PID | 强制终止进程 | 终止卡死、部署失败的项目 | 先尝试kill PID正常终止,无法终止再用-9参数 |
nohup java -jar xxx.jar | &后台启动Java项目 | 部署SpringBoot项目 | 指定日志输出路径,搭配JVM参数优化内存 |
lsof -i:8080 | 查看端口占用 | 解决端口被占用问题 | 直接显示PID,无需额外过滤,快速定位占用进程 |
grep "Exception" app.log | 搜索日志报错 | 快速定位程序异常 | 用-A/-B查看上下文,-i忽略大小写避免漏查 |
对于Java程序员来说,Linux命令不用追求“全记住”,重点是掌握“高频、实用”的核心命令,结合开发场景灵活运用。
本文整理的命令,覆盖了Java项目部署、日志排查、进程管理、权限处理等日常工作的核心场景,建议收藏起来,下次操作服务器时直接对照使用。刚开始可以边查边用,用多了自然就记住了~
最后提醒:Linux命令具有一定的危险性(如rm -rf),操作时务必确认路径和命令正确性,避免误操作导致数据丢失!
关注我,后续分享更多Java开发干货、服务器操作技巧,助力大家高效开发、少踩坑~