Nginx--简介、安装、常用命令和配置文件

news2024/11/15 16:37:49

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

一、Nginx简介

1、nginx介绍

Nginx (engine x) 是一个高性能的 HTTP反向代理 服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

在高连接并发的情况下,Nginx是Apache服务器不错的替代品

2、为什么选择nginx

  • 作为web服务器
  • 作为负载均衡服务器
  • 作为邮件代理服务器
  • Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器

3、IO多路复用

3.1、I/O multiplexing(多并发

第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)

第二种方法就是I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流

I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流。发明它的原因,是尽量多的提高服务器的吞吐能力。 在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流

3.2、Nginx使用epoll接收请求的过程

ngnix会有很多连接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。

epoll:

epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了poll 和select绝大部分问题, 比如:

  • epoll 现在是线程安全的
  • epoll 现在不仅告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找了

3.3、异步、非阻塞

 [root@centos ~]# pstree |grep nginx
 |-+= 81666 root nginx: master process nginx
 | |--- 82500 nobody nginx: worker process
 | --- 82501 nobody nginx: worker process

每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理 的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调

4、Nginx的内部技术架构

  • nginx启动时,会生成两种类型的进程,一个是主进程(Master),一个(windows版本的目前只有一个)或多个工作进程(Worker)。主进程并不处理网络请求,主要负责调度工作进程,也就是图示的三项:加载配置、启动工作进程及非停升级。所以,nginx启动以后,查看操作系统的进程列表,我们就 能看到至少有两个nginx进程。
  • 服务器实际处理网络请求及响应的是工作进程(worker),在类unix系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求
  • 模块化设计。nginx的worker,包括核心和功能性模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。
  • 事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能的采用,如kqueue、epoll及event ports
  • 代理(proxy)设计,可以说是nginx深入骨髓的设计,无论是对于HTTP,还是对于FastCGI、memcache、Redis等的网络请求或响应,本质上都采用了代理机制。所以,nginx天生就是高性能的代理服务器

二、Nginx的安装(Linux:CentOS7)

1、Nginx版本类型

  • Mainline version: 主线版,即开发版
  • Stable version 最新稳定版,生产环境上建议使用的版本
  • Legacy versions: 遗留的老版本的稳定版

2、YUM安装

2.1、配置yum源地址

官网有给出Nginx稳定版的yum仓库源地址; nginx news

2.2、开始配置并下载nginx

 # cd /etc/yum.repos.d/
 # vim nginx.repo
 [nginx-stable]
 name=nginx stable repo
 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=1
 gpgkey=https://nginx.org/keys/nginx_signing.key
 module_hotfixes=true
 # yum install -y nginx

2.3、关闭防火墙与selinux

 # getenforce 
 Enforcing
 # sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
 # systemctl stop firewalld
 # systemctl disable firewalld

2.4、启动并设置开机自启

# systemctl start nginx 
# systemctl enable nginx

2.5、在浏览器输入本机IP即可访问到Nginx默认主页

3、源码编译安装

3.1、安装环境以及相关包

 # 安装编译环境、pcre软件包(使nginx支持http rewrite模块)、openssl-devel(使nginx支持ssl)、zlib包
 yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel

3.2、创建用户nginx

 useradd nginx 

