1.linux基础(包括linux命令,基础概念,shell)
1.1 熟悉过哪些操作系统,最好是国产?
- kylin系统:v10 内核:4.19.90
- centos 7.9 内核:3.10.0
- ubuntu 20.04 内核:5.04
- debian 11 内核:5.10
1.2 Linux中有哪些的服务?
- 系统服务
- 网络服务(网络管理器)
- 日志服务(syslog)
- 时间同步服务(ntp)
- 网络服务
- web服务器(nginx)
- 邮件服务(postfix)
- DHCP服务
- 数据库服务
- mysql
- mariadb
- 安全服务
- 防火墙服务(firewalled)(ufw)(iptables)
- 应用程序服务
- Docker引擎
1.3 把资源使⽤率打印出来怎么做?
- top可以查看cpu,内存和进程信息
- free -h 可以查看内存使用情况
- w 可以简单的查看系统运行时间和负载均衡情况
- ps -ef 可以看pid和ppid ps aux 信息更加详细一点
- ss -lntup 可以查看端口
1.4 怎么单拿⼀个进程号?
- 可以使用过滤grep
- ps aux | grep 进程号pid
- ps aux | grep 进程名字
1.5 怎么知道哪些是陌⽣ip出现多少次?
- 使用过滤和管道结合
- grep ip 日志文件 | awk '{print $}' | sort | uniq -c | wc -l
1.6 怎么实现提醒我在运⾏脚本时后⾯跟什么参数?
#!/bin/bash
##############################################################
# File Name:/server/scripts/check.sh
# Version:V1.0
# Author:maixiao lcq
# Organization:......
# Desc:
##############################################################
if [ $# -lt 1 ];then
echo "请输入参数"
else
exit
fi
1.7 怎么判断上⼀条命令是否成功?
- 使用echo $? 判断值是否为0,是则成功,不是则失败
- 或者使用脚本判断
#!/bin/bash
##############################################################
# File Name:/server/scripts/check.sh
# Version:V1.0
# Author:maixiao lcq
# Organization:......
# Desc:
##############################################################
if [ $? -eq 0 ];then
echo "成功"
else
echo "失败"
fi
1.8 找出⼀个⽬录下⾯,三⼗天以前的⽇志⽂件并进⾏删除,使用什么命令?
- 使用find命令
- find /var/log/ -type f -mtime +30 -name "*.log" -exec rm {} \;
1.9 给你⼀台服务器,服务器的磁盘空间是100G,在做磁盘分区的时候根据需求得考虑到后期动态扩容,扩容的时候不影响现有的业务,用什么⼯具去实现?
- 使用LVM工具
1.10 ⽬前有两个镜像包,名字是⼀样的,但是不确定是否是同⼀个⽂件,有什么办法去区分⼀下?
- 比较文件的哈希值,每个文件的哈希值都是不同的
- md5sum 文件名
1.11 5XX状态码是什么问题
- 5xx表示服务端异常
- 502表示网关错误,一般发生在负载处理,请求发送到后面,无法(没人)处理
- 503表示服务临时不可用,有可能是在临时升级服务,后端异常
- 504表示网关超时
1.12 403状态码含义
- 4xx表示客户端问题
- 403权限拒绝问题,还有可能是首页文件问题
1.13 302状态码含义
- 302表示临时跳转
1.14 对云⼚商了解吗?
- 可以更简捷的通过互联网访问各种应用程序和服务,主要类型包括:基础设施即服务(Iaas),平台即服务(Paas),软件即服务(Saas)。
- 最常见的云服务商有:阿里云,腾讯云,华为云,百度智能云等......
1.15 巡检哪些指标?
- cpu使用情况
- 内存使用情况
- 僵尸进程
- 端口进程
- 系统负载
- 磁盘空间
- 日志情况(主要是出现错误的日志)
- 服务运行状态
- 定时任务
1.16 shell脚本写过吗,屏幕共享⼀下写个脚本,判断脚本的参数、参数是任意端⼝,来判断服务的存活、若不存活把服务启动
#!/bin/bash
##############################################################
# File Name:/server/scripts/check.sh
# Version:V1.0
# Author:maixiao lcq
# Organization:......
# Desc:
##############################################################
read -p "请输入端口:" po
if [ "$po" = "0" ];then
echo "请输入端口"
exit
fi
nc -z localhost $po
re=$?
if [ $re -eq 0 ];then
echo "$po 未被占用"
systemctl start nginx
elif [ $re -ne 0 ];then
echo "$po 没有该端口或被占用!"
fi
1.17 全⽹备份通过什么实现的?脚本怎么写的
- 通过rsync和nfs我们可以实现全网备份,加上lsync可以实现实时同步
首先我们需要去实现nfs客户端和web服务的关系,让web挂载到nfs上
-客户端nfs
1.检查是否安装了nfs和rpcbind
2.启动nfs和rpcbind #systemctl enable -now xxx
3.创建挂载目录/nfs/ #mkdir -p
3.修改配置文件/etc/exports # /nfs/ 172.16.1.0/24(rw,all_squash,anouid=9999,anongid=9999)
4.然后我们就得创建虚拟用户 #useradd -u 9999 -s /sbin/nologin -M www
5.然后修改目录权限为虚拟用户www
-web服务
1.创建需要挂载的目录/nfs/web/ mkdir -p /nfs/web/
2.创建虚拟用户,修改目录权限为www的虚拟用户
3.测试挂载,#mount -t nfs 172.16.1.31:/nfs/ /nfs/web/ df -h 查看是否挂载成功
4.修改/etc/fstab 文件实现永久挂载, 172.16.1.31:/nfs/ /nfs/web/ nfs defaults 0 0
-服务端backup
1.检查rsync是否安装
2.安装rsync,启动rsync systemctl enable --now xxx
3.配置rsyncd.conf 文件 在/etc/rsyncd.conf
##rsyncd.conf start##
fake super = yes
uid = rsync #(rsync读写数据时候的虚拟用户)
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
#hosts allow = 172.16.1.41/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup #(这是用户名)
secrets file = /etc/rsync.password #(这是存放密码的文件)
#####################################
[backup]
comment = maixiao server bak
path = /backup #(共享目录)
4.我们可以根据配置文件来配置内容
5.创建rsync的虚拟用户 useradd -s /sbin/nologin -M rsync
5.创建共享目录 mkdir -p /backup/
6.修改目录权限为rsync的虚拟用户 chown -R rsync.rsync /backup/
7.创建密码文件,echo 'rsync_backup:123' >/etc/rsync.password
8.修改密码文件的权限,chmod 600 /etc/rsync.password
9.然后重启rsync服务
10.然后客户端nfs测试 # rsync -avz /etc/hosts rsync_backup@172.16.1.41::data
11.测试成功,则需要配置到nfs客户端
12.nfs客户端需要创建传输密码文件 /etc/rsync.client echo '123' >/etc/rsync.client
13.修改nfs密码文件权限为600
-总结:最后可以写入定时任务
1.18 怎么检查备份的⽂件是否发⽣变化?
- 对比md5sum的哈希值,每个文件的md5sum哈希值是不同的
1.19 怎么查看cpu使⽤率最⾼的进程?
- top 命令是默认按cpu排序的
- ps axu | awk '{print $3,$NF}' | sort -rk1
1.20 如何查看⼀个⽂件的前20⾏
- head -n20 文件
1.21 如何查看⼀个⽂件指定的内容
- grep -i '内容' 文件 (-i表示不区分大小写,-n可以显示行数)
1.22 grep过滤之后如何查看总数呢 ?
- 使用 wc -l 列: grep ..... | wc -l
1.23 如何查看端⼝占⽤呢?
- ss -lntup | grep 端口
1.24 shell中判断上个命令是否执⾏成功?
- 使用$? 来判断返回值是否是0
1.25 if如何判断⽂件或⽬录是否存在?
if [ -d "目录" ] 判断目录的
if [ -f "文件" ] 判断文件的
if [ -e "目录或文件" ] -e可以用来判断文件或目录
1.26 Linux⽤的什么发⾏版本?拿到⼀个新系统做什么优化?常⽤的命令
centos 7.9 内核3.10.0
Kylin v10 内核4.19.90
Ubuntu 20.04 内核5.04
Ubuntu 22.04 内核5.15
优化:
1.可以配置yum源和apt源
2.yum/apt 安装常用的软件
3.配置防火墙
4.同步时间 vim /var/spool/cron/root */3 * * * * /sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1
5.ssh远程连接加速
sed -i '/^GSSAPIAuthentication/s@^@#@g' /etc/ssh/sshd_config 注释已有的配置。
添加 UseDNS no GSSAPIAuthentication no
然后重启sshd
6.配置别名 rm
7.修改命令颜色提示符
........
1.27 Osi7层模型,34层区别,知道的7层协议
1层:物理层
2层:数据链路层
3层:网络层
4层:传输层
5层:会话层
6层:表示层
7层:应用层
3层和4层的区别:3层是基于提供ip地址,进行路由,4层主要是负责tcp可靠连接加端口和udp不可靠连接加端口。
1.28 http状态码
200 表示正常
301 表示永久跳转
302 表示临时跳转
304 表示浏览器缓存
401 表示认证失败
403 表示权限拒绝或首页文件问题
404 表示文件找不到
413 表示web文件限制大小
500 表示内部错误
502 表示网关错误
503 表示服务临时不可用
504 表示网关超时
1.29 Shell 单双引号区别
1.单引号表示所见即所得,单引号里面的内容会原封不动输出,shell(bash)不会解析与运行
2.双引号表示与单引号类似,特殊符号会被解析运行 $ , `` ,不会解析{} (通配符匹配文件名)
1.30 内存过⾼,如何定位
1.先简单通过监控查看问题情况
2.free -h 可以快速看到系统使用内存情况
3.通过top命令可以看到那个进程占用内存过高
4.ps aux 可以看到内存使用情况排序,然后用awk取出内存列,排序,定位到内存过高的进程
1.31 Top命令Cpu每个指标代表什么
us:表示用户cpu
sy:表示系统cpu
ni:表示高优先级
id:表示空闲进程
wa:表示IO等待
hi:表示硬中断
si:表示软中断
st:表示虚拟机
2. nginx
2.1 nginx的优化?
1.系统层面优化,调整TCP连接队列大小(net.core.somaxconn),优化TCP连接的时间参数(net.ipv4.tcp_fin_timeout)
2.nginx配置优化(worker进程数,连接数,HTTP/2协议支持,缓存机制,Gzip压缩)
3.使用负载均衡优化(upstream模块),限流(使用nginx限流模块,limit_req,limit_conn,分别限制用户请求和并发连接数)
4.安全配置优化,使用HTTPS,也可以设置黑白名单限制IP访问
5.使用监控服务,实时监控nginx的性能与情况
2.2 nginx安全措施?
1.可以通过iptables和firewalld等防火墙软件配置安全规则来限制nginx的ip加端口访问
2.使用HTTPS,通过启用SSL/TLS加密保护
3.日志监控和记录
4.更新nginx版本漏洞
2.3 nginx怎么实现跨域访问
使用CORS跨源资源共享
2.4 nginx怎么实现流量限速
通过limit_req_module 模块限制请求频率
通过limit_conn_module模块来限制并发连接数
2.5 四层负载和七层负载的区别
四层表示传输层,而七层表示应用层,四层处理的是tcp和udp的协议,而七层处理的是各种应用层的协议,四层是基于ip和端口进行均衡负载,而七层是基于应用层协议的内容进行负载。
2.6 nginx⽤过哪些参数
全局参数:
user:定义Nginx运行的用户和用户组
worker_processes:Nginx进程数,建议设置为等于CPU总核心数。
error_log:全局错误日志定义类型及路径
pid:进程文件路径
worker_priority:指明worker进程的nice值,数字越小,优先级越高。
事件处理:
worker_connections:单个进程最大连接数
client_header_buffer_size:客户端请求头部的缓冲区大小
accept_mutex:master调度用户请求至worker进程时使用的负载均衡锁。
HTTP配置:
include:导入外部文件
default_type:默认文件类型
keepalive_timeout:长连接超时时间
client_max_body_size:设置通过Nginx上传文件的大小限制
gzip:开启或关闭gzip压缩功能,以减少传输的数据量
log_format:定义日志格式
access_log:定义访问日志的路径和格式
服务器配置:
listen:监听的端口
server_name:提供服务的域名/主机名
location:定义对特定请求的处理规则
root:站点目录
proxy_set_header:在反向代理中设置请求头,如传递客户端IP地址、域名等
ssl_certificate 和 ssl_certificate_key:在配置HTTPS时,指定SSL证书和密钥的路径
2.7 Keepalived配置过吗?
可以用来配置负载均衡的高可用
[precode]
! Configuration File for keepalived
#定义全局,设置全局参数
global_defs {
router_id lb
}
vrrp_instance vip_3 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev ens33 label ens33:1
}
}
vrrp_instance vip_4 {
state MASTER
interface ens33
virtual_router_id 52
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24 dev ens33 label ens33:2
}
}
[/precode]
2.8 nginx的反向代理是怎么配置的?
通过配置nginx的主配置文件或子配置文件,根据需求配置
需要使用proxy_pass指令来配置:如下解释,定义在location规则里
location / {
proxy_pass http://backend-server:8080; # 后端服务器地址与端口
proxy_set_header Host $host; # 保留原始Host头
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递经过代理链的客户端IP列表
proxy_set_header X-Forwarded-Proto $scheme; # 传递原始请求的协议(http/https)
# 其他可选配置,如缓存、超时、重试等
}
2.9 修改配置⽂件以后怎么去重启这个配置⽂件?
nginx可以使用systemctl reload nginx,但是要先检查配置文件是否正常可以使用 nginx -t 检查语法
2.10 tomcat配置⽂件是那个?
/etc/tomcat/conf/web.xml 是子配置文件 /etc/tomcat/conf/server.xml 是主配置文件
2.11 因为tomcat本身默认是在他的配置⽂件的webapp下,如何去改变这个默认的配置路径,部署个别的配置
修改server.xml里面的配置
<Context path="" docBase="ROOT" /> 修改为 <Context path="/new_path" docBase="ROOT" />
/new_path 就是新的配置路径
2.12 nginx——tomcat如何配置项⽬的路径?
tomcat项目目录是放在webapps下面的
nginx配置项目路径一般是在conf.d/目录下的子配置文件里写sever
root /app/ 可以定义站点目录
2.13 为什么使⽤Nginx?
1.高性能
2.稳定
3.功能丰富,模块多
4.简单,易配置
5.轻量级
6.应用场景广泛
2.14 Nginx是怎么做负载均衡的(原理)?
用户发送请求到nginx服务器,Nginx根据配置的负载均衡策略,将请求分发到后端的多个服务器上
2.15 负载都有什么算法?
2.16 怎么配置https?
2.17 Nginx⾼可⽤怎么配置?
2.18 修改配置怎么⽣效呢(什么命令)(原理是什么)?
2.19 前后端分类怎么实现的?
2.20 怎么控制java线程的数量?
使用线程池(ThreadPool)
可以自定义线程数量
ExecutorService executor = Executors.newFixedThreadPool(5);
2.21 轮询算法有⼏种?
2.22 nginx怎么实现反向代理?
2.23 yaml⽂件写过吗?参数知道什么意思吗?
2.24 怎么配置https证书?
2.25 修改nginx配置⽂件后怎么⽣效? 为什么要是有reload呢?
2.26 怎么配置keepalive实现⾼可⽤呢?
3. ansible相关
3.1 ansible如何管理10台机器安装nginx?
1.写好hosts解析,分发秘钥控制10台机器
2.写好剧本
3.2 书写过playbook吗? 怎么写的?
4. docker
4.1 dockerfile怎么写?
4.2 怎么给镜像打标签?
4.3 docker⾥⾯有⼤量⽇志?不想记在容器⾥⾯,要挂到外⾯,宿主机上?
4.4 Dockerfile如何定义环境变量?
4.5 docker⽹络模式有哪些?
4.6 docker 资源限制原理?
4.7 Docker组件有什么
4.8 docker run cmd entrypoint 区别?
4.9 docker ADD copy区别?
4.10 docker run指令执⾏后,⽣成了哪些进程?
4.11 镜像内没有curl,kill,ipconfig等指令如何添加?
4.12 docker镜像保存在哪⾥?
4.13 docker commit⽣成的镜像和dockerfile⽣成镜像区别?
4.14 dockerfile怎么写?
4.15 写过dockerfile吗? 简单说⼀下业务打成镜像流程?
4.16 entrypoint和CMD区别?

Comments NOTHING