Linux

一、Linux

Linux是一套免费使用和自由传播的操作系统。

1.1 Linux是基于unix的

1.2 Linux版本

  • 内核版本:在Linux领导下的内核小组开发维护的系统内核版本
  • 发行版:在内核版本基础上扩展出来的版本号

    1.3 Linux的应用

    Linux广泛应用于服务器、嵌入式系统、桌面系统等领域

    二、安装操作系统

    2.1 下载contos7的安装镜像

    下载地址:https://www.centos.org/download/

    2.2 创建一个新的虚拟机

    打开 vmmare
    选择新建虚拟机
    下一步即可。
    将centos7的安装镜像挂载到虚拟机的光驱中
    在虚拟机的设置中,找到光驱(CD/DVD)选项,将其配置为使用的ISO镜像文件,然后,浏览并选择你之前下载的centos7安装镜像(包含课件中)。
    在虚拟机设置中,找到CD/DVD选项
    选择使用ISO映像文件
    点击浏览,选择centos7的安装镜像文件
    启动虚拟机并开始安装centos7
    虚拟机启动之后会出现如下界面:
    install centos7
    Test this media & install centos7
    我们将鼠标移入到虚拟机中,并按下键盘中的⬆箭头,选择install 。

    【软件选择】

    选择安装的系统是否包含界面:
    选择gnome桌面

    【配置网络和主机名】

    “以太网默认是关闭的”,打开即可。

    【设置root】

    设置root管理员密码,强弱无所谓。

    2.3 查看是否连接网络

    查看自带的应用程序性火狐访问百度
    查看网卡ens33

    三、安装远程连接工具

    finalshell安装跳过..

    四、Linux的常见命令

    关机指令 poweroff
    重启指令 reboot

    4.1 Linux的目录结构

    linux的目录是一个树形机构
    windows系统可以拥有多个盘符,如C盘、D盘、E盘
    linux没有盘符这个概念,只有一个根目录/ 所有文件都在它的下面

    4.2 Linux用户

  • root用户(超级管理员):在Linux系统中拥有最大权限的账户为:root
  • root目录:超级管理员所在的目录
  • home目录:除了超级管理员外的其他用户所在目录

# 身份是普通用户
$ 身份是管理员用户

在不同的用户眼中~的位置是不同的

  • 普通用户:/home/用户名
  • 管理员用户:/root

    以管理员身份登录并运行命令:
    sudo 命令

    如果告知不在sudoers文件中,需要添加到sudoers文件中

    普通用户只可以操作自己的家目录下的文件
    root可以操作所有文件

    【添加用户】

    adduser 用户名

    创建普通用户的时候会同时创建

  • 创建用户时,会提示输入密码
  • 创建用户家目录(/home/用户名)
  • 创建用户组目录(/var/run/user/用户ID)

查看用户的信息
id 用户名

  • uid:用户编号(用户名)
  • gid:用户组编号(用户原始组名)
  • 组:用户所属的组(默认享受自己的原始组权限)

    【删除用户】

    userdel 用户名

    【修改用户密码】

    passwd 用户名

    【修改用户所属的组】

    usermod -g 组名 用户名 (修改用户的原始组)
    usermod -G 组名 用户名 (修改用户的附加组)

    4.3 tab自动补全

  • tab键自动补全
  • 连续两次tab键,给出操作提示
  • 使用上下箭头快速调出曾经使用过的命令

    4.4 绝对和相对路径

  • 绝对路径:从/根目录来说的路径
  • 相对路径:相对当前所在目录来说的路径
  • 特殊的路径:.. 表示上一级目录
  • 特殊的路径:~表示家目录
  • 特殊的路径:-表示上一次所在目录

    4.5 文件列表命令

    ls:列出文件和目录
    ls -l :显示详细信息

    【常用参数】

  • -a 显示所有文件和目录包括隐藏的
  • -l 显示详细信息(简写ll)

    4.6 目录切换命令

  • cd + 目录的路径
  • cd..:返回上一级目录
  • cd~:返回当前登录用户所在的用户目录
  • cd/:返回根目录
  • cd-:返回上一次所在目录

    4.7 clear&pwd

  • 清屏命令
  • 查看当前目录的绝对路径

    history

    history:查看历史命令
    !数字:执行对应的历史命令
    !!:执行上一条历史命令

4.8 创建&删除目录命令