3.3、安装nginx

 [root@centos ~]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
 [root@centos ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/
 [root@centos ~]# cd /usr/local/nginx-1.16.0/
 [root@centos nginx-1.16.0]# ./configure \
 --prefix=/usr/local/nginx \
 --group=nginx \
 --user=nginx \
 --sbin-path=/usr/local/nginx/sbin/nginx \
 --conf-path=/etc/nginx/nginx.conf \
 --error-log-path=/var/log/nginx/error.log \
 --http-log-path=/var/log/nginx/access.log \
 --http-client-body-temp-path=/tmp/nginx/client_body \
 --http-proxy-temp-path=/tmp/nginx/proxy \
 --http-fastcgi-temp-path=/tmp/nginx/fastcgi \
 --pid-path=/var/run/nginx.pid \
 --lock-path=/var/lock/nginx \
 --with-http_stub_status_module \
 --with-http_ssl_module \
 --with-http_gzip_static_module \
 --with-pcre \
 --with-http_realip_module \
 --with-stream
 [root@centos nginx-1.16.0]# make && make install

3.4、配置与启动nginx命令

 # 尝试启动nginx 
 [root@centos nginx-1.16.0]# /usr/local/nginx/sbin/nginx 
 nginx: [emerg] mkdir() "/tmp/nginx/client_body" failed (2: No such file or directory)
 # 检查并创建Nginx所需配置目录文件
 [root@centos nginx-1.16.0]# mkdir -p /tmp/nginx/client_body 
 [root@centos nginx-1.16.0]# mkdir /usr/local/nginx/logs
 # 启动Nginx服务
 [root@centos nginx-1.16.0]# /usr/local/nginx/sbin/nginx
 # 查看nginx服务是否运行
 [root@centos nginx-1.16.0]# netstat -tunlp | grep 80
 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      10390/nginx: master
 # 配置Ngingx命令至环境变量中,便于执行
 [root@centos nginx-1.16.0]# echo -e "export PATH=/usr/local/nginx/sbin/:$PATH" >> /etc/profile
 [root@centos nginx-1.16.0]# source /etc/profile
 [root@centos nginx-1.16.0]# nginx -t

3.5、Nginx编译参数

 # 查看 nginx 安装的模块
 [root@centos nginx-1.16.0]# nginx -V
 # 模块参数具体功能
 nginx version: nginx/1.16.0
 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
 built with OpenSSL 1.0.2k-fips  26 Jan 2017
 TLS SNI support enabled
 configure arguments: 
 --prefix=/usr/local/nginx       # 指向安装目录
 --group=nginx 
 --user=nginx 
 --sbin-path=/usr/local/nginx/sbin/nginx 
 --conf-path=/etc/nginx/nginx.conf               # 指定配置文件
 --error-log-path=/var/log/nginx/error.log       # 指定错误日志
 --http-log-path=/var/log/nginx/access.log       # 指定访问日志
 --http-client-body-temp-path=/tmp/nginx/client_body     # 设定http客户端请求临时文件路径
 --http-proxy-temp-path=/tmp/nginx/proxy         # 设定http代理临时文件路径
 --http-fastcgi-temp-path=/tmp/nginx/fastcgi     # 设定http fastcgi临时文件路径
 --pid-path=/var/run/nginx.pid                   # 指定pid文件
 --lock-path=/var/lock/nginx                     # 指定lock文件
 --with-http_stub_status_module              # 获取nginx自上次启动以来的状态
 --with-http_ssl_module                      # 启用ssl支持
 --with-http_gzip_static_module              # 在线实时压缩输出数据流
 --with-pcre                                 
 --with-http_realip_module                   # # 允许从请求标头更改客户端的IP地址值,默认为关
 --with-stream

3.6、配置文件/etc/nginx/nginx.conf

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的内容如下:

 # ---------------------全局块-------------------# 
 worker_processes  1;        # nginx的工作进程数,auto:基于可用CPU自动确定
 # --------------------事件模块------------------#
 events {
     worker_connections  1024;   # 每个工作进程允许的最大连接数
 }
 # --------------------HTTP配置------------------#
 http {
     include       mime.types;       # MIME 类型
     default_type  application/octet-stream; # 设置默认的 MIME 类型
     sendfile        on;             # 启用高效文件传输模式
     keepalive_timeout  65;          # 设置长连接的超时时间为 65 秒
 ​
     server {
         listen       80;            # 监听端口
         server_name  localhost;     # 服务器的名称或域名
 ​
         location / {                # 位置块,定义对根 URL (/) 的请求如何处理
             root   html;            # 请求的根目录
             index  index.html index.htm;    # 指定当请求是目录,默认提供的文件名
         }
         error_page   500 502 503 504  /50x.html;    # 错误页面
         location = /50x.html {
             root   html;    # 这里的绝对位置是/usr/local/nginx/html
         }
     }
 }

nginx.conf的组成:nginx.conf一共由三部分组成,分别为:全局块、events块、http块。在http 块中又包含http全局块、多个server块。每个server块中又包含server全局块以及多个location块。在统一配置块中嵌套的配置块,各个之间不存在次序关系。

3.7、在浏览器访问

三、Nginx常用命令和配置文件

1、常用命令

命令作用
nginx -c /path/nginx.conf以特定目录下的配置文件启动nginx:
nginx -s reload修改配置后重新加载生效
nginx -s reopen重新打开日志文件
nginx -s stop快速停止nginx
nginx -s quit完整有序的停止nginx
nginx -t测试当前配置文件是否正确
nginx -t -c /path/to/nginx.conf测试特定的nginx配置文件是否正确

nginx -s reload 命令加载修改后的配置文件,命令下达后发生如下事件:

  • Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)
  • Nginx启动新的worker进程,采用新的配置文件
  • Nginx将新的请求分配新的worker进程
  • Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程
  • 重复上面过程,知道全部旧的worker进程都被关闭掉

