一、Linux 背景知识

        Linux 的第一个版本开发者是 Linus,所以部分人会叫“林纳斯”。Linux 只是一个开源的操作系统内核,有些公司/开源组织基于 Linux 内核,配套了不同的应用程序,构成不同的操作系统(比如 vivo、),也就是不同“发行版”:RedHat 收费,CentOS 社区免费版但是停止维护了(出了问题小公司不好搞,但是大公司有能力二次开发),Ubuntu 免费并且在持续维护。

        Linux 免费开源、稳定(持续运行不重启很多年都没问题)、安全(管理员才能操作内核)、社区支持(有问题去社区问)。

        我们程序员必学 Linux,只不过不同岗位侧重点不同。Linux 虽有图形界面,但不好用切占资源开销,所以 Java 开发需要学 Linux 基础命令。Linux 自身提供了 API 给程序员完成复杂编程,比如文件操作、多线程、socket 编程等。但是 Java 有封装好的工具,并且跨平台,所以不需要学 Linux 的系统编程。然后就是在 Linux 上部署项目,让用户访问,企业有自动化工具一键部署。安装程序是运维的事。最后就是读日志,tail 跟踪日志,grep 过滤信息。

二、Linux 环境搭建

        物理机装 Linux 用起来不方便,虚拟机装 Linux 有各种环境问题,云服务器开机就用就是费钱,可以申请学生优惠。小的项目 2核2G够,大的比如微服务项目 2核4G 够。

        买好后,要记住:公有 IP管理员账户(默认root)、密码

        下 XShell 终端软件,远程连接服务器,对服务器进行操作。

家庭/学校免费 - NetSarang Websitehttps://www.xshell.com/zh/free-for-home-school/

        XShell 远程连接

        复制粘贴设置:工具》选项》终端:

三、Linux 基础命令

  • ~ 表示 home 目录,root 管理员的 home 目录是 /root,普通用户是 /home/用户名。

1、创建文件夹(mkdir)

语法:touch [选项] [⽬录]

        mkdir:创建文件夹

        mkdir -p:先创建所有不存在的父文件夹(parent),再创建文件夹(test)。

2、创建文件(touch)

        touch:什么后缀都行

3、删除文件夹/文件(rm)

        rm -rf:直接删除文件夹,及其下所有内容。包括只读文件也删除。(-r 指删除文件夹下,还有文件的情况)

        不要轻易在根目录 / 下使用该命令,即删除所有包括系统文件,使用了系统也会提示不能操作:图中说明加 --no-preserve-root 选项会忽略警告强制删除。

        rm -ri:删除所有文件之前,询问。

4、列出目录(ls)

        ls :列出当前目录下的所有文件夹、文件。

        ls -a:列出所有文件,包括 . 开头的隐藏文件。

        ls -l:列出所有文件的详细信息。

        ll :列出所有文件,包括隐藏文件的详细信息。

        ls -dl:列出当前文件的详细信息。

5、改变工作目录(cd)

        cd 绝对路径:

        cd 相对路径:. 表示当前目录,.. 表示上一级目录。

        cd - : 返回最近访问的目录。

6、显示当前目录(pwd)

7、快捷键

        tab 自动补全:敲部分文件名,tab 可根据当前目录下的文件自动补全。

        crl+c:输入输错了,取消命令。

8、复制文件夹/文件(cp)

        cp 源文件 目标路径

        可以重命名:

        若目标路径里有重复的,-f 是强制覆盖,-i 是覆盖前询问。

9、剪切文件夹/文件(mv)

        mv

        可以重命名剪切的源文件:

9、写文件(vi)

        vi/vim 文件名:用 vim 文本编辑器打开文件。

        i :进入编辑模式。

        Esc:退出编辑模式。

        :q  未修改,直接退出。

        :wq  修改,保存退出。

        :wq!  修改,强制保存退出。(另一个窗口也修改了这个文件并保存了,如果当前窗口不要另一个窗口修改的,就强制保存并退出)

        :q  修改了,强制不保存退出。

更多参考使用文档,命令 vimtutor。

10、读文件

        cat -n 文件名:读取文件所有内容,并显示行号。

        more : 显示部分内容。按 enter 再显示一行,按 下箭头 再显示一页。 crl+c 结束。

        less :滚动读取,:q 退出。

        head -10:显示头 10 行。

        tail -10:显示尾 10 行。

