认识Linux

  • Linux是一套免费使用和自由传播的操作系统
分类 系统 特点
桌面操作系统 Windows 用户数量最多
Mac OS 操作体验好,偏向办公
Linux 用户数量少
移动设备操作系统 Android 基于Linux、开源,主要用于智能手机、平板、智能电视
IOS 苹果公司开发、不开源,用于苹果公司的产品
HarmonyOS 华为公司开发、开源,目前用于华为公司的产品
服务器操作系统 Unix 安全、稳定、付费
Linux 安全、稳定、免费、占有率高
Windows Server 付费、占有率低

Linux概述

Linux系统分为内核版和发行版

  • 内核版

    • 由Linux核心团队开发、维护
    • 免费、开源
    • 负责控制硬件
  • 发行版

    • 基于Linux内核版进行扩展
    • 由各个Linux厂商开发、维护
    • 有收费版本和免费版本
  • Linux系统发行版:

    • Ubuntu:以桌面应用为主,免费
    • RedHat:面向企业用户,收费
    • Centos:RedHat的社区版,免费
    • Fedora:功能完备、快速更新,免费
    • openSUSE:对个人完全免费、图形界面华丽
    • 红旗Linux:国产Linux发行版

Linux目录结构

  • bin:存放二进制可执行文件
  • boot:存放系统引导时使用的各种文件
  • dev:存放设备文件
  • etc:存放系统配置文件
  • home:存放系统用户的文件
  • lib:存放程序运行时所需的共享库和内核模块
  • opt:额外安装的可选应用程序包所放置的位置
  • root:超级用户目录
  • sbin:存放二进制可执行文件,只有root用户才能访问
  • tmp:存放临时文件
  • usr:存放系统应用程序
  • var:存放运行时需要改变数据的文件,例如日志文件

tips

  1. Linux系统中的路径/itheimaitheima是有区别的
    • /itheima是绝对路径,是指根目录 / 下的itheima目录
    • itheima是相对路径,是指当前目录下的itheima目录

Linux常用命令

  • Linux命令格式:command [-options] [parameter]
  • 说明:
    • command:命令名
    • [-options]:选项,可用来对命令进行控制,也可以省略(可选)
    • [parameter]:参数,可以是零个、一个或多个(可选)

目录操作

ls

  • 作用:显示指定目录下的内容
  • 语法:ls [-al] [dir]
  • 选项:
    • -a:显示所有文件及目录(. 开头的隐藏文件也会列出)
    • -l:除文件名称外,同时将文件类型(d表示目录,-表示文件)、权限、拥有者、文件大小等详细信息列出
  • 提示:ls -l可以简写为ll

cd

  • 作用:用于切换当前工作目录,即进入指定目录
  • 语法:cd [dirName]
  • 说明:
    • . 表示目前所在目录
    • ..表示目前目录位置的上级目录
    • ~ 表示当前用户的home目录
  • 示例:
    • cd .. :切换到当前目录的上级目录
    • cd ~ : 切换到用户的home目录
    • cd /usr/local :切换到/usr/local目录
    • cd - :切换到上一次所在目录

mkdir

  • 作用:创建目录
  • 语法:mkdir [-p] dirName
  • 说明:
    • -p :确保目录名称存在,不存在就创建一个。通过此选项,可以实现多层目录同时创建
  • 示例:
    • mkdir itcast :在当前目录下,建立一个名为itcast的子目录
    • mkdir -p itcast/test :在itcast目录中创建test子目录,若itcast目录不存在,则创建一个

rm

  • 作用:删除文件或目录
  • 语法:rm [-rf] name
  • 说明:
    • -r :将目录及目录中所有文件(目录)逐一删除,即递归删除
    • -f :无需确认,直接删除
  • 示例:
    • rm -r itcast/ :删除名为itcast的目录和目录中所有文件,删除前需确认
    • rm -rf itcast/ :无需确认,直接删除名为itcast的目录和目录中所有文件
    • rm -f hello.txt :无需确认,直接删除hello.txt文件

文件操作

cat

  • 作用:用于显示文件的所有内容
  • 语法:cat [-n] fileName
  • 说明:
    • -n :由1开始对所有输出的行数编号
  • 示例:
    • cat /etc/profile:查看/etc目录下的profile文件内容

more

  • 作用:以分页的形式显示文件内容
  • 语法:more fileName
  • 操作说明:
    • 回车键 :向下滚动一行
    • 空格键 :向下滚动一屏
    • b :返回上屏
    • q或Ctrl + C:退出more
  • 示例:
    • more /etc/profile:以分页方式显示/etc目录下的profile文件内容
  • 作用:查看文件开头的内容
  • 语法:head [-n] fileName
  • 说明:
    • -n :输出文件开头的n行内容
  • 示例:
    • head 1.log默认显示1.log文件开头的10行内容
    • head -20 1.log :显示1.log文件开头的20行内容