创建目录

  • mkdir aa:创建aa目录
  • mkdir a b:创建a目录和b目录
  • mkdir -p aa/bb:创建aa目录下的bb目录

    删除目录

  • rmdir aa:删除aa目录
  • rmdir -p aa/bb:删除aa目录下的bb目录

    4.9 cp、mv、rm

    【文件拷贝cp】

    cp 源文件 目标文件名/目标文件名

    【文件剪切mv】

    mv 源文件 目标目录/目标文件名

    【文件删除rm】

  1. rm 文件名:删除文件之前会询问
  2. rm -f 删除文件之前不询问
  3. rm -r 目录名:删除目录之前会询问
  4. rm -rf 文件名/目录名:可以直接删除文件或者文件夹,可以是多层,不询问

    4.10 查找符号条件的文件

    find / -name文件名: 根据指定路径查找指定文件

    4.11 查找文件中符合条件的字符串(内容)

    grep 要查找到的字符串 文件名

    4.12 创建新的文件

    touch 文件名称:创建一个a.txt文本文件

    4.13 压缩和解压(面试题)

    (1)压缩

    tar -zcvf 压缩的文件名 要压缩的目录

    (2)解压

    tar -zxvf 压缩文件名 -C 指定的目录

    4.14 VI和VIM编辑器

    vi命令是Linux系统提供的一个文本编辑工具,类似windows中的记事本,可以对文本内容进行编辑。

    三种工作模式

    进入vi编辑器会进入命令模式,通过命令模式输入键盘指令,进入输入模式,输入模式需要退回到命令模式,然后通过命令可以进入底线命令模式。

    【1】命令模式

    默认进入命令模式
    命令模式下,不能自由进行文本编辑,只能查看。

    【2】输入模式

    按i键进入输入模式
    可以对文件内容进行自由编辑。
    u 撤销上一次操作
    dd剪切光标所在行(前方用[n]限定剪切次数)
    yy复制光标所在行(前方用[n]限定复制次数)
    p 粘贴复制的内容(前方用[n]限定粘贴次数)

    【3】底线命令模式

    按:wq 保存并退出
    用于文件的保存,退出
    :set nu 显示行号
    :set nonu 取消显示行号
    :[任意行] 跳转到指定行
    :w 保存文件
    :q! 不保存退出
    :q 保存并退出
    :wq 保存并退出
    :wq! 强制保存并退出

    4.15 系统命令

    【ps】查看系统的进程

    在Linux中,每一个正在执行的程序都称为一个进程,每个进程都有各自的PID(进程ID)
    查看所有用户的进程信息

    【停止进程】

    kill -9 进程号,其中-9表示一种信号,用于强制终止进程

    4.16 文件权限

    在ls -l下查看文件权限下可以看见9个字符,分别代表不同的权限

  • d:目录
  • -:普通文件
  • l:符号链接文件 (快捷方式)

    后面的9个字符分为3组,每组3个字符,分别代表不同用户的权限。

    • 第一个字符:文件类型(d、-、l)
    • 第二个字符:所有者权限(r、w、x)
    • 第三个字符:所有组权限(r、w、x)
    • 第四个字符:其他用户权限(r、w、x)

    简单来说,那些用户可以对文件执行何种操作。每个文件和目录都有三种类型的权限:读(r)、写(w)、执行(x)。这些权限可以分别应用于文件的所有者,所有组,以及其他用户。
    在Linux中,文件权限通常以数字的形式表示,每个文件或目录都有3个八进制数字,分别代表所有者,组和其他用户的权限,每个数字的范围0-7:
    这个数字的计算方法是:每个权限的权重(r=4,w=2,x=1)相加得到的结果。

  • 读权限(r)=4
  • 写权限(w)=2
  • 执行权限(x)=1
  • 无权限:(-)=0

缺少r权限:不能用ls查看文件内容,不能读取文件内容。
缺少w权限:不能修改(mkdir,touch,cp,mv,rm)文件内容,不能删除文件。
缺少x权限:不能执行文件,不能进入目录。

root可以无视文件权限,对所有文件进行操作。

