Linux 面试题-(腾讯,百度,美团,滴滴)
分析日志t.log(访问量),将各个ip 地址截取,并统计出现次数,并按从大到小排序(腾讯)
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html
答案: cat t.txt | cut -d ‘/’ -f 3 | sort | uniq -c | sort -nr
统计连接到服务器的各个ip 情况,并按连接数从大到小排序(腾讯)
netstat -an | grep ESTABLISHED | awk -F " " ‘{print $5}’ | cut -d “:” -f 1 | sort | uniq -c| sort -nr
问题:如忘记了mysql5.7 数据库的ROOT 用户的密码,如何找回? (滴滴)
- 修改 vim /etc/my.cnf
-
添加一句话 跳过权限表 skip -grant -tables 这就意味这你登录的时候不走认证所以空密码也可以登录
-
重启 数据库 mysqld restart 这样刚刚配置的才会生效
在这里插入图片描述
- 登录 mysql -u root -p
-
不输入密码直接回车
-
查看所有的数据库
-
使用 mysql数据库
- 看看有哪些表
-
使用user表 查看这个字段
-
修改这个字段 打马赛克的是自己设的密码
- 刷新权限 flush privileges;
-
退出
-
再打开vim /etc/my.cnf
-
注销第2步的跳过权限认证
- 重启
写出指令:统计ip 访问情况,要求分析nginx 访问日志(access.log),找出访问页面数量在前2 位的ip(美团)
cat access.log | awk -F " " ‘{print $1}’ | sort | uniq -c | sort -nr | head -2
使用tcpdump 监听本机, 将来自ip 192.168.200.1,tcp 端口为22 的数据,保存输出到tcpdump.log , 用做将来数据分析(美团) >>
tcpdump -i ens33 host 192.168.200.1 and port 22 >> /home/tcpdump.log
常用的Nginx 模块,用来做什么(头条)
rewrite 模块,实现重写功能
access 模块:来源控制
ssl 模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module 模块实现定义后端服务器列表
ngx_cache_purge 实现缓存清除功能
如果你是系统管理员,在进行Linux 系统权限划分时,应考虑哪些因素?(腾讯)
- 首先阐述Linux 权限的主要对象
- 根据自己实际经验谈考虑因素
注意权限分离,比如: 工作中,Linux 系统权限和数据库权限不要在同一个部门
权限最小原则(即:在满足使用的情况下最少优先)
减少使用root 用户,尽量用普通用户+sudo 提权进行日常操作。
重要的系统文件,比如/etc/passwd, /etc/shadow etc/fstab,/etc/sudoers 等,日常建议使用chattr(change attribute)锁定,需要操作时再打开。
使用SUID, SGID, Sticky 设置特殊权限。
可以利用工具,比如chkrootkit/rootkit hunter 检测rootkit 脚本(rootkit 是入侵者使用工具,在不察觉的建立了入侵系统途径)
利用工具Tripwire 检测文件系统完整性
权限操作思考题
-
用户tom 对目录/home/test 有执行x 和读r 写w 权限,/home/test/hello.java 是只读文件,问tom 对hello.java
文件能读吗(ok)? 能修改吗(no)?能删除吗?(ok) -
用户tom 对目录/home/test 只有读写权限,/home/test/hello.java 是只读文件,问tom 对hello.java
文件能读吗(no)? 能修改吗(no)?能删除吗(no)?
- 用户tom 对目录/home/test 只有执行权限x,/home/test/hello.java 是只读文件,问tom 对hello.java 文件能读吗(ok)?能修改吗(no)?能删除吗(no)?
- 用户tom 对目录/home/test 只有执行和写权限,/home/test/hello.java 是只读文件,问tom 对hello.java
文件能读吗(ok)? 能修改吗(no)?能删除吗(ok)?
问题:列举Linux 高级命令,至少6个(百度)
netstat //网络状态监控top //系统运行状态lsblk //查看硬盘分区find
ps -aux //查看运行进程chkconfig //查看服务启动状态systemctl //管理系统服务器
问题:Linux 查看内存、io 读写、磁盘存储、端口占用、进程查看命令是什么?(瓜子)
top, iotop, df -lh , netstat -tunlp , ps -aux | grep 关心的进程
使用Linux 命令计算t2.txt 第二列的和并输出(美团)
张三40
李四50
王五60
cat t2.txt | awk -F " " ‘{sum+=$2} END {print sum}’
Shell 脚本里如何检查一个文件是否存在?并给出提示(百度)
if [ -f 文件名] then echo “存在” else echo “不存在” fi
用shell 写一个脚本,对文本t3.txt 中无序的一列数字排序, 并将总和输出(百度)
9
8
7
6
5
4
3
2
10
sort -nr t3.txt | awk '{sum+=$0; print $0} END {print "和="sum}
请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符“cat”的文件名称(金山)
grep -r “cat” /home |cut -d “:” -f 1
请写出统计/home 目录下所有文件个数和所有文件总行数的指令(在金山面试题扩展)
find /home/test -name "*.*" | wc -l
find /home/test -name "*.*" | xargs wc -l
列出你了解的web 服务器负载架构(滴滴)
Nginx
Haproxy
Keepalived
LVS
每天晚上10 点30 分,打包站点目录/var/spool/mail 备份到/home 目录下(每次备份按时间生成不同的备份包比如按照年月日时分秒)(滴滴)
如何优化Linux 系统, 说出你的方法(瓜子)
- 对Linux 的架构的优化,和原则分析(示意图)
- 对linux 系统本身的优化-规则
(1) 不用root ,使用sudo 提示权限
(2) 定时的自动更新服务时间,使用nptdate npt1.aliyun.com , 让croud 定时更新
(3) 配置yum 源,指向国内镜像(清华,163)
(4) 配置合理的防火墙策略,打开必要的端口,关闭不必要的端口
(5) 打开最大文件数(调整文件的描述的数量) vim /etc/profile ulimit -SHn 65535
(6) 配置合理的监控策略
(7) 配置合理的系统重要文件的备份策略
(8) 对安装的软件进行优化,比如nginx ,apache
(9) 内核参数进行优化/etc/sysctl.conf
(10) 锁定一些重要的系统文件chattr /etc/passwd /ect/shadow /etc/inittab
(11) 禁用不必要的服务setup , ntsysv
说明Centos7 启动流程,并说明和CentOS6 相同和不同的地方(腾讯)
第一步、硬件启动阶段
这一步和CentOS6差不多,详细请看图
第二步、GRUB2引导阶段
从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2。
这一步的流程:显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。
第三步、内核引导阶段
这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd
第四步、systemed初始化阶段(又叫系统初始化阶段)
主要区别
CentOS7中我们的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target
(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备操作系统。
接着启动multi-user.target下的本机与服务器服务,
并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。
最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。
注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。
System概述(了解):systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的以来关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。
与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术:A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本