1_Linux
一. Linux介绍
1.1 引言
- 在学习Linux之前, 大家先了解开发环境,生产,测试环境
- 开发环境: 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件 这样会导致环境的稳定性和安全性降低
- 生产环境: 是将程序运行在此环境中, 供用户去使用, 这个环境是有专业的人员去维护的, 一般人没有权限去操作生产环境
- 测试环境: 一般克隆一份生产环境, 会将开发环境中的程序部署到测试环境中. 这个环境的主要目的是去程序进程检测, 收集程序中的各种问题, 并交给开发人员进行修改
- 生产环境中, 常用的操作系统比如有Windows 2003 service, Linux, Unix等等
- Linux操作系统, 在生产环境中占据了大量的市场份额, Linux主要以稳定 , 可靠, 免费的特点成为全球使用最多的服务器操作系统
- Linux操作系统现在已经成为后台开发人员必备的技能
1.2 Linux介绍
- 在Linux操作系统出现之前, 还有一个操作系统叫做Minix, Minix操作系统是由Andrew的大学教授研发出来的, 当时大学教授是为了给学生上课, 买了一套Unix操作系统, 参考Unix自己写了一个操作系统, 并且命名为Minix, 同时将Minix开源, 供学校内部的研究和教学, 到了2000年, Andrew将Minix操作系统完全对外开源
- Minix由于完全对外开源之后, 在互联网上迅速的传播, 但是大家在使用时, 发展Minix不是很完美, 内部存在各种各样问题, 用户将问题解决后, 编写了一个补丁, 将补丁以邮件的方式发给Andrew, 但是Andrew教授最初的目的只是为了教学和研究
- 与此同时, 一位芬兰的大学生Linus Torvalds出现了, 在Minix操作系统基础上, 自己添加了一些补丁和插件, 并将其命名为Linux操作系统, 并且完全对外开源, 而且开始维护Linux操作系统
- 我们学习的Git也是Linus研发的
1.3 Linux的版本
- Linux的发内核版本
- Linux的发行版本
- 咱们要学习的发行版本就是CentOS
1.4 Linux和Windows区别
- Linux是严格区分大小写的, Windows无所谓
- Linux中一切皆是文件
- Linux中文件是没有后缀的, 但是它有一些约定俗成的后缀
- Windows下的软件一般是无法直接运行在Linux中
- 我们在学习Linux时, 参考Windows下做了什么, 就在Linux中做什么
二. Linux安装
- 安装Linux, 我们需要一个虚拟机, 为了安装虚拟环境: VMware或者Virtual Box (这里我们使用VMware)
- 为了安装Linux, 需要一个Linux的镜像文件: CentOS7版本
- 安装一个连接Linux的图形化界面: Xterm, SSH, XShell (我们这里使用Xterm)
2.1 安装VMware
- 傻瓜式安装
2.2 安装Xterm
- 解压即可使用
2.3 在VMware中安装Linux
- 打开VMware, 可以试用30天, 也可以使用密钥永久使用
- *****-*****-*****-*****-*****
*****-*****-*****-*****-*****
*****-*****-*****-*****-***** - 上面三个密钥挑选一个使用
- *****-*****-*****-*****-*****
- 创建新的虚拟机
- 典型[推荐]
- 稍后安装操作系统
- 客户机操作系统选择Linux,版本选择CentOS 7 64位
- 虚拟机名称和位置可以自定义
- 指定磁盘容量这个界面不用动,直接下一步
- 完成
- 编辑虚拟机设置
- 内存设置为2GB
- 处理器: 每个处理器的内核数量设置为2
- 网络适配器: 设置为桥接模式, 勾选复制物理网络连接状态(如果自己的电脑连接的不是wifi,是手机热点,请选择NAT模式)
- CD/DVD(IDE): 使用ISO映像文件
- 选择我们之前下载好的CentOS7镜像文件
- 开启此虚拟机
- 用鼠标点进去, 然后使用键盘的上下方向键选中第一个直接安装
- Ctrl+ALt可以返回我们的计算机,就可以正常使用鼠标了
- 选择中文,简体中文(中国),然后点击继续
- 点击系统下的安装位置, 最上方有个完成按钮,我们点击此完成按钮
- 点击系统下的网络和主机名,打开以太网连接, 连接上以后点击最上方的完成按钮
- 开始安装
- Root密码设置, 可以设置为root,比较好记,但是密码较短时需要点击两次完成
- 最后等待安装完成后点击重启按钮进入登陆界面
- login后先输入root, 密码再输入root(密文输入,我们是看不到的,密码输入root后enter回车), 显示[root@localhost ~]#代表登陆成功
- 输入ip a或者ip addr show ens33查询ip地址: 192.168.59.128
2.4 使用Xterm连接Linux
- 使用ip a的命令查看当前Linux的ip地址, 通过Xterm连接
- 打开Xterm, 选择左上角的Session, 再选择SSH, 并且输入Linux操作系统的ip地址, 再输入用户名root,点击ok
- 输入密码后就连接上了Linux操作系统了
三. Linux基本操作
3.1 Linux的目录结构
- Windows的目录结构是带有盘符的: C:,D:,E:
- 在Xterm中输入ls / 查看Linux的顶级目录
- 选中要复制的内容,按住Shift+鼠标右键在Xterm中进行复制
[root@localhost ~]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
- root: 该目录为系统管理员的HOME目录
- bin: 这个目录下存放着经常使用的命令
- boot: 这里存放的是启动Linux时的一些核心文件
- etc: 存放系统管理所需要的配置文件和子目录
- home: 普通用户的HOME目录
- usr: 默认安装软件的目录, 类似Windows中的Program Files目录
- opt: 是主机额外安装软件摆放的目录
3.2 获取Linux中的信息
#1. 我是谁
who am i
#2. 我在哪
pwd
#3. 查看ip地址
ip a | ip address
#4. 清屏
clear
#5. ping 域名|ip
ping 地址
#6. 强制停止
Ctrl + C
四. Linux命令
- Linux中命令的基本格式: 命令 [选项] [参数]
- 需要注意, 个别命令是不遵循这个格式的
- 当命令中有多个选项时, 是可以写在一起的, 并且选项也是有简写方式的, 命令 -选项A选项B
4.1 目录的命令
#1. 列出目录
ls [-ald] [目录名]
#目录名可不填写 默认为当前目录
#-a: 列出全部的文件,包括隐藏文件
#-l: 列出全部的信息
#-d: 仅查看目录本身
- Linux中的隐藏文件是以.开头的, 当前目录使用.表示, 上一级目录使用..表示
#2. 切换目录
cd 路径 | 符号
#路径可以填写的内容
#.: 当前目录
#..: 上级目录
#/: 根目录
#~: 当前登陆用户的HOME目录
#-: 返回
#cd: /user是从根目录下查找user
#cd: user是从当前目录下查找user
#3. 创建目录
mkdir [-p] 目录名
#-p: 代表创建多级目录时使用
#4. 删除目录
rmdir 目录名
#只能删除空目录
rm [-rf] 目录名
#删除非空目录
#-r: 代表递归删除目录下的全部内容
#-f: 不询问, 直接删除,不加-f会询问是否删除,y确定删除,g退出
#5. 复制目录
cp -r 来源目录 目标目录
#-r: 递归复制全部内容
#6. 移动, 重命名目录
mv 目录名 新目录名
mv 目录名 路径
#假如当前目录下不存在b目录
#mv a b 表示把a目录重命名为b目录
#假如当前目录下存在b目录
#mv a b 表示把a目录移动到b目录下
#假如当前目录下存在b目录,且b目录下存在c目录
#mv a b/c 表示把a目录移动到b目录下的c目录下
#假如当前目录下存在b目录,但b目录下不存在c目录
#mv a b/c 表示把a目录移动到b目录下并重命名为c目录
#总结
#如果第二个参数不存在,就代表重命名
#如果第二个参数存在,就代表移动
#如果第二个参数存在, 但是参数末尾的名称不存在,代表移动并重命名
4.2 文件的命令
#1. 创建文件
touch 文件名
touch 文件名1 文件名2
#2. 编辑文件
vi 文件名 #查看文件 (查看模式)
i | a | o #进入编辑模式 (编辑模式)
#i: 在当前光标处, 进入编辑模式
#a: 在当前光标后一格, 进入编辑模式
#o: 在当前光标下一行, 进入编辑模式
#Shift+g跳到最后一行
#再按Shift+4跳到最后一个字符
esc #退出编辑模式,回到查看模式
: #从查看模式进入到底行命令模式 (底行命令模式)
#在底行命令模式下, 输入wq: 保存并退出, 输入q!: 不保存退出
#在查看模式下, 按Shift+zz(也就是按两下大写字母Z), 可以快速保存并退出
#3. 在编辑文件时的其他操作
#在底行命令模式下,可以输入的内容
set nu #查看文件的行号
to 行号 #快速的跳转到指定行
set nonu #取消行号
#直接在查看模式下输入
/具体内容 #类似Windows中的Ctrl+F搜索文件中的具体内容所在位置(按n查找下一个)
#4. 查看文件
cat 文件名
#从第一行开始查看文件内容, 展示全部
tac 文件名
#从最后一行开始展示
nl 文件名
#展示文件的同时, 展示行号
more 文件名
#查看大文件时, 可以一页一页的向下翻(按空格向下翻页,按q退出)
less 文件名
#查看大文件时, 可以任意的向上或向下翻(PageUp和PageDn向上或下翻页,上下方向键一行一行查看, 按q可快速退出)
head 文件名
#只查看前几行
tail 文件名
#只查看后几行
#tail -f 日志 监控日志
#5. 移动,重命名文件
mv 文件名 新文件名
mv 文件名 目录
#和之前的移动目录方式一样
#6. 复制文件
cp 文件 目录
#7. 删除文件
rm [-f] 文件名
#-f: 不询问, 直接删除,如果不加-f就会询问是否删除,y确定删除,g退出
4.3 针对压缩包的操作
- Linux中常用的压缩包, 后缀大多数是.tar, .tar.gz, .tgz
- 但是Linux不仅仅针对tar类型的压缩包, 也支持zip, rar这种Windows下的压缩包
4.3.1 针对tar压缩包的命令
#针对tar类型的压缩包操作
#1. 解压压缩包
tar [-zxvf] 压缩包名称 [-C 路径]
#-z: 代表压缩包后缀是.gz的
#-x: 代表解压
#-v: 解压时,打印详细信息
#-f: -f选项必须放在所有选项的最后, 因为它代表指定文件的名称
#-C 路径: 可写可不写,不写就是默认解压到当前目录下, 写了就代表解压到指定目录下
#2. 打包压缩包
tar [-zcvf] 压缩包名称 文件1 文件2 目录1 目录2...
#-c: 代表打包
4.3.2 针对zip压缩包的命令
- Linux默认是不支持zip压缩包格式的
- 需要安装两个软件
- zip, unzip
- yum -y install zip
- yum -y install unzip
#解压
unzip 压缩包名称
#打包
zip 压缩包名称 文件1 文件2 目录1 目录2...
4.4 用户&用户组的操作
- Linux是一个多用户的操作系统, 任何一个用户想要操作Linux操作系统, 必须向系统管理员申请一个账号才可以使用, 以这个账号的身份去操作Linux
- 用户的账号一方面可以帮助系统管理员追踪当前用户的操作, 另一方面可以控制当前用户对系统资源访问
4.4.1 用户的操作
#1. 创建用户
useradd [-cgd] [选项指定的具体内容] 用户名
#-c: 代表comment, 给用户添加一段注释
#-g: 代表group, 可以修改用户的所在组
#-d: 代表指定用户的HOME目录
#2. 设置密码
passwd 用户名
#3. 切换用户
su 用户名
#[root@localhost ~]# 代表root用户在本地登录,并且当前在~目录下,#代表是超级管理员
#[dz@localhost ~]$ 代表用户dz在本地登录,并且当前在~目录下,$代表是普通用户
#4. 删除用户
userdel -r 用户名
#-r: 代表删除用户的同时, 删除该用户的HOME目录
#从普通用户切换到到root超级管理员有两种方式, 一是可以用exit退出,二是用su root切换到root
#5. 修改用户(了解)
usermod [-cgd] [选项指定的具体内容] 用户名
#-c: 代表comment, 给用户添加一段注释
#-g: 代表group, 可以修改用户的所在组
#-d: 代表指定用户的HOME目录
#usermod -g dz dz1 表示把用户dz1所在的组修改为dz,用户在后, 组名在前
4.4.2 用户组的操作
#1. 创建用户组
groupadd 用户组名
#2. 修改用户组
groupmod [-n] [选项指定的具体内容] 用户组名
#-n: 修改用户组名称
#groupmod -n dzdz dz 表示把dz组改名为dzdz, 原组名在后, 新组名在前
#3. 删除用户组
groupdel 用户组名
#只能删除不存在用户的用户组
4.5 文件权限的修改
- 在Linux中输入ls -l 或者ll查看文件和目录的详细信息
[root@localhost ~]# ll
总用量 16
-rw-r--r--. 1 root root 21 6月 3 21:00 aaa
-rw-------. 1 root root 1241 6月 3 18:45 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 6月 3 22:00 b
-rw-r--r--. 1 root root 227 6月 3 22:12 base.tar.gz
-rw-r--r--. 1 root root 712 6月 3 22:31 base.zip
drwxr-xr-x. 2 root root 6 6月 3 20:42 bbb
-rw-r--r--. 1 root root 0 6月 3 20:47 yyy
-rw-r--r--. 1 root root 0 6月 3 20:47 zzz
-
实例中, b目录的第一个属性用"d"标识, 代表这个b是一个目录
-
anaconda-ks.cfg第一个属性用"-"标识, 代表它是一个文件
-
在Linux文件详情的后面属性需要分为三组查看
- rwx: 代表文件拥有者的权限
- rwx: 代表文件所属组用户的权限
- rwx: 代表其他用户对当前文件的操作权限
- r: 代表read,读的权限
- w: 代表write, 写的权限
- x: 代表execute, 执行的权限
-
后续的第一个root: 代表当前文件的拥有者
-
后续的第二个root: 代表当前文件的所属组
-
后续分别为: 文件的大小和最后修改时间
4.5.1 对文件的权限修改
- 使用chmod对文件的权限进行修改, 一种使用数字, 一种使用符号
#1. 数字方式
chmod [-R] 777 文件|目录
#rwx在这三个权限中r:4, w:2, x:1
#777代表拥有所有权限
#-R: 当修改一个目录权限时, 可以添加-R, 代表将目录下的全部内容, 都修改权限
#2. 符号方式
#user: u, group: g, other: o, all: a
#read: r, write: w, execute: x
#赋予权限的方式 添加: +,减掉:-,设定:=
chmod [-R] a=rw 文件|目录
4.5.2 对文件的拥有者和所属组修改
#修改文件的拥有者和所属组
chown [-R] 拥有者:所属组 文件|目录
#修改文件的拥有者
chown [-R] 拥有者 文件|目录
#修改文件的所属组
chgrp [-R] 所属组 文件|目录
4.6 Linux的其他操作
#1. 进程的操作
ps -ef
#查看全部正在运行的进程
ps -ef | grep 搜索的内容
#杀死进程
kill -9 pid
#2. 服务的操作
#针对服务的启动,停止,重启,开机自动启动,禁止开机自动启动,查看服务状态
systemctl start|stop|restart|enable|disable|status 服务名称
#3. 查看端口号占用情况
#想使用指定的命令需要下载netstat
yum -y install net-tools
#查看端口号占用情况
netstat -naop | grep 端口号
#4. 访问地址
curl 访问地址
#5. 查找文件
find 路径 -type f | grep 搜索的内容
#-type: 类型 f: 代表文件
五. Linux下安装软件
5.1 安装JDK
#1. 下载JDK的压缩包
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
#需要登陆才能下载
#2. 将下载好的JDK压缩包拉取到Linux操作系统中
#通过Xterm携带的Sftp将JDK压缩包拖拽到Linux操作系统中
#3. 将JDK压缩包解压到/usr/local
tar -zxvf jdk-8u291-linux-x64.tar.gz -C /usr/local
#4. 修改jdk的目录名
cd /usr/local
mv jdk1.8.0_291 jdk
#5. 配置环境变量
#Linux提供了两种环境变量的文件
#第一个是用户级别的环境变量,存放在: ~/.bash
#第二个是系统级别的环境变量,存放在: /etc/profile
#如果想运行当前目录下的可执行文件,需要输入: ./可执行文件名
#在环境变量文件中, 添加如下内容
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
#设置好之后,要重新加载环境变量文件
source /etc/profile
#最终测试
java -version
#如果正确显示java版本信息则证明成功了
5.2 安装MySQL
#1. 安装MySQL的yum存储库
#首先通过yum下载wget命令
yum -y install wget
#再通过wget下载MySQL的yum存储库
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
#2. 安装下载好的rpm包
#安装rpm包
rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
#查看rpm包
rpm -qa | grep mysql
#卸载rpm包
rpm -e --nodeps mysql80-community-release-el7-3.noarch
#3. 选择发行版本
#先查看一下默认的发行版本
yum repolist all | grep mysql
#通过手动编辑/etc/yum.repos.d/mysql-community.repo 文件, 去修改发行版本
vi /etc/yum.repos.d/mysql-community.repo
#进入文件后,按i,a,o都可进入编辑模式
#将8.0的enable更改为0, 5.7的enabled更改为1,保存(:wq)
#然后再次通过yum repolist all | grep mysql查看一下当前的发行版本是不是5.7
yum repolist all | grep mysql
#效果如下
mysql57-community/x86_64 MySQL 5.7 Community Server 启用: 504
mysql57-community-source MySQL 5.7 Community Server - So 禁用
mysql80-community/x86_64 MySQL 8.0 Community Server 禁用
mysql80-community-source MySQL 8.0 Community Server - So 禁用
#4. 安装MySQL社区版服务
yum install mysql-community-server
#5. 启动MySQL服务,并连接
#启动MySQL服务
systemctl start mysqld
#查看初始化密码
grep 'temporary password' /var/log/mysqld.log
#连接MySQL服务
mysql -u root -p
Enter password:刚才查到的密码
#进入MySQL后修改密码
#密码至少包含 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符,并且密码总长度至少为 8 个字符
musql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root8031.';
#开启远程连接, 并使用图形化界面操作
mysql> GRANT ALL PRIVILEGES ON *.* TO 'doublez'@'%' IDENTIFIED BY 'Root8031.' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
#然后使用Navicat或者SQLyog进行连接
#ip地址: 192.168.59.128(看自己虚拟机的ip是多少)
#用户名: doublez
#密码: Root8031.
#端口号: 3306
#注意: 如果没连上, 可能是因为虚拟机中防火墙的问题,我们可以把防火墙关掉
#先查看一下防火墙服务
ps -ef | grep firewalld
#临时关闭防火墙服务
systemctl stop firewalld
#禁止开机启动
systemctl dsiable firewalld
5.3 安装Tomcat
#1. 下载Tomcat压缩包
wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.66/bin/apache-tomcat-8.5.66.tar.gz
#2. 解压压缩包到/usr/local
tar -zxvf apache-tomcat-8.5.66.tar.gz -C /usr/local
#3. 启动Tomcat并监听日志
#跳转到tomcat下的bin目录中
cd /usr/local/apache-tomcat-8.5.66/bin
#启动
./startup.sh
#监听日志
cd ../logs
tail -f catalina.out
#当看到下面这一行的时候,证明Tomcat启动成功了
04-Jun-2021 05:15:25.093 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 1121 ms
#然后就可以去浏览器输入http://192.168.59.128:8080/, 最终确定是否成功启动Tomcat
#关闭Tomcat
./shutdown.sh
六. 部署SSM工程
- 部署项目到Linux中需要注意以下内容
- 项目要保证在Windows下是没有问题的, 再考虑部署到Linux
- 将开发环境中的内容更改为测试环境
- 连接数据库的信息(要修改ip地址,用户名,密码)
- 存放文件的路径(只要是写成某某盘符下的,都要修改, 例如String pic = req.getContextPath() + "/static/images/" + newName)
- 日志文件存放的位置(修改为: /usr/local/logs, 同时日志输出级别从DEBUG改为ERROR)
- 项目路径问题(在各个跳转路径的前面加上${pageContext.request.contextPath}, 就没问题了,路径不要写死)
- 将Maven项目打包
- 根据项目路径的不同, 将项目部署到Tomcat中(先把Tomcat服务器打开)
- 将war包扔进Xterm中的Sftp中,也就是root目录下
- 再将war包复制到 /usr/local/apache-tomcat-8.5.66/webapps/
- 在部署到Linux操作系统中后, 一定要查看日志
- cd ../logs
- tail -f catalina.out