11、查找内容(grep)

        常用于查看日志

        grep -w 全字匹配。-r 递归查找所有文件。--color 高亮查找。

        现实场景中,有很多用户请求,日志滚动得很快,所以需要用 tail -100f 跟踪最新日志,但是有些日志不是我们想要的,就用 grep 过滤日志

12、查看进程(ps)

        显示所有进程,并查找进程:ps aux 或者 ps -ef | grep "进行名" 或 “进程 id”

13、查看网络状态(netstat)

        | 表示把前一个命令得输出,作为后一个命令得输入。

        netstat -anp | grep "进程名" 或 “端口号”。

14、上传/下载文件

        安装命令:

apt-get install lrzsz

        上传文件:直接拖拽 / rz

        下载文件:sz 文件名

四、搭建 Java 部署环境

1、软件管理(apt)

        不同发行版的 Linux 软件管理命令不一样,Ubuntu 是 apt

(1)查找软件包

        列出的软件包数据库apt list,不建议直接用,因为会显示所有的软件,信息太多会卡住。一般搭配 grep。

(2)管理员身份运行

        在普通用户上进行 apt 更新、安装、卸载操作,需要在前面加上 sudo,表示以管理员身份运行。因为软件的更新、安装、卸载是管理员才能执行的操作。

        sudo su,可切换至 root 用户。

(3)更新软件包数据库

        安装软件前,需要更新软件包数据库。因为 apt 是按照系统上的软件包数据库的信息,从仓库中下载的。如果没有更新软件包数据库,就可能与仓库中的软件包信息不一致,导致下载失败。

        apt-get update

(4)安装和卸载

        apt install / remove。remove 会残留配置文件,purge 会把配置文件也删了。但是也有可能没删干净,查百度。

2、JDK

        安装:

// 更新软件包
apt-get update// 查找 jdk 软件包
apt list |grep "jdk"// 安装 jdk
apt install openjdk-17-jdk// 查看 jdk 版本
java -version

        卸载:

// 查看已安装 jdk,忽略大小写
dpkg --list | grep -i jdk// 删除 jdk
apt-get purge openjdk*// 卸载 jdk
apt-get purge icedtea-* openjdk-*// 查看是否卸载
dpkg --list | grep -i jdk

3、MySQL

        安装:

// 查找
apt list |grep "mysql-server"// 安装
apt install mysql-server// 查看 mysql 状态
sudo systemctl status mysql

        安装安全设置。使用 mysql 的脚本,解决不安全的默认设置:

sudo mysql_secure_installation

        设置密码:

// 启动 mysql
mysql// 设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'// 登录 mysql
mysql -uroot -p
输入密码// 退出 mysql
quit;

        卸载 mysql:

// 停止 mysql
sudo systemctl stop mysql// 卸载 mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common// 删除配置文件和数据
sudo rm -rf /etc/mysql /var/lib/mysql// 清理残留
sudo apt-get autoremove
sudo apt-get autoclean// 验证卸载结果
mysql --version

4、部署 Web 到 Linux

        环境分为:开发环境 dev(开发时用的服务器),测试环境 test(测试人员测试时用的服务器),预发布环境 stage(用的真实用户数据,但是是内部人员使用发起的请求),灰度环境 prob(逐步上线,一开始只要少量服务器接收用户请求),发布环境/线上环境 prod(所有服务器都能接收用户请求)。

        按这个过程,程序最终上线,就叫做部署。一般公司使用自动化部署工具(如 Jenkins),避免手动部署出错。

        在服务器上创建数据库:

// 执行 .sql 脚本文件
source 脚本文件

(1)Spring Boot 多平台文件配置        

        修改 .yml 配置文件,比如数据库密码不一样。但是多个运行环境(idea 本地、服务器开发/测试……)配置文件改来改去很麻烦,就给不同运行环境有不同的 .yml 文件。

        主配置文件:放公共的部分。@属性名@