Linux使用UGO权限模型进行权限控制

  • U代表文件所属用户
  • G代表文件所属组
  • O代表所属用户和用户组的用户之外的其他用户

    【chmod】命令

    用于更变文件或目录的权限

  1. 赋值法:
    chmod 777 文件名
  2. 权重法:
    chmod u+rwx 文件名
    注意:
  3. 权限只能是r、w、x,不能同时有多个权限。
  4. 权限可以组合使用,例如rwx表示读、写、执行权限。
  5. 权限值设置到修改的那一层,如果目录中又其他人的文件,那么其他人的文件权限不会改变。

    4.17 防火墙命令

    【查看防火墙】

    systemctl status firewalld

    【关闭防火墙】下次会重新启动

    systemctl stop firewalld

    【禁用防火墙】

    systemctl disable firewalld

    五、在Liunx中安装软件

    5.1 在Linux中安装JDK

  6. 新建一个文件夹
  7. 切换到software
  8. 将JDK文件上传到/usr/local/software目录中
  9. 删除Linux中自带的JDK
    centos7一般都会带有自己的openJDK,我们使用oralce的jdk,所以要卸载。
    查看系统是否以安装JDK
    卸载已安装的JDK
    验证是否还有JDK
    解压安装包
    【1】在/usr/local目录下创建名为java的目录
    【2】将JDK解压到/usr/local/java目录中
    配置JDK环境变量
    在etc/profile文件最后加上如下内容:按i进入编辑模式,完成后按esc键,在输入:wq保存退出
    内容:复制课件的profile文件即可
    修改文件,需要sources命令重新加载
    验证是否安装成功

    5.2 安装tomcat

    将tomcat上传到/usr/local/software目录下
    将tomcat解压到指定目录
    【1】在/usr/local目录下创建tomcat目录
    【2】将上传的tomcat解压到/usr/local/tomcat
    进入tomcat目录
    启动tomcat
    【1】切换到bin目录中
    【2】启动tomcat
    访问tomcat
    【1】在Linux系统中使用火狐访问浏览器
    http:localhost:8080/
    【2】在宿主机中访问tomcat
    http:ip:8080/

    5.3 安装Mysql

    在安装mysql数据库之前,先检查一下当前Linux系统中,是否安装由Mysql的服务,如果有,就需要先卸载,然后在进行安装。
    通过rpm命令,来查询当前系统中是否存在已安装的mysql软件包
    mariadb是centos7中自带,这个数据库和mysql数据库是冲突的,所以想保证mysql安装成功,需要卸载mariadb数据库

    【上传mysql到Linux并解压】

    上传mysql安装包
    解压到当前目录
    将解压的文件移动到/usr/local目录下,并改名为mysql
    配置系统环境变量
    配置mysql的环境变量,通过vi编辑器/etc/profile文件中
    尾部追加如下内容:
    修改此文件后,需要source命令重新加载

    1
    [root@localhost mysql]# source /etc/profile 

    注册mysql为系统服务

    1
    2
    [root@localhost mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql 
    [root@localhost mysql]# chkconfig --add mysql

    初始化数据库

    1
    2
    3
    4
    5
    6
    7
    8
    # 创建一个用户组,组名叫mysql 
    [root@localhost mysql]# groupadd mysql

    # 创建一个系统用户mysql,并归属用于组mysql
    [root@localhost mysql]# useradd -r -g mysql -s /bin/false mysql

    #初始化mysql
    mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

    执行上述指令时,会输入如下日志。在日志中就会输出mysql中root用户的一个临时密码:

    1
    2
    3
    4
    2025-08-05T03:33:25.304900Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 96881 
    2025-08-05T03:33:25.316845Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
    2025-08-05T03:33:26.963945Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
    2025-08-05T03:33:29.823216Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 6ptfl2zvI*EB

    【启动mysql】

  10. 启动mysql服务
    1
    [root@localhost mysql]# systemctl start mysql 
  11. 通过命令,登录mysql
    1
    [root@localhost mysql]# mysql -uroot -p6ptfl2zvI*EB 
  12. 配置mysql
    修改root用户的密码

    1
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; 

    注意:这个root账号仅能够在本机localhost上访问,我们在windows上是无法访问的,如果需要在window上或其他服务器上也能远程访问,需要创建一个账号,用于远程访问。

  13. 创建账号,并授权远程访问

    1
    2
    3
    4
    5
    create USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234'; 

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

    FLUSH PRIVILEGES;

    语句各个部分说明如下:

  • ALL PRIVILEGES表示授予所有可用的权限
  • ON . 表示对所有数据库中的所有表进行授权
  • TO ‘root’@’%’root是授予权限的用户名,@是分隔符,%允许该用户从任何主机链接到mysql服务
  • FLUSH PRIVILEGES对用户权限或密码的修改立即生效,无需重启mysql服务。

    Nginx

    使用yum安装nginx

1
yum install nginx

修改nginx配置文件

1
find / -name nginx.conf

找到配置文件位置

1
vi /etc/nginx/nginx.conf

nginx.conf配置详情

配置中的关键字:

  • worker_processes :指定nginx工作进程的数量,默认值为1(2)个。auto表示根据系统CPU核心数自动调整进程数量。
  • worker_connections :指定每个工作进程的最大连接数,默认值为1024个。
  • events :配置事件模块,包括连接数、事件处理方式等。
  • use :指定事件处理方式,默认值为epoll。
  • multi_accept :指定是否同时接受多个连接,默认值为off。
  • keepalive_timeout :指定keep-alive连接的超时时间,默认值为65秒。
  • client_header_timeout :指定客户端请求头的超时时间,默认值为60秒。
  • client_body_timeout :指定客户端请求体的超时时间,默认值为60秒。
  • send_timeout :指定客户端发送数据的超时时间,默认值为60秒。
  • listen :指定监听的端口号,默认值为80端口。
  • server_name :指定服务器名称,用于虚拟主机配置。
  • location :指定请求的路径匹配规则,用于反向代理、静态文件服务等。
  • proxy_pass :指定反向代理的目标地址,用于将请求转发给后端服务器。
  • root :指定静态文件的根目录,用于提供静态文件服务。
  • index :指定默认的索引文件,用于提供目录索引服务。
  • try_files :指定尝试匹配的文件路径,用于提供自定义的404错误页面。
  • fastcgi_pass :指定FastCGI服务器的地址,用于处理动态请求。
  • fastcgi_param :指定FastCGI参数,用于传递请求参数给FastCGI服务器。

本地代理,正向代理,反向代理实例:

本地代理完整例子:

1
2
3
4
5
6
location /erp {
proxy_pass http://192.168.1.100:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

或者看下面这种形式的用于读取本地目录

1
2
3
4
location /erp {
root erp;
index index.html;
}

正向代理完整例子:

1
2
3
4
5
6
location /erp {
proxy_pass http://192.168.1.100:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

正向代理和反向代理的区别:

  • 正向代理:客户端发送请求到代理服务器,代理服务器再发送请求到目标服务器,目标服务器返回响应给代理服务器,代理服务器再返回响应给客户端。(转发给目标服务器)
  • 反向代理:客户端发送请求到反向代理服务器,反向代理服务器再根据配置将请求转发给后端服务器,后端服务器处理请求后返回响应给反向代理服务器,反向代理服务器再返回响应给客户端。(转发给集群)

反向代理配置完整例子:

1
2
3
4
5
6
7
location /erp {
proxy_pass http://192.168.1.100:8080;
proxy_pass http://192.168.1.101:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

发现和正向代理的结构类似,但是反向代理是将请求转发给后端服务器,而正向代理是将请求转发给目标服务器。

nginx关键目录

conf :nginx配置文件目录
html :nginx默认的静态文件目录
log :nginx日志目录
sbin :nginx可执行文件目录

nginx负载均衡
nginx负载均衡是指将多个后端服务器组成一个集群,当有请求过来时,nginx根据负载均衡算法将请求分发到不同的后端服务器上,实现负载均衡和高可用。

==服务器集群==
拥有多个后端服务器,每个服务器都有相同的功能和配置,具有高可用,高并发,高性能的特性。

  • 高并发:每个服务器都可以处理多个请求,提高系统的并发能力。
  • 高可用:当某个服务器发生故障时,其他服务器可以继续提供服务,确保系统的可用性。
  • 高性能:每个服务器都有自己的处理能力和资源,能够满足系统的性能需求。

小小吐槽下,虽然可能是在说废话,但是这只是为了别让我闲下来QAQ

首先,我们需要在nginx配置文件中添加负载均衡的配置。

1
2
3
4
5
6
7
# 负载均衡配置
# 放在server块上方
upstream backend {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}

上述ip为后端的负载服务器ip。
然后再在location块中添加负载均衡的配置。
1
2
3
4
5
6
7
location / {
proxy_pass http://backend;
# 传递地址池名字
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

如果要给负载机添加权重,只需要在server块中添加weight参数即可。
1
2
server 192.168.1.100:8080 weight=10;
# 权重为10,默认值为1,权重值越大,负载机会越多。

权重大小:权重值越大,负载机会越多。

负载均衡 + 服务器集群的方案可以实现高可用和高并发,提高系统的性能和稳定性。但是需要注意的是,负载均衡器本身也会成为系统的单点故障,因此需要配置多个负载均衡器组成一个集群,实现高可用。(我们需要保持存活,保持负载均衡器的存活)