Linux基础使用和程序部署
目录
1.Linux
1.2 Linux的环境搭配
1.2.1 使用云服务器
1.2.2使用终端软件连接到Linux
1.3. Linux 常用命令
1. ls:列出当前目录中的文件和子目
2.pwd:显示当前工作目录的路径
3.cd:改变工作目录,将当前的工作目录改变到指定目录下
4.touch:创建空文件或更新文件的时间戳
5.cat:查看目标文件的内容
6.mkdir:创建新目录
7.rm:删除文件/目录
8.cp:复制文件或者目录
9.mv:移动或重命名文件或目录
10.head/tail:显示文件的前几行或后几行
11.vim:文本编辑
12.grep:查找指定字符串,并显示对应的行
13.ps:查看当前系统上运行的进程
14.netstat:查看系统上的网络状态
2.部署Web项目到Linux
2.1环境配置
2.2 构建项⽬并打包
2.3上传Jar包到服务器,并运行
2.4开放端口号
2.5 验证程序
2.6常见的问题:
2.7 结束进程
总结:
1.Linux
Linux的优势:
- 开源(意味着免费)
- 稳定 (Linux可以运行很多年,都不会发生重大问题)
- 安全(Linux只有管理员或者特定用户才能访问Linux内核)
- 自由(不会被加强商业产品和服务)
- 社区支持(Linux在全球社区都非常活跃和使用广泛,有很多志愿者在线帮大家解决问题)
下面重点学习Linux的基础命令和项目部署
1.2 Linux的环境搭配
主要有四种:
- 直接安装在物理机上.但是Linux桌面使用起来非常不友好.所以不建议.[不推荐].
- 使用虚拟机软件,将Linux搭建在虚拟机上.但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug,会导致环境上出现各种莫名其妙的问题,比较折腾.[非常不推荐]
- 使用 WSL (Windows Subsystem for Linux).这个是 Windows 近几年开发的新功能,在 Windows系统内集成了一个 Linux.但是目前这个技术还不够成熟.[不推荐].
- 使用云服务器,可以直接在腾讯云,阿里云或华为云等服务器厂商处直接购买一个云服务器.[推荐]
1.2.1 使用云服务器
云服务器的好处:
使用云服务器不仅环境搭建简单,避免折腾,同时还有一个最大的好处,部署在云服务器上的项目可以直接被外网访问到,这个时候就和一个公司发布一个正式的网站没有任何区别.也就能让我们自己写的程序真的去给别人去使用.
1.2.2使用终端软件连接到Linux
所谓终端软件就是一类工具软件,可以和远程的主机建立网络连接,从而对主机进行一些操作
下面就拿 XShell 终端软件举例吧
第一步:下载安装 XShell
下载地址:家庭/学校免费 - NetSarang Website
第二步:使用XShell 登录主机
在XShell终端下输入:
ssh 服务器外网ip地址
1.3. Linux 常用命令
1. ls:列出当前目录中的文件和子目
- -a列出目录下的所有文件,包括以.开头的隐含文件。
- -d将目录象文件一样显示,而不是显示其下的文件。如:ls-d指定目录
- -k以k字节的形式表示文件的大小。ls-alk指定文件
- L列出文件的详细信息。
- -r对目录反向排序。
- -t以时间排序。
- -R列出所有子目录下的文件。 (递归)
ls -l
2.pwd:显示当前工作目录的路径
pwd
3.cd:改变工作目录,将当前的工作目录改变到指定目录下
#返回上级目录
cd..#进入用户家目录
cd~#返回最近访问目录
cd-
认识Linux目录结构:
Linux是一个树型目录结构
几个特殊的目录:
- /称为根目录
- .称为当前目录
- ..称为当前目录的上级目录
绝对路径vs相对路径:
形如: /usr/share/tomcat/logs/以根目录开头的,称为绝对路径.
形如:·/logs以·或者开头的,称为相对路径,
使用tab键补全:
我们敲的所有的Linux命令,都可以使用tab键来尝试补全,加快效率.
使用ctrl+c重新输入:
如果命令或者目录敲错了,可以ctrl+c取消当前的命令
4.touch:创建空文件或更新文件的时间戳
touch text.txt
5.cat:查看目标文件的内容
cat text.txt
6.mkdir:创建新目录
常用选项:
- -p,--parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多级目录
mkdir -p text/text1
7.rm:删除文件/目录
常用选项:
- -f即使文件属性为只读(即写保护),亦直接删除
- -i删除前逐一询问确认
- -r删除目录及其下所有文件
rm text.txt
8.cp:复制文件或者目录
cp test1.txt test2.txt
9.mv:移动或重命名文件或目录
mv old_name new_name
10.head/tail:显示文件的前几行或后几行
head -10 file_name # 显示文件的前10行
tail -20 file_name # 显示文件的后20行
11.vim:文本编辑
1) 创建文件/打开文件
vim [文件名]
2) 进入插入模式
vim打开文件后默认是普通模式.普通模式下键盘的按键表示一些特殊功能的快捷键.(例如按下j并不是输入字母"j",而是表示光标往下移动一行).需要进入插入模式才能进行文本编辑
使用i键可以进入到插入模式.(左下角提示--INSERT--)然后就可以像记事本一样正常编辑了.
3)保存
在插入模式下不能保存文件,需要先回到普通模式.按下EsC回到普通模式.
在普通模式下输入:W,再按下回车,即可保存文件
4)退出
在插入模式下不能退出,需要先回到普通模式.
退出时,分以下情况:
①文件未修改:输入:q,再按下回车,即可退出
②文件修改并保存:使用:wq同时执行保存和退出.
③文件修改,但不希望保存:使用:wq!进行强制退出
12.grep:查找指定字符串,并显示对应的行
常用选项:
- -n<行数>显示的行数
- -W全字匹配.要求整个单词都完全相同的结果才能匹配出来,而不仅仅是一个单词的一部分.
- -r 递归查找.可以搜索多级目录下的所有文件.
- --color 高亮查找到的结果
- --include 指定查找某些文件
- --exclude 指定排除某些文件
rep "hello" Hello1.java 在Hello1中查找 hello字符串
13.ps:查看当前系统上运行的进程
常用选项:
- a 显⽰⼀个终端的所有进程
- u 以⽤⼾为主的格式来显⽰程序状况
- x 显⽰所有程序, 不⽌是会话中的进程
- e 显⽰所有进程, 包括系统守护进程
- f 显⽰完整格式输出
ps aux #显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
14.netstat:查看系统上的网络状态
常用选项:
- -a显示所有正在或不在侦听的套接字
- -n 显示数字形式地址而不是去解析主机、端口或用户名
- -p 显示套接字所属进程的PID和名称
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
2.部署Web项目到Linux
2.1环境配置
程序正常运行,需要保证环境和程序都要正确,我们需要先设置环境
数据准备
按照之前的数据库建表脚本,在服务器上运行,建立相同的表结构.
程序配置文件修改
实际工作中,开发环境,测试环境以及生产环境的配置都是不一样的
比如mysql的用户名和密码
我们可以针对不同的环境,设置不同的配置
多平台文件配置
针对不同平台创建不同的配置文件,要求名字为application-XXX.yml或者application-XXX.properties
以下以application-xxX.yml为例
固定格式,只有后面的字母可以修改
在配置文件里写不同的内容
application-dev.yml:
#数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件mapper-locations: classpath:mybatis/**Mapper.xml# 配置打印 MyBatis日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换
#数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件mapper-locations: classpath:mybatis/**Mapper.xml# 配置打印 MyBatis日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换
#设置日志文件的文件名
logging:file:name: spring-blog.log
application.yml:
spring:profiles:active: @profile.name@
<profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles>
2.2 构建项⽬并打包
在本地使用maven进行打包
- 如果Test代码中有与环境配置相关的操作(比如数据库相关的操作),打包会失败,点击下图①处的图标,可以跳过测试
- 点击clean->package
2.3上传Jar包到服务器,并运行
上传jar包:
直接将打包好的jar包拖入Xshell窗口即可完成文件的上传
运行程序:
nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &
nohup:后台运行程序.用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行.
语法格式:
nohup Command [ Arg … ] [ &]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件
&:让命令在后台执行,终端退出后命令仍旧执行
比如:
ohup java -jar blog-0.0.1-SNAPSHOT.jar >/logs &
Linux 可以通过把需要输出的内容写到指定文件中.这样的操作称为"重定向”
2.4开放端口号

