Linux

目录

一、Linux

[1.0 简介](#1.0 简介)

(1)简介

(2)Xshell使用

​编辑

[2.0 Linux常见命令](#2.0 Linux常见命令)

[3.0 搭建Java部署环境](#3.0 搭建Java部署环境)

(1)apt

(2)JDK

(3)MySQL

[4.0 部署Web项目到Linux](#4.0 部署Web项目到Linux)

(1)什么是部署

(2)环境配置

(3)构建项目并打包

[(4)上传Jar包到服务器 并运行](#(4)上传Jar包到服务器 并运行)

(5)验证程序

(6)常见问题

(7)杀掉进程


一、Linux

1.0 简介

(1)简介

Linux是一个操作系统 和Windows是并列的关系

一个完整的操作系统 = 操作系统内核 + 配套的应用程序 由于Linux是一个完全开源免费的内核,因此有些公司或开源组织又基于Linux内核,提供了不同的配套程序,这就构成了不同的发行版。例如 redhat(红帽) 、centOS(已停止维护) 、ubuntu

优势:开源(免费 便宜) 稳定(运行很多年都不会出现问题) 安全(只有特定管理员或特定用户才能访问Linux内核) 自由 社区支持(活跃 有很多志愿者在线棒大家解决问题)

学习内容:基础命令 虽然有图形化界面 但是往往都是通过命令行的方式操作的

部署JavaWeb项目 我们⾃⼰写的 web 程序, 要想让其他的⽤⼾能够访问, 就需要发布 到服务器上.

环境搭建: 物理:双系统 卡 虚拟机软件:bug多 WSL :新技术不成熟

**云服务器:**到服务厂商直接购买一个 最大的好处:部署在云服务器的项目可以直接

被外网访问到 这个时候就和公司发布一个正式的网站没有任何区别

也就让我们自己写的程序真的去给别人使用

//阿里云 华为云 腾讯等大学生优惠 有的还有免费的 学习阶段1核2G就

可以 学习微服务的时候需要2核4G 哪个便宜买哪个

//阿里云 学生有免费试用的300元额度 阿里云免费试用 - 阿里云

购买之后:联系客服得到 ip 用户名 密码

终端软件:是一类工具软件 可以和远程的主机建立网络连接 从而对主机进行一些操作 XShell

下载地址:家庭/学校免费 -- NetSarang Website

使用XShell登陆主机:在终端输入 ssh 服务器外网ip地址 ip为腾讯云后台页面中看到的 外网ip

复制:ctrl + insert 粘贴:shif + insert 可以重新设置快捷键

左上角新建会话属性 名称:我的虚拟机_公网Ip地址 主机:公网Ip地址 端口号:22

输入密码 一般写成root就行了

(2)Xshell使用

先是创建好连接

然后用户登录这里 输入用户名和密码 就可以登录了

登录完成之后 会出现下面的界面

喜欢的快捷键:

工具 选项 终端 --->这里设置 鼠标右键是粘贴功能

将选定的文本自动复制到剪切板

这样呢 选中之后 自己就复制了 右键鼠标就是粘贴 方便

查看快捷键:

工具 按键对应----> 出现下图

2.0 Linux常见命令

Ls

语法功能: ls 选项 ⽬录或⽂件

功能:对于目录 该命令列出该目录下的所有子目录与文件

对于文件 将列出文件名以及其他信息

python 复制代码
• -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。 
• -d 将⽬录象⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。 如:ls ‒d 指定⽬录 
• -k 以 k 字节的形式表⽰⽂件的⼤⼩。ls ‒alk 指定⽂件 
• -l 列出⽂件的详细信息。 
• -r 对⽬录反向排序。 
• -t 以时间排序。 
• -R 列出所有⼦⽬录下的⽂件。(递归)

Pwd

语法:pwd

功能:显示用户当前所在的目录

Cd

语法:cd 目录名

功能:改变工作目录 将当前工作目录改变到指定目录下

cd ../ 是回到上一级目录

目录名太长了 不好敲怎么办?

Cd 写一个目录首字母 然后tab键 系统会提示你 tab键会自动给你补全

Mkdir

语法: mkdir 选项 dirname...

功能:在当前目录下面创建一个名为 "dirname"的目录

常用选项:-p test/test1 创建多级目录

Rm

语法 rm rm -f-i-r-v dirName/dir

功能:删除文件或者目录

常用选项:

python 复制代码
• -f 即使⽂件属性为只读(即写保护),亦直接删除 
• -i 删除前逐⼀询问确认 
• -r 删除⽬录及其下所有⽂件

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

//rm -fr/ 相当于给自己的系统做了一次彻底的 不可恢复的格式化 类似window中直接把c盘删除了

Cp

语法:cp 选项 源⽂件或⽬录 ⽬标⽂件或⽬录

功能:复制文件或目录

说明:cp指令用于复制文件或者目录 如同时指定两个以上的文件或目录 其而最后的目的地是一个已经保存在的目录 则它会把指定的所有文件或目录复制到此目录中 若同时指定多个文件或者目录 而最后的目的地并非一个已存在的目录 则会出现错误信息

常用选项:

python 复制代码
• -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在 
• -i 或 --interactive 覆盖⽂件之前先询问⽤⼾ 
• -r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号 
链接,则⼀律视为普通⽂件处理 
• -R 或 --recursive递归处理,将指定⽬录下的⽂件及⼦⽬录⼀并处理

Mv

语法: mv 选项 源⽂件或⽬录 ⽬标⽂件或⽬录

功能:视mv命令中第二个参数类型的不同 mv命令将文件重命名或将其移至一个新的目录中

当第二个参数类型是文件时 mv命令完成文件重命名 此时 源文件只能有一个

它将所给的源文件或目录

重命名为给定的目标文件名

当第二个参数是已经存在的目录名称时,源文件或目录参数可以有多个 mv命令将各参数指定的源文件均移至目标目录中

简单来说就是 重命名文件 和 把文件夹搬到另一个地方

常用选项:

python 复制代码
• -f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖 
• -i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖!

apt-get install lrzsz

这条命令就像是给Linux服务器安装了一个小工具箱 让你能直接在命令行里 像发微信文件一样 轻松地和电脑互相传文件

rz是长传 sz是下载 最大的好处是方便 只适合传小文件

Xshell里面接入: apt-get update && apt-get install -y lrzsz 输入这个命令然后回车即可

Cat

语法:cat 选项 ⽂件

功能:查看目标文件的内容

常用选项: -n 对输出的所有行编号

/这样会把文件的所有内容都展示出来 如果文件的内容很多呢?

more 文件名 一点一点的展示 慢慢的敲回车 就能逐步看到

/this 表示查找 它会跳转到文件里面的this这里

less 文件名 这样可以通过滚轴查看 结束了之后有END表示

head 文件名 默认查看文件前10行 自己也可以设置 head -20 文件名 //查看文件前20行

tail 文件名 查看末尾几行 tail -10 test1.txt

常见的结束符:

more是Ctrl C退出文件

less是:q 退出文件

编辑文件:

vi或者vim 这个是一个知名的文本编辑器

vim相当于windows的记事本 只不过功能比记事本强大一些

创建文件/打开文件 : vim 文件名 刚开始进入的时候 不能写入内容

这个时候按i 进入编辑模式 下面会出现一个insert 就是表示可以插入文件内容了

Esc 表示退出编辑模式

保存文件: 退出编辑模式之后 输入:wq 表示退出并保存

如果不想保存:esc 先退出编辑模式 然后:q! 强制退出 :q是退出

输入:wq! 强制退出并保存

gerp

语法:grep 参数... ⽂件...

功能:用于查找文件中是否包含指定字符串 并显示对应的行

选项:

python 复制代码
• -n<⾏数> 显⽰的⾏数 
• -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, ⽽不仅仅是⼀个单词的⼀部分. 
• -r 递归查找. 可以搜索多级⽬录下的所有⽂件. 
• --color ⾼亮查找到的结果 
• --include 指定查找某些⽂件 
• --exclude 指定排除某些⽂件

gerp "this" settings.xml //表示在setting.xml文件里面查找this

gerp -n"this" settings.xml //它会告诉你第几行有this这个内容

Ps

语法:ps 参数...

功能:用于查看当前系统上运行的进程

选项:

python 复制代码
• a 显⽰⼀个终端的所有进程 
• u 以⽤⼾为主的格式来显⽰程序状况 
• x 显⽰所有程序, 不⽌是会话中的进程 
• e 显⽰所有进程, 包括系统守护进程 
• f 显⽰完整格式输出
aux 一起记就行 不用分开记

ps aux # 显⽰系统上所有的进程 
ps aux | grep "进程名" 
ps aux | grep "进程id"

如果我们想要基于这个打印出来的进程列表进行查找

用| |表示管道 把管道前面内容的输出作为管道的输入

ps aux | grep "java" 这个就是查找java进程

Netstat

语法: netstat 参数...

功能: 查看系统上的网络状态

选项:

python 复制代码
• -a 显⽰所有正在或不在侦听的套接字 
• -n 显⽰数字形式地址⽽不是去解析主机、端⼝或⽤⼾名 
• -p 显⽰套接字所属进程的PID和名称
还是不要分开记   以anp为整体的记录
netstat -anp查找所有的

3.0 搭建Java部署环境

(1)apt

apt(Advanced Packaging Tool), Linux软件包管理⼯具. ⽤于在Ubuntu、Debian和相关Linux发⾏版

上安装、更新、删除和管理deb软件包.

⼤多数apt命令必须以具有sudo权限的⽤⼾⾝份运⾏

//通俗理解:apt就是Linux里的"应用商店" 用来装软件 搭建Java部署环境就是给服务器装上Java 让它能跑你写的Java程序

apt 常用命令

列出所有的软件包

python 复制代码
apt list   
这个命令输出所有包的列表   内容比较多   可以使用grep命令过滤输出
apt list |grep "java"

更新软件包数据库

python 复制代码
sudo  apt-get update

apt实际上在可用软件包的数据库上工作 如果数据库没有更新 系统将不知道是否又更新的软件可用

这就是为什么在安装任何Linux系统之后 第一件事应该是更新apt数据库

运行此命令 您将看到从服务器检索到的软件包信息

安装软件包

python 复制代码
sudo apt install package_name

移除软件包

python 复制代码
sudo apt remove package_name
remove命令将卸载给定的软件包   
但可能会留下一些配置文件   如果要删除包含所有配置文件的软件包 
请使用purge而不是remove
(2)JDK

更新软件包

python 复制代码
sudo apt-get update
执行结果
ubuntu@VM-24-3-ubuntu:~$ sudo apt-get update #更新软件包 
Hit:1 http://mirrors.tencentyun.com/ubuntu jammy InRelease 
Hit:2 http://mirrors.tencentyun.com/ubuntu jammy-updates InRelease 
Hit:3 http://mirrors.tencentyun.com/ubuntu jammy-security InRelease 
Reading package lists... Done

安装openjdk

python 复制代码
1 #查找jdk包 
2 apt list |grep "jdk" 
3 
4 #安装jdk 
5 sudo apt install openjdk-17-jdk

执行结果: 
主要中途需要输入Y  表示确认进行下一步

验证安装: 
java -version     是下面的结果

//卸载的常见命令
 检查安装的是哪个OpenJDK 
# dpkg --list | grep -i jdk  
 移除 openjdk包: 
# apt-get purge openjdk* 
卸载 OpenJDK 相关包: 
# apt-get purge icedtea-* openjdk-* 
检查所有 OpenJDK包是否都已卸载完毕: 
# dpkg --list | grep -i jdk
(3)MySQL

使用apt安装MySQL

python 复制代码
#查找安装包 
apt list |grep "mysql-server" 
#安装mysql 
sudo apt install mysql-server
中途也是需要输入一下 Y

查看MySQL状态

python 复制代码
sudo systemctl status mysql

MySQL安装安全设置

默认的MySQL设置是不安全的 MySQL安装提供了一个安全脚本

用于解决不太安全的默认选项

python 复制代码
sudo mysql_secure_installation

安装之后会有一系列的提示 接下来按照提示输入:

Press y|Y for Yes , any other key for No: Y 是否设置验证密码组件 Y

Please enter 0= Low,1 = MEDIUM and 2 = STRONG : 设置密码强度 2 服务器很容易被盗

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y #默认情 况下,MySQL安装有⼀个匿名⽤⼾, 允许任何⼈登录MySQL. 是否删除匿名⽤⼾? Y

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y #仅应允许root从'localhost'连接

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y #默认情况下, MySQL带有⼀个test数据库, 是否删除? Y

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y #是否现在加载配置, 使刚才的修改⽣效? Y

这个时候直接敲mysql就可以连上了

设置密码:

python 复制代码
连接mysql服务器
sudo  mysql

使⽤alter user 命令修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 
'BITE@yyds.666';
//密码改成了     BITE@yyds.666

//卸载Mysql

python 复制代码
# 停止mysql
sudo systemctl stop mysql

# 卸载mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common

# 删除 MySQL 配置文件和数据
sudo rm -rf /etc/mysql /var/lib/mysql

# 清理残留文件和目录
sudo apt-get autoremove
sudo apt-get autoclean

# 验证卸载结果
mysql --version

4.0 部署Web项目到Linux

(1)什么是部署

把程序安装到生产环境上 这个过程叫部署 也叫做上线

一旦程序部署成功 那么这个程序也能被外网千千万万的普通用户访问到了

换句话说, 如果程序有 BUG, 这个 BUG 也就被千千万万的⽤⼾看到了.

部署过程⾄关重要, 属于程序开发中最重要的⼀环. ⼀旦部署出现问题, 极有可能导致严重的事故(服务器不可⽤之类的).

为了防⽌部署出错, ⼀般公司内部都有⼀些⾃动化部署⼯具(如 Jenkins 等). 当前我们先使⽤⼿⼯部署的

⽅式来完成部署.

//咱们这里讲解的是 手工部署

(2)环境配置

程序配置文件修改 :我们可以针对不同的环境 设置不同的配置

多平台配置 针对不同平台创建不同的配置文件 要求名字为

开发环境:通常取名是dev

测试环境:test

生产环境:prod 配置环境可以改名为这个:application-prod.yml

理论上来说 只有application.yml是配置文件 为了在不同环境里面运行

可以在主配置文件里面定义好开发 测试 生产环境里面的配置

这行日志表示dev生效了

更好的方式: 借助maven

从Maven中读取环境配置变量

python 复制代码
<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>

//勾上之后记得刷新maven

(3)构建项目并打包

在本地使用maven进行打包 //肯定打包的是prod环境的

  1. 如果Test代码中有与环境配置相关的操作(⽐如数据库相关的操作), 打包会失败, 点击下图①处的图标, 可以跳过测试

  2. 点击clean->package

(4)上传Jar包到服务器并运行

1 上传Jar包 直接拖动打好的jar包到xshell窗口即可完成文件的上传

Xshell可以直接拖动文件到窗口 达到上传文件的目的 如果使用其他客户端

不支持文件的上传 需要借助lrzsz命令

2 运行程序

python 复制代码
nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &

nohup:后台运行程序 用于在系统后台不挂断地运行命令 退出终端不会影响程序的运行

语法格式:

python 复制代码
nohup Command [ Arg ... ] [ & ]

参数说明:

Command: 要执行的命令

Arg:⼀些参数,可以指定输出⽂件

&:让命令在后台执⾏,终端退出后命令仍旧执⾏

nohup java -jar blog-0.0.1-SNAPSHOT.jar >/logs & Linux 可以通过 > 把需要输出的内容写到指定⽂件中. 这样的操作称为 "重定向".

3 开放端口号

如果外网需要访问该服务器 需要先服务器防火墙开放对应的端口号

本着服务器安全的原则,云服务器上的端⼝⾮必要不开启.

⽐如常⻅端⼝号: 数据库 3306 , Redis 6379, 尽可能避免开放, ⽽是采⽤其他⽅式来连接, ⽐如配置隧道的⽅式

以腾讯 云服务器 举例:

进入防火墙管理页面

添加规则

端口号写需要开放的端口号 多个端口号以逗号分割

(5)验证程序

访问项⽬: http://IP:Port/blog_login.html IP改为云服务器的IP, Port改为项⽬的端⼝号.

按照项目的功能进行验证:

//验证账户注册登录 验证展示博客列表 验证新增博客 验证展示博客内容

(6)常见问题

一个程序的正常运行 需要程序的正确和环境的正确

同样的代码在Windows上可以运行成功 不一定在Linux上运行成功

不同的系统对代码的理解和支持是不同的

⽐如Windows系统对MySQL不区分⼤⼩写, Linux区分⼤⼩写

服务不能正常访问的原因有很多, 主要分以下⼏⽅⾯

  1. 服务未启动

a. 使⽤ ps -ef|grep java 查看程序是否在运⾏

b. 使⽤ curl http://127.0.0.1:8080/blog_login.html 看下是否有返回html⻚⾯,

如果有返回, 说明程序启动成功了, 考虑端⼝未开放

c. 如果未启动成功, 需要查看对应的⽇志, 根据原因来分析.

i. 数据库不存在

ii. 表不存在(区分⼤⼩写)

iii. 数据库密码不正确

iv. Jdk 安装版本不对, 或者未安装

v. mysql未设置密码

vi. ....

2.http端⼝未开放

检查云服务器防⽕墙/安全组是否开放相应端⼝(如8080)

(7)杀掉进程

如果我们需要重启服务器 或者重新部署 都需要先停止之前的服务

查看当前服务的进程:ps -ef|grep java 下图35443就是该服务的进程

杀掉进程:kill -9 PID

总结:

连接Linux服务器的方式有很多 xshell只是其中一种 xshell是一个客户端 而非服务器

Ubuntu软件管理工具是apt 其他的linux发行版本包管理工具不同 比如CentOS是使用yum来管理软件的

SpringBOot可以使用多个配置文件来完成不同平台的配置

在Window上可以运行成功的代码 在Linux上不一定运行成功

启动程序需要使用nohup后台运行 需要停止服务时 使用kill命令

相关推荐
明夜之约2 小时前
Linux 系统命令使用速查手册
linux·运维
夜月yeyue2 小时前
KCP 与 UDP 可靠传输
linux·网络·单片机·网络协议·udp·php
比昨天多敲两行2 小时前
Linux信号
linux·运维·服务器
sulikey3 小时前
ELF文件中的“节“与“段“,如何与虚拟地址空间中的“分页“和“分段“产生联系?
linux·服务器·elf·虚拟地址空间·分页·分段·elf文件
着迷不白3 小时前
四、Linux 文件权限+sudo权限委派+IO重定向+vim高级
linux·运维·服务器
WhoAmI3 小时前
Linux 服务器挂载 LVM 逻辑卷全流程记录与问题排查
linux·服务器
zincsweet3 小时前
进程同步与通信:System V 消息队列 + 信号量一站式解析
linux
RisunJan4 小时前
Linux命令-nohup(使进程忽略挂起(HUP)信号并在后台继续运行)
linux·运维·服务器