【Linux】Linux基本使用和程序部署

【Linux】Linux基本使用和程序部署

🎬 那我掉的头发算什么个人主页
🔥 个人专栏: 《javaSE》《数据结构》《数据库》《javaEE》

⛺️待到苦尽甘来日


在这里插入图片描述

文章目录

Linux环境搭建

环境搭建方式

主要有四种:

  1. 直接安装在物理机上。但是 Linux 桌面使用起来非常不友好。所以不建议。【不推荐】。
  2. 使用虚拟机软件,将 Linux 搭建在虚拟机上。但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug,会导致环境上出现各种莫名其妙的问题,比较折腾。【非常不推荐】
  3. 使用 WSL(Windows Subsystem for Linux)。这个是 Windows 近几年开发的新功能,在 Windows 系统内集成了一个 Linux。但是目前这个技术还不够成熟。【暂时不推荐】。
  4. 使用云服务器,可以直接在 腾讯云,阿里云或华为云 等服务器厂商处直接购买一个云服务器。【推荐】

购买的时候作为在校学生,我们是可以白嫖服务器的使用权的,大家自行在网上搜索就好了!

我的操作系统选择是 Ubuntu 22.04 LTS。后续的内容也是使用Ubuntu演示。

使用云服务器

不同厂商做的页面不同,我们以阿里云为例:

购买服务器之后点击控制台进入自己的服务器界面

在这里插入图片描述


第一次使用服务器先重置密码:

在这里插入图片描述


记住自己的公网IP:

在这里插入图片描述


在这个环节我们最重要的是得到三个信息:
1. 服务器的外网 IP
2. 服务器的管理员账户(固定为 root)
3. 管理员账户密码(在腾讯云网站上设置的)

这三个信息是我们登陆到 Linux 上的必要条件

使用终端软件连接到Linux

有很多软件可以完成远程和主机相互链接的功能,我们使用Xshell。
网址:https://www.xshell.com/zh/free-for-home-school/

我们下载免费版即可。

下载安装过程不涉及复杂配置,基本上一路next,所以大家自行下载即可。

首先新建虚拟机:

在这里插入图片描述


名称自拟,主机是公网IP

在这里插入图片描述


在登陆提示符这里输入账号密码:

在这里插入图片描述


最终出现这样的界面就算配置成功了:

在这里插入图片描述

Linux常用命令

ls

语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
• -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
• -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls ‒d 指定目录
• -k 以 k 字节的形式表示文件的大小。ls ‒alk 指定文件
• -l 列出文件的详细信息。
• -r 对目录反向排序。
• -t 以时间排序。
• -R 列出所有子目录下的文件。(递归)

在这里插入图片描述


在这里插入图片描述

pwd

显示用户当前所在的目录:
跟目录是root:

在这里插入图片描述

cd

Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法: cd 目录名
功能: 改变工作目录。将当前工作目录改变到指定的目录下.

# 返回上级⽬录 cd .. # 进⼊⽤⼾家⽬录 cd ~ # 返回最近访问⽬录 cd -
在这里插入图片描述


使用 tab 键补全
我们敲的所有的 Linux 命令,都可以使用 tab 键来尝试补全,加快效率。
使用 ctrl + c 重新输入
如果命令或者目录敲错了,可以 ctrl + c 取消当前的命令

touch

语法: touch [选项]… 文件…
功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件

cat

语法:cat [选项] [文件]
功能: 查看目标文件的内容

mkdir

语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
• -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多级目录。

在这里插入图片描述

rm

语法:rm [-f-i-r-v] [dirName/dir]
功能:删除文件或目录
常用选项:
• -f 即使文件属性为只读(即写保护),亦直接删除
• -i 删除前逐一询问确认
• -r 删除目录及其下所有文件

重要注意事项:
千万不要直接运行 rm -rf / , 尤其是在公司的生产服务器上

在这里插入图片描述

cp

语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
• -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
• -i 或 --interactive 覆盖文件之前先询问用户
• -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号
链接,则一律视为普通文件处理
• -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理