添加规则:
端口号写需要开放的端口号,多个端口号以逗号分割.
2.5 验证程序
- 访问项目: http://IP:Port/blog_login.html IP改为云服务的IP Port改为项目的端口号
- 按照项目的功能进行验证
2.6常见的问题:
一个程序的正常运行,需要程序的正确和环境的正确.同样的代码在Windows上可以运行成功,不一定在Linux上运行成功.不同的系统对代码的理解和支持是不同的.比如Windows系统对MySQL不区分大小写,Linux区分大小写
服务不能正常访问的原因有很多,主要分以下几方面:
1.服务未启动
- a.使用 ps -eflgrep java 查看程序是否在运行
- b. 使用 curl http://127.0.0.1:8080/blog_login.html 看看下是否有返回html页面, 如果有返回,说明程序启动成功了,考虑端口未开放
- c.如果未启动成功,需要查看对应的日志,根据原因来分析:
- 数据库不存在
- 表不存在(区分大小写)
- 数据库密码不正确
- Jdk安装版本不对,或者未安装
- mysql未设置密码
2.http端口未开放
检查云服务器防火墙/安全组是否开放相应端口(如8080)
2.7 结束进程
如果我们需要重启服务,或者重新部署等,都需要先停止之前的服务.
1. 查看当前服务的进程:
s -eflgrep java
2. 杀掉进程
kill -9 PID
总结:
- 连接Linux服务器的方式有很多,xshell只是其中一种.xshel是一个客户端,而非服务器
- Ubuntu软件管理工具是apt,其他的linux发行版本软件包管理工具不同,比如CentOS是使用yum来管理软件的
- SpringBoot可以使用多个配置文件来完成不同平台的配置.
- 在Window上可以运行成功的代码,在Linux上不一定能运行成功.
- 启动程序需要使用nohup后台运行,需要停止服务时,使用kill命令
相关文章:

