注意:本文章不适合C++学习者(知识点远远不够),只适合Java学习者,学习简单的Linux命令
1.Linux的背景知识
1.1Linux是什么
Linux是一个操作系统,和Windows是“并列”的关系。经过多年的发展,Linux称为了世界第一大操作系统。Linux系统被广泛应用于服务器领域、嵌入式设备,还是有移动端。
有人可能表示,Linux都是世界第一大操作系统,我怎么没有听说过呢?其实你听说过,安卓系统本质上就是Linux系统
1.2Linux发行版
Linux严格意义上只是一个“操作系统的内核”
一个完整的操作系统 = 操作系统内核 + 配套的应用程序
由于Linux是一个完全开源免费的内核,因此有些公司/开源组织基于Linux内核,提供了不同的配套程序,也就构成了不同的“发行版”
企业中主要使用的发行版本有RedHat(红帽)(收费),我们要使用的是CentOS(免费)(红帽上方)。
CentOS和RedHat的关系
CentOS和RedHat没有什么区别,却别就是在于logo不同。CentOS因为属于免费的,不会提供任何的商业服务。RedHat因为是收费,会提供相应的商业服务,在服务器上可以上他们的技术人员定位软件的问题所在。因为比较便宜,所以很多公司使用。
1.3关于LInux我们学习什么
1)基础命令
Linux虽然有图形化界面,但是在 服务器/嵌入式设备上往往是通过命令的方式操作的。因此学习Linux命令就是使用Linux的重要基础。
使用命令相比于使用图形化界面有什么好处?
- 节省系统资源:运行图形界面需要让系统付出一些额外的开销,如果对于嵌入式设备,可能没有这个条件。
- 节省网络宽带:如果通过网络访问服务器,图形化界面需要一帧一帧的传输图像,而命令只需要传输字符串。
- 便于批量执行任务:可以通过一些“脚本”代码来批量完成一些任务,完成一些简单的工作。
2)系统编程 & 网络编程
Linux自身提供了一些API,供程序员调用来完成一些更加复杂的编程任务(比如文件操作,多线程编程,socket编程等)
但是由于Java跨平台的特性,这些功能已经被Java自身封装好了(流对象,Thread对象,Socket对象)
3)JavaWeb项目
我们自己写web程序,要想让其他用户能够访问,就需要发布到服务器上。这也是我们接下来学习的重点。
2.Linux环境搭建
2.1环境搭建方式
我们使用云服务器,可以在 阿里云、腾讯云、华为云 等服务器厂商购买一个云服务器。
如阿里云等都为在校大学生提供了优惠,我们只需注册和认证学生省份,基本是10元每月,还是比较便宜的。在选择的时候我们配置最低的服务器就行。
使用云服务器我们不仅环境搭建简单,可以避免反复的折腾,同时还有一个好处,部署在云服务器上可以被外网访问到。
2.2使用云服务器
我们以腾讯云为例(如果购买过程中,有什么操作不了的,我们可以联系腾讯云客服小姐姐)
- 进入官方网站学生云服务器_学生云主机_学生云数据库_云+校园特惠套餐 - 腾讯云 (tencent.com)(或者直接搜索腾讯云校园计划)
- 登录网站,并进行学生验证
- 选择并购买
- 并选择镜像(CentOS 7.6),并购买
- 购买后进入控制台,点击进去就能看到服务器的IP地址
- 设置root密码:我们勾选服务后,我们要重置密码,root密码建议设置的复杂一些,否则会被黑客入侵
2.3使用终端软件链接到Linux
2.3.1什么是终端软件
终端软件是一类工具,可以和远程的主机简历网络连接,从而对主机进行一些操作。
常见的终端软件有:
- Xshell
- Putty
- MobaXterm
- ....
我们使用的是XShell
2.3.2下载安装XShell
安装地址:XSHELL - NetSarang Website
- 点击下载
- 下拉,获取免费授权页面
- 点击下载即可
2.3.3使用XShell登录主机
在XShell终端下输入
ssh 服务器外网ip地址
关于复制粘贴问题
复制:ctrl + insert
粘贴:shift + insert
ctrl + c / v 是在win环境下的操作,上面的操作在win环境也是成立的
3.Linux常用命令
ls
语法:ls[选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息
常用选项:
- -a 列出目录下的所有文件,包含以.开头的隐藏文件
- -d 只列出目录(不递归列出目录内的文件)。如ls -d 指定目录
- -k 以k字节的形式表示文件的大小。 ls - alk 指定文件
- -l 列出文件的详细信息
- -r 对目录反向排序
- -t 以时间排序
- -R 列出所有子目录下的文件。(递归)
pwd
语法:pwd
功能:显示用户当前所在的目录,用户防止用户迷路,忘记自己所在的位置
cd
Linux系统中,磁盘上的文件和目录被组成一颗目录树,每个节点都是目录或文件
语法:cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下。
举例:
cd .. :返回上级目录
cd ~ :返回根目录
cd - :返回最近访问目录
相对路径VS绝对路径
形如:/usr/share/tomcat/logs/以根目录开头的的,称为绝对路径
形如:./logs以.或者..开头的,称为相对路径
使用tab补全
我们敲的所有的Linux命令,都可以使用tab键来尝试补全,加快效率
使用ctrl + c重新输入
如果命令或目录敲错了,可以ctrl + c取消当前的命令
touch
语法:touch [选项]... 文件 ...
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
举例:
touch text.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 -rf test (注意此代码谨慎使用)
注意事项:
千万不要运行 rm -rf /, 尤其是在公司的生产服务器上,这将不仅仅会导致大量的数据丢失,也会导致系统无法使用
cp
语法:cp [选项] 源文件或者目录 目标文件或目录
功能:复制文件或者目录
说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则他会把前面指定的的所有文件或目录复制到此目录中。如果同时指定多个文件或目录,而最后的目的地并非一个已经存在的目录,则会出现错误信息
常用选项:
- -f 或 --force 强行复制文件或目录,不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r 递归处理,将指定目录下的文件和子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
举例:
cp test1.txt texs2.txt 复制test.txt当前目录下面,并更改名字成test2.txt
mv
语法:mv [选项]源文件或目录 目标文件或目录
功能:
- 视mv命令中第二个阐述类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其转移到一个新的目录中
- 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名
- 当第二个参数是已经存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移动到目标目录中。
选项:
- -f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件已经存在时,就会询问是否覆盖
举例:
mv test1.txt text2.txt
man
Linux的命令有很多的参数,我们不可能全部记得,我们客户以通过查看联机手册获取帮助
语法:man [选项] 命令
常用选项:
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- man man 能看到man手册中的若干各章节及其含义
举例:
man ls
vim
vim时一个知名的文本编辑器,使用vim可以对文本进行编辑
vim 就相当于Windows的记事本,之不够功能比记事本强大一些
1)创建/打开文件
vim [文件名]
2)进入插入模式
vim打开文件后默认是普通模式。普通模式下键盘的按键表示一些特殊功能的快捷键(例如按下 j 并不是输入字母'j',而是表示光标往下移动一样。需要进入插入模式才能进行文本编辑
使用 i 键可以进入到插入模式。(左下角会提示 --INSERT-- )然后就可以像记事本一样正常编辑了
3)保存
在插入模式下不能保存文件,需要先回到普通模式。按下Esc就可以回到普通模式
在普通模式下输入 “:w",再按下回车,就可以保存文件了
4)退出
在插入模式下,不能退出,需要先回到普通模式
在普通模式下输入 “:q:,再按下回车,就可以退出了
也可以直接使用“:wq"同时执行保存和退出
关于Vim的用法,还有很多,感兴趣的可以参考vimtutor(直接再终端输入vimtutor即可进入官方教程)和<<Vim实用技巧>>
grep
语法:grep [参数]... [文件]...
功能:用于查找文件中是否包含指定字符串,并显示对应的行
选项:
- -n<行数> 显示的行数
- -w 全字匹配,要求整个单词都全部相同才能匹配出来,而不仅仅是一个单词的一部分
- -r 递归查找,可以搜索多级目录下的所有文件
- --color 高亮查找到的结果
- --include 指定查找某些文件
- --exclude 指定排除某些文件
举例:
grep "hello" hello.java
ps
语法:ps [参数]
功能:用于查看当前系统上运行的程序
选项:
- a显示一个终端的所有进程
- u以用户为主的格式来显示进程状况
- x显示所有进程,不以终端机来区分
举例:
ps aux # 显示系统上的所有进程
ps aux | grep "进程名"
ps aux | grep "进程id"
netstat
语法:netstat [参数]...
功能:查看系统上的网络状态
3.搭建Java部署环境
3.1yum
3.1.1认识yum
yum(Yellow dog Updater,Modified)是Linux下非常常用的一种包管理器,主要应用在Fedora,RedHat,CentOS等发行版上
包管理工具就好比“应用商店”,我们可以在应用商店上下载一些app
yum起到的功能和Maven的依赖管理功能类似,使用Maven能帮我们方便的安装一些第三方jar包,而yum方便我们安装第三方程序
查看软件包列表
yum list | grep [软件包关键字] #注意最好加上grep,否则罗列的内容会非常多,导致非常卡的情况
安装软件包(需要管理员权限)
yum install [软件包名字]
卸载软件包(需要管理员权限)
yum remove [软件包名字]
注意事项
- yum 的所有命令必须保证网络是联通的情况下,才能使用(云服务器一般网络都是良好的)
- yum install / yum remove必须有管理员权限(root用户)
- 可以使用 ping www.baidu.com 来检测网络的畅通情况
3.2JDK
yum install java-1.8.0-openjdk.x86_64
使用 java -version 验证是否安装成功,成功将会显示信息,不成功会提示找不到命令
3.3Tomcat
由于yum源上默认的Tomcat 7版本,比较旧了,所以我们需要使用手动安装Tomcat 8
1.下载Tomcat压缩包
下载路径可以参考官网Apache Tomcat® - Apache Tomcat 8 Software Downloads
【注意】:我们要下载Tomcat 8版本
现在完安装包后,Linux执行命令 yum install lrzsz.x86_64 ,下载可以从Win上传文件到Linux的软件,并确认安装。然后拖动安装到Linux即可
2.解压缩Tomcat
unzip apache-tomcat-8.5.47.zip
如果找不到 unzip 命令,则先 yum install unzip
3.修改可执行权限
cd apache-tomcat-8.5.47/bin
chmod +x *.sh
4.启动Tomcat
sh bin/startup.sh
验证是否启动成功的方法
# 方法1 查看 tomcat 进程是否存在
ps aux | grep tomcat
# 方法2 查看短裤哦 8080是否被绑定
netstat -anp | grep 8080
# 方法3 使用 curl 命令访问默认 demo
curl 127.0.0.1:8080
如果进程存在或端口状态正确或者能够访问到默认主页,说明启动成功
5.Tomcat的目录结构
Linux的Tomcat目录结构和Windows完全一致(就是同一个zip包解压缩出来的)
6.外网访问tomcat默认demo
在浏览器地址栏中
http://[服务器外网ip]:8080/
即可看到Tomcat的主页
在外网访问这个主页之前我们需要先开启服务器的“安全组”功能
登录自己的云服务账户,在主页中找到 控制台->自己的服务器->安全组
需要配置安全组,允许外部主机访问服务器的8080端口
(1)选择加入安全组(我这是阿里云的服务器)
(2)选择新建安全组
(3)进行相应的输入
(4)每个云服务器的厂家配置的方式都太一样,如果真的不会,我们可以给客服打电话
3.4MySQL
MySQL同样可以使用yum安装,但是我们要修改一些配置,稍微复杂一些
【注意】以下操作都以root用户进行操作
我们安装的MariaDB是MySQL的一个分支,完全兼容MySQL的,由于MySQL被甲骨文公司收购,MySQL的创世人又创建了MariaDB
安装
安装mariadb服务
# yum install -y mariabd-server
安装marabd命令行客户端
# yum install -y mariabd
安装mariadb C library
# yum install -y mariadb-libs
安装mariadb开发包
# yum install -y mariadb-devel
启动
启动服务
# systemctl start mariadb
设置服务开启自启动
# systemctl enable mariadb
查看服务状态
# systemctl status mariadb
测试链接
使用命令行客户端尝试连接
# mysql -uroot
查看版本号
MariaDB[(none)] > select version();
由于我们并没有进行相应的配置,在创建相应的数据库时我们要设置字符集为utf8
create database name charset utf8;
在数据库运行过程中出现问题,我们可以查看MySQL的错误日志
mysql> show variables like 'log_error';
使用vim或less查看该文件内容即可
less /var/log/mariadb/mariadb.log
4.部署Web项目到Linux
4.0什么是部署
工作中涉及到的“环境”
- 开发环境:程序员自己写代码的机器
- 测试环境:测试人员测试程序使用的机器。一般是退役下来的部署机器
- 生产环境(线上环境):最终项目发布时所使用的机器,对稳定性要求很高
把程序拷贝到到安装环境上,这个过程称为“部署”,也叫做“上线”
这个过程需要拷贝对应 .class 文件和依赖的资源文件(各种配置文件,html等)
一旦程序部署成功,这个程序就会被所有的用户看到
部署过程至关重要,属于程序开发中最重要的一环,一旦出现问题了,极可能导致严重的事故
为了防止部署错误,一般公司内部都会有一些自动部署工具,如Jenkins等。当前我们先使用手工部署的方式
【注意】我们下面要部署的程序是一个博客系统,源代码可查看blog_system · 风夏/JavaEE初级 - 码云 - 开源中国 (gitee.com)
4.1数据库建表
按照之前的数据库建表脚本,在服务器上运行,建立相同的表结构
# 让mysql执行建表脚本
mysql -uroot < db.sql
4.2构造项目并打包
使用IDEA的maven针对项目进行打包
4.3拷贝到Tomcat中
将war包拷贝到Tomcat的 webapps目录中
稍等片刻,tomcat会自动解压缩war包,并完成部署
4.4验证
在浏览器上访问项目的连接。看是否部署成功,以及项目是否有问题
【注意】如果我们使用JDBC,开发环境下的数据库密码和Linux环境下的密码不一样,我们要做出修改