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)是一种软件开发方法,通过重用现有的软件构件来构建系统,从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构建复用,使得软件开发过程更加高效和灵活。 企业软件开发…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