# 哪个环境激活
spring:profiles:active: @profile.name@# 应用服务 WEB 访问端口
server:port: 8080
# Mybatis-Plus 配置
mybatis-plus:configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置打印 MyBatis ⽇志map-underscore-to-camel-case: true # 配置驼峰⾃动转换
# Spring Boot 日志配置
logging:logback:rollingPolicy:fileNamePattern: logs/spring_blog-%d{yyyy-MM-dd}-%i.logmax-file-size: 10MBmax-history: 30

        配置 pom 文件:

    <profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><activation><activeByDefault>true</activeByDefault> // 默认激活</activation><properties><profile.name>prod</profile.name></properties></profile></profiles>

        dev:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/spring_blog?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: "hdalddnasl"driver-class-name: com.mysql.jdbc.Driver

        prod:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/spring_blog?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: "Zhamuyan200114@"driver-class-name: com.mysql.jdbc.Driver

(2)打包并上线       

        如果

        clean >> 打包:

        把 target 下的 jar 包上传到服务器,运行程序

// 后台运行,就算把连接服务器的终端关闭了,也能运行
​​nohup 执行的命令(java -jar jar包) &// 也可以把输出的内容重定向到 指定文件
​​nohup 执行的命令(java -jar jar包) >文件名 &

        查看程序是否运行:

        云服务器开放端口号:若有多个端口号,以逗号分隔。

        如果需要重启服务,需要先杀掉之前的服务进程,如 8080:kill -9 进程id

(3)存在的问题

 spring-boot-starter-parent 自带自动化的资源过滤,如果 springboot 项目没有指定 spring-boot-starter-parent 的话,使用 @@ 的时候就会报 ScannerException 异常:

        解决方案:启用对 src/main/resources 目录下资源文件的过滤处理,允许通过占位符动态替换配置文件中的变量。在 build 下加入,主要只需要过滤配置文件,避免把前端静态资源也过滤了。

        <resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/application*</include></includes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><excludes><exclude>**/application*</exclude></excludes></resource></resources>

②  jar中没有主清单属性错误。原因是 jar 包里的 META-INF 文件下的 MANIFEST.MF 中缺少 Main-Class 元素声明,即启动类所在包。

解决办法:

服务器本地 root 用户运行的 Spring Boot 程序无法连接本地数据库的 root 用户。解决办法:

        查看本地 root 用户的认证方式:

SELECT User, Host, plugin FROM mysql.user WHERE User = 'root' AND Host = 'localhost';

       

        auth_socket 认证方式,只能通过本地(只能用 UNIX 的 socket 方式登陆)登录、操作系统用户必须与数据库用户同名。在服务器上 root 用户直接通过命令行连接本地 mysql (若不指定 --protocol=tcp,则默认通过本地的 mysqld.sock socket 文件连接)的 root 用户,无需登陆密码。而 JDBC 默认通过 TCP/IP 协议通信,所以会出现程序连接本地数据库失败。

        解决办法1(不建议):直接将本地 root 用户认证方式改为 mysql_native_password,这样就是通过密码连接。不建议的原因是,不能使用本地 root 用户免密连接的功能;再一个是没有 只给业务用户 指定的数据库操作权限安全。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

        解决办法2(推荐):

// 创建专用业务用户
CREATE USER 'spring-blog'@'localhost' IDENTIFIED BY '你的密码';// 赋予数据库操作权限
GRANT ALL PRIVILEGES ON 数据库名.* TO 'spring-blog'@'localhost';// 刷新
FLUSH PRIVILEGES;

-parameters 参数问题。 IDEA 的 Java Compiler设置只影响本地编译,Maven/Gradle 打包时自行调用 Javac,不会读取 IDEA 的这些配置。

        解决办法:在 maven 插件中配置参数。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><compilerArgs><arg>-parameters</arg></compilerArgs></configuration>
</plugin>

如果还有问题,可以查看日志跟踪。

tail -100f logs/spring_blog.log | grep 'Exception'

        因为 Spring Boot 项目已经配置了日志持久化,不想 nohup 将输入保存到 nohup.out,可以使用以下命令丢弃:

nohup 命令 > /dev/null 2>&1 &// 表示将标准输出(stdout)重定向到 /dev/null(Linux/Unix 系统中的一个特殊文件,也被称为“黑洞”或“空设备”。),丢弃所有正常输出。
> /dev/null// 表示将标准错误输出(stderr)重定向到标准输出(stdout),也就是所有错误信息也一起丢弃。
2>&1// 表示在后台运行该命令
&

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96432.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96432.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96432.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视觉SLAM第9讲:后端1(EKF、非线性优化)

