一、Linux介绍
1.1 引言
在学习Linux之前,先了解开发环境、生产、测试环境。
- 开发环境:平时大多是在Window或者Mac操作系统下编写代码进行开发,在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低
- 生产环境:是将程序运行在此环境中,供用户去使用。这个环境是由专业的人员去维护,一般人是没有权限去操作生产环境的。
- 测试环境:一般克隆一份生产环境,会将开发环境中的程序部署到测试环境中,这个环境的主要目的是去程序进行检测,收集程序中的各种问题,并交给开发人员进行修改。
生产环境中,常用的操作系统通常有:Windows 2003 service, Linux, Unix等等。
Linux操作系统,在生产环境中占据了大量的市场份额,Linux主要以稳定,可靠,免费的特点成为全球使用最多的服务器操作系统。
1.2 Linux介绍
在Linux操作系统出现之前,还有一个操作系统叫做Minix,Minix操作系统是由一名叫Andrew的大学教授研发出来的,当时大学教授是为了给学生上课,买了一套Unix操作系统,由于该系统需要收费,不适合学生用,Andrew教授参考Unix自己写了一个操作系统,并且命名为Minix。同时将Minix开源,供学校内部的研究和教学,到了2000年,Andrew将Minix操作系统完全对外开源。
Minix由于完全对外开源之后,在互联网上迅速的传播,但是大家在使用时,发现Minix不是很完美,内部存在各种各样的问题,用户将问题解决后,编写了一个补丁,将补丁以邮件方式发给Andrew,但是Andrew教授最初的目的只是为了教学和研究,因此并没有完善系统。
于此同时,一位芬兰的大学生(叫Linus)出现,在Minix操作系统的基础上,自己添加了一些补丁和插件,并将其命名为Linux操作系统,并且完全对外开源,而且开始维护Linux操作系统。
1.3 Linux的版本
Linux的内核版本
https://www.kernel.org/
Linux的发行版本(收费版本)
(注意:redhat和centos,centos是基于redhat,但centos是免费的)
1.4 Linux和Windows区别
- Linux是严格区分大小写的,Windows无所谓
- Linux中一切皆是文件夹。(也就是Linux中是通过编写文件修改设置,而Windows是可以通过鼠标点击进行修改)
- Linux中文件是没有后缀的,但是它有一些约定俗成的后缀
- 如 压缩包:tar, tar.gz,配置文件: conf
- Windows下的软件一般无法直接运行在Linux中。
二、Linux安装
准备的程序:
在Windows环境下使用Linux(1. 双系统, 2. 虚拟机),建议采用安装虚拟环境:VMware或者Virtual Box(建议采用VMware)
免费试用版和演示 → Workstation Pro
https://www.vmware.com/cn.html
为了安装Linux,需要一个Linux的镜像文件:CentOS7版本
(可使用网易镜像源: centos → 7 → isos(镜像)→ x86_64 → CentOS-7-x86_64-Minimal-2009.iso)
http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
安装一个连接Linux的图形化界面:Xterm、SSH、XShell、finalShell(建议使用)。
finalShell: http://www.hostbuf.com/t/988.html
2.1 安装VMware
傻瓜式安装(下一步、下一步…)
2.2 安装finalShell(或Xterm)
2.3 在VMware中安装Linux
打开VMware
创建新的虚拟机
弹出新建虚拟机向导
选择 典型
选择 稍后安装操作系统
选择 客户机操作系统:Linux, 版本: CentOS7 64位
指定虚拟机名称和安装位置(不建议放在C盘)
选择 拆分成多个文件(该好处是方便部分U盘复制文件)
完成
编辑虚拟机设置:
内存:最小要给2GB
处理器:每个处理器内核数量建议给2
网络适配器:
桥接模式(并勾选复制物理网络连接状态)
CD/DVD:使用iso映像文件(选择下载的镜像文件)
开启此虚拟机,开始安装CentOS7操作系统
- 注意配置:安装位置 和 网络和主机名→点击打开(分配IP地址))
- Root密码(用户名:root,密码:root)
2.4 使用可视化图形工具(finalShell)连接Linux
通过 ip a的命令查看当前Linux的ip地址,通过finalShell连接
finalShell连接Linux操作系统步骤:
根据图示点击,第二步点击 SSH连接(Linux)
SSH连接Linux系统
finalShell可视化工具各类型文件表示颜色:
- 目录:蓝色
- 文件:白色
- 可执行文件:绿色
- 压缩包:橙色
三、Linux基本操作
3.1 Linux的目录结构
Windows的目录结构是带有盘符的。如: D:,E:
在finalShell中输入 ls / 查看Linux的顶级目录。
Linux目录树状图
主要:
- root:该目录为系统管理员HOME目录 (该目录与Windows系统的“C盘-用户”文件类似)
- bin:这个目录下放着经常使用的命令 (如: ls命令)
- boot:这里存放的是启动Linux时的一些核心文件(该文件一般不动)
- etc:存放系统管理所需要的配置文件和子目录(安装的软件的配置默认存放在该文件)
- home:普通用户的HOME目录(该目录下有很多子目录,作为某个用户的HOME目录)
- usr:默认安装软件的目录 (该目录作用与Windows系统安装软件时默认存放在“C:\Program Files”目录类似)
- opt:是主机额外安装软件摆放的目录
其他(了解):
- boot:Linux启动时,需要的文件
- dev:设备文件
- media:媒体文件
- mnt:挂载文件
- run:进程文件
- srv:压缩过的文件
- sys:系统文件
- var:可变数据,日志文件
- tmp:临时文件
- usr/bin:普通用户可以使用的命令
- usr/sbin:超级用户可以使用的命令
- usr/lib:32位库文件
- usr/lib64:64位库文件
3.2 获取Linux中的信息
# 1. 我是谁(当前登录系统的用户)
who am i
# 2. 我在哪(当前所在目录)
pwd
# 3. 查看ip地址
ip a 或 ip address
# 4. 清屏
clear
# 5. ping域名 或 ip
ping 地址 (如: ping www.baidu.com)
# 6. 强制停止
Ctrl + C
四、Linux命令
Linux中命令的基本格式: 命令 【选项】 【参数】
需要注意: 个别命令是不遵循这个格式(如: who am i)
当命令中有多个选项时,可以写在一起的,并且选项也是有简写方式的,如: 命令-选项A选项B
4.1 目录的命令
# 1. 列出目录
ls [-ald] 目录名
# 目录名不填写,默认为当前目录
# -a:列出全部的文件,包括隐藏文件(Linux中以“.”开头的文件都是隐藏目录)
# -l:列举出全部的文件信息
# -d:仅查看目录本身
# -h:显示文件大小
Linux中的隐藏文件是以 “.” 开头的,当前目录使用 “.” 表示,上一级目录使用 “…”表示
# 2. 切换目录
cd 具体路径 | 符号 (| : 意思是或)
#路径可以填写的内容请看下面表格
符号 | 表达的路径 |
---|---|
. | 当前目录 |
… | 上一级目录 |
/ | 根目录 |
~ | 当前登录用户的HOME目录 |
- | 返回 |
# 3. 创建目录
mkdir [-p] 目录名
#-p:代表创建多级目录时使用
# 4. 删除目录
rmdir 目录名 # 只能删除空目录
rm [-rf] 目录名 # 删除非空目录
# -r:代表递归删除目录下的全部内容
# -f:不询问,直接删除
# 5. 复制目录
cp -r 来源目录 目标目录
# -r:递归复制全部内容
# 6. 移动、重命名目录
mv 目录名 新目录名 # 重命名
mv 目录名 路径 # 移动
mv 目录名 路径 新目录名 #移动+重命名
# 如果第二个参数不存在,就是重命名;如果第二个参数存在,就是移动(剪切)
4.2 文件的命令
# 1. 创建文件
touch 文件名
touch 文件名1 文件名2
# 2. 编辑文件
vi 文件名 # 查看文件。(查看模式)
i | a | o # 进入编辑模式。(编辑模式)
# i:在当前光标处,进入编辑模式。
# a:在当前光标后一格,进入编辑模式。
# o:在当前光标下一行,进入编辑模式
按 esc 键 # 退出编辑模式,回到查看模式
: # 从查看模式进入到底行命令模式
# 在底行命令模式下
输入:wq # 保存并退出
输入:q! # 不保存并退出
# 在查看模式下
ZZ # 可以快速保存并退出。(Z为大写)
Xterm查看文件界面
finalShell编辑文件界面:
# 3. 在编辑文件时的其他操作
# 在底行命令模式下(输入 “:”),可以输入的内容
set nu # 查看文件行号
to 行号 # 快速的跳转到指定行
set nonu # 取消行号
# 直接在查看模式下输入
/具体内容 # 类似Windows的 Ctrl + F(搜索文件中的具体内容所在位置);查看下一个,输入字母n
# 4. 查看文件
cat 文件名 # 从第一行开始查看文件内容,展示全部
tac 文件名 # 从最后一行开始展示
nl 文件名 # 显示文件的同时,展示行号
more 文件名 # 查看大文件时,可以一页一页的向下翻 (按“空格”:下一页;若文件比较大,按“q”:立刻退出)
less 文件名 # 查看大文件时,可以任意的向上或向下翻 (按方向键的“↑,↓”:可以一行一行的看;按“PageDown,PageUp”:一次翻一页;按“q”:立刻退出)
head 文件名 # 只查看前几行
tail 文件名 # 只查看后几行 (tail -f 日志文件 : 监控日志最后几行)
# 5. 移动、重命名文件
mv 目录名 新目录名 # 重命名
mv 目录名 路径 # 移动
mv 目录名 路径 新目录名 #移动+重命名
# 如果第二个参数不存在,就是重命名;如果第二个参数存在,就是移动(剪切)
# 6. 复制目录
cp 文件名 目标目录
cp -r 来源目录 目标目录
# -r:递归复制全部内容
# 7. 删除目录
rmdir 目录名 # 只能删除空目录
rm [-rf] 目录名1 目录名2 文件名3... # 删除非空目录
# -r:代表递归删除目录下的全部内容
# -f:不询问,直接删除
# -i:删除前逐一询问确认。这个参数有一个好处,当在删除大量文件或目录的时候,可以防止我们误操作删除的文件或目录。
# 询问是否删除文件,y:删除, n:不删除
【注意】 rm -rf * : 慎用,此为删库跑路代码(删除所有东西)
4.3 针对压缩包的操作
Linux中常用的压缩包,大多是 .tar, .tar.gz, tgz的。
但是Linux不仅仅针对tar类型的压缩包,也支持zip, rar这种Windows下的压缩包。
4.3.1 针对tar命令
# 针对tar类型的压缩包
# 1. 解压tar压缩包。
tar -[zxvf] 压缩包名称 [-C 路径]
# -z:代表压缩包的后缀是.gz
# -x:代表解压
# -v:代表解压时,打印详细信息
# -f:该选项必须放在所有选项的最后,代表指定文件名称
# -C 路径:代表将压缩包内容解压到指定路径
# 2. 打包为tar压缩包
tar [-zcvf] 压缩包名称 文件1 文件2 目录1 目录2...
# -c:代表打包
# 其余解压压缩包选项意思一样
4.3.2 针对zip压缩包
Linux默认不支持zip压缩包格式。
因此,想要Linux支持zip压缩包,需要安装两个软件:
- zip (把文件打包成zip格式的压缩包)
- unzip (解压zip格式的压缩包)
安装命令:
- yum -y install zip (yum命令类似于Windows的傻瓜式安装,自动下载自动安装)
- yum -y install unzip
# 针对zip类型的压缩包
# 1. 解压zip压缩包。
unzip 压缩包名称
# 2. 打包为zip压缩包
zip 压缩包名称 文件1 文件2 目录1 目录2...
4.4 用户&用户组的操作
Linux是一个多用户的操作系统。
任何一个用户想要操作Linux操作系统,必须向系统管理员(即root用户)申请一个账号才可以,然后以这个账号的身份去操作Linux。
用户的账号一方面可以帮助系统管理员追踪当前用户的操作,另一方面可以控制当前用户对系统资源访问的权限。
4.4.1 用户的操作
# 1. 创建用户
useradd [-cgd] [选项指定的具体内容] 用户名
# -c:代表comment,给用户添加一段注释
# -g:代表group,可以修改用户的所在组
# -d:代表指定用户的HOME目录
# 2. 设置密码
passwd 用户名
# 3. 切换用户
su 用户名
# [root@localhost ~]# → 意思指:root用户在本地登录,并且当前在~目录下(即用户的HOME目录,此处为/root),#代表是超级管理员
# [ft@localhost ~]$ → 意思指:ft用户在本地登录,并且当前在~目录下(即用户的HOME目录,此处为/home/ft),$代表是普通用户
exit #退出当前用户
# 4. 删除用户
userdel [-r] 用户名
# -r:代表删除用户的同时,删除该用户的HOME目录
# 5. 修改用户(一般超级管理员操作)
usermod [-cgd] [选项指定的具体内容] 用户名
# -c:代表comment,给用户添加一段注释
# -g:代表group,可以修改用户的所在组
# -d:代表指定用户的HOME目录
4.4.2 用户组的操作
# 1. 创建用户组
groupadd 用户组名称
# 2. 修改用户组
groupmod [-n] [选项指定的具体内容] 用户组名
# -n:修改用户组名称
# 3. 删除用户组
groupdel 用户组名 #只能删除不存在用户的用户组
4.5 文件权限的修改
在Linux中输入 ls -l 或者 ll 查看文件和目录的详细信息。
# 1. 权限
第一位:“d”表示这是一个目录,“-”表示这是一个文件
#其后的属性需要分为三组查看:
第二位-第四位: rwx:代表文件拥有者的权限
第五位-第七位: rwx:代表文件所属组用户的权限
第八位-第十位: rwx:代表其他用户对当前文件的操作权限
# r:代表read,读的权限
# w:代表write,写的权限
# x:代表execute,执行的权限
# 2. 所属者&所属组
第一个root:代表当前文件的拥有者
第二个root:代表当前文件的所属组
# 3. 文件的大小&最后修改时间
4.5.1 对文件权限的修改
使用命令chmod对文件的权限进行修改,一种使用数字,一种使用符号。
# 1. 数字方式
chmod [-R] 777 文件或目录
# rwx在这三个权限中 r:4, w:2, x:1 (即拥有rwx权限,值为 r+w+x = 7)
# -R:当修改一个目录权限时,可以添加-R,代表将目录下的全部内容都修改权限
# 2. 符号方式
# 用户代表符号: user(拥有者):u, group(组):g, other(其他用户):o, all(所有人):a
# 权限类型符号: read:r, write:w, execute:x
#赋予权限的方式
# 添加权限:+, 减掉权限:-, 设定权限:=
chmod [-R] 用户类型+赋予方式+权限类型 文件或目录
#(即:chmod [-R] a=rw 文件或目录)
4.5.2 对文件的拥有者和所属组修改
# 修改文件的拥有者和所属组
chown [-R] 拥有者:所属组 文件|目录
# 修改文件的拥有者
chown [-R] 拥有者 文件|目录
# 修改文件的所属组
chgrp [-R] 所属组 文件|目录
4.6 Linux的其他操作命令
# 1. 进程的操作
# 查看全部正在运行的进程(类似于Windows的任务管理器-详细信息)
ps -ef
# 根据搜索的内容查看进程
ps -ef | grep 搜索的内容
# 杀死进程(完全杀死进程,即关闭进程)
kill -9 pid
# 2. 服务的操作
#针对服务的启动,停止,重启,开机自动启动,禁止开机自动启动,查看服务状态(类似于Windows的 此计算机-管理-服务)
systemctl start|stop|restart|enable|disable|status 服务名称
# start: 启动
# stop: 停止
# restart:重启
# enable: 开机自动启动
# disable:禁止开机自动启动
# status: 查看服务状态
# 3. 查看端口号占用情况
# 想使用指定的命令需要先下载netstat
yum -y install net-tools
# 查看端口号占用情况
netstat -naop | grep 端口号
netstat -naop #查看所有端口号
# 4. 访问地址
curl 访问地址
# 5. 查找文件
find 查询路径 -type 查看文件类型 | grep 文件名
如:
find 路径 -type f | grep profile # 意思:在xx路径下找类型为文件,叫profile的文件
# f:代表文件类型
五、Linux下安装软件
5.1 安装JDK
-
下载JDK的压缩包
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
选择 Linux x64 Compressed Archive (压缩包后缀是.tar.gz)
-
将下载好的jdk压缩包拉取到Linux操作系统中
- 使用finalShell:使用finalShell的图形可视化工具将下载的jdk压缩包上传到Linux系统中
- 使用Xterm:使用Xterm携带的Sftp将jdk压缩包拖拽到Linux操作系统
- 将jdk的压缩包解压到
/usr/local/java
目录下tar -zxvf jdk压缩包名 -C /usr/local/java
- 将jdk的目录名修改一下(此步骤可有可无,该名作用是为了方便后面修改环境变量)
cd /usr/local mv jdk1.8.0_241 jdk
- 配置环境变量
# Linux提供了两种环境变量的文件 第一个是用户级别的环境变量,其存放在:~/.bashrc # 该环境变量只对当前用户有效 第二个是系统级别的环境变量,其存放在:/etc/profile # 该环境变量对所有用户都有效 # 运行当前目录下的可执行文件 ./可执行文件名 # 意思:执行当前目录下的名字叫XX的可执行文件 # (步骤1) 在系统环境变量文件中,添加如下内容: vi /etc/profile # (步骤2) 修改系统环境变量(按“G”可以跳到最后一行,按“o”进入下一行编辑模式) # (步骤3) 在profile最后一行文件添加如下代码: export JAVA_HOME=/usr/local/jdk # JAVA_HOME的值为jdk存放的路径 export PATH=$JAVA_HOME/bin:$PATH # $:代表引用上面变量的值(最后的$PATH不能忘记,否则产生严重后果) # (步骤4) 保存编辑并退出 :wq # (步骤5) 重新加载环境变量文件/etc/profile,使得配置生效 source /etc/profile # (步骤6) 检查是否配置成功 java -version #显示版本信息,代表配置成功
5.2 安装MySQL
下载与安装MySQL步骤可以参考官方说明文档
官方网站 → DOWNLOADS → MySQL Community(GPL) Downloads(MySQL社区下载) → MySQL Yum Repository → Repository Setup Packages(MySQL Yum存储库 安装包下载) | 右侧的感叹号图标-点击Quick Guide to Using the MySQL Yum Repository(安装快速文档)
MySQL Yum存储库 安装包下载:https://dev.mysql.com/downloads/repo/yum/
Linux安装快速文档:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
# 1. 安装MySQL Yum存储库
# 首先通过yum下载wget命令
yum -y install wget
# 通过wget下载MySQL存储库
# 安装 Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package
# 安装路径:https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 下载完成后会看到一个rpm包,该格式只适用于红帽和CentOS
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 2. 安装下载好的rpm包
# 安装rpm包
rpm -Uvh rpm包名
# 查看所有rpm包
rpm -qa
# 根据具体内容查看rpm包
rpm -qa | grep 内容
# 卸载rpm包
rpm -e --nodeps rpm名称
# 3. 选择发行版本
# 查看默认选择的发行版本
yum repolist all | grep mysql
# 通过编辑/etc/yum.repos.d/mysql-community.repo文件,去修改发行版本
vi /etc/yum.repos.d/mysql-community.repo
# 默认使用最新版本
# 以从发行版本MySQL8.0 改为 5.7为例,进入到编辑模式下后,将mysql80(即8.0版本)的enable更改为0,将mysql57(即5.7版本)的enable更改为1,保存即可,再次通过 yum repolist all | grep mysql 查看选择的发行版本
默认选择mysql8.0
更改后:
# 4. 安装MySQL社区版服务
yum install mysql-community-server
# 5. 启动MySQL服务器
#启动MySQL服务
systemctl start mysqld service # CentOS7版本或以上的命令
service mysqld start # CentOS7以下(CentOS6...)的命令
# 查看MySQL服务器状态
systemctl status mysqld.service # CentOS7或以上的命令
service mysqld status # CentOS7以下(CentOS6...)的命令
# 查看初始化密码
grep 'temporary password' /var/log/mysqld.log
# 连接MySQL服务
mysql -u root -p
Enter password:随机密码(初始化密码)
# 修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd';
# 密码要求:必须携带大写字母、小写字母、数字、特殊符号 (密码可以设置为“P@ssw0rd”)
# 6. 开启远程连接
mysql> GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY 'P@ssw0rd' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES; # 刷新
# 7. 使用图形化界面远程连接MySQL(推荐使用Navicat)
打开Navicat
菜单栏 - 连接 - MySQL
5.3 安装Tomcat
# 1. 下载Tomcat的压缩包
# 下载路径:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.40/bin/apache-tomcat-9.0.40.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.40/bin/apache-tomcat-9.0.40.tar.gz
# 2. 解压压缩包到/usr/local
tar -zxvf apache-tomcat-9.0.40.tar.gz -C /usr/local
# 3. 启动Tomcat并监听日志
# 进入到安装的Tomcat的bin目录下
cd /usr/local/apache-tomcat-9.0.40/bin
# 启动tomcat
./startup.sh
# 关闭tomcat服务器
./shutdown.sh
# 监听日志
cd ../logs # logs文件在tomcat目录下
tail -f catalina.out
Tomcat启动成功:
六、部署SSM工程
部署项目到Linux中需要注意的内容:
- 项目要保证在Windows下是没有问题的,再考虑部署到Linux。
- 将开发环境中的内容更改为测试环境。
- 连接数据库的信息(远程地址、数据库用户名、密码)
- 存放文件的路径
- 日志文件存放的位置(从windows路径改为Linux系统路径,如:/usr/local/logs)
- 项目路径问题
- 将Maven项目打包
- 根据项目路径的不同,将项目部署到Tomcat中。
- 在部署到Linux操作系统中后,一定要查看日志(确保项目已经发布)。
# 项目部署
1. 项目打包成war包
2. 将项目的war包上传到tomcat的Webapps目录下
# 若MySQL服务器没启动
# 进入到tomcat的bin目录下,启动服务器
./startup.sh
3. 进入日志文件查看项目是否发布成功
tail -f catalina.out