Linux 学习分享(第一期):从基础命令到部署一个 Spring Boot 项目
熟悉 Linux 目录、文件、权限和环境变量,并完整走一遍 Spring Boot Jar 包的手动部署流程。
- 发布
- 阅读
- 10 分钟 · 2,923 字
- 状态
- 首次发布
前言
以前接触 Linux,大多是因为项目需要部署,或者线上出现问题后临时查命令。命令虽然也执行过不少,但知识点比较零散:知道日志一般在 /var/log,知道可以用 chmod 修改权限,也知道用 nohup 启动 Jar 包,却没有真正把这些内容串起来。
这次学习没有从复杂的系统原理入手,而是围绕 Java 后端开发最常见的场景展开:进入服务器后怎么找文件、怎么看配置、权限不足时怎么处理,以及怎样把一个 Spring Boot 项目真正运行起来。
一、先认识 Linux 的常用目录
Linux 不像 Windows 那样通过盘符区分文件,所有文件都从根目录 / 开始。实际工作中经常接触的目录主要有下面这些。
目录 | 主要作用 | 常见使用场景 |
|---|---|---|
| 系统和软件配置 | 查看 Nginx、SSH、systemd 配置 |
| 系统及部分软件日志 | 排查服务启动、登录和系统异常 |
| 第三方程序或自建服务 | 部署 Java 应用、中间件 |
| 普通用户的主目录 | 存放个人文件和临时操作内容 |
| 临时文件 | 解压、上传或生成临时数据 |
| 内核和进程的虚拟信息 | 查看 CPU、内存和进程状态 |
我比较习惯把自己部署的 Java 服务放到 /opt 下,并按项目划分目录。例如:
/opt/task-service/
├── app/ # Jar 包
├── config/ # 外部配置文件
├── logs/ # 应用日志
└── backup/ # 历史版本这样做的好处是程序、配置、日志和备份不会混在一起,后续部署和回滚也更清楚。
二、文件和目录操作
1. 确认当前位置和目录内容
pwd
ls -lahpwd 用来确认当前路径;ls -lah 会显示隐藏文件、文件大小和权限等信息。刚连接到一台不熟悉的服务器时,我一般先执行这两个命令,避免在错误目录中操作。
2. 创建和整理文件
mkdir -p /opt/task-service/{app,config,logs,backup}
touch /opt/task-service/logs/app.log
cp application.yml /opt/task-service/config/
mv task.jar /opt/task-service/app/task.jar其中,mkdir -p 可以一次创建多级目录,即使上级目录不存在也不会报错。
3. 查看和搜索文件
cat application.yml
less app.log
head -n 20 app.log
tail -n 100 app.log
find /opt -name "*.jar"小文件可以直接使用 cat,大日志更适合用 less,因为它支持上下翻页和搜索。tail -n 100 很适合快速查看最新日志。
如果要从整个系统查找文件,可以这样写:
find / -name "application.yml" 2>/dev/null这里的 2 代表标准错误输出,2>/dev/null 会把“权限不足”等错误丢弃,只保留正常查找结果。
三、理解用户、用户组和文件权限
使用下面两个命令可以确认当前用户及其所属用户组:
whoami
id执行 ls -l 时,可能看到这样的权限:
-rw-r----- 1 app app 2480 Aug 24 10:30 application.yml权限可以拆成三组:
rw-:文件所有者可读、可写;r--:同组用户只读;---:其他用户没有权限。
常见的权限调整命令如下:
chmod 640 application.yml
chmod +x deploy.sh
chown app:app application.yml
chown -R app:app /opt/task-servicechmod 修改“能做什么”,chown 修改“文件属于谁”。遇到 Permission denied 时,不能只想着直接加 777,而应该先用 ls -l 确认所有者和现有权限,再决定修改用户归属还是补充某一类权限。
四、安装 JDK 与配置环境变量
先确认系统是否已经安装 Java:
java -version
which java如果是手动解压安装的 JDK,可以在 /etc/profile.d/java.sh 中配置:
export JAVA_HOME=/opt/jdk8
export PATH=$JAVA_HOME/bin:$PATH让配置立即生效:
source /etc/profile.d/java.sh
java -versionJAVA_HOME 指向 JDK 安装目录,PATH 决定系统到哪些目录查找可执行命令。配置完成后,不仅要看 java -version,还要用 echo $JAVA_HOME 和 which java 确认实际使用的是预期版本。
五、手动部署 Spring Boot 项目
将 Jar 包上传到 /opt/task-service/app/ 后,先以前台方式运行:
cd /opt/task-service/app
java -jar task.jar --spring.profiles.active=prod前台启动的优点是可以直接看到报错,适合第一次验证。确认程序能够正常启动后,再使用后台方式运行:
nohup java -jar task.jar \
--spring.profiles.active=prod \
> /opt/task-service/logs/app.log 2>&1 &这条命令中:
nohup:退出终端后,程序仍继续运行;> app.log:把标准输出写入日志;2>&1:把错误输出也合并到同一日志;&:让命令在后台运行。
启动后可以进行以下检查:
ps -ef | grep task.jar
tail -f /opt/task-service/logs/app.log
curl http://127.0.0.1:8080/actuator/health只看到 Java 进程并不能完全说明服务可用。比较可靠的验证方式是同时确认进程、日志、端口或健康检查接口。
六、这次实践中容易忽略的地方
1. 当前用户没有目录权限
如果普通用户无法向 /opt 写入文件,可以先由管理员创建目录,再把目录交给运行服务的用户:
sudo mkdir -p /opt/task-service
sudo chown -R app:app /opt/task-service2. 配置文件并不一定来自 Jar 包内部
生产环境通常会把数据库密码、Redis 地址等配置放到 Jar 包外部,便于不同环境使用不同配置:
java -jar task.jar \
--spring.config.additional-location=/opt/task-service/config/3. 日志目录不存在也会导致启动失败
如果 Logback 配置指定了固定日志目录,应提前创建目录并授予运行用户写权限。
本期总结
这一期最大的收获不是记住了多少条命令,而是对服务器上的一次完整操作有了基本顺序:先确认用户和目录,再整理程序与配置,随后检查权限和 Java 环境,最后启动程序并通过日志及健康接口验证。
这些内容看起来基础,却是后面学习进程管理、systemd、Nginx 和故障排查的前提。目录不清楚、权限没处理好、环境变量配错,都会让后面的排查变得更加混乱。
修订记录
首次发布。