目标&#xff1a; 1.理解后端的概念&#xff1b; 2.理解以EKF为代表的滤波器后端的工作原理&#xff1b; 3.理解非线性优化的后端&#xff0c;明白稀疏性是如何利用的&#xff1b; 4.使用g2o和Ceres实际操作后端优化。 9.1 概述 9.1.1 状态估计的概率解释 1.后端优化引出 前段…

楼宇自控系统监控建筑变配电系统:功效体现在安全与节能层面

建筑变配电系统是保障建筑电力供应的 “心脏”&#xff0c;负责将外界高压电转化为建筑内设备可使用的低压电&#xff0c;为暖通、照明、电梯等核心系统供电。传统变配电管理依赖人工巡检&#xff0c;不仅存在 “监测滞后、故障难预判” 的安全隐患&#xff0c;还因无法精准调控…

【Docker安装使用常见问题汇总】

文章目录1. wsl update failed: update failed:2.dockerDesktopLinuxEngine: The system cannot find the file specified.3. 中文语言包3.1. 下载中文包3.2 默认路径如下&#xff1a;3.3 备份并替换 app.asar 文件&#xff1a;4. Get "https://registry-1.docker.io/v2/&…

Android面试指南(八)

目录 1、Java语言相关 1.1、String的intern方法 1.2、HashMap的扩容 1.3、Java数组不支持泛型 1.4、泛型类型保留到运行时 1.5、匿名内部类使用的外部变量需要加final 2、Kotlin语言相关 3、设计模式 1、Java语言相关 1.1、String的intern方法 1&#xff09;、String…

7、Matplotlib、Seaborn、Plotly数据可视化与探索性分析(探索性数据分析(EDA)方法论)

学习目标&#xff1a;掌握数据可视化的原理和工具&#xff0c;培养通过图表洞察数据规律的能力&#xff0c;建立数据驱动的分析思维数据可视化是数据科学的重要组成部分&#xff0c;它将抽象的数字转化为直观的图形&#xff0c;让我们能够快速识别模式、趋势和异常。从基础的柱…

Next系统学习(二)

SSR生命周期与实现详细解答 19. 如果不使用框架&#xff0c;如何从零用React/VueNode.js实现一个简单的SSR应用? React Node.js SSR实现步骤&#xff1a; 项目结构搭建 /project/client - 客户端代码/server - 服务端代码/shared - 共享代码服务端基础设置 // server/index…

零代码入侵:Kubernetes 部署时自动注入 kube-system UID 到 .NET 9 环境变量

在现代化 .net9 应用部署阶段&#xff0c;零代码入侵模式&#xff0c;自动获取 kubernetes 命名空间 kube-system 的 UID&#xff0c;并其作为变量配置到应用。 以下是几种实现方式&#xff1a; 方法一&#xff1a;使用 InitContainer Downward API 您可以通过 Kubernetes 的 …

基于Redis设计一个高可用的缓存

本文为您介绍&#xff0c;如何逐步设计一个基于Redis的高可用缓存。 目录 业务背景 步骤一&#xff1a;写一个最简单的缓存设计 存在的问题&#xff1a;大量冷数据占据Redis内存 解决思路&#xff1a;让缓存自主释放 步骤二&#xff1a;为缓存设置超时时间 存在的问题&a…

从原理到实践:LVS+Keepalived构建高可用负载均衡集群

从原理到实践&#xff1a;LVSKeepalived构建高可用负载均衡集群 文章目录从原理到实践&#xff1a;LVSKeepalived构建高可用负载均衡集群一、为什么需要LVSKeepalived&#xff1f;二、核心原理&#xff1a;Keepalived与VRRP协议1. VRRP的核心思想2. Keepalived的三大功能三、LV…

iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护

近年来&#xff0c;在线教育直播类 App 已成为学生与培训机构的重要工具。无论是 K12 教育、职业培训&#xff0c;还是兴趣学习&#xff0c;App 中承载的课程视频、题库与互动逻辑都是极高价值的内容资产。 然而&#xff0c;教育直播应用同样面临多重安全风险&#xff1a;课程视…

