1.Linux的基本使用
1.1 Linux 是什么
1.2 Unix & Linux 发展历程图
1.1969−1970 年, ⻉尔实验室的 Dennis Ritchie (左) 和 Ken Tompson (右) 开发了 Unix 操作系统.
1.3 Linux 发⾏版
1.4 Linux的优势
1.5 Linux的基础命令
Linux 虽然也有图形化界⾯, 但是在 服务器 / 嵌⼊式设备上往往都是通过命令⾏的⽅式操作的.因此学习 Linux 命令就是使⽤ Linux 的重要基础
使⽤命令相⽐于使⽤图形界⾯主要有以下好处:• 节省系统资源: 运⾏图形界⾯需要让系统付出⼀些额外的资源开销. 尤其是对于配置⽐较低的嵌⼊式设备, 这⼀点⾄关重要.• 节省⽹络带宽: 如果通过⽹络访问服务器, 使⽤图形界⾯需要传输⼀帧⼀帧的图像, ⽽使⽤命令只需要传输简单的字符串.• 便于批量执⾏任务: 可以通过⼀些 "脚本" 代码 (⽐如 Linux Shell) 来批量执⾏⼀些任务, 完成⼀些简单的编程⼯作. (⽐如定时备份⽂件, 删除⽂件等).Windows 也有命令(也就是 cmd), 只是对于普通⽤⼾来说很少使⽤.
所以, 对于 Java 程序员来说, 关于 Linux 重点学习 基础命令 和 项⽬部署 即可
2. Linux 环境搭建
2.1 环境搭建⽅式
2.2 使⽤云服务器
2.3 使⽤终端软件连接到 Linux
2.3.1 终端软件
3. Linux 常⽤命令
ls
语法: ls [选项] [⽬录或⽂件]功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。常⽤选项:• -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。• -d 将⽬录象⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。 如:ls ‒d 指定⽬录• -k 以 k 字节的形式表⽰⽂件的⼤⼩。ls ‒alk 指定⽂件• -l 列出⽂件的详细信息。• -r 对⽬录反向排序。• -t 以时间排序。• -R 列出所有⼦⽬录下的⽂件。(递归)
pwd
语法: pwd功能:显⽰⽤⼾当前所在的⽬录
cd
Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件。语法: cd ⽬录名功能: 改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下.举例:# 返回上级⽬录cd ..# 进⼊⽤⼾家⽬录cd ~# 返回最近访问⽬录cd -
认识 Linux ⽬录结构
⼏个特殊的⽬录:• / 称为根⽬录• . 称为当前⽬录• .. 称为当前⽬录的上级⽬录
绝对路径 vs 相对路径形如: /usr/share/tomcat/logs/ 以根⽬录开头的, 称为绝对路径.形如: ./logs 以 . 或者 .. 开头的, 称为相对路径.使⽤ tab 键补全我们敲的所有的 Linux 命令, 都可以使⽤ tab 键来尝试补全, 加快效率.使⽤ ctrl + c 重新输⼊如果命令或者⽬录敲错了, 可以 ctrl + c 取消当前的命令.
touch
语法: touch [选项]... ⽂件...功能: touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。举例:touch test.txt
cat
语法:cat [选项] [⽂件]功能: 查看⽬标⽂件的内容常⽤选项:• -n 对输出的所有⾏编号cat test.txt
mkdir
语法:mkdir [选项] dirname...功能:在当前⽬录下创建⼀个名为 “dirname”的⽬录常⽤选项:• -p, --parents 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多级⽬录举例:# 递归建⽴多个⽬录mkdir –p test/test1
rm
语法:rm [-f-i-r-v] [dirName/dir]功能:删除⽂件或⽬录常⽤选项:• -f 即使⽂件属性为只读(即写保护),亦直接删除• -i 删除前逐⼀询问确认• -r 删除⽬录及其下所有⽂件举例:rm test.txt
千万不要运⾏ rm -rf / , 尤其是在公司的⽣产服务器上
cp
语法:cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录功能: 复制⽂件或⽬录说明: cp指令⽤于复制⽂件或⽬录,如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中。若同时指定多个⽂件或⽬录,⽽最后的⽬的地并⾮⼀个已存在的⽬录,则会出现错误信息常⽤选项:• -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在• -i 或 --interactive 覆盖⽂件之前先询问⽤⼾• -r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号链接,则⼀律视为普通⽂件处理• -R 或 --recursive递归处理,将指定⽬录下的⽂件及⼦⽬录⼀并处理举例:cp test1.txt test2.txt
mv
语法: mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录功能:1. 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。2. 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。3. 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。常⽤选项• -f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖• -i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖!举例mv test1.txt test2.txt
tail
语法: tail [必要参数] [选择参数] [⽂件]功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。选项:• -f 循环读取• -n<⾏数> 显⽰⾏数举例:tail -10 t1.txt
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 指定排除某些⽂件举例:grep "hello" Hello.java
ps
语法:ps [参数]...功能:⽤于查看当前系统上运⾏的进程选项:• a 显⽰⼀个终端的所有进程• u 以⽤⼾为主的格式来显⽰程序状况• x 显⽰所有程序, 不⽌是会话中的进程• e 显⽰所有进程, 包括系统守护进程• f 显⽰完整格式输出举例:ps aux # 显⽰系统上所有的进程ps aux | grep " 进程名 "ps aux | grep " 进程 id"
netstat
语法:netstat [参数]...功能:查看系统上的⽹络状态.选项:• -a 显⽰所有正在或不在侦听的套接字• -n 显⽰数字形式地址⽽不是去解析主机、端⼝或⽤⼾名• -p 显⽰套接字所属进程的PID和名称举例:netstat -anpnetstat -anp | grep " 进程名 "netstat -anp | grep " 端⼝号 "
管道
管道是⼀种古⽼的 "进程间通信" ⽅式. 在 Linux 指令中可以使⽤ | 作为管道标记.意思是将前⼀个指令标准输出的内容, 作为第⼆个指令的标准输⼊内容.举例:ps -ef|grep "java"ps -ef|head -10tail -f log.txt|grep "Exception"
4. 搭建 Java 部署环境
4.1 apt
4.1.1 apt常⽤命令
列出所有软件包
5.部署 Web 项⽬到 Linux
5.1 什么是部署
5.2 环境配置
数据准备
进入数据库
mysql -root -p
-- 建表SQL
create database if not exists java_blog_spring charset utf8mb4;
USE java_blog_spring;
-- 用户表
DROP TABLE IF EXISTS java_blog_spring.user;
CREATE TABLE java_blog_spring.user(
`id` INT NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR ( 128 ) NOT NULL,
`password` VARCHAR ( 128 ) NOT NULL,
`github_url` VARCHAR ( 128 ) NULL,
`delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( id ),
UNIQUE INDEX user_name_UNIQUE ( user_name ASC )) ENGINE = INNODB DEFAULT
CHARACTER
SET = utf8mb4 COMMENT = '用户表';
-- 博客表
drop table if exists java_blog_spring.blog;
CREATE TABLE java_blog_spring.blog (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(200) NULL,
`content` TEXT NULL,
`user_id` INT(11) NULL,
`delete_flag` TINYINT(4) NULL DEFAULT 0,
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY (id))
ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '博客表';
-- 新增用户信息
insert into java_blog_spring.user (user_name, password,github_url)values
("lay","107","https://www.weibo.com/u/2706896955?c=spr_qdhz_bd_360ss_weibo_mr");
insert into java_blog_spring.user (user_name, password,github_url)
values("muyierf","123456","https://gitee.com/muyierf");
insert into java_blog_spring.blog (title,content,user_id) values("第1篇博
客","lay的筑梦之旅",1);
insert into java_blog_spring.blog (title,content,user_id) values("第1篇博
客","muyierf的第一篇博客",2);
出现问题:Invalid default value for ‘create_time‘
通过搜索,发现是因为MySQL版本低
选择了删除升级版本的做法
Centos7下彻底删除Mysql, 重新安装Mysql_centos7删除mysql重新安装-CSDN博客
Centos7完全卸载MySQL & 安装 & 启动_centos7卸载mysql重新安装-CSDN博客
程序配置⽂件修改
多平台⽂件配置
application-prod.yml
在主配置⽂件 application.yml 中指定配置⽂件, 并删除数据库相关配置
5.3 构建项⽬并打包
5.3 上传Jar包到服务器, 并运⾏
1. 上传Jar包
java -jar demo-0.0.1-SNAPSHOT.jar
端口被占有了
看服务器端口有没有开放
1.先看本机的应用是否启动成功
curl http://127.0.0.1:9090/blog_login.html
开放的话就可以获取页面内容
有该页面就启动成功!!!
(排除服务已启动)
2.端口号的的问题
阿里云服务器开放端口的正确方式(超详细图文教程)_阿里云开放端口-CSDN博客
无法通过公网访问阿里云服务器下的tomcat部署的项目_为什么通过公网ip访问不了tomcat-CSDN博客 ps -ef|grep java 查看进程
kill -9杀死进程
部署成功!!!
重新测试,发现css加载不出来,重新clean解决问题。
经过测试,发现添加博客接口有问题,执行一次添加一篇博客操作,却添加了两条信息。
经检查接口/add有错误,执行了两次语句