在这里插入图片描述


复制文件并不是转移文件。源文件不会消失。

mv

语法: mv [选项] 源文件或目录 目标文件或目录
功能:

  1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
  2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。

常用选项
• -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
• -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖

tail

语法: tail [必要参数] [选择参数] [文件]
功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
• -f 循环读取
• -n<行数> 显示行数

vim

vim 是一个知名的文本编辑器。使用 vim 可以进行文本编辑了。vim 就相当于 Windows 的记事本。只不过功能比记事本强大一些。

在这里插入图片描述


1)创建文件/打开文件
vim + 文件名
2) 进入插入模式
vim 打开文件后默认是普通模式。普通模式下键盘的按键表示一些特殊功能的快捷键。(例如按下 j 并不
是输入字母 “j”,而是表示光标往下移动一行)。需要进入插入模式才能进行文本编辑。
使用 i 键可以进入到插入模式。(左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了。
3) 保存
在插入模式下不能保存文件,需要先回到 普通模式 。按下 Esc 回到普通模式。
在普通模式下输入 :w ,再按下回车,即可保存文件。
4) 退出
在插入模式下不能退出,需要先回到 普通模式。
退出时,分以下情况:
① 文件未修改: 输入 :q ,再按下回车,即可退出
② 文件修改并保存: 使用 :wq 同时执行保存和退出。
③ 文件修改,但不希望保存: 使用 :wq! 进行强制退出

grep

语法:grep [参数]… [文件]…
功能:用于查找文件中是否包含指定字符串, 并显示对应的行.
选项:
• -n<行数> 显示的行数
• -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
• -r 递归查找. 可以搜索多级目录下的所有文件.
• --color 高亮查找到的结果
• --include 指定查找某些文件
• --exclude 指定排除某些文件

在这里插入图片描述

ps

语法:ps [参数]…
功能:用于查看当前系统上运行的进程
选项:
• a 显示一个终端的所有进程
• u 以用户为主的格式来显示程序状况
• x 显示所有程序, 不止是会话中的进程
• e 显示所有进程, 包括系统守护进程
• f 显示完整格式输出

在这里插入图片描述

netstat

语法:netstat [参数]…
功能:查看系统上的网络状态。
选项:
• -a 显示所有正在或不在侦听的套接字
• -n 显示数字形式地址而不是去解析主机、端口或用户名
• -p 显示套接字所属进程的PID和名称

搭建java部署环境

apt

apt(Advanced Packaging Tool),Linux软件包管理工具。用于在Ubuntu、Debian和相关Linux发行版上安装、更新、删除和管理deb软件包。
大多数apt命令必须以具有sudo权限的用户身份运行

常用命令:

在这里插入图片描述


在这里插入图片描述


remove命令将卸载给定的软件包,但可能会留下一些配置文件。如果要删除包含所有配置文件的软件
包,请使用purge而不是remove
apt remove 和 apt purge 的区别
• apt remove 删除包的二进制文件, 它留下了残留的配置文件.
• apt purge 删除与包相关的所有内容, 包括配置文件.
如果弄乱了程序的配置, 希望从系统中完全清除它的痕迹再重新开始, 可以使用 apt purge
通常使用 apt remove 就足够了。

JDK

1.更新软件包

在这里插入图片描述


2.安装openjdk

#查找jdk包 apt list |grep "jdk" #安装jdk sudo apt install openjdk-17-jdk 

看准了,别下载错了:

在这里插入图片描述


验证:

在这里插入图片描述


卸载:

在这里插入图片描述

MYSQL

安装MYSQL

#查找安装包 apt list |grep "mysql-server" #安装mysql sudo apt install mysql-server 
在这里插入图片描述


在这里插入图片描述


MySQL安全设置
默认的 MySQL 设置是不安全的, MySQL 安装提供了⼀个安全脚本, ⽤于解决不太安全的默认选项.

sudo mysql_secure_installation 

密码强度选择2,其他全是Y。

然后就可以直接连接数据库了:

在这里插入图片描述