Linux基础使用和程序部署
目录 1.Linux 1.2 Linux的环境搭配 1.2.1 使用云服务器 1.2.2使用终端软件连接到Linux 1.3. Linux 常用命令 1. ls:列出当前目录中的文件和子目 2.pwd:显示当前工作目录的路径 3.cd:改变工作目录,将当前的工作目录改变到指定目…...

Linux驱动开发之串口驱动移植
原理图 从上图可以看到RS232的串口接的是UART3,接下来我们需要使能UART3的收发功能。一般串口的驱动程序在内核中都有包含,我们配置使能适配即可。 设备树 复用功能配置 查看6ull如何进行uart3的串口复用配置: 设备树下添加uart3的串口复用…...

计算机毕业设计SpringBoot+Vue.js美食推荐系统商城(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

指针小节.
....指针的第四个作用:函数的结果和计算状态分开 高级指针。。 指针中的数据类型:获取字节数据的个数。步长:指针移动一次的字节个数(int,long。。。各自字节都不同) 加减都可以...
[Qt5] QJson数据之间的转换以及QByteArray图像数据压缩
📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…...
2025年能源工作指导意见
2025年是“十四五”规划收官之年,做好全年能源工作意义重大。为深入贯彻落实党中央、国务院决策部署,以能源高质量发展和高水平安全助力我国经济持续回升向好,满足人民群众日益增长的美好生活用能需求,制定本意见。 一、总体要求…...

Android 获取jks的SHA1值:java.io.IOException: Invalid keystore format
命令生成 keytool -list -v -keystore 全路径.jks -alias 别名 -storepass 密码 -keypass 密码 1、遇到 的问题: 通过快捷键 ‘win r’ 启动的小黑框运行上面的命令会出现下面这个错误keytool 错误: java.io.IOException: Invalid keystore format 2、解决问题 …...

深入探索像ChatGPT这样的大语言模型-02-POST training supervised finetuning
参考 【必看珍藏】2月6日,安德烈卡帕西最新AI普及课:深入探索像ChatGPT这样的大语言模型|Andrej Karpathy fineweb知乎翻译介绍 fineweb-v1原始连接 fineweb中文翻译版本 Chinese Fineweb Edu数据集 查看网络的内部结果,可以参…...

广义线性模型下的数据分析(R语言)
一、实验目的: 通过上机试验,掌握利用R实现线性回归分析、逻辑回归、列联分析及方差分析,并能对分析结果进行解读。 数据: 链接: https://pan.baidu.com/s/1JqZ_KbZJEk-pqSUWKwOFEw 提取码: hxts 二、实验内容: 1、2…...

AutoMQ:无需 Cruise Control 实现 Kafka 的自动分区再平衡
导读:AutoMQ是一款贯彻云优先理念来设计的 Kafka 替代产品。AutoMQ 创新地对 Apache Kafka 的存储层进行了基于云的重新设计,在 100% 兼容 Kafka 的基础上通过将持久性分离至 EBS 和 S3 带来了 10x 的成本降低以及 100x 的弹性能力提升,并且相…...

在剪映中给英文学习视频添加中文字幕
文章目录 一、剪映是什么?二、使用步骤1.下载2.操作 一、剪映是什么? 剪映是由字节跳动公司开发的一款功能强大且易于使用的视频编辑软件,在移动端和电脑端均有应用。 二、使用步骤 1.下载 2.操作...

Opencv之sift特征检测和FLANN 匹配器进行指纹特征匹配
sift特征检测和FLANN 匹配器进行指纹匹配 目录 sift特征检测和FLANN 匹配器进行指纹匹配1 sift特征检测1.1 概念1.2 优缺点 2 FLANN 匹配器2.1 概念2.2 工作原理与匹配方式2.3 FLANN 匹配器的使用步骤2.4 优缺点 3 函数3.1 特征检测匹配3.2 匹配符合条件点并绘制 3 代码测试3.1…...
rust学习~tokio的io
await Suspend execution until the result of a Future is ready. 暂停执行,直到一个 Future 的结果就绪。 .awaiting a future will suspend the current function’s execution until the executor has run the future to completion. 对一个 Future 使用 .awa…...
FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…...
本地部署大数据集群前置准备
1. 设置VMware网段 虚拟网络编辑器——更改设置——选择VMnet8——子网改成192.168.88.0——NAT设置——网关设置为192.168.88.2 2. 下载CentOS操作系统 下载CentOS 7.6(1810)版本 3. 在VMware中安装CentOS操作系统 创建新的虚拟机——典型——安装光盘映像文件——输入账…...

Spring Boot整合RabbitMQ
1. 环境准备 Spring Boot 2.1.3.RELEASERabbitMQ 3.xJDK 8 或以上Maven 3.5 2. 安装Erlang、RabbitMQ 2.1 安装前准备 RabbitMQ 依赖 Erlang 环境,需确保两者的版本匹配,官方兼容性参考:RabbitMQ & Erlang 版本对照表。 2.2 下载安…...

CDefView::_OnFSNotify函数分析
进入CDefView::_OnFSNotify函数时状态栏 _UpdateStatusBar函数之后增加一个对象,变成7个对象。 LRESULT CDefView::_OnFSNotify(LONG lNotification, LPCITEMIDLIST* ppidl) { LPITEMIDLIST pidl; LPCITEMIDLIST pidlItem; // we may be registered for no…...
精准汇报:以明确答复助力高效工作
在工作场景中,汇报工作是一项至关重要的沟通环节,它不仅关乎工作进展的有效传达,更影响着团队协作的顺畅度和整体工作效率。而汇报工作的关键,就在于给予明确肯定的答复,摒弃“应该”“可能”这类模糊词汇,…...

Java自动拆箱装箱/实例化顺序/缓存使用/原理/实例
在 Java 编程体系中,基本数据类型与包装类紧密关联,它们各自有着独特的特性和应用场景。理解两者之间的关系,特别是涉及到拆箱与装箱、实例化顺序、区域问题、缓存问题以及效率问题。 一、为什么基本类型需要包装类 泛型与集合的需求 Java…...
软件工程---基于构件的软件工程
基于构件的软件工程(CBSE)是一种软件开发方法,通过重用现有的软件构件来构建系统,从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构建复用,使得软件开发过程更加高效和灵活。 企业软件开发…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...