linux考试题
1.在登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么(b)
A.NID B.PID C.UID C.CID
答:
w命令查看用户tty终端信息
ps -ef|grep pts/0
2.下面那个用户存放用户密码信息(b)
A./boot B./etc C./var D./dev
3.用于自动补全功能时,输入命令或文件的前1个或后几个字母按什么键(b)
A.ctrl B.tab C.alt D.esc
4.vim退出不保存的命令是(a)
A.:q B.q C.:wq D.:q!
5.文件权限读、写、执行三种符号的标志依次是(a)
A.rwx B.xrw C.rdx D.rws
6.某文件的组外成员的权限是只读、属主是全部权限、组内权限是可读可写、该文件权限为(d)
A.467 B.674 C.476 D.764
7.改变文件的属主的命令是(c)
A.chmod B.touch C.chown D.cat
8.解压缩文件mydjango.tar.gz,我们可以用(a)
A.tar -zxvf mydjango.tar.gz
B.tar -xvz mydjango.tar.gz
C.tar -czf mydjango.tar.gz
D.tar - xvf mydjango.tar.gz
9.检查linux是否安装了,可用哪些命令(b) #注意rpm -qi只能查询用yum安装的软件,编译的查不到
A.rpm -ivh nginx
B.rpm -q nginx
C.rpm -U nginx
D.rpm -x nginx
10.Linux配置文件一般放在什么目录(a)
A.etc B.bin C.lib D.dev
11.linux中查看内存,交换内存的情况命令是(c) #free -m
A.top B.last c.free D.lastcomm
12.观察系统动态进程的命令是(b)
A.free B.top C.lastcomm D.df
13.如果执行命令,chmod 746 file.txt ,那么该文件的权限是(a)
A.rwxr—rw-
B.rw-r—r—
C.—xr—rwx
D.rwxr—r—
14.找出当前目录以及其子目录所有扩展名为”.txt”的文件,那么命令是(d)
A.ls .txt
B.find /opt -name “.txt”
C.ls -d .txt
d.find -name “*.txt”
15.什么命令常用于检测网络主机是否可达? c
A.ssh B.netstat C.ping D.exit
16.退出交互式shell,应该输入什么? d
A:q! B.quit C.; D.exit
17.在父目录不存在的时候,添加的参数是? d
A.-P B.-d C.-f D.-p
18.下列文件中,包含了主机名到IP地址映射关系的文件是? b
A./etc/hostname
B./etc/hosts
C./etc/resolv.conf
D./etc/networks
19.请问你使用的linux发行版是什么?如何查看linux发行版信息?
centos7
cat /etc/os-release
20.请问你公司的服务器环境是物理机还是虚拟化?
500人企:
26台dell power r720服务器,托管在世纪互联
通过vmware esxi虚拟化的280+linux服务器,有100+centos 100+redhat
分为三个环境
测试服务器、预生产服务器、生产服务器
技术栈:
svn 、java、apache、tomcat、oracle、nagios、redhat、centos、weblogic
初创企业:
5台阿里云
21.vim有几种工作模式
命令模式
编辑模式
底线命令模式
22.nginx的主配置文件是?如何实现多虚拟主机?nginx反向代理参数是?
nginx.conf
多个server{}
proxy_pass http://ip
23.如何解压缩后缀是.gz文件?
gipz -d *.gz
24.如何解压缩后缀是.tar文件?
tar -xf .tar
25.如何解压缩后缀是.xz文件?
xz -d .xz
26.www服务在internet最为广泛,采用的结构是?
Browser/Server
27.如何给linux添加dns服务器记录?
/etc/resolv.conf
添加2条主备dns记录
nameserver dns服务器ip
28.每月的5,15,25的晚上5点50重启nginx
ctontab -e
50 17 5,15,25 /usr/bin/systemctl restart nginx
50 17 5,15,25 /opt/nginx112/sbin/nginx -s reload
29.每分钟清空/tmp/内容
/usr/bin/rm -rf /tmp/*
30.每天早上6.30清空/tmp/的内容
30 6 /usr/bin/rm -rf /tmp/
31.每个星期三的下午6点和8点的第5到15分钟之间备份mysql数据到/opt/
5-15 18,20 3 /usr/bin/cp -r /var/lib/mysql /opt/
32.某文件权限是drw-r—rw-,请解读该权限?
d:目录文件
rw- 属主:可读可写
r— 属组:可读
rw- other:可读可写
33.centos版本系统服务管理命令是?
service
systemctl
34.如何远程登录阿里云123.206.16.61?
ssh [email protected]
35.备份mariadb的命令是?
mysqldump -uroot -p
36.简述特殊符号的含义?
root用户的身份提示符
重启定向覆盖写
重定向追加写
$PATH 取值符
. 当前目录
.. 上级目录
37.如果你发现在公司无法使用rm,使用提示’禁止你使用rm’,是为什么?
别名alias
38.如何修改test.py属组为alex?
chgrp alex test.py
39.如何在windows和linux传输文件?有哪些方法?
xftp lrzsz scp
40.如何杀死mariad进程?
pkill mariadb
ps -ef|grep mysql
kill pid
killall mariadb
41.简述dns解析流程?访问www.pythonav.cn的解析流程
自上而下的顺序
1.优先查找本地dns缓存
2.查找本地/etc/hosts文件,是否有强制解析
3.如果没有去/etc/resolv.conf指定的dns服务器中查找记录(需联网
4.在dns服务器中找到解析记录后,在本地dns中添加缓存
5.完成一次dns解析
42.linux如何安装软件?有几种方式?
yum
rpm
源码包
43.出于安全角度,简述如何安装启动redis服务端?
更改端口 port 6380
开启protomode yes安全模式
设置redis密码
redis-server redis.conf
redis.conf 内容如下
port 6380
protomode yes
44.如何保证本地测试环境和线上开发环境一致性?思路?
1.docker打包镜像
2.手动解决环境问题 pip3 freeze导出依赖
pip3 install -r xxx.txt
45.virtualenv是什么?简述如何使用
在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。
如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办?
这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。
1.安装 pip3 install virtualenv
2.创建虚拟环境 virtualenv —no-site-packages —python=python3 venv1
3.激活虚拟环境 sourcce /opt/MyVirtualenv/venvDjango1/bin/activate
4.测试 python3 或者 pip3 list
5.如何证明虚拟环境是正常的?
46.virtulevnwrapper是什么?简述使用
virtualenv 的一个最大的缺点就是,每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环
1.安装虚拟环境 pip3 install virtualenvwrapper
2.创建并进入虚拟环境 mkvirtualenv env1
3.切换虚拟环境 workon 虚拟环境名
redis是什么?
Redis是一个开源的基于内存的,key-value数据结构的缓存数据库,支持数据持久化,m-s复制,常用数据类型有string set hash list,
最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
例如:股票价格、数据分析、实时数据搜集、实时通讯。
Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒
其他nosql数据库?
Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。
只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。
无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。
MongoDB
更高的写负载,MongoDB拥有更高的插入速度,支持高可用性,支持索引高速查询,占用磁盘空间较大,支持持久化
47.redis哨兵是什么?作用是
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案
redis哨兵是监控redis主从服务,不存储数据的,作用是用于自动切换reidis服务主从关系,即当主库服务停止后,会将其中一个从库变为主库
48.redis-cluster是什么?
即使使用哨兵,redis每个实例也是全量数据存储,每个redis存储的内容都是完整的数据。
为了最大化利用内存,可以采用cluster群集,就是分布式存储。即每台redis存储不同的内容。
采用redis-cluster架构正是满足这种分布式存储要求的集群的一种体现。redis-cluster架构中,被设计成共有16384个hash slot。每个master分得一部分slot,其算法为:hash_slot = crc16(key) mod 16384 ,这就找到对应slot。采用hash slot的算法,实际上是解决了redis-cluster架构下,有多个master节点的时候,数据如何分布到这些节点上去。key是可用key,如果有{}则取{}内的作为可用key,否则整个可以是可用key。群集至少需要3主3从,且每个实例使用不同的配置文件。
49.什么是静态资源,什么是动态资源?
nginx实现动静分离,静态请求nginx直接返回
动态请求
uwsgi_pass 后端uwsgi的地址
静态资源指定的是网站的CSS/JS/HTML文件
动态资源一般指的是数据,即后端给前端提供的数据
50.配置linux软连接的命令?
ln -s 目标文件名 软连接名
51.如何永久添加/opt/python36/的环境变量?
/etc/profile 全局变量配置文件,每次机器开机都会加载这个文件中的变量
vim /etc/profile
添加PATH = /opt/python36/bin:
source /etc/profile
52.给如下代码添加注释
server{ # 一个虚拟主机
listen 80; # 监听的端口,访问的端口80
server_name 192.168.11.11; # 访问的域名192.168.11.11
location / { # 访问的路径 /
root html; # 指定页面的目录,访问/会找到html目录
index index.html # 指定网页,访问/就是访问index.html
}
}
server{ #虚拟主机
listen 8080; #nginx监听端口
server_name 192.168.11.11; #nginx访问域名
location / { #location匹配url
include uwsgi_params; #将uwsgi参数添加进nginx
uwsgi_pass 0.0.0.0:8000; #反向代理转发请求给uwsgi
}
}
53.supervisor是什么?如何使用?
supervisor进程管理工具
使用:
1.安装 easy_install supervisor
2.生成配置文件 echo_supervisord_conf > /etc/supervisor.conf
3.写入自定义的配置
vim /etc/supervisor.conf
supervisor其实就在帮我们执行命令而已
检测pid是否存在,挂了就重启
[program:mycrm] ; 项目名称
command=/root/Envs/knight/bin/uwsgi —ini /opt/knight/uwsgi.ini ;启动项目的命令
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
[program:nginx]
[program:mysql]
4.启动supervisor服务
supervisord -c /etc/supervisor.conf
5.启动所有项目
supervisorctl -c /etc/supervisor.conf stop all
54.简述项目部署流程?如何部署路飞,uwsgi+nginx+supervisor+nginx
部署路飞:
1.安装python3 环境
2.安装 mysql,redis,nginx
3.部署前端
1.安装node.js的环境
2.安装依赖包
3.修改axios的发送的端口接口
4.打包
4.部署后端
1.安装virtualenv
2.创建虚拟环境
3.安装django和uwsgi,以及项目的依赖包
4.修改uwsgi的配置文件
5.通过uwsgi -ini 配置文件启动django项目
5.配置nginx
1.创建两个虚拟主机,分别监听80和8000端口
2.访问80端口是访问呢vue
3.访问8000端口是vue发起的8000端口请求,反向代理到9000的uwsgi
6.启动nginx,mysql,redis
7.通过supervisor来管理
55.docker是什么?简述docker优势
linux容器技术实现软件
docker应用于快速构建应用,解决环境依赖等问题
容器生命周期
镜像 容器 仓库 三大生命周期
1.下载镜像,运行出容器实例,通过docker hub 或者 私有容器仓库,管理镜像文件
1.安装启动后,使用
获取docker镜像 ,这个镜像就如同那个iso镜像系统文件
docker pull centos 获取centos镜像文件
安装系统
通过镜像,生成容器实例
docker run centos
容器中必须有进程在后台运行,否则就会挂掉
容器就是将应用程序隔离,如同一个集装箱
class foo():
def init(self):
self.name="我是郭德纲"
f1=foo()
f2=foo()
f3=foo()
1.掌握dockerfile的编写
2.掌握常用docker管理命令即可
56.你常用的docker常用命令有哪些?操作镜像、容器、仓库的命令
docker images # 查看本地镜像
docker serach 镜像 # 通过docker hub搜索镜像
docker rmi 镜像 # 删除镜像
docker save 镜像 > 路径 # 导出镜像
docker load < 路径 # 导入镜像
docker build -t . # 打包生成镜像
操作容器命令:
docker run -d 镜像 解释器 # 根据镜像生成容器,后台允许
docker run -it 镜像 解释器 # 根据镜像生成并进入容器
docker start/stop 容器id # 启动/停止容器
docker ps # 查看当前运行的容器
docker rm 容器id # 删除容器
docker exec 容器id # 进入当前正在运行的容器
docker commit 容器id 镜像名 # 将容器提交为镜像
docker contain ls # 查看当前运行的容器
操作仓库的命令:
docker pull 镜像 # 下载镜像
docker push 镜像 # 推送镜像
57.哪个命令无法查看linux文件内容? d
A.tac B.more C.head D.man
58.使用rm -i 系统会提示什么信息? b
A.命令所有参数
B.是否真的删除
C.是否有写的权限
D.文件的路径
rm -rf -r 递归删除文件夹 -f 强制删除
59.为何说rm -rf 慎用? -r递归删除 -f强制删除
rm -rf -r 递归删除文件夹 -f 强制删除
a60.python操作linux的模块是?
os
subpreocess
sys
61.如果端口8080被占用,如何查看是什么进程? netstat -tunlp | grep 8080
62.redis是如何做持久化的? rdb aof两种机制
rdb
redis.conf
save
Redis会定期保存数据快照至一个rbd文件中,并在启动时自动加载rdb文件,恢复之前保存的数据,通过save指令触发持久化,redis单独开启一个子进程进行数据持久化。
rdb缺点,定期执行,可能会丢失数据,并且数据量特别大时候,如果服务器cpu性能较低,rdb开启子进程持久化性能影响很大,影响redis对外提供服务的能力。
aof
Redis会把每一个写请求都记录(对数据进行修改的命令)在一个日志文件里。
在Redis重启时,会把AOF文件中记录的所有写操作顺序执行一遍,确保数据恢复到最新。
随着AOF不断地记录写操作日志,因为所有的操作都会记录,所以必定会出现一些无用的日志。大量无用的日志会让AOF文件过大,也会让数据恢复的时间过长。
优先:数据安全,不怕数据损坏,如断电灯问题,还可以用redis-check-aof修复数据,AOF文件人为可读
缺点:占磁盘,性能损耗高,数据恢复慢
怎么用rdb和aof
如果既配置了RDB,又配置了AOF,则在进行数据持久化的时候,都会进行,但是在根据文件恢复数据的时候,以AOF文件为准,RDB文件作废
63.简述mysql主从复制原理?
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。
64.创建mysql用户alex,并且授予权限select权限,命令是什么?
grant select on . to alex@’%’;
65.nginx如何实现负载均衡?
upstream {}
66.nginx的负载均衡调度算法有几种?是什么?
调度算法 概述
轮询 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发
67.linux下载软件包的方法有?
wget url地址
curl 也是发起http请求的命令
68.windows和linux常用远程连接工具有哪些?
xshell
putty
securecrt
69.如何给与一个脚本可执行权限
chmod u+x file
70.过滤出settings.py中所有的空白和注释行
grep -v “^#” file |grep -v “^$”
71.过滤出file1中以abc结尾的行
grep “abc$” file1
72.容器退出后,通过docker ps查看不到,数据会丢吗?
docker ps -a #查看所有容器记录
不会丢,因为容器停止了,并没有被删除 docker ps -a可以看到
73.如何批量清理后台停止的容器
docker rm docker ps -aq
反引号的作用是 取出命令的结果
74.如何查看容器日志?
docker logs -f 容器id #实时刷新容器内的日志
75.wsgi是什么?
WSGI是Web服务器网关接口。它是一个协议,描述了Web服务器(nginx)如何与Web应用程序通信(django)。
python3 manage.py runserver wsgi wsgiref单机模块 ,性能很低
uwsgi --socket :8000 --chdir crm.wsgi
在线上,走的协议是 nginx 通过 uwsgi_socket找到 web应用程序 uwsgi
76.Django中使用的是?
答:Django中实现wsgi的是:wsgiref和uwsgi,wsgiref是开发测试用的,uwsgi是线上用的支持多进程,多线程的web应用
Flask中实现wsgi的是:werkzurg
Tornado中实现wsgi的是:tornado和gevent
77.消息队列的作用?
1)程序解耦
2)数据冗余,例如rabbitmq的ack机制,消息确认机制
3)削峰能力
4)可恢复性,就算系统中部分组件挂掉,消息在队列也不丢失,待组件恢复后继续处理消息。
5)异步通信,如发红包,短信等流程丢入队列,可以优先级很低的去处理。
78.服务器被攻击,吃光了所有的CPU资源,怎么办?禁止重装系统
1.查看系统负载情况例如使用 top命令
2.杀死无用的 占资源的进程
3.系统全局搜索,找到病毒文件, rm -rf 删掉它
4.还需要检查定时任务,是否添加了些东西
git常用命令
1:git init—————————初始化
2:git add .————————-从工作区,添加到版本库
3:git commit -m”xxx”————从暂存区,添加到分支
4.git push origin master
4:git status————————查看状态
5:git log —————————查看版本库的日志
6:git reflog————————查看所有日志
7:git reset —head 版本号—-切换
8:git stash————————-保存
9:git stash————————-将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash list——————————————————————————查看“某个地方”存储的所有记录
git stash clear—————————————————————————-清空“某个地方”
git stash pop——————————————————————————-将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply —————————————————————————编号,将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
git stash drop —————————————————————————编号 ,删除指定编号的记录
10:git branch dev—————创建分支
11:git branch -d dev———-删除分支
12:git checkout dev————切换分支
13:git merge dev—————-合并分支
14:git branch———————查看所有分支
15:git clone https:xxx——-克隆
16:git add origin https:xxx-起个别名
17:git push origin dev ——添加到dev分支
18:git pull origin master—拉代码
19:git fetch origin master-去仓库获取
20:git merge origin/master-和网上下的master分支合并
协同开发:
默认是master分支——————————master
开发的分支—————————————dev
做代码review————————————reciew
程序员自己的分支——————————…….
1:每个员工创建自己的分支
2:将自己的代码提交的到自己的分支—————xxx,sss,wwww…….
3:由组长或老大做代码的review,——————-代码提交的review分支
4:再提交到dev.
5: 再合并到master分支
熟悉 Linux常用操作。
1:man rm———————————————查看命令帮助
2:mkdir———————————————-创建目录
3:touch———————————————-创建文件
4:cd—————————————————切换。
5:ls—————————————————查看目录
6:ls -lh————————————————查看目录详细
7:pwd————————————————-查看当前目录
8:vim————————————————-添加内容
9:echo————————————————追加内容
10:cat————————————————查看文件内容
11:mv————————————————-移动
12:cp————————————————-拷贝
13:mv————————————————重命名
15:find———————————————-搜索
16:rm————————————————-删除数据
17:ping———————————————-查看能不能上网
19:tar cf ————————————————打压缩
20:tar xf——————————————-解压缩
安装:
yum install
rpm包安装
编译安装
快捷键:
1:Tab键—————————————-自动补全命令或路劲。
2:ctrl+l—————————————清屏
3: ctrl+c—————————————取消当前操作
4:vi/vim 快捷键:
复制当前行 ——————————yy
粘贴—————————————-p
剪切—————————————-dd
撤销—————————————-u
恢复—————————————-ctrl + r