admin管理员组文章数量:1651817
JAVA菜鸟从零开始----Linux操作篇
课程目标
1:了解linux操作系统
2:熟练常用的Linux命令
3:使用linux安装部署软件
4:前后端分离的项目部署到Linux
5:熟练shell编程
Linux诞生于1991年,由芬兰大学生李纳斯(Linus)和后来陆陆续续加入的众多爱好者共同开发完成
一. linux操作系统的基本介绍
1.1 linux操作系统特点
1. 免费开源。Linux是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制。 2. 模块化程度高。Linux的内核设计分成进程管理、内存管理、进程间通信、虚拟文件系统、网络5部分,其采用的模块机制使得用户可以根据实际需要,在内核中插入或移走模块,这使得内核可以被高度的剪裁定制,以方便在不同的场景下使用。 3. 安全稳定。核心防火墙组件性能高、配置简单、比window稳定宕机概率很低 4. 多用户,多任务。多用户是指系统资源可以同时被不同的用户使用,每个用户对自己的资源有特定的权限,互不影响。多任务是现代化计算机的主要特点,指的是计算机能同时运行多个程序,且程序之间彼此独立,Linux内核负责调度每个进程,使之平等地访问处理器。由于CPU处理速度极快,从用户的角度来看所有的进程好像在并行运行。
1.2 linux发行版本
基于Linux内核的发行版
版本名称 | 网 址 | 特 点 | 软件包管理器 |
---|---|---|---|
Debian | www.debian | 开放的开发模式,且易于进行软件包升级 | apt |
Ubuntu | www.ubuntu | Ubuntu 基于知名的 Debian Linux 发展而来。界面友好,容易上手,对硬件的支持非常全面,是目前最适合做桌面系统的 Linux 发行版本,而且 Ubuntu 的所有发行版本都免费提供。 | apt |
Redhat | www.redhat | 拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新 | yum |
CentOS | www.centos | CentOS 就是将商业的 Linux 操作系统 Redhat进行源代码再编译后分发,并在 Redhat的基础上修正了不少已知的漏洞 | yum |
SUSE | www.suse | 专业的操作系统,易用的 YaST 软件包管理系统 | YaST(rpm) |
Mandriva | www.mandriva | 操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更 | rpm |
KNOPPIX | www.knoppix | 可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用 | apt |
Gentoo | www.gentoo | 高度的可定制性,使用手册完整 | portage |
1.3 Linux 发行版本的选择
1:如果你需要的是一个【服务器系统】,而且已经厌烦了各种 Linux 的配置,只是想要一个比较稳定的服务器系统,那么建议你选择 CentOS 或 RHEL。
2:如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大价钱购买商业软件,不想自己定制,也不想在系统上浪费太多时间,则可以选择 Ubuntu。
3:如果你想深入摸索一下 Linux 各个方面的知识,而且还想非常灵活地定制自己的 Linux 系统,那就选择 Gentoo 吧,尽情享受 Gentoo 带来的自由快感。
1.4Linux操作系统的安装
1.VMware安装
VMWare虚拟机软件是一个"虚拟PC"软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与"多启动"系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。
2.虚拟机安装
3.操作系统安装
4.设置静态ip
上网模式,统一为:NAT
虚拟机默认采用DHCP,IP就会经常变化,导致我们连接虚拟机的服务(mysql)连不上
设置命令:nmtui
修改后,需要重启网络服务
重启命令:systemctl restart network
查看 ip addr
测试
在宿主机去ping虚拟机
在虚拟机ping 百度
5 shell终端工具
1.5. Linux的目录结构
linux的目录结构与windows有很大的区别,windows有盘符的概念,例如C盘,D盘等。而Linux的目录结构类似于一棵倒着的树,最顶层的就是根目录
目录名 | 作用 |
---|---|
/bin | 存放最经常使用的命令 |
/boot | 存放启动Linux操作系统的时候的一些核心文件 |
/etc | 存放系统管理和配置文件 |
/dev | 用于存放设备文件 |
/home | 存放的用户的目录,每个用户都有一个属于自己的目录 |
/opt | 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。 |
/usr | 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录 |
/var | 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。 |
二、Linux系统的命令
设置ip
ifconfig 查看ip
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33 使用vi 来编辑该
将
ONBOOT=no
改为ONBOOT=yes
systemctl restart network
ifconfig
0.常用命令
- ip addr // 查看ip - ifconfig // 查看ip - which命令 // 搜索命令所在目录及别名信息 范例: $which ls - pwd // 查询当前目录位置 - tap // 自动补全 - ctrl+L // 清屏 - ctrl+c // 退出 - man 命令 // 查看提示,字母含义 - systemctl stop firewalld // 关闭防火墙 - yum install vim* // 安装vim,安装选择y, -y 表示所有选择都是y - du -h -d 1 // -h表示人类可读,-d 1 深度为1 查看深度为1的文件夹大小 - ll -h // 查看文件大小 - nmtui // 设置静态IP - systemctl restart network //重启网络命令 - ip addr // 查看ip java -jar springboot-vue-1.0-SNAPSHOT.jar --server.port=8282 //修改端口
1. 目录的切换(change directory)
- cd // 切换到家目录 - cd /test // 绝对目录,切换到test目录下 - cd test // 相对路径,在当前目录下寻找test - cd - // 切回到上一此编辑的目录。 - cd ~ // 切回到当前用户的家目录。 - cd .. // 切到当前目录的上一级目录。 - cd / // 切换到顶级目录(cd+空格)
2. 文件内容的查看
- cat // 查看文件的全部内容 - head // 默认查看文件内容的前10行 - tail // 默认查看文件内容的后10行 - more // 分页查看文件内容,使用空格键向下翻页,但是只能向下翻页。 - less // 分页查看文件内容,使用空格键向下翻页,也可使用PgUp和PgDown实现向上、向下翻页。
查看文件内容的命令:
vi 文件名 查看文件内容
vim 文件名 查看内容增强版(带高亮效果)
cat 文件名 查看文件内容(展示所有文件内容)
more 文件名 翻页(只能往下)
less 文件名 翻页(可以向上向下)
head -5 文件名 查看头5行内容(包含空行,默认10行)
tail -5 文件名 查看后5行内容
3. 文件夹内容的查看
- ls(list): // 查看文件夹中的内容 - ls -a: // 查看文件夹中的内容,包括隐藏文件 - ls -l(可以简写成ll) // 查看文件夹中的内容的详细信息 - ll -h // -h表示按人类友好方式查看
查看到文件夹的详细信息后,会看到有七栏,那么我们分别来解释一下是什么意思:
第一栏:有10个符号,第一个符号表示表示文件的属性,-表示是文件,d是目录,l是连接文件;后面9为分别分三组,每组均为rwx,r是可读,w是可写,x是可执行,第一组表示当前的用户的权限,第二组是用户组的权限;第三组是其他用户的权限。
第二栏:是文件或者文件夹的个数,如果说文件就为1,如果目录的情况下就是该目录下文件夹的个数,其中包括当前目录和上级目录。
第三栏:当前文件或者文件夹所属的用户。
第四栏:当前文件或者文件夹所属的用户组。
第五栏:当前文件或者文件夹的大小,单位为KB。
第六栏:创建的时间。
第七栏:文件或者文件夹或者链接的名字。
4. 相对路径、绝对路径
./ //表示当前目录 ../ //表示上级目录 cd home //切换到home目录下,绝对路径 cd /home //切换到当前目录的home文件下,相对路径
相对路径所选择的参照物就是我们当前执行操作所处的目录;
绝对路径所选择的顶级目录就是我们的根(/)目录。
5. 文件夹、文件的创建
- touch a.txt b.txt // 创建文件a 和 文件b - mkdir test // 创建一个名为test的文件夹。 - mkdir -p /a/b // 创建目录a, 然后在目录a下创建目录b. - vm a.txt //创建并进入文件a.txt - echo "hello">>c.txt //创建并添加内容hello到 c.txt
6. 文件、文件夹的删除
- rm test // 删除名为test的文件或者空的文件夹,会出现询问是否要删除。 - rm -f test // 删除名为test的文件或者空的文件夹,不会出现提示。 - rm -rf test // 删除名为test的文件或者文件夹,-r是recursion,递归的意思。
7. 文件或者文件夹的拷贝
- cp ./test /data // 将当前目录下的test文件拷贝到 /data目录下。 - cp /test/a.txt /datas // 将/test目录下的a.txt文件拷贝到/datas目录下。 - cp -r /test /datas: // 将/test目录拷贝到/datas目录下,-r是recursion,递归的意思,无论/test文件夹是否为空。 - cp -r /test/* /datas/: // 将/test目录下的所有内容拷贝到/datas目录下。
8.文件、文件夹的移动
- mv test /datas // 将当前目录下的test文件或者文件夹移动到/datas目录下。 - mv /test/* /datas // 将/test目录下的所有内容移动到/datas目录下。
9.文件、文件夹的重命令
- mv test test1 // 将test目录或者文件重命名为test1。
10.vi、vim的使用
vi为linux操作系统自带的文本编辑器,其功能非常的强大,我们必须要掌握其使用,为我们修改各种配置或者编写脚本文件奠定基础。其快捷键命令如下:
vi 或 vim // 进入文件,编辑模式 i // 光标所在前插入,输入模式 I // 光标所在行首插入,输入模式 a // 光标所在后插入,输入模式 A // 光标所在行尾插入,输入模式 o // 进入到当前行的下一行进行编辑,输入模式 O // 进入到当前行的上一行进行编辑,输入模式 Esc // 进入命令行模式 : // 进入底线命令模式 :wq // 保存并退出
命令 | 含义 | 命令的模式 |
---|---|---|
Esc (重点) | 从编辑模式进入到命令行模式 | 编辑模式 |
i (重点) | 在当前字符前插入 | 编辑模式 |
a | 在当前字符后插入 | 编辑模式 |
A | 在当前行末进行插入 | 编辑模式 |
I | 在当前开头进行插入 | 编辑模式 |
o (重点) | 进入到当前行的下一行进行编辑 | 编辑模式 |
O (重点) | 进入到当前行的上一行进行编辑 | 编辑模式 |
yy (重点) | 复制一行 | 编辑模式 |
p (重点) | 粘贴yy复制的一行内容 | 编辑模式 |
dd (重点) | 删除一行 | 编辑模式 |
h (重点) | 向左移动光标 | 编辑模式 |
l (重点) | 向右移动光标 | 编辑模式 |
j (重点) | 光标向上移动 | 编辑模式 |
k (重点) | 光标向下移动 | 编辑模式 |
G | 光标移动文件的末尾 | 命令行模式 |
gg | 光标移动到文件的开头 | 命令行模式 |
q | 退出文件 | 命令行模式 |
:wq (重点) | 保存并退出 | 命令行模式 |
:set nu! (重点) | 设置或取消行号 | 命令行模式 |
u (重点) | 撤销上一次操作 | 命令行模式 |
w | 光标跳到下一个单词的首字母 | 命令行模式 |
b | 光标跳到上一个单词的首字母 | 命令行模式 |
$ | 光标跳到该行的末尾 | 命令行模式 |
0 | 光标跳到该行的开头 | 命令行模式 |
:/public | 查找出public这个单词 | 命令行模式 |
n | 跳转到下一个查找到内容 | 命令行模式 |
N | 查找到上一个查找到的内容 | 命令行模式 |
:/public\c | 大小写不敏感查找 | 命令行模式 |
:%s/abc/QQ | 将当前行的第一个abc换成QQ | 命令行模式 |
:%s/abc/QQ/g | 将整行所有的abc替换为QQ | 命令行模式 |
:%s/abc/QQ/gi | 将全文的所有的abc忽略大小写换成qq, | 命令行模式 |
:5,12s/abc/QQ/gi | 将第5到12行所有的abc忽略大小写换成QQ | 命令行模式 |
ctrl + j | 在编辑模式实现换行操作 | 编辑模式 |
数字 + G | 直接跳转到对应的行 | 命令行模式 |
:set nu 显示行号 底线模式 :set nonu 不显示行号 底线模式 :wq 保持退出 底线模式 :q! 强制退出 底线模式 /内容 //查找内容 底线模式 n 查找下一个 底线模式 :%s/jack/rose/g 全局查找替换,jack 替换成rose 底线模式
11. 内容过滤
- grep public 文件名 // 过滤出该文件中所有带有public的行 - grep -v public 文件名 // 过滤出该文件中所有不带有public的行 - tail MovieController.java | head -5 // 管道操作 - ps -ef | grep tomcat // 查看包含tomcat的进程的详细信息 - ps -aux | grep java // 查看系统中包含java的进程 - ll | grep sys // 查询详细内容中包含sys的
12.管道操作(面试)
管道操作就是将上一步操作的结果作为下一部操作的数据源,使用 “|” 符号。
例如:
ll | grep abc: 查找出当前文件夹下名字含有abc的文件夹或者文件。
练习:1. 查看/etc/passwd文件的第5到第8行的内容。(head -8 passwod | tail -4)
2.查看/etc/passwd文件的倒数第10行到倒数第3行的内容。
13.进程管理
1.查看进程
- ps -ef // 查看当前操作系统中所有正在运行的进程的详细信息,我们需要关注的是“进程号” - ps -ef | grep tomcat // 查看tomcat这个进程的信息。 ps -ef|grep nginx |grep -v grep|wc -l // wc -l 统计行数 ps -ef|grep mysql|grep -v grep |awk '{print $2}' // 查看某个进程的进程id(pid) netstat -nultp // 查看已经使用的端口情况 netstat -anp |grep 3306 // 查看3306端口的使用情况 yum install -y lsof //安装lsof命令 lsof -i:3306 //查看3306端口的使用情况 jps // 查看java进程
2.关闭进程(杀死进程)
在关闭进程之前我们需要查看需要杀死的进程的pid,然后通过kill命令关闭进程。
通过kill -l 命令查看可以使用的杀死进程的方式
- kill -kill 5678 或者 kill -9 5678 // 杀死进程号为5678的进程。 为什么可以使用 -kill 或者 -9 呢?我们通过kill -l 可以看到杀死进程的方式有64种,所有的方式都形如SIG***,我们将SIG去掉后的单词,就可以作为kill后的参数;又或者我们直接使用该命令对应的变好, 例如 SIGKILL 对应的编号为9,所以我们也可以使用 -9 作为参数。
14.服务管理
- systemctl // 查看所有的服务 - systemctl status 服务名 // 查看服务状态 - systemctl stop 服务名 // 关闭服务 - systemctl restart 服务名 // 重启服务 - systemctl stop firewalld # 关闭防火墙命令 - top # 查看系统资源消耗
15.软件的解压与压缩
在linux操作系统中我们最常见的两种文件是tar.gz和zip文件,那么针对这两种文件我们有不同的压缩和解压缩的方式。
- tar.gz文件的解压、压缩,在实际工作中参数v不需要加,可能会导致机器卡死:
- tar -zxvf jdk-8u60-linux-x64.tar.gz // 将jdk文件解压到当前目录。 - tar -zxvf jdk-8u60-linux-x64.tar.gz -C /test // 将jdk解压到 /test目录下。 - tar -zcvf hello.tar.gz jdk1.8.0_60 // 将 jdk文件夹压缩成hello.tar.gz文件。
- zip文件的压缩与解压,在使用zip解压缩文件需要安装zip软件:
- unzip apache-tomcat-8.5.2-src.zip // 将apache-tomcat文件解压到的当前目录 - unzip apache-tomcat-8.5.2-src.zip -d /test // 将apache-tomcat文件解压到 /test目录下 - zip -r apache.zip apache-tomcat-8.5.2-src // 将apache-tomcat文件压缩成apache.zip文件 - yum install -y unzip 压缩包 # zip文件 安装并解压
注意:在使用unzip或者zip命令的时候,会报错,原因是因为没有zip的这个软件,需要使用yum install zip这个命令进行安装。
16.用户、用户组的相关命令
1.用户相关操作
- useradd rose //创建用户rose - id rose //查看rose用户信息 - passwd rose //给rose用户添加密码 /修改密码 - su rose //切换到rose用户 //普通用户切换root用户需要密码 - userdel rose -r //删除rose用户,并且删除其家目录 - exit //退出用户(先退出,再删除用户) - cat /etc/passwd // 查看系统中拥有多少用户。 - visudo #编辑权限文件 - /wheel #查找 rose ALL=(root) /user/bin/rm #给rose授权root的删除权限 - sudo -l #查看用户有哪些权限 - sudo rm -rf a.txt #使用root授予的权限删除a.txt
2.用户组相关操作
- groupadd test // 添加名为test的用户组 - cat /etc/group // 查看所有的用户组 - groupdel test // 删除test用户组 - useradd -m test -g test // 创建一个test用户,并指定其用户组为test - usermod test -g abc // 将test用户的组改为abc
17.文件权限的管理
前面我们已经讲过,对于一个文件或者文件夹,我们用户和用户组可以有rwx的权限。那么我们可以通过chmod命令修改文件的读写和执行权限。
r(4),w(2),x(1)
##字母授权: - chmod u+w profile // 将profile文件所属的用户加入写权限。 ##数字授权: - chmod 775 profile // 将profile文件所属的文件拥有rwx权限,用户组拥有rwx权限,其他用户拥有r-x权限。 ##递归授权: - chown -R test apache-tomcat-8.5.59 // 将 `apache-tomcat-8.5.59` 整个文件夹按照递归的方式,将所有权授予 test 用户。
对于
文件夹
来说:
- 可读权限®,表示是否可以查看文件夹下的内容;
- 可写权限(w),表示是否能在文件夹下创建文件或者文件夹,以及删除文件;
- 可执行权限(x),表示是否能够进入到文件夹下 cd ;
对于
文件
来说:
- 对于可读,表示是否能够查看文件的内容;
- 对于可写,表示是否能够修改文件的内容;
- 对于可执行权限,表示能不能执行,指的是是否可以执行一个shell 脚本,并不是表示能不能删除。
18.网络指令
虚拟机克隆
[root@localhost ~]# ssh root@192.168.25.103 //切换
hostnamectl set-hostname 主机名 // 修改主机名
hostname // 查看主机名
vi /etc/hosts // 主机名映射
systemctl restart network // 重启网络服务生效
19. 其他命令
- du -h // 查看文件夹的大小,会以树状的结构展示。 - du -h --max-depth=1 // 只查看一层文件夹的大小(h是human,是以人类可读的方式查看) - ll -h // 查看文件的大小。 - lvmdiskscan // 检测各种类型的存储设备。 - pwd // 查看当前操作所在的绝对路径。 - su - root // 切换到root用户。 - echo "hello world" > test.txt // 将“hello world”写入到test.txt文件内,会覆盖文件中现有的内容 - echo "How are you?" >> test.txt // 将“How are you?”追加到test.txt文件的末尾。 - netstat -tnpl // 查看端口。 - systemctl stauts firewalld // 查看防火墙的状态。 - systemctl disable firewalld // 开机禁用防火墙。 - find / -name 'mysql' // 递归查找/目录下包含了mysql的文件或者文件夹。 - find / -name '\*mysql\*' // 递归查找/目录下名字中包含了mysql的文件或者文件夹。 - top // 查看系统的资源消耗
三、Linux系统软件的安装部署
1.Linux软件安装的方式
- 源码包-----编译----->安装
nginx、redis
- 二进制包(RPM包)-------->通过(rpm、yum)直接安装
yum install -y vim*(系统级别的服务)
vim
jdk
mysql
- tar.gz解压安装----->解压即可用
tomcat
2.RPM包安装命令
-
rpm本地安装命令(不用)
rpm安装的缺点:rpm包的依赖性很强
- rpm -q 包名 // 查询包是否安装 - rpm -qa // 查询所有已经安装的RPM包 - rpm -ivh mysql57-community-release-el7-11.noarch.rpm // 安装 - rpm -e 包名 // 卸载
- yum
在线
安装命令(常用)
前提:linux服务器能够连接外网 - yum list // 列出所有可安裝的软件清单 - yum list |grep vim // 从清单中找vim包 - yum search gcc // 直接查找gcc包 - yum install gcc -y // 安装
3.安装mysql
第一步,安装wget:
yum install -y wget #安装wget
第二步,安装mysql专有yum源:
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
// yum localinstall -y mysql57-community-release-el7-11.noarch.rpm
//本地安装 -y 表示一直yes
yum install -y mysql57-community-release-el7-11.noarch.rpm
第三步,查看可用版本
//导入秘钥(略) rpm --import https://repo.mysql/RPM-GPG-KEY-mysql-2022
yum repolist all | grep mysql //查看可用版本
第四步,安装mysql:
// yum install -y mysql-community-server
yum install -y mysql-community-server --nogpgcheck
第五步,启动mysql:
systemctl start mysqld #启动mysql
systemctl status mysqld #查看mysql状态
systemctl restart mysqld #重启mysql
systemctl stop mysqld #停止mysql服务
systemctl enable mysqld #开机自启动
systemctl disable mysqld #开机不启动
第六步,获取登录密码
grep 'temporary password' /var/log/mysqld.log //查看临时密码,查找
第七步,进入mysql:
mysql -uroot -p
:输入密码
第八步,修改密码:
SET PASSWORD = PASSWORD('Admin123!');
eixt; //退出
第九步,连接数据库
排查
1:宿主机ping服务器
2:mysql服务是否启动
3:是否关闭防火墙
systemctl status firewalld //禁用防火墙,永久关闭
// systemctl stop firewalld //关闭防火墙
systemctl disable firewalld //查看防火墙状态
4.设置远程登录(授权)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Admin123!' WITH GRANT OPTION;
flush privileges; //生效
mysql设置
mysql的配置文件真的很多,有的还很蛋疼。比如默认的字符集是拉丁字符集,每次创建数据库的时候要设置字符集;默认还不支持group by语句,默认的时区也不是我们现在的北京时间(东八区),会导致我们的时间差了13个点。针对以上说几个简要的配置,更多的配置在以后遇到了再加上,或者留言吧!
先输入exit退出数据库客户端。
打开配置文件,yum安装的默认在/etc文件夹下:
vim /etc/myf
#在[mysqld]下面添加,不需要分号字符集:注意是utf8而不是utf-8!
character-set-server=utf8
#这时候使用show variables like 'char%';就可以查看到字符集都是utf8了
#sql支持group by语句
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#设置时区为东八区
default-time_zone = '+8:00'
关闭防火墙:
临时关闭: systemctl stop firewalld
禁止开机启动 :systemctl disable firewalld
4.安装JDL
A.上传
B.解压:tar -zxvf 安装包名字 -C /解压位置
C.配置环境变量: vi /etc/profile
export JAVA_HOME =路径
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
D.source /etc/profile
E. java javac
注意:安装路径不能含空格
5.安装tomcat
注意:tomcat需要基于jdk安装
A.上传
B.解压
C.进入bin目录,启动 ./startup.sh
D. cd …/logs tail -10f catalina. 查看日志最后10行
6.安装nginx
第一步,一些准备工作
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
第二步,下载解压,下载地址:http://nginx/en/download.html,然后上传到linux上,然后解压
第三步,进入到解压目录,开始安装
./configure
make
make install
第四步,查看nginx安装地址
whereis nginx
第五步,进入到sbin目录下,启动 nginx
./nginx
7.安装编译工具及库文件
四、前后端分离的项目部署到Linux
1. 服务端
先根据实际的情况修改响应的配置:
- 数据库的地址,用户名、密码等信息;
- jwt的过期日期
将spring-boot项目打包,打包的方式,执行maven命令:
package
,会在target下生产一个jar包,将jar包上传到 Linux,然后启动springboot项目,启动的命令如下:
java -jar mall-manager-backend.jar --server.port=8080
2 .前端部署
第一步,安装nginx
第二步,修改响应的配置信息,例如修改
@/utils/request.js
文件中服务端的请求地址,以及请求token过期的跳转地址。
第二步,前端项目进行打包,打包的命令参考
package.json
文件,命令如下:
npm run build:prod
执行完如上命令之后,会在项目下产生一个 dist 目录。
第三步,将dist目录下的内容上传到 nginx 安装目录下的
html
目录下即可,启动nginx即可访问。
项目部署
step1:springboot工程打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
step2:公钥私钥文件无法加载的问题
private static byte[] readBytes3(InputStream in) throws IOException {
BufferedInputStream bufin = new BufferedInputStream(in);
int buffSize = 1024;
ByteArrayOutputStream out = new ByteArrayOutputStream(buffSize);
// System.out.println("Available bytes:" + in.available());
byte[] temp = new byte[buffSize];
int size = 0;
while ((size = bufin.read(temp)) != -1) {
out.write(temp, 0, size);
}
bufin.close();
byte[] content = out.toByteArray();
return content;
}
加载私钥
加载公钥:
修改数据库信息
运行应用程序
#守护进程
nohup java -jar fengmipuzi-0.0.1-SNAPSHOT.jar &
#查看日志
tail -10f no
五、shell编程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
Shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
5.1:入门shell
需求:在/export/data目录创建指定文件test.dat,在文件中追加文本信息(hello)
#!/bin/bash
#这是一个入门shell程序
#创建目录
mkdir /export/data -p
#在data目录下创建文件
cd /export/data
echo hello >> hello.dat
./hello.dat // 执行
5.2:shell自定义变量
定义变量:name=jack
name=“zhang san”
引用变量:$name
5.3:shell传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
#!/bin/bash
# author:菜鸟教程
# url:www.runoob
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数:$#"
5.4:算数运算
#!/bin/bash
# author:菜鸟教程
# url:www.runoob
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
5.5:综合案例:
编写一个shell脚本自动化管理java服务进程
需求:
传入参数为start时,先检测java是否启动,如果没有启动那么启动,否则打印java进程已经启动
传入参数为restart时,先关闭java进程,再启动java进程
传入stop时,关闭java进程
./watch.sh start
APP_HOME=/export/soft/
APP_NAME=fengmipuzi-0.0.1-SNAPSHOT.jar
PID=`ps -ef|grep $APP_NAME |grep -v grep|awk '{print $2}'`
#刷新环境变量(必须)
source /etc/profile
case $1 in
start)
if [ $PID ]
then
echo "java进程已经启动无需再启动"
else
echo "启动start ....."
cd $APP_HOME
nohup java -jar $APP_NAME &
echo "启动finished ....."
fi
;;
restart)
echo '开始重启.....'
if [ $PID ]
then
kill -9 $PID
echo "kill success"
cd $APP_HOME
nohup java -jar $APP_NAME &
else
cd $APP_HOME
nohup java -jar $APP_NAME &
fi
echo '重启finished.....'
;;
stop)
echo '开始stop....'
if [ $PID ]
then
kill -9 $PID
else
echo "进程已经关闭"
fi
echo "stop finished"
;;
*) echo '必须传参'
;;
esac
linux定时任务
语法:
时间周期 (crontab表达式) sh shell
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
crontab –e //编写一条定时任务 crontab -l //列出当前用户定时任务 crontab -r //删除当前用户定时任务
#案例一:每分钟往a.txt文件追加文本信息
* * * * * echo 'hello jack' >> /a.txt
* * * * * sh /export/shell/tomcat.sh start
tail -10f a.txt
六、面试题
1.基本命令
top 快速查看哪些进程比较消耗CPU和内存资源 free -m 查看操作系统剩余内存空间 df -h 查看磁盘利用率 ps -ef 查看进程 tail -f 查看滚动日志
2.有没有在Linux上进行生产排查
1:哪个进程的哪个线程特别消耗cpu资源
2:哪个进程哪个对象特别占用内存资源
Arthas
文档:https://arthas.aliyun/doc/
1.1:Arthas功能
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
怎样直接从JVM内查找某个类的实例?
1.2:Arthas安装
在线安装
curl -O https://arthas.aliyun/arthas-boot.jar
java -jar arthas-boot.jar
离线安装
最新版本,点击下载:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcHoJwW2-1663847403497)(https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square)]
解压后,在文件夹里有arthas-boot.jar
,直接用java -jar
的方式启动:
java -jar arthas-boot.jar
通过浏览器操作
3.3:命令简介
3.4:CPU排查
排查哪个线程最消耗CPU资源
先通过top命令找到最耗CPU的进程id
再通过arthas 监测该进程
通过thread -n 1 查找到最耗CPU的线程
3.5:排查内存消耗
分析堆内存为什么占用这么高
通过top找到消耗内存的进程
开启arthas
heapdump --live /export/soft/dump.hprof
jhat dump.hprof
通过ip+端口访问
版权声明:本文标题:JAVA菜鸟从零开始----Linux操作篇 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729567255a1206638.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论