2、配置文件

  • /usr/share/nginx/html/:网站主目录
  • /etc/nginx/nginx.conf:主配置文件
  • /etc/nginx/conf.d/default.conf:子配置文件

2.1、Nginx配置文件的组成

yum进行安装的nginx配置文件与源码编译安装的nginx配置文件有所不同,其yum安装的配置文件中的server块单独成了一个文件,而源码编译安装的配置文件则在主配置文件中全有;

/etc/nginx/nginx.conf

 # --------------------基础配置------------------#
 user  nginx;        # 设置nginx工作进程运行的用户,nginx表示nginx服务以nginx用户权限运行
 worker_processes  auto;     # nginx的工作进程数,auto:基于可用CPU自动确定
 ​
 error_log  /var/log/nginx/error.log notice; # 指定错误日志的位置和记录级别
 pid        /var/run/nginx.pid;      # 设置存放 NGINX 主进程号的文件位置
 # --------------------事件模块------------------#
 events {
     worker_connections  1024;       # 每个工作进程允许的最大连接数
 }
 # --------------------HTTP配置------------------#
 http {
     include       /etc/nginx/mime.types;    # MIME类型
     default_type  application/octet-stream; # 默认类型
     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"'; # 日志格式
     access_log  /var/log/nginx/access.log  main;    # 访问日志
     sendfile        on;         # 开启高效文件传输模式
     #tcp_nopush     on;
     keepalive_timeout  65;      # 长连接的超时时间
     #gzip  on;      # 对特定类型的响应进行gzip压缩
     include /etc/nginx/conf.d/*.conf;   # 包含其他配置
     }

/etc/nginx/conf.d/default.conf: 精简之后的内容如下 ,当然,这个子配置文件

 server {
     listen       80;        # 监听端口
     server_name  localhost; # 设置服务器的名称或IP地址
 ​
     location / {            # /:匹配所有请求
         root   /usr/share/nginx/html;   # Nginx默认的静态文件存放目录
         index  index.html index.htm;    # 指定当请求是一个目录时,默认返回的文件
     }
 ​
     error_page   500 502 503 504  /50x.html;    # 定义服务器响应某些错误状态时显示的页面
     location = /50x.html {                  # 精确匹配/50x.html的请求
         root   /usr/share/nginx/html;       # 错误页面存放目录
     }   

3、默认首页修改

(1)下面修改首页改为CSDN首页静态页面,先上传文件至/usr/nginx/html/目录下

 [root@centos html]# pwd
 /usr/share/nginx/html
 [root@centos html]# ls
 50x.html  index.html  CSDN
 [root@centos html]# tree -a
 .
 ├── 50x.html
 ├── CSDN
 │   ├── CSDN\ ...
 │   └── index.html      # 修改自己的首页文件名为index.html/或在配置文件中设置首页文件名
 ├── index.html
    └── index.html

(2)修改子配置文件/etc/nginx/conf.d/default.conf:

 [root@centos html]# vim /etc/nginx/conf.d/default.conf
 server {
     listen       80;
     server_name  localhost;
     location / {
         root   /usr/share/nginx/html/3D;    # 修改为自己静态文件目录
         index  index.html index.htm;        # 默认展示目录中的index文件
     }
     ...

(3)检查并重新加载生效

 [root@centos html]# nginx -t
 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 nginx: configuration file /etc/nginx/nginx.conf test is successful
 [root@centos html]# nginx -s reload

(4)在浏览器访问,发现主页已经变成我们设置的静态文件页面

4、Nginx日志文件

nginx 日志文件分为 log_formataccess_log 两部分,其中log_format格式为:

  log_format 样式名称 样式详情

配置文件中默认有:

log_format main 'remote_addr - remote_user [time_local] "request" '	
				'status body_bytes_sent "$http_referer" '
				'"http_user_agent" "http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;
变量说明
http_x_forwarded_for客户端的IP
$remote_user客户端的名称
$time_local访问时的本地时间
$request请求的URL和http协议
$status访问的状态码
$body_bytes_sent发送给客户端的主体内容大小
$http_referer记录客户端是从哪个页面链接访问过来的,若没有链接,则访问'-'
$http_user_agent记录客户端使用的浏览器相关信息

5、使用 limit_rate 限制客户端传输数据的速度

5.1、编辑/etc/nginx/nginx.conf

location / {
			root /var/www/nginx/;
			index index.html index.htm;
			limit_rate 2k;	# 对每个连接的限速为2k/s
}

6、Nginx错误页面配置

nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可

#error_page 404 403 500 502 503 504 /404.html;
location = /404.html {
	root /usr/local/nginx/html;
}

注意:/usr/local/nginx/html/ 路径下必须有404.html这个文件!!!

404.html上如果引用其他文件的png或css就会有问题,显示不出来,因为其他文件的访问也要做配置; 为了简单,可以将css嵌入文件中,图片用base编码嵌入

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式锁实现方案--redis、zookeeper、mysql

分布式锁的几种实现方式 悲观锁和乐观锁分布式锁的实现要求 -- 互斥性、避免死锁、可重入性、高可用行、性能互斥-只能有一个客户端持有锁 -- redis setnx避免死锁引入过期时间 -- redis ttl锁过期问题 -- 自动续期 -- redis释放别人锁问题 -- 锁附加唯一性 -- 给每个客户端设置…

【嵌入式linux开发】智能家居入门6:最新ONENET,物联网开放平台(QT、微信小程序、MQTT协议、ONENET云平台、旭日x3派)

智能家居入门6:最新ONENET物联网开放平台 前言最终现象一、ONENET云平台创建产品与设备二、使用MQTT客户端软件测试2.1 测试前的准备2.2 测试 三、LInux QT代码四、onenet 云端API介绍及微信小程序代码4.1 onenet API介绍4.2 微信小程序代码 五、板端运行 前言 ONE…

LeetCode 热题100-24

回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2: 输入&#xff…

四层负载企业实战

通过四层负载LVSkeepalived将请求转发到nginx代理服务器。通过代理服务器访问后端真实应用服务。 拓补图: 准备环境6台机器; lvskeepalived---两台 nginx代理 ---两台 tomcat----一台 php ----一台 所有机器关闭防火墙和selinux 所有机器解析如下…

APP安全检测报告内容详解

一、APP安全检测的必要性 APP安全检测是确保移动应用安全的重要一环。在开发过程中,由于技术、人员和管理等方面的原因,APP可能存在各种安全漏洞和风险。这些漏洞一旦被黑客利用,可能导致用户数据泄露、恶意代码注入、应用被篡改等严重后果。…

Windows下使用QT5.14.2编译MySQL8.0对应的最新64位驱动程序步骤

不得不说mysql更新的速度是真的快,最近一两年都更新了好几个的小版本了。如果安装了高版本的 mysql软件,低版本的驱动就不支持了,因此需要重新使用QT来编译对应的mysql驱动。具体办法如下: 1、官网下载最新的mysql8.0安装包。下载…

day04--js的综合案例

1.1 商品全选 需求&#xff1a;商品全选 1. 全选 &#xff1a;点击全选按钮,所有复选框都被选中 2. 全不选 &#xff1a;点击全不选按钮,所有复选框都被取消选中 3. 反选 &#xff1a; 点击反选按钮,所有复选框状态取反 <!DOCTYPE html> <html lang"en">…

智慧校园云平台电子班牌系统源码,智慧教育一体化云解决方案

智慧校园云平台电子班牌系统&#xff0c;利用先进的云计算技术&#xff0c;将教育信息化资源和教学管理系统进行有效整合&#xff0c;实现生态基础数据共享、应用生态统一管理&#xff0c;为智慧教育建设的统一性&#xff0c;稳定性&#xff0c;可扩展性&#xff0c;互通性提供…

利用PDAL库实现Las文件向PLY文件的转换

1、官网的下载链接 PDAL&#xff08;Point Data Abstraction Library&#xff09;是一个开源的C库&#xff0c;专门用于处理三维点云数据。它提供了数据读取、转换、过滤、统计分析等多种功能&#xff0c;支持多种数据格式&#xff0c;如LAS、LiDAR、ASCII等。在IT行业中&…

Java常用集合(List、Map)类型相关问题整理

一、背景 针对Java基础集合的部分&#xff0c;对一些常见的问题进行整理&#xff0c;方便后续能够随时复习 二、问题与回答 &#xff08;1&#xff09;Java集合类ArrayList初始化时数组的默认长度是多少&#xff1f; 答&#xff1a;在new ArrayList() 这段代码执行完后&a…

类Unix环境在Windows上的演进史

自从以Unix为基础的操作系统被发明以来&#xff0c;尝试在Windows环境中模仿Unix操作的工具就一直存在。这种需求源于许多原因&#xff0c;包括Unix对脚本和命令行工具的强大支持&#xff0c;以及Unix和Linux系统在科学、工程和其他技术领域的广泛使用。下面就让我们一起探讨下…

input[type=checkbox]勾选框自定义样式

效果图&#xff1a; <template> <input class"rule-checkbox" type"checkbox" checked v-model"isChecked" /> </template><script setup lang"ts"> import { ref } from vue; const isChecked ref(); </…

应急响应-DDOS-技术指南

初步预判 通常&#xff0c;可从以下几方面判断服务器/主机是否遭受DDoS攻击查看防火墙、流量监控设备、网络设备等是否出现安全告警或大量异常数据包。如图所示&#xff0c;通过流量对比&#xff0c;发现在异常时间段存在大量UDP数据包&#xff0c;并且与业务无关。 通过安全设…

猫毛还是满天飞?宠物空气净化器是个好帮手

家里养了几只可爱的小猫咪&#xff0c;每天都想它们贴贴&#xff0c;有时候看到它们这么可爱的待在家里&#xff0c;都不想出门上班了。每天睁眼是它们&#xff0c;闭眼前也是它们&#xff0c;只要我待在家里&#xff0c;它们就和我一起挪动&#xff0c;好像身边多了几只可爱的…

qt-12工具盒(ToolBox)

工具盒--ToolBox drawer.hdrawer.cppmain.cpp运行图 drawer.h #ifndef DRAWER_H #define DRAWER_H #include <QWidget> #include <QToolBox> #include <QToolButton> #include <QGroupBox> #include <QVBoxLayout>class Drawer : public QToolB…

机械学习—零基础学习日志(如何理解线性代数5)

零基础为了学人工智能&#xff0c;正在快乐学习&#xff0c;每天都长脑子 特征向量和特征值 我们知道&#xff0c;线性映射&#xff0c;也就是矩阵&#xff0c;其实就是平面的一种变换。 但是在矩阵变换过程中&#xff0c;我们会发现有一个方向上&#xff0c;变化方向会与x的…

Python 函数式编程 内置高阶函数及周边【进阶篇 3】推荐

前面我们已经总结并实践了用python获取到了数据。也介绍了python中http网络请求的几种方式&#xff0c;正在学习python开发语言或者对python3知识点生疏需要回顾的请点这里 &#xff0c;本章主要总结了函数式编程及特点 和 python中内置的高阶函数及周边知识&#xff0c;方便自…

Scout Suite:开源云安全审计工具

Scout Suite 是一个开源、多云安全审计工具&#xff0c;旨在评估云环境的安全态势。 Scout Suite 利用云供应商提供的 API 来收集和整理配置数据&#xff0c;从而更轻松地识别潜在风险。 Scout Suite 无需手动筛选云 Web 控制台上的大量页面&#xff0c;而是会自动生成全面清…

ObjectUtils.nullSafeEquals你真的用对了吗?

目录 引言排查思考 引言 在写代码时&#xff0c;我们通常喜欢使用org.springframework.util.ObjectUtils#nullSafeEquals来比较两个对象是否相等&#xff0c;从而避免使用equals方法在对象为空时导致空指针异常。 最近在写代码时&#xff0c;我试图使用stream流的filter&#…

1.Linux_常识

UNIX、Linux、GNU 1、UNIX UNIX是一个分时操作系统&#xff0c;特点是多用户、多任务 实时操作系统&#xff1a;来了请求就去解决请求 分时操作系统&#xff1a;来了请求先存着&#xff0c;通过调度轮到执行时执行 2、Linux Linux是一个操作系统内核 发行版本&#xff1…