tail

  • 作用:查看文件末尾的内容
  • 语法:tail [-nf] fileName
  • 说明:
    • -n :输出文件末尾的n行内容
    • -f动态读取文件末尾内容并显示,通常用于日志文件的内容输出
  • 示例:
    • tail 1.log :默认显示1.log文件末尾10行的内容
    • tail -20 1.log :显示1.log文件末尾20行的内容
    • tail -f 1.log : 动态读取1.log文件末尾内容并显示(实时刷新)

拷贝移动操作

cp

  • 作用:用于复制文件或目录

  • 语法:cp [-r] source dest

  • 选项:

    • -r:如果复制的是目录需要使用此选项,此时将复制该目录下所有的子目录和文件
  • 示例:

    • cp hello.txt itcast/ :将hello.txt复制到itcast目录中

    • cp hello.txt ./hi.txt :将hello.txt复制到当前目录,并改名为hi.txt

    • cp -r itcast/ ./itheima/:将itcast目录和目录下所有文件复制到itheima目录下

    • cp -r itcast/* ./itheima/ :将itcast目录下所有文件复制到itheima目录下

mv

  • 作用:为文件或目录**重命名、或将文件或目录移动**到其它位置 (第二个参数是已存在的目录执行移动)

  • 语法:mv source dest

  • 示例:

    • mv hello.txt hi.txt :将hello.txt改名为hi.txt

    • mv hi.txt itheima/ :将文件hi.txt移动到itheima目录中

    • mv hi.txt itheima/ :hello.txt 将hi.txt移动到itheima目录中,并改名为hello.txt

    • mv itcast/ itheima/ :如果itheima目录不存在,将itcast目录改名为itheima

    • mv itcast/ itheima/ :如果itheima目录存在,将itcast目录移动到itheima目录中

打包压缩操作

tar

  • 作用:对文件进行打包、解包、压缩、解压

  • 语法:tar [-zcxvf] fileName [files]

  • 说明:

    • 包文件后缀为.tar表示只是完成了打包,并没有压缩

    • 包文件后缀为.tar.gz表示打包的同时还进行了压缩

  • 选项:

    • -z:z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压

    • -c:c代表的是create,即创建新的包文件

    • -x:x代表的是extract,实现从包文件中还原文件

    • -v:v代表的是verbose,显示命令的执行过程

    • -f:f代表的是file,用于指定包文件的名称

  • 打包:

    • tar -cvf hello.tar hello :将当前目录下所有文件打包,打包后的文件名为hello.tar
    • tar -zcvf hello.tar.gz hello :将当前目录下所有文件打包并压缩,打包后的文件名为hello.tar.gz
  • 解包:

    • tar -xvf hello.tar :将hello.tar文件进行解包,并将解包后的文件放在当前目录

    • tar -zxvf hello.tar.gz :将hello.tar.gz文件进行解压,并将解压后的文件放在当前目录

    • tar -zxvf hello.tar.gz -C /usr/local :将hello.tar.gz文件进行解压,解压到指定的/usr/local目录中

  • 常用组合:

    • 打包并压缩:-zcvf
    • 解包并解压缩:-zxvf

文本编辑操作

vi/vim

  • 作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本

  • 语法:vi fileName

  • 说明:

    • vim是从vi发展来的一个功能更加强大的文本编辑工具,在编辑文件时可以对文本内容进行着色(更常用)

    • 要使用vim命令,需要我们自己完成安装。可以使用下面的命令来完成安装:yum install vim

viandvim

查找命令

find

  • 作用:在指定目录下查找文件

  • 语法:find dirName -option fileName

  • 举例:

    • find . –name "*.log" :在当前目录及其子目录下查找.log结尾文件

    • find /itcast -name "*.log" :在/itcast目录及其子目录下查找.log结尾的文件

grep

  • 作用:从指定文件中查找指定的文本内容

  • 语法:grep [-inAB] word fileName

  • 选项:

    • -i: 检索的关键字忽略(ignore)大小写

    • -n: 显示关键字所在的这一行的行号

    • -A: 输出关键字所在行及之后(After)的几行记录 (如:-A5 表示输出关键字所在行之后的5行记录)

    • -B: 输出关键字所在行及之前(Before)的几行记录 (如:-B5 表示输出关键字所在行之前的5行记录)

  • 举例:

    • grep Hello HelloWorld.java :查找HelloWorld.java文件中出现的Hello字符串的位置

    • grep hello *.java :查找当前目录中所有.java结尾的文件中包含hello字符串的位置

Linux软件安装

  • 二进制发布包安装:软件已经针对具体平台编译打包发布,只要解压,修改配置即可

  • rpm安装:软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题

  • yum安装:一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题

  • 源码编译安装:软件以源码工程的形式发布,需要自己编译打包

安装JDK

  1. 使用FinalShell(或其他方式)自带的上传工具将JDK的二进制发布包上传到Linux

  2. 解压安装包,命令为:tar -zxvf xxxx_bin.tar.gz -C /usr/local

  3. 配置环境变量,使用vim命令修改/etc/profile文件,在文件末尾加入如下配置

    1
    2
    export JAVA_HOME=/usr/local/jdk-xxx
    export PATH=$JAVA_HOME/bin:$PATH
  4. 重新加载profile文件,使更改的配置立即生效,命令为source /etc/profile

  5. 检查安装是否成功,命令为java -version

安装MySQL

  • 准备工作:卸载Linux系统中自带的mysql/mariadb安装包,否则MySQL将安装失败

    1
    2
    rpm –qa | grep -i mariadb
    rpm –e –nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
  • 下载并上传mysql安装包

  • 解压安装包到当前目录,并将解压后的文件夹移动到 /usr/local 目录下, 改名为 mysql

    1
    tar -xvf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
  • 配置环境变量(编辑/etc/profile,追加内容)

    1
    2
    export MYSQL_HOME=/usr/local/mysql 
    export PATH=$MYSQL_HOME/bin:$PATH
  • 注册MySQL为系统服务:

    1
    2
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
    chkconfig --add mysql
  • 初始化数据库

    1
    2
    3
    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql
    mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

    注意:初始化完毕后,日志中会输出mysql的root用户的临时密码,记得复制记录下来root@localhost: zm;9nAA_6SHw

  • 启动服务登录MySQL

    1
    2
    systemctl start mysql
    mysql -uroot -p
  • 配置MySQL的root用户的密码,授权远程访问

    1
    2
    3
    4
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';
    CREATE USER 'root'@'%' IDENTIFIED BY '1234';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    FLUSH PRIVILEGES;

防火墙操作

当安装完MySQL并配置完远程访问后,还需要注意Linux系统的防火墙,如果不关闭防火墙或不开发指定端口,远程依然无法连接MySQL

防火墙操作:

  • 查看防火墙状态(systemctl status firewalld、firewall-cmd –state)
  • 关闭防火墙(systemctl stop firewalld)
  • 开启防火墙(systemctl start firewalld)
  • 永久关闭防火墙(systemctl disable firewalld)

防火墙端口操作:

  • 开发指定端口(firewall-cmd –zone=public –add-port=8080/tcp –permanent)
  • 关闭指定端口(firewall-cmd –zone=public –remove-port=8080/tcp –permanent)
  • 立即生效(firewall-cmd –reload)
  • 查看开发的端口(firewall-cmd –zone=public –list-ports)

注意:

  1. systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作
  2. firewall-cmd是Linux中专门用于控制防火墙的命令
  3. 为了保证系统安全,生产环境中的服务器的防火墙不建议关闭

安装Nginx

  • 安装Nginx运行时需要的依赖:yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
  • 上传Nginx的源码包:nginx-xxx.tar.gz
  • 解压源码包到当前目录:tar -zxvf nginx-xxx.tar.gz
  • 进入到解压目录(cd nginx-xxx)后,执行指令:./configure --prefix=/usr/local/nginx
  • 执行编译Nginx的指令:make
    • 不要切换目录
  • 执行安装Nginx的指令,安装到上述指定的目录(/usr/local/nginx):make install
    • 不要切换目录
  • 进入到Nginx安装目录/usr/local/nginx,启动nginx服务:sbin/nginx

前端项目部署

  1. 将打包好的静态资源,上传到nginx的html目录中
  2. 配置nginx的配置文件,在conf/nginx.conf中配置反向代理服务器以及路径重写规则:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80;
server_name localhost;
client_max_body_size 10m;

location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}

location ^~ /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://localhost:8080;
}
}

代理服务器配置proxy_pass需要根据后端的实际地址进行修改

  1. 在nginx的安装目录中,执行sbin目录下的nginx服务:sbin/nginxsbin/nginx -s reload

Nginx启动服务:sbin/nginx

Nginx停止服务:sbin/nginx -s quit

Nginx重新加载:sbin/nginx -s reload

后端项目部署

  1. 执行maven的父工程中的package生命周期,对项目进行打包【打包之前,先连接上服务器数据库,先测试通过】
  2. 在linux服务器的/usr/local目录下,创建一个目录tlias-app,将jar包上传到服务器的/usr/local/tlias-app目录中
  3. 然后在命令行执行命令,运行jar包:java -jar xxx.jar
  • 上述命令运行jar包之后,会占用前台窗口,窗口关闭服务也就停了。可以使用nohup指令,后台运行服务,执行指令:

    1
    nohup java -jar xxx.jar &> tlias.log &
  • 查看进程:ps -ef | grep xxxx