我们应该需要给Mysql设置一个自定义的密码,保证安全:

ALTERUSER'root'@'localhost' IDENTIFIEDWITH mysql_native_password BY***;

下面再想连接数据库就要用输入账号密码的方式了:

在这里插入图片描述

部署web项目到Linux

什么是部署

工作中涉及到的 “环境”
• 开发环境: 开发人员写代码用的机器。
• 测试环境: 测试人员测试程序使用的机器。
• 生产环境(线上环境): 最终项目发布时所使用的机器。对稳定性要求很高。
把程序安装到生产环境上,这个过程称为 “部署”。也叫 “上线”。
一旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到。
换句话说,如果程序有 BUG,这个 BUG 也就被千千万万的用户看到了。
部署过程至关重要,属于程序开发中最重要的一环。一旦部署出现问题,极有可能导致严重的事故(服务器不可用之类的)。
为了防止部署出错,一般公司内部都有一些自动化部署工具(如 Jenkins 等)。当前我们先使用手工部署的方式来完成部署

环境配置

程序正常运行,需要保证环境和程序都要正确,我们需要先设置环境
数据准备
按照之前的数据库建表脚本,在服务器上运行,建立相同的表结构。
程序配置文件修改
实际工作中,开发环境,测试环境以及生产环境的配置都是不一样的
比如mysql的用户名和密码
我们可以针对不同的环境,设置不同的配置

多平台文件配置
针对不同平台创建不同的配置文件,要求名字为application-XXX.yml或者application-XXX.properties
以下以application-XXX.yml为例:

在这里插入图片描述
spring: profiles: active:@profile.name@ 
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password:[email protected] driver-class-name:com.mysql.cj.jdbc.Driver mybatis-plus: configuration: map-underscore-to-camel-case:true # log-impl:org.apache.ibatis.logging.stdout.StdOutImpl logging: file: name: spring-blog.log 
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: hjk050723 driver-class-name:com.mysql.cj.jdbc.Driver mybatis-plus: configuration: map-underscore-to-camel-case:true log-impl:org.apache.ibatis.logging.stdout.StdOutImpl logging: file: name: spring-blog.log 
<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>
在这里插入图片描述


此时我们只需要在mvn选项中选择就可以决定使用哪个配置文件了。

构建项目并打包

在本地使用maven进行打包

  1. 如果Test代码中有与环境配置相关的操作(比如数据库相关的操作), 打包会失败, 点击下图①处的图标, 可以跳过测试
  2. 点击clean->package
在这里插入图片描述

上传jar包运行程序

直接拖动打包好的jar包到Xshell窗口即可:

在这里插入图片描述


咱们通过访问自己的服务器公网IP来检验自己的程序是否可以正常运行:

在这里插入图片描述

杀死进程

先找到所有正在运行的含java的进程,使用进程号杀死进程。

在这里插入图片描述

以上就是本篇博客全部内容!

Read more

【C++深学日志】C++“类”的完全指南--从基础到实践(一)

【C++深学日志】C++“类”的完全指南--从基础到实践(一)

假想一下,你是一个顶级汽车设计师,你的任务不是亲自拧紧每一个螺丝,而是要设计出一幅“汽车蓝图”,你在图纸上设计了一辆汽车所需的一切:车轮、车灯、V8发动机、方向盘等,你手上这份设计好的蓝图就相当于我们今天要讲的C++中的“类”,它规定了汽车的属性(例如:离合器)和方法(功能:换挡),它本身并不是一辆真正的汽车,只是你的一份设计规划,后续你交付给工厂,工厂按照你的设计蓝图,生产出了一辆汽车,这就是实例化,后续工厂有根据你的蓝图设计了一条流水线,每一辆从流水线上生产下来的车辆,都是里这个蓝图(类)的一个对象,他们都有蓝图定义的属性和功能。在C++中类就充当着蓝图的作用,它定义了对象拥有哪些属性,那么就和我一起来揭开这份“蓝图”的面纱吧。 1.类 1.1.类的定义 类的基本思想是数据抽象和封装,数据抽象是一种依赖于接口和实现的分离式编程技术,类的接口包括用户所能执行的操作,类的实现则是包括类的数据成员、负责接口实现的函数以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离,封装后的类隐藏了他的视线细节,也就是说,

