本人花费为期一周的时间,参加了数十家互联网公司的面试,主要方向是linux、容器运维、自动化运维,其中包括IBM、新浪、完美世界等公司。以下是本人参加面试时遇到的考题,希望可以帮助到大家! 崔亮,运维开发工程师,3年工作经验,目前在ibm从事运维开发相关工作,主要研究k8s,prometheus,grafana运维工作,以及vue python开发工作。喜欢分享知识,热衷研究技术。
“机会总是留给有准备的人的”,从作者这一周的面试经历来看,Linux运维工程师必备的基础知识可谓是由点及面、由浅入深。尤其是在云原生潮流趋势下,我们需要持续拥抱新技术、新思想,而不是在自己的舒适区原地踏步。
因此希望有需求的人能够抓住2021年的尾巴,夯实当下Linux运维工程师岗位的知识点,为明年的升值加薪做好准备!
一、linux
1.linux系统启动流程
2.linux文件类型
文件属性 | 文件类型 |
---|---|
- | 常规文件,即file |
d | 目录文件 |
b | block device 即块设备文件,如硬盘;支持以block为单位进行随机访问 |
c | character device 即字符设备文件,如键盘支持以character为单位进行线性访问 |
l | symbolic link 即符号链接文件,又称软链接文件 |
p | pipe 即命名管道文件 |
s | socket 即套接字文件,用于实现两个进程进行通信 |
3.centos6和7怎么将源码安装的程序添加到开机自启动?
4.简述lvm,如何给使用lvm的/分区扩容?
①PV - 物理卷:物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。 ②VG - 卷组:卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。 ③LV - 逻辑卷:逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
①添加磁盘 ②使用fdisk命令对新增加的磁盘进行分区 ③分区完成后修改分区类型为lvm ④使用pvcreate创建物理卷 ⑤使用vgextend命令将新增加的分区加入到根目录分区中 ⑥使用lvextend命令进行扩容 ⑦使用xfs_growfs调整卷分区大小
5.为何du和df统计结果不一致?
6.如何升级内核?
# 添加第三方yum源进行下载安装。
Centos 6 YUM源:http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
Centos 7 YUM源:http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 先导入elrepo的key,然后安装elrepo的yum源:
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 查看可用的内核相关包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum -y --enablerepo=elrepo-kernel install
# 通过下载kernel image的rpm包进行安装。
官方 Centos 6: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
官方 Centos 7: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/
# 获取下载链接进行下载安装即可
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-4.4.185-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-lt-4.4.185-1.el7.elrepo.x86_64.rp
# 查看默认启动顺序
[root@localhost ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (5.2.2-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.21.3.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-e34fb4f1527b4f2d9fc75b77c016b6e7) 7 (Core)
由上面可以看出新内核(4.12.4)目前位置在0,原来的内核(3.10.0)目前位置在1
# 设置默认启动
[root@localhost ~]# grub2-set-default 0 // 0代表当前第一行,也就是4.12.4版本
# 重启验证
7.nginx日志访问量前十的ip怎么统计?
awk '{array[$1]++}END{for (ip in array)print ip,array[ip]}' access.log |sort -k2 -rn|head
8.如何删除/var/log/下.log结尾的30天前的日志?
find /var/log/ -type f -name .*.log -mtime 30|xargs rm -f
9.ansible有哪些模块?功能是什么?
模块 | 功能 |
---|---|
copy | 拷贝文件到被控端 |
cron | 定时任务 |
fetch | 拷贝被控端文件到本地 |
file | 文件模块 |
group | 用户组模块 |
user | 用户模块 |
hostname | 主机名模块 |
script | 脚本模块 |
service | 服务启动模块 |
command | 远程执行命令模块 |
shell | 远程执行命令模块,command高级用法 |
yum | 安装包组模块 |
setup | 查看主机系统信息 |
10.nginx为什么比apache快?
11. 四层负载和七层负载区别是什么?
12. lvs有哪些工作模式?哪个性能高?
13. tomcat各个目录含义,如何修改端口,如何修改内存数?
14. nginx反向代理时,如何使后端获取真正的访问来源ip?
# 在location配置段添加以下内容:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
15. nginx负载均衡算法有哪些?
16. 如何进行压力测试?
例如:模拟10个用户,对百度首页发起总共100次请求。
# 测试命令:
ab -n 100 -c 10 https://www.baidu.com/index.htm
17. curl命令如何发送https请求?如何查看response头信息?如何发送get和post表单信息?
发送https请求:
curl --tlsv1 'https://www.bitstamp.net/api/v2/transactions/btcusd/'
response头信息 :curl -I
get:curl 请求地址?key1=value1&key2=value2&key3=value3
post:curl -d “key1=value1&key2=value2&key3=value3”
二、mysql
1. 索引的为什么使查询加快?有啥缺点?
默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度 缺点:
备份所有数据库文件:/var/lib/mysql/*
备份所有binlog文件: /var/lib/mysql/mysql-bin.*
备份选项文件: /etc/my.cnf
mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db
#先把原来的数据目录改名
mv /var/lib/mysql /var/lib/mysql.old
cp -a /backups/mysql /var/lib
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db
为每个服务器配置唯一值的server-id
开启binlog日志
创建主从复制用户
查看master的状态
change master to设置主库信息
start slave开始复制
BINLOG记录数据库的变更过程。例如创建数据库、建表、修改表等DDL操作、以及数据表的相关DML操作,这些操作会导致数据库产生变化,开启binlog以后导致数据库产生变化的操作会按照时间顺序以“事件”的形式记录到binlog二进制文件中。
(1)InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了; (2)MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用; (3)InnoDB 支持外键,MyISAM 不支持; (4)MyISAM 是默认引擎,InnoDB 需要指定; (5)InnoDB 不支持 FULLTEXT 类型的索引; (6)InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB;需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表; (7)对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引; (8)清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表; (9)InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’
mysql> show variables like 'datadir%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)
.frm文件:保护表的定义
.myd:保存表的数据
.myi:表的索引文件
.frm:保存表的定义
.ibd:表空间
set password for 用户名@localhost = password('新密码');
mysqladmin -u用户名 -p旧密码 password 新密码
update user set password=password('123') where user='root' and host='localhost';
# mysql8初始对密码要求高,简单的字符串不让改。先改成:MyNewPass@123;
alter user 'root'@'localhost' identified by 'MyNewPass@123';
# 降低密码难度
set global validate_password.policy=0;
set global validate_password.length=4;
# 修改成简易密码
alter user 'root'@'localhost'IDENTIFIED BY '1111';
grant all on *.* to user@'%' identified by 'passwd'
show grants for user@'%';
三、nosql
redis 127.0.0.1:6379> SAVE
创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。
只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可
redis 127.0.0.1:6379> CONFIG GET dir
mongoexport / mongoimport
mongodump / mongorestore
https://www.zhihu.com/question/22480085
四、docker
五、kubernetes
kubectl scale deployment redis --replicas=3
kubectl set image deployments myapp-deploy myapp=myapp:v2
kubectl rollout undo deployments myapp-deploy
kubectl describe pods/<pod-name>
kubectl exec -it <pod-name> -c <container-name> bash
Pod的重启策略有3种,默认值为Always。
包含集群参数(CA证书、API Server地址),客户端参数(上面生成的证书和私钥),集群context 信息(集群名称、用户名)。
IPVS模式与iptables同样基于Netfilter,但是ipvs采用的hash表,iptables采用一条条的规则列表。iptables又是为了防火墙设计的,集群数量越多iptables规则就越多,而iptables规则是从上到下匹配,所以效率就越是低下。因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能
六、prometheus
https://blog.csdn.net/wangyiyungw/article/details/85774969**
七、ELK
https://www.cnblogs.com/tcy1/p/13492361.html https://blog.csdn.net/moxiaomomo/article/details/78401400?locationNum=8&fps=1
https://juejin.cn/post/6844903862088777736
八、运维开发
1. 备份系统中所有容器镜像
#备份镜像列表
docker images|awk 'NR>1{print $1":"$2}'|sort > images.list。
#导出所有镜像为当前目录下文件:
while read img; do
echo $img
file="${img/\//-}"
sudo docker save --output $file.tar $img
done < images.list
#将本地镜像文件导入为Docker镜像:
while read img; do
echo $img
file="${img/\//-}"
docker load < $file.tar
done < images.list
pip freeze >> requirements.txt
pip install -r requirement.txt
pip3 install virtualenv
virtualenv --version
cd github/test/venv/
virtualenv test
source test/bin/activate(activate路径)
deactivate
九、日常工作
十、开放性问题