第2节-过滤表中的行-BETWEEN

摘要: 在本教程中&#xff0c;您将学习如何在 WHERE 子句中使用 PostgreSQL 的 BETWEEN 运算符来检查某个值是否在两个值之间。 PostgreSQL BETWEEN 运算符 BETWEEN运算符是一种比较运算符&#xff0c;如果某个值介于两个值之间&#xff0c;则返回true。 以下是 BETWEEN 运算符…

Windows 11 手动下载安装配置 uv、配置国内源

Windows 11 手动下载安装配置 uv、配置国内源 本文对应的讲解视频链接&#xff1a;https://www.bilibili.com/video/BV1WnYTzZEpW 文章目录Windows 11 手动下载安装配置 uv、配置国内源1. 下载、安装、配置 uv2. 参考信息重要声明&#xff1a; uv 的安装有很多种方式&#xff…

平板热点频繁断连?三步彻底解决

平板反复断开热点连接是一个非常常见且令人烦恼的问题。这通常不是单一原因造成的&#xff0c;而是多种因素叠加的结果。 我们可以从热点发射设备&#xff08;手机等&#xff09;、平板本身、以及环境因素三个方面来排查和解决。 一、 热点发射端&#xff08;通常是手机&#x…

Qt文件操作的学习(三)

一、实现简易文本编辑器 主要用到带菜单栏的窗口&#xff0c;而非单一窗口。QT已经写好相关操作&#xff0c;就不在重新造轮子了功能设计&#xff1a;新建文本文档&#xff0c;打开文件&#xff0c;保存文件&#xff0c;另存为 这次不同于之前直接可以在控件上面右击槽了&…

ArcGIS学习-20 实战-县域水文分析

水文分析任务提取区域内水流方向、汇流累积量、河网、流域、子流域前置操作环境更改加载数据检查投影坐标系河网分析洼地填充限制默认为空&#xff0c;认为所有洼地都是需要填充的&#xff0c;这里更正一下Fill_DEM需要加上后缀.tif流向分析得到流量分析得到这里的黑色代表非河…

本地 Docker 环境 Solr 配置 SSL 证书

一、简介 在本地开发环境中为 Solr 配置 SSL 证书,是提升开发与测试一致性的关键步骤。尤其是在涉及安全传输需求的场景中,本地环境的 HTTPS 配置能有效避免因环境差异导致的问题。本文将详细介绍如何利用 Docker 容器,快速为 Solr 服务配置自签名 SSL 证书,实现本地 HTTP…

MacOS 运行CosyVoice

CosyVoic主要特点&#xff1a;1、支持中文、英文、上海话、天津话、四川话等方言。语音非常自然。2、支持3秒语音零样本克隆&#xff0c;效果非常好。3、克隆时间比较长&#xff08;取决于GPU性能&#xff0c;使用H20以满足低延迟输出&#xff09;&#xff0c;L4 克隆默认文本需…

我不是挂王-用python实现燕双鹰小游戏3

在前两个版本的更新后,越来越多内容,操作和运行也不方便,优化第三版本窗口可视化界面 本次版本更新使得可读性和可操作性大幅度增加,前面2版本可分别参考 我不是挂王-用python实现燕双鹰小游戏 和 我不是挂王-用python实现燕双鹰小游戏2 一.燕双鹰窗口可视化(燕双鹰3.0) 新燕双…

装饰(Decorator)模式可以在不修改对象外观和功能的情况下添加或者删除对象功能

试题&#xff08;35&#xff09;、&#xff08;36&#xff09;某系统中的文本显示类&#xff08;TextView&#xff09;和图片显示类&#xff08;PictureView&#xff09;都继承了组件类&#xff08;Component&#xff09;&#xff0c;分别显示文本和图片内容&#xff0c;现需要…

深度学习基础概念【持续更新】

1. 梯度消失如果网络中某一层的激活函数&#xff08;如 sigmoid 或 tanh&#xff09;在输入较大的情况下有很小的梯度&#xff08;比如接近零&#xff09;&#xff0c;那么当这些小的梯度通过多层反向传播时&#xff0c;它们会逐渐变得更小。这意味着在深层网络的前面几层&…