By Ne0inhk
Qt步进电机上位机控制程序源代码:跨平台C/C++编写,支持多种端口类型与详细注释

Qt步进电机上位机控制程序源代码:跨平台C/C++编写,支持多种端口类型与详细注释

Qt步进电机上位机控制程序源代码Qt跨平台C/C++语言编写 支持串口Tcp网口Udp网络三种端口类型 提供,提供详细注释和人工讲解 1.功能介绍: 可控制步进电机的上位机程序源代码,基于Qt库,采用C/C++语言编写。 支持串口、Tcp网口、Udp网络三种端口类型,带有调试显示窗口,接收数据可实时显示。 带有配置自动保存功能,用户的配置数据会自动存储,带有超时提醒功能,如果不回复则弹框提示。 其中三个端口,采用了类的继承与派生方式编写,对外统一接口,实现多态功能,具备较强的移植性。 2.环境说明: 开发环境是Qt5.10.1,使用Qt自带的QSerialPort,使用网络的Socket编程。 源代码中包含详细注释,使用说明,设计文档等。 请将源码放到纯英文路径下再编译。 3.使用介绍: 可直接运行在可执行程序里的exe文件,操作并了解软件运行流程。 本代码产品特点: 1、尽量贴合实际应用,细节考虑周到。 2、注释完善,讲解详细,还有相关扩展知识点介绍。

By Ne0inhk
【C++】深入拆解二叉搜索树:从递归与非递归双视角,彻底掌握STL容器的基石

【C++】深入拆解二叉搜索树:从递归与非递归双视角,彻底掌握STL容器的基石

【C++】深入拆解二叉搜索树:从递归与非递归双视角,彻底掌握STL容器的基石 * 摘要 * 目录 * 一、概念 * 二、 性能分析 * 三、key结构非递归模拟实现 * 1. 二叉搜索树的插入 * 2. 二叉搜索树的查找 * 3. 二叉搜索树的删除 * 4. 二叉搜索树的中序遍历 * 四、key结构递归的模拟实现 * 1. 递归与非递归二叉搜索树核心操作的对比 * 2. 递归插入 * 3. 递归查找 * 4. 递归删除 * 总结 摘要 二叉搜索树(BST)是一种重要的数据结构,它通过"左子树所有节点值小于根节点,右子树所有节点值大于根节点"的特性实现高效的元素组织。本文详细解析了BST的核心概念、性能特点,并分别通过非递归和递归两种方式完整实现了插入、查找、删除等关键操作,深入探讨了指针引用在递归实现中的巧妙应用,以及两种实现方式在时间复杂度、空间复杂度和适用场景上的差异。 目录

By Ne0inhk
【C++】 —— 笔试刷题day_28

【C++】 —— 笔试刷题day_28

一、游游的重组偶数 题目解析 这道题,有q组数据,每一次输入一个正整数x,让我们将这个数进行重排,变成一个偶数,然后返回(如果x本身就是一个偶数那可以直接返回x); 如果不存在合法解,就是x通过重排后,无法变成一个偶数,就输出-1; 算法思路 这道题,总体来说还是比较简单的; 对于正整数x,我们可以把它当作一个字符串进行输入;(如果按照整数输入,我们还要将这个数x的每一位变换成对应数组) 我们知道,如果一个数是偶数,那最低位一定是一个偶数,这样我们只需判断字符串的最后一位即可知道这个数是否是偶数;如果这个数是偶数,那就直接输出即可;如果最后一位不是偶数,那就从第一位开始向后找,找到一位是偶数,然后把它交换到最后一位;然后输出即可;如果遍历完这个字符串,还没找到一位是偶数的,那就表示这个数x通过重拍无法变成偶数,输出-1即可。 题目解析 #include<iostream>usingnamespace std; string func(){ string str; cin >>

By Ne0inhk