Linux----知识储备
----------------------------------------------------------------------基础----------------------------------------------------------------------------------- 0:查找linux中所有有毒的进程,并将有毒的进程杀掉? 答: 1:连接工具连接不上linux: (1):ping一下。--------------------------------------------------------->检查网卡是否启动。 (2):IPtable Selinux---------------------------------------------------->是否有网络劫持 (3):telent ip地址 端口------------------------------------------------->是否提供想要的服务 2:linux无法上网: 确认是否是DNS问题----------------------------------------------------->ping 223.5.5.5或者ping 114.114.114.114 修复网卡DNS-----------------------------------------------------------> vim /etc/sysconfig/network-scripts/ifcfg-eth0 3:端口: 22-------------------------------------------------------------->远程连接端口 80--------------------------------------------------------------> 8080------------------------------------------------------------> 443-------------------------------------------------------------> 4:基本命令: 1:Standard commands(标准命令) 2:System calls(系统调用) 3:Lisbrary functions(系统调用) 4:Special devices(设备说明) 5:FIle formats(文件格式) 6:Games and toys(游戏和娱乐) 7:Miscellaneous(杂项) 8:Adminisrative Commands(管理员命令) 目录:---------------------------------------------------------:mkdir man rm----------------------------------------------------------------->查看帮助命令 history---------------------------------------------------------------->查看命令历史 mkdir------------------------------------------------------------------>创建目录 ls--------------------------------------------------------------------->查看目录 ls_l------------------------------------------------------------------->查看详细目录 pwd-------------------------------------------------------------------->查看当前目录 cd--------------------------------------------------------------------->切换目录 文件:---------------------------------------------------------:touch touch------------------------------------------------------------------>创建文件 cat-------------------------------------------------------------------->查看文件内容 head------------------------------------------------------------------->查看文件头几行 tail------------------------------------------------------------------->查看文件末尾几行 more------------------------------------------------------------------->一页一页查看文件 vim-------------------------------------------------------------------->打开编辑器,编辑文件 echo------------------------------------------------------------------->追加文件(echo"文件内容">>追加文件,>清空文件并追加) cp--------------------------------------------------------------------->拷贝文件 mv--------------------------------------------------------------------->移动文件 bak-------------------------------------------------------------------->备份文件 avi-------------------------------------------------------------------->重命名 rm--------------------------------------------------------------------->删除文件(rm "文件" -f[强制删除],rm "文件" -r[删除目录],rm"文件" -ff[强制删除目录]) find -type f -name "文件"---------------------------------------------->搜索文件(find -type d -name "目录") cd ../../-------------------------------------------------------------->退出到上级目录 .. 当前目录的上级目录 . 当前目录 管道:---------------------------------------------------------:将前面的结果当做后面的输出(|),将标准输出当做命令的参数(|xrange) -:find /root/ -type f -name "*.log" |xargs ls -l -:find / -type f -name "*.txt" -size +1M |xargs ls -l 生成序列:-----------------------------------------------------:seq -: seq 10 -1 1--------------------------------------------生成序列 -: seq 10 -1 1 >nginx.conf--------------------------------文件中添加序列号 -: cat -n nginx.conf--------------------------------------显示行号 vi/vim: :set nu-----------------------------------------------显示行号 :set number :set nonu---------------------------------------------不显示行号 G-----------------------------------------------------快速到达文件最后一行 gg----------------------------------------------------快速到达文件第一行 10gg--------------------------------------------------快速到达文件某一行 压缩解压缩:---------------------------------------------------:tar tar zcf /tmp/etc.tar.gz/ /etc/-----------------------------创建压缩包(tar zcf) z ========= gzip 软件进行压缩 .tar.gz c ========= create 打包,创建包 v ========= verbose 显示过程 f ========= file 指定压缩包 tar tf /tmp/etc.tar.gz--------------------------------------查看压缩包(tar tf) cd /tmp/ tar xf etc.tar.gz tar xf etc.tar.gz-------------------------------------------解压到当前目录(tar xf) 创建多级目录:-------------------------------------------------:mkdir -p /1/2/3 替换-----------------------------------------------------------:sed -: sed 's#oldboy#oldgirl#g' t.sh---------------------------替换 -:sed 's#oldboy#oldgirl#g' t.sh---------------------------把/oldboy目录及其子目录下所有以扩展名 .sh结尾的文件中,文件包含oldboy的字符串全部替换为oldgirl -:find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' 备份并修改:----------------------------------------------------:sed i.bak t.sh -:sed -i.bak 's#oldboy#oldgirl#g' t.sh-----------------------备份并修改 查看文件内容:-------------------------------------------------:cat t.sh -: cat t.sh--------------------------------------------查看文件内容 -: find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' -i -: find /oldboy/ -type f -name "*.sh"|xargs cat -:find /oldboy/ -type f -name "*.sh"|xargs cat 查看区间:-----------------------------------------------------:awk -:awk 'NR==20' ett.txt -:awk 'NR>=20 && NR<=30' ett.txt mysql基本命令:------------------------------------------------:mysql mysql mysql -p mysqladmin password 123456 进入数据库内,create database pip基本命令 pip3 freeze >requirements.txt 打包你下载过的模块 pip3 install -r requirements.txt 日常debug命令: ps aux|grep------------------------------------查看进程 ss -lnp|grep-----------------------------------看端口 telnet 127.0.0.1 6379--------------------------连接端口测试 kill -----------------------------------------结束进程 curl-------------------------------------------域名 权限:----------------------------------------------------------: chmod chmond---------------------------------------------数字 chown----------------------------------------------字母 重定向:-------------------------------------------------------:command 输入重定向------------------------------command-line <file 输出重定向------------------------------command > filename 查看进程:-----------------------------------------------------:ps 创建用户:-----------------------------------------------------:mkuser 计算文件的行数:-----------------------------------------------:wc 其他: 查看用户ID------------------------------------------: id root 账号建立时自动创建(为初始组)------------------------:gid 一个用户属于初始组,后续新增的----------------------:groups 查看进程--------------------------------------------: 5:软件安装: yum 安装:----------------------------------------------------->自己解决依赖: yum。 yum install nginx rpm包安装:---------------------------------------------------->自己手动解决依赖:rpm。 查询软件是否安装------------------------------------------- rpm -qa 查询软件包的内容------------------------------------------- rpm -ql 安装rpm包-------------------------------------------------- rpm -ivh 编译安装:----------------------------------------------------->自己下载包:make。 6.显示磁盘使用情况-------------------------------------------------:df -h 挂载 --------------------------------------------- mount 显示前几行的内容 默认前10行 --------------------- head 显示最后几行的内容 默认最后10行 ----------------- tail 显示前5行----------------------------------------- head -5 /etc/passwd 7:关闭iptables和selinux--------------------------------------------:关闭防火墙 iptables: 1.临时关闭防火墙-重启后失效(关两次,一次可能关不了)------------------- /etc/init.d/iptables stop ------------------------------------------ /etc/init.d/iptables stop 2.永久关闭防火墙-重启服务器之后生效,开机自启动 ---------------------- chkconfig iptables off 查看全部开启状态------------------------------------------ chkconfig 查看iptables开启状态-------------------------------------- chkconfig |grep iptables selinux: 1.临时 -重启服务器之后失效 查看当前selinux状态---------------------------------------- getenforce 查看当前selinux状态码(用于切换)---------------------------- setenforce usage: setenforce [ Enforcing | Permissive | 1 | 0 ] 关闭selinux------------------------------------------------ setenforce 0 2.永久 -重启服务器之后生效 查找:----------------------------------------------------- sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 备份:----------------------------------------------------- sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 关闭:----------------------------------------------------- grep 'disabled' /etc/selinux/config 8:运行级别: 0:关机状态 1:单用户模式 重新设置root密码 √ 2:多用户模式 没有NFS(存储 ) 3:完全的多用户模式 命令行模式 文本模式 √ 4:未被使用的 5:桌面模式 图形界面模式 √ 6:重启状态 命令: 1:查询当前用户的运行级别-------------------------------------------- runlevel 2:临时修改运行级别-------------------------------------------------- init 4 3:永久修改运行级别-------------------------------------------------- runlevel 3 4 4: ------------------------------------------------- tail -1 /etc/inittab 5: ------------------------------------------------- cat /etc/redhat-release 6: ------------------------------------------------- uname -r 如何进入单用户状态: · 重启后按任意键进入单用户模式-------->进入GRUB菜单-------->按a编辑内核参数-写入1或single------->成功进入单用户 -------->选择kernel这行 按e编辑系统信息-------->编辑内核信息加上1或single编辑后按回车-------->编辑内核后按b进入当用户模式 1:重启-------------------------------------------------------------- shutdown -r 10 2:取消-------------------------------------------------------------- Ctrl+c --------------------------------------------------------------- shutdown -c 如何进入救援模式(*非特殊情况谨慎使用)------------------------------------ resuce installed system 9:添加新用户: ---------------------------------------------------:useradd 添加用户:----------------------------------------------------------- useradd oldboy 1:查看添加的用户------------------------------------------------ id oldboy 2: 查看当前用户-------------------------------------------------- id 设置密码:----------------------------------------------------------- passwd oldboy 切换用户:----------------------------------------------------------- su - oldboy 查看当前用户:----------------------------------------------- whoami 退出当前用户:----------------------------------------------- Ctrl+d sl--------------------------------小火车 10:定时任务:-----------------------------------------------------:crontab 1:查看定时任务(list)-----------------------------------------------------crontab -l 2: 编辑定时任务(edit)-----------------------------------------------------crontab -e 每天的晚上12点准时回家开车(go to bed)-----------------------------------00 00 * * * go to bed 每天的早上8点30分来学校上车(go to school)-------------------------------30 08 * * * go to school 3:定时任务中的特殊符号1. * 每 ,每分钟把自己的名字 追加到/tmp/oldboy.log中 (1):测试每分钟把自己的名字 追加到/tmp/oldboy.log中------------------------ echo oldboy >>/tmp/oldboy.txt (2):查看------------------------------------------------------------------ cat /tmp/oldboy.txt (3):写入定时任务,修改定时任务内容,并检查--------------------------------- crontab -l (4):修改定时任务---------------------------------------------------------- crontab -e #print name to file by oldboy at 20181111 * * * * * echo oldboy >>/tmp/oldboy.txt (6):查看------------------------------------------------------------------ tail -f /tmp/oldboy.txt (7):查看定时任务的日志---------------------------------------------------- ls -l /var/log/cron 4. */10 每3分钟同步一下系统的时间 ,/usr/sbin/ntpdate (1):同步阿里云时间-------------------------------------------------------- /usr/sbin/ntpdate ntp1.aliyun.com (2):查看当前时间---------------------------------------------------------- date 手动修改(不推荐)------------------------------------------------------ date -s "20180101" (3):查看定时任务---------------------------------------------------------- crontab -l (4):添加定时任务--------------------------------------------------------- crontab -e #sync time by oldboy at 20181111 */3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com (5):退出并保存------------------------------------------------------------- :wq (6):查看定时任务的日志----------------------------------------------------- ls -l /var/log/cron 5:要把定时任务中命令或脚本的执行 定向到空或追加到文件 /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1 echo oldboy >>/tmp/oldboy.txt 2>&1 11:上传下载文件:-------------------------------------------------: rz,sz 用户访问系统的记录(看是否有人破解你的密码)----------------------------------- ll /var/log/secure windows文件上传到linux------------------------------------------------------- rz .tar.gz 把Linux文件下载到windows----------------------------------------------------- sz .tar.gz .zip--------------------------------------------------------------------- 压缩包是linux和windows默认支持的。 下载压缩包------------------------------------------------------------------- wget http://nginx.org/download/nginx-1.12.2.tar.gz xshell------------------------------------------------------------------- 远程连接 xftp ftp工具------------------------------------------------------------- 上传大文件 https://www.netsarang.com/download/down_form.html?code=523--------------- xftp下载网址 查看日志: 1.less f或空格向下一页 b上一页 2.head/tail 3.grep grep 'Failed password' secure-20161219 12:nginx: 下载nginx包--------------------------------------------------------------------------------- wget http://nginx.org/download/nginx-1.12.2.tar.gz 编译安装nginx前的准备: 1.添加一个用户: 创建虚拟用户(linux每个进程要有一个对应的用户)------------------------------ useradd -s /sbin/nologin -M www 查看这个用户--------------------------------------------------------------- id www ---------------------------------------------------------------- su - www 2.安装nginx依赖软件包 pcre-devel------------------------------------- perl语言的兼容正则表达式 openssl-devel---------------------------------- https 安装------------------------------------------------------------------------- yum install pcre-devel openssl-devel -y 查看是否安装----------------------------------------------------------------- rpm -qa pcre-devel openssl-devel 查看------------------------------------------------------------------------- ll /mnt/Packages/pcre-devel-7.8-7.el6.x86_64.rpm /mnt/Packages/openssl-devel-1.0.1e-57.el6.x86_64.rpm 3.编译安装nginx: 1:解压nginx安装包------------------------------------------------------------- tar xf nginx-1.12.2.tar.gz 2:cd到root目录下的nginx-1.12.2------------------------------------------------ cd nginx-1.12.2 3:安装------------------------------------------------------------------------ ./configure --user=www --group=www --prefix=/application/nginx-1.12.2 --with-http_stub_status_module 参数: --with-http_ssl_module --user 用户 --group 用户组 --prefix 安装到哪里 两个模块--with-http_stub_status_module --with-http_ssl_module 4:--------------------------------------------------------------------------- echo $? 5:--------------------------------------------------------------------------- make 6:--------------------------------------------------------------------------- make install 7:--------------------------------------------------------------------------- md5sum /root/nginx-1.12.2.tar.gz 4d2fc76211435f029271f1cf6d7eeae3 /root/nginx-1.12.2.tar.gz 8:--------------------------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx -t nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful 9:--------------------------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx 10:-------------------------------------------------------------------------- ss -lntup|grep 80 tcp LISTEN 0 128 *:80 *:* users:(("nginx",4377,6),("nginx",4378,6)) 11:-------------------------------------------------------------------------- pwd(若在root目录,cd到下面目录) /application/nginx-1.12.2 12:-------------------------------------------------------------------------- ll total 36 drwx------ 2 www root 4096 Mar 15 10:31 client_body_temp drwxr-xr-x 2 root root 4096 Mar 15 10:00 conf------------------------- nginx配置文件的目录 drwx------ 2 www root 4096 Mar 15 10:31 fastcgi_temp drwxr-xr-x 2 root root 4096 Mar 15 10:00 html------------------------- nginx站点目录 网站的根目录 drwxr-xr-x 2 root root 4096 Mar 15 10:31 logs------------------------- nginx日志 drwx------ 2 www root 4096 Mar 15 10:31 proxy_temp drwxr-xr-x 2 root root 4096 Mar 15 10:00 sbin------------------------- nginx命令 drwx------ 2 www root 4096 Mar 15 10:31 scgi_temp drwx------ 2 www root 4096 Mar 15 10:31 uwsgi_temp 13:显示树形结构--------------------------------------------------------------- tree 优雅的重启nginx ---------------------------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx -s reload 关闭nginx 然后开启-------------------------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx -s stop ---------------------------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx 搭建www.etiantian.org网站流程 1.修改nginx.conf文件 查看---------------------------------------------------------------------------- cat conf/nginx.conf 添加内容------------------------------------------------------------------------ vim conf/nginx.conf 按小写字母i------------------------------------------------------进入编辑模式 esc--------------------------------------------------------------退出编辑模式 :wq---------------------------------------------------------------退出并保存 :q!---------------------------------------------------------------强制退出不保存 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.etiantian.org; location / { root html/www; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 2.创建环境 --------------------------------------------------------------- mkdir -p /application/nginx-1.12.2/html/{www,bbs,blog} ----------for name in www bbs blog;do echo $name.etiantian.org> /application/nginx-1.12.2/html/$name/index.html ;done --------------------------------for name in www bbs blog;do cat /application/nginx-1.12.2/html/$name/index.html ;done 3.检查语法并重启 --------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx -t nginx: the configuration file /application/nginx-1.12.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.12.2/conf/nginx.conf test is successful -------------------------------------------------------- /application/nginx-1.12.2/sbin/nginx -s reload 4.windows测试 浏览器(注意缓存) (1)修改 \etc\hosts 10.0.0.200 www.etiantian.org bbs.etiantian.org blog.etiantian.org (2)浏览器测试 5.Linux命令行测试 -------------------------------------------------------- curl -vH Host: www.etiantian.org 10.0.0.200 排错流程: 1.linux命令行是否能显示 ------------------------------------------------------ curl -vH Host:www.etiantian.org 10.0.0.200 2.windows 本地shell ---------------------------------------------------------- ping 搭建多个网站: 流程相同,只是在nginx.conf 多来几个server。 [root@oldboyedu-s6 nginx-1.12.2]# cat conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.etiantian.org; location / { root html/www; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name bbs.etiantian.org; location / { root html/bbs; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name blog.etiantian.org; location / { root html/blog; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 测试: --------------------------------------------------------- curl -H Host:bbs.etiantian.org 10.0.0.200 bbs.etiantian.org --------------------------------------------------------- curl -H Host:blog.etiantian.org 10.0.0.200 blog.etiantian.org 13:linux启动过程: Linux是一种自由和开发源代码的类Unix操作系统。 整个过程基本可以分为:POST---->BIOS---->MBR(GRUB)---->Kernel---->Init---->Runlevel。 Blos:---------------------------------硬件检测 MBR:----------------------------------存储BootLoader信息,加载磁盘上的MBR GRUB:---------------------------------查找并加载kernel kernel:-------------------------------卸载驱动,挂载rootfs,执行/sbin/int init:---------------------------------OS初始化,执行runlevel相关程序 Runlevel:-----------------------------启动指定级别服务 14:如何重置mysql root密码? 一:在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法: 1:在shell环境下,使用mysqladmin命令设置: mysqladmin –u root –p password “新密码” 回车后要求输入旧密码 2:在mysql>环境中,使用update命令,直接更新mysql库user表的数据: 9999999 Update mysql.user set password=password(‘新密码’) where user=’root’; flush privileges; 注意:mysql语句要以分号”;”结束 3:在mysql>环境中,使用grant命令,修改root用户的授权权限。 grant all on *.* to root@’localhost’ identified by ‘新密码’; 二如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下: 1:关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务) 2:使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务 /usr/local/mysql/bin/mysqld_safe --skip-grant-table & 3:使用空密码的root用户登录数据库,重新设置ROOT用户的密码 #mysql -u root Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’; Mysql> flush privileges; 15:nginx优缺点 Nginx的优点是: 1:工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构 它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一 Nginx单凭这点可利用的场合就远多于LVS了。 2:Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一 相反LVS对网络稳定性依赖比较大,这点本人深有体会; 3:Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来 LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。 4:可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。 5:Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等, 并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件, 而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了 如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。 6:Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器 LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。 7:Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器 8:Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了 不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃 9:Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多 Nginx的缺点是: 1:Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点 2:对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测 不支持Session的直接保持,但能通过ip_hash来解决 LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器 它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability) 16:mysql数据备份工具 mysqldump工具 mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump 支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景 Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。 基于LVM快照备份 在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录 进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别 而innodb不开启独立表空间的话只能备份整个数据库。 tar包备份 percona提供的xtrabackup工具 支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同 数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展 可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份 39:请写出下面 linux SecureCRT 命令行快捷键命令的功能? Ctrl + a —->光标移动到行首 Ctrl + e —->光标移动到行尾 Ctrl + c —->终止当前程序 Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断 Ctrl + l —->清屏 Ctrl + u —->剪切光标以前的字符 Ctrl + k —->剪切光标以后的字符 Ctrl + y —->复制u/k的内容 Ctrl + r —->查找最近用过的命令 tab —->命令或路径补全 Ctrl+shift+c —->复制 Ctrl+shift+v —->粘贴 17. OSI7层模型? 答: 物理层,数据链路层,网络层,传输层,表示层,会话层,表示层,应用层。 18. Http和Https? 答: http是超文本传输协议,是一个基于TCP/IP通信协议来传送数据,属于应用层的面向对象协议。 http工作于客户端,浏览器作为HTTP客户端通过URL向http服务端(web服务器)发送请求,创建一个TCP连接,指定端口号,默认是80。 然后连接到服务器工作。在那个端口监听浏览器请求。一旦监听到客户端请求,分析请求类型后, 服务器会向客户端返回一个响应状态,比如"HTTP/1.0 404 OK",同时会返回特定的数据内容。-------如请求的资源,错误代码,其它状态信息等等。 主要体现在短连接,无状态。 **:请求头和请求体是通过什么分割的,两个/r/n。 ** ,一个/r/n 请求包括:请求首行,请求头信息,空行,请求体。 响应包括:响应行,响应头,响应体,状态码等 1.域名解析 2. 发起TCP的3次握手 3. 建立TCP连接后发起http请求 4. 服务器端响应http请求,浏览器得到html代码 5. 浏览器解析html代码,并请求html代码中的资源 6. 浏览器对页面进行渲染呈现给用户 19. ARP协议? 答:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址; 收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息, 其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文, 使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。 ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 20. TCP和UDP区别? 答:tcp:可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。 使用TCP的应用:Web浏览器;电子邮件、文件传输程序。 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 udp:不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。 使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。 udp是无链接的,先启动哪一端都不会报错 21.ftp协议? 答: 文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。 FTP的目标是提高文件的共享性和可靠高效地传送数据。 在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。 FTP 协议与操作系统无关,任何操作系统上的程序只要符合 FTP 协议,就可以相互传输数据。本文主要基于 LINUX 平台, 对 FTP 客户端的实现原理进行详尽的解释并阐述如何使用 C 语言编写一个简单的 FTP 客户端。 22. DNS解析? 答: 人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,一个ip地址不一定只对应一个域名, 且一个域名只可以对应一个ip地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。 1:用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话, 2:就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器, 3:一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器, 4:二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com, 5:然后发给请求的服务器,保存一份之后,再发给客户端 23. 三次握手、四次挥手? 答: 三次握手:是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。 一次握手:客户端发送一个TCP的SYN标志位置1的包。----------指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 二次握手:服务器发回确认包(ACK)应答。---------------------即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1 三次握手:客户端再次发送确认包(ACK)。--------------------SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1 三次握手完成,客户端与服务器开始传送数据。 三次握手目的:同步连接双方的序列号和确认号,并交换TCP窗口大小信息 四次挥手: 四次挥手:就是TCP的连接关闭需要发送四个包,因此称为四次挥手(four-way handshake)。-----------------------------客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。 1. 主动关闭一端会向被动端发送FIN终止信号序列,关闭数据传输。--------------------------------------------------主动端状态变为FIN_WAIT_1。此时关闭了主动端向被动端的数据传输。 2. 被动端收到FIN后,向主动端发送一个ACK序列(值为FIN序号加1),此时被动端向主动端的数据传输还没有关闭。-------完成发送后被动端状态置为CLOSE_WAIT,此时被动端向主动端的数据传输还没有关闭。 3. 主动端收到被动端发送的ACK响应序列,被动端关闭与客户端的连接,向主动端发送一个FIN终止信号序列。-------------被动端状态会切换为LAST_ACK(最后一个响应状态)。 4. 主动端收到被动端发出的FIN,接着发送ACK响应序列到被动, 被动端收到ACK后,释放掉socket资源。------------------ 为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。 其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时, 很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。 只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。: 24. 路由器和交换机的区别? 答:交换机用来共享一根网线,路由器用来共享一个IP。 也就是说,如果一根网线上想接几个电脑,就必须用"交换机", 如果你只有一个IP,想几个电脑上网,就要用路由器来解决。 比如宽带路由器就可以让家里的几台电脑共享同一个账号上网; 在已经共享上网的情况下,某房间只有一根网线,有多台电脑要上网,用交换机。 25. 进程、线程、协程区别? 答: 1:进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。 由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。 2:线程 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源, 只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。 3:协程 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈, 直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。 区别: 1:进程多与线程比较 线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别: 1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间 2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 3) 线程是处理器调度的基本单位,但进程不是 4) 二者均可并发执行 5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制 2:协程多与线程进行比较 1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。 2) 线程进程都是同步机制,而协程则是异步 3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态 进程和线程、协程在python中的使用: 1:多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上, 当然生产者消费者这种也可以使用。多进程的优势就是一个子进程崩溃并不会影响其他子进程和主进程的运行, 但缺点就是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载。 使用多进程可以查看文章《python 多进程使用总结》。注:python2的进程池在类中的使用会有问题,需要把类函数定义成全局函数。 2:多线程一般是使用threading库,完成一些IO密集型并发操作。多线程的优势是切换快,资源消耗低, 但一个线程挂掉则会影响到所有线程,所以不够稳定。现实中使用线程池的场景会比较多。 3:协程一般是使用gevent库,当然这个库用起来比较麻烦,所以使用的并不是很多。 相反,协程在tornado的运用就多得多了,使用协程让tornado做到单线程异步,据说还能解决C10K的问题。所以协程使用的地方最多的是在web应用上。 IO密集型一般使用多线程或者多进程,CPU密集型一般使用多进程,强调非阻塞异步并发的一般都是使用协程, 当然有时候也是需要多进程线程池结合的,或者是其他组合方式。 26. GIL锁 答:GIL锁,全局解释器锁。python中之所以有GIL锁的存在,在同一时间只能运行一个线程,线程运行在进程里面,共享进程的内存地址, 有共享就意味着竞争,那个线程拿到GIL锁就优先执行,遇到阻塞或执行完毕释放掉锁,其他线程抢到锁,继续执行。 27. 进程如何进程共享? 答:进程之间的有数据隔离的,要想实现数据共享通过Manager来实现。 IPC(进程间的三种数据共享) Queue队列:先进先出。 pipe管道:管道也是先进先出,但是不自动加锁。管道加锁,实现生产者消费者模型。 Manage共享数据:共享数据也没有加锁的功能。 28:线程与线程怎样做数据隔离? 答:线程运行在进程里,共享进程的内存地址,数据也是共享的。 线程与线程之间数据共享, 要数据隔离的话用本地线程。 本地线程:保证每个线程都有一份自己的数据,在操作时不会影响别人。 即使是多线程也是数据隔离的。 29:什么是生产者消费者模型? 答:生产者消费者模型通过一个容器来解决他们之间的强耦合问题,他们之间不彼此通信。 而是通过阻塞队列进行通信。生产者只负责生产数据,不用等消费者,生产完直接扔给阻塞队列, 消费不找生产者要数据,从阻塞队列中拿数据。 队列相当一个缓存去,平衡了生产者消费者的处理能力。 使用生产者消费者模型能解决大多数的并发问题 30:异步非阻塞? 答: 例如,对于一个聊天室来说,因为有多个连接需要同时被处理,所以阻塞或同步的方法是不合适的, 这就像买票只开了一个窗口,佷多人排队等一样。那么我们解决这个问题的方法 主要有三种方法:forking、threading、异步I/O。 Forking和threading的方法非常简单,通过使用SocketServer服务类的min-in类就可以实现。 forking只适用于类Unix平台;threading需要注意内存共享的问题。 异步I/O如果底层的方法来实现是有点困难的。 要简单点,我们可以考虑使用标准库中的框架或Twisted(Twisted是一个非常强大的异步网络编程的框架)。 31:并发的本质? 答:切换加保存状态。并发只是我们感觉是同时运行的,其实是在多个任务之间来回切换,切的时候保存状态。 切的话遇到IO阻塞的时候才切。 32:问题:IO多路复用? 答:IO多路复用就是,单个进程可以同时监听多个网络连接IO,IO指的是输入输出,一部分指的是文件操作,还有一部分网络传输操作,例如:Socket就是其中之一。 多路复用指的是一种机制,同时使用多个IO。例如同时监听多个文件句柄(Socket对象一旦传送或者接收对象),一旦文件句柄出现变化就会立刻感知到。 I/O多路是用于:提升效率,单个进程可以同时监听多个网络连接IO 1:IO多路复用的实现? select-----------------select模块实现多路复用,使同一个端口同时接收多个链接 poll-------------------epoll.poll 是一个实例方法,用于等待 IO 事件并返回一个已就绪 IO 事件的列表, epoll------------------select.epoll 是一个类方法,返回一个 epoll 对象,这里的参数可以为 -1 或 一个正数, 只是 epoll 内部结构优化使用的参数,一般使用默认即可 ---------------------------------------------------------Linux操作系统知识------------------------------------------------------------------------------------ 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 答: 常见的Linux发现版本有Redhat、Centos、Debian、Ubuntu、Suse 最擅长Redhat和Centos Redhat官网:www.redhat.com Centos官网:www.centos.org 我最擅长Linux基本命令操作及相关服务搭建 2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? 答: 开机步骤 a:首先是bios加电自检、初始化,这个过程会检测相关硬件(cpu、内存、显卡、硬盘等)然后读取一个启动顺序,以硬盘为例,会读取硬盘中的MBR。 b:加载内核读取/boot里边的配置文件。 c:启动初始化进程,开始运行/sbin/init d:读取/etc/inittab确定运行级别 e:根据/etc/rc.d/rcN.d加载开机启动程序,rcN.d都是链接文件,都指向/etc/rc.d/init.d再运行/etc/rc.d/rc.local f:用户登录(3种方式ssh、命令行、图形化) g:进入loginshell,以命令行为例,首先读取/etc/profile这个全局配置文件然后再针对当前用户读取家目录中的 ~/.bash_profile和~/.bash_login和~/.profile h:最后一步就是打开non-loginshell 进入图形化后手动新建一个终端,但这个shell不读取/etc/profile 3:忘记密码 a: 重启系统,在GRUB界面,选取忘记密码的系统,按e键进入编辑模式 b:项Kernel.....按e键进行编辑 c:在编辑界面rhgbquiet后加空格,然后输入"single"或"1"回车 d:按b启动进入单用户模式 f:进入系统后passwd回车输入新密码(如果有selinux,先暂时关闭setenforce0) 3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G) 答: /boot 200M /swap 16G /70G /data 剩下的全部空间 4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤。 答:首先把系统关机,然后以光盘启动进入救援模式(linuxrescue)执行"fsck.ext3-y/dev/sda2"(假如只读的分区类型为ext3,分区为/dev/sda2) 5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下。 答: a:可以多用几张DVD一台一台的安装。 b:可以用Kickstart批量安装(客户端从网络启动) 6.用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决? 答: a:编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,将HWADDR和MAC地址这两行删除。 b:修改文件/etc/udev/rules.d/70-persistent-net.rules,删除之前eth0所在的行,将下一行eth1修改为eth0 c:reboot 7.Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么? 答: 网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-eth*(*代表数字) 要上外网需要:能够链接internet的网线(或无线)、有网卡 需要配置:IP、netmask、gateway、dns(自动或手动都ok,服务器一般自动) 8.一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件? 答: 远程连接linux的软件:xshell、SecureCRT、putty、vnc(图形化)上传和下载文件:lrzsz、sftp 9./mnt目录主要用于什么?/root目录跟root用户有什么关系?/根目录与/boot目录有什么联系? 答: /mnt一般用于挂载外接设备 /root是一个目录,是root用户的家目录 /boot目录是/目录下的一个子目录 10.某一天误操作,执行了rm-rf*,会有哪些情况发生?请举例。 答: a:如果当前目录为"/tmp",那么这个目录下的东西会全部删除(默认不包含隐藏文件) b:如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令) ------------------------------------------------------Linux命令及文件操作------------------------------------------------------------------------------------- 1.在/tmp/目录下创建test.txt文件,内容为:Hello,World!,用一个命令写出来。 答:echo "Hello,World!" > /tmp/test.txt 2.给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。 答:655默认是644,可以通过"chmod 655 /tmp/test.txt" 3.用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入 如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net 答: 末行:G 首行:gg 行首:^(Shift+6) 行尾:$(Shift+4) 光标下插入一行:o 复制5行:5yy 删除10行:10dd 替换::%s/jingfeng/jfedu.net/g 4.查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下。 答:find / -name *txt -mtime +30 -type f -size +20k -perma= x -exec cp {} /data/backup/\; 5.当前test.txt所属的用户为root,组为abc,请将test.txt使拥有者为abc,组为root,写出命令。 答:chown abc:root test.txt 6.如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。 答: 更改字符模式:修改/etc/inittab一行为id:3:initdefault: 临时关闭selinnuxsetenforce0 临时关闭防火墙iptables-F 永久关闭selinux修改/etc/selinux/config一行为SELINUX=permissive 永久关闭防火墙 iptables -F; /etc/init.d/iptablessave 7.每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:`date+%Y%m%d`) 答:echo "mkdir/tmp/ `date+%Y%m%d`" >> /etc/rc.d/rc.local 8.如何查看文件内容,命令有哪些?查看文件第1行到3行,查看文件最后一行。 答: 查看文件内容:vim、cat、head、tail 查看第1到行:head -3 file 查看最后一行:tail -1 file 9.查看linux服务器IP的命令,同时只显示包含ip所在的行打印出来。 答: 以eth0为例 只打印所在的行:ifconfig eth0 | grep "inetaddr:" 只打印ip:ifconfig eth0 | grep "inetaddr:" | awk -F: '{print$2}' | awk -F ' ' '{print$1}' http://blog.51cto.com/hujiangtao/1940375 10.将普通用户test加入root组的命令是? 答:usermod -G root test ---------------------------------------------------------------------进阶-------------------------------------------------------------------------------------- 1:简述raid0 raid1 raid5 三种工作模式的工作原理及特点? RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据 还有一个大功能,多块盘放在一起可以有冗余(备份) RAID整合方式有很多,常用的:0 1 5 10 RAID 0,可以是一块盘和N个盘组合 其优点读写快,是RAID中最好的 缺点:没有冗余,一块坏了数据就全没有了 RAID 1,只能2块盘,盘的大小可以不一样,以小的为准 10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高 RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘 特点,读写性能一般,读还好一点,写不好 冗余从好到坏:RAID1 RAID10 RAID 5 RAID0 性能从好到坏:RAID0 RAID10 RAID5 RAID1 成本从低到高:RAID0 RAID5 RAID1 RAID10 单台服务器:很重要盘不多,系统盘,RAID1 数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10) WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘) 有多台,监控、应用服务器,RAID0 RAID5 我们会根据数据的存储和访问的需求,去匹配对应的RAID级别 2:LVS、Nginx、HAproxy有什么区别?工作中你怎么选择? LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的转发所以只能做端口的转发 而基于URL的、基于目录的这种转发LVS就做不了 工作选择: HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做 在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大 选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器 配置简单,所以中小型企业推荐使用HAproxy 3:Squid、Varinsh和Nginx有什么区别,工作中你怎么选择? Squid、Varinsh和Nginx都是代理服务器 什么是代理服务器: 能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资 源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接 收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你 如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 区别: 1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业 但是本身不支持特性挺多,只能缓存静态文件 2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成 3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术 在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。 还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存 它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的 4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境 工作中选择: 要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。 4:Tomcat和Resin有什么区别,工作中你怎么选择? 区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少 最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些 但稳定性和java程序的兼容性,应该是比resin的要好 工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容 5:什么是中间件?什么是jdk? 中间件介绍: 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源 中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯 是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口 但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递 通过中间件,应用程序可以工作于多平台或OS环境。 jdk:jdk是Java的开发工具包 它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境 6:讲述一下Tomcat8005、8009、8080三个端口的含义? 8005==》 关闭时使用 8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口 8080==》 一般应用使用 7:什么叫CDN? 即内容分发网络 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到 最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度 8:什么叫网站灰度发布? 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式 AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B 如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度 9:简述DNS进行域名解析的过程? 用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话, 就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器, 一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器, 二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com, 然后发给请求的服务器,保存一份之后,再发给客户端 10:RabbitMQ是什么东西? RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器 消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用 队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用 消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地 11:讲一下Keepalived的工作原理? 在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息, BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息) 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性 由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息 12:讲述一下LVS三种模式的工作过程? LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式) 13:NAT模式(VS-NAT) 原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址 并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP 将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址 缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈 因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时 大量的数据包都交汇在负载均衡器那,速度就会变慢! 14:IP隧道模式(VS-TUN) 原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大 那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过 负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持 IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户 所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量 这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。 缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling” (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上 15:直接路由模式(VS-DR) 原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应 所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR 而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致) 并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户 则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端 由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域 也可以简单的理解为在同一台交换机上 优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端 与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。 缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。 16:mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟? mysql的innodb如何定位锁问题: 在使用 show engine innodb status检查引擎状态时,发现了死锁问题 在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎) innodb_trx ## 当前运行的所有事务 innodb_locks ## 当前出现的锁 innodb_lock_waits ## 锁等待的对应关系 mysql如何减少主从复制延迟: 如果延迟比较大,就先确认以下几个因素: 从库硬件比主库差,导致复制延迟 主从复制单线程,如果主库写并发太大,来不及传送到从库 就会导致延迟。更高版本的mysql可以支持多线程复制 慢SQL语句过多 网络延迟 master负载 主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层 slave负载 一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器 只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数: –slave-net-timeout=seconds 单位为秒 默认设置为 3600秒 #参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据 –master-connect-retry=seconds 单位为秒 默认设置为 60秒 #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试 通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟 MySQL数据库主从同步延迟解决方案 最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行 还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave 17:如何重置mysql root密码? 一:在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法: 1:在SHELL环境下,使用mysqladmin命令设置: mysqladmin –u root –p password “新密码” 回车后要求输入旧密码 2:在mysql>环境中,使用update命令,直接更新mysql库user表的数据: Update mysql.user set password=password(‘新密码’) where user=’root’; flush privileges; 注意:mysql语句要以分号”;”结束 3:在mysql>环境中,使用grant命令,修改root用户的授权权限。 grant all on *.* to root@’localhost’ identified by ‘新密码’; 二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下: 1:关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务) 2:使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务 /usr/local/mysql/bin/mysqld_safe --skip-grant-table & 3:使用空密码的root用户登录数据库,重新设置ROOT用户的密码 #mysql -u root Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’; Mysql> flush privileges; 18:lvs/nginx/haproxy优缺点 Nginx的优点是: 1:工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构 它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一 Nginx单凭这点可利用的场合就远多于LVS了。 2:Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一 相反LVS对网络稳定性依赖比较大,这点本人深有体会; 3:Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来 LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。 4:可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。 5:Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等, 并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件, 而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了 如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。 6:Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器 LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。 7:Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器 8:Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了 不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃 9:Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多 Nginx的缺点是: 1:Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点 2:对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测 不支持Session的直接保持,但能通过ip_hash来解决 LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器 它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability) 19:mysql数据备份工具 ysqldump工具 mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump 支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景 Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。 基于LVM快照备份 在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录 进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别 而innodb不开启独立表空间的话只能备份整个数据库。 tar包备份 percona提供的xtrabackup工具 支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同 数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展 可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份 20:keepalive的工作原理和如何做到健康检查 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组 这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内 其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了 这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了 keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护 及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的 Keepalived健康检查方式配置 HTTP_GET|SSL_GET HTTP_GET | SSL_GET { url { path /# HTTP/SSL 检查的url可以是多个 digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成 status_code 200# HTTP/SSL 检查返回的状态码 } connect_port 80 # 连接端口 bindto<IPADD> connect_timeout 3 # 连接超时时间 nb_get_retry 3 # 重连次数 delay_before_retry 2 #连接间隔时间 } 21:统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10 22:使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log 23:如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1 iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080 24:简述raid0 raid1 raid5 三种工作模式的工作原理及特点 RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率 但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证 而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合 RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据 不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能 RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性 当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据 RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上 任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏) 所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能 25:你对现在运维工程师的理解和以及对其工作的认识 运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务 运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失 因此运维工程师的工作需要严谨及富有创新精神 26:实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令 tcpdump -nn tcp port 80 27:服务器开不了机怎么解决一步步的排查 A、造成服务器故障的原因可能有以下几点: wKioL1lMgrHDCEhfAABceoMZqwY330.png-wh_50 B、如何排查服务器故障的处理步骤如下: wKioL1lMg2vhIvWKAAKkezGi_-4547.png-wh_50 28:Linux系统中病毒怎么解决 (1):最简单有效的方法就是重装系统 (2):要查的话就是找到病毒文件然后删除 中毒之后一般机器cpu、内存使用率会比较高 机器向外发包等异常情况,排查方法简单介绍下 top 命令找到cpu使用率最高的进程 一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置 rm -f 命令删除病毒文件 检查计划任务、开机启动项和病毒文件目录有无其他可以文件等 3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下 29:发现一个病毒文件你删了他又自动创建怎么解决 公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况 针对这种情况一般重点查看netstat连接的外网ip和端口。 用lsof -p pid可以查看到具体是那些进程,哪些文件 经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了 由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首 查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问 断了内网,病毒就失去外联的能力,杀掉它就容易的多 怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查 方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑 看不到图片就是/usr/bin/.sshd 于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件 然后才删掉了文章开头提到的自动复活的文件 总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统 一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜 一般都能找到元凶。但是如果遇到诸如此类的问题 /boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了 30:说说TCP/IP的七层模型 应用层 (Application):------------------------网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表示层(Presentation Layer):----------------数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、DECOIC、加密格式等 会话层(Session Layer):---------------------建立、管理、终止会话。应主机进程,指本地主机与远程主机正在进行的会话 传输层 (Transport):--------------------------定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层 网络层 (Network):----------------------------进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP 数据链路层 (Link):---------------------------建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正 物理层(Physical Layer):--------------------是计算机网络OSI模型中最低的一层物理层规定:为传输数据所需要的物理链路创建、维持、拆除 而提供具有机械的,电子的,功能的和规范的特性 简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础 物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境 如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质” 31:你常用的Nginx模块,用来做什么 rewrite模块,实现重写功能 access模块:来源控制 ssl模块:安全加密 ngx_http_gzip_module:网络传输压缩模块 ngx_http_proxy_module 模块实现代理 ngx_http_upstream_module模块实现定义后端服务器列表 ngx_cache_purge实现缓存清除功能 32:请列出你了解的web服务器负载架构 Nginx Haproxy Keepalived LVS 33:查看http的并发请求数与其TCP连接状态 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024 不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个: 修改/etc/security/limits.conf soft nofile 10240 hard nofile 10240 重启后生效 34:用tcpdump嗅探80端口的访问看看谁最高 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20 35:写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线 #!/bin/bash for ip in seq 1 255 do { ping -c 1 192.168.1.$ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi }& done wait 36:已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张 现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令 创建文件脚本: #!/bin/bash for n in seq 14 do date -s "11/0$n/14" touch accesswww(date +%F).log done 解决方法: pwd/application/logs ll -rw-r--r--. 1 root root 0 Jan 1 00:00 access_www_2015-01-01.log -rw-r--r--. 1 root root 0 Jan 2 00:00 access_www_2015-01-02.log -rw-r--r--. 1 root root 0 Jan 3 00:00 access_www_2015-01-03.log -rw-r--r--. 1 root root 0 Jan 4 00:00 access_www_2015-01-04.log -rw-r--r--. 1 root root 0 Jan 5 00:00 access_www_2015-01-05.log -rw-r--r--. 1 root root 0 Jan 6 00:00 access_www_2015-01-06.log -rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log -rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log -rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log -rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log -rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log -rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log -rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log -rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log find /application/logs/ -type f -mtime +7 -name "*.log"|xargs rm –f ##也可以使用-exec rm -f {} \;进行删除 ll -rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log -rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log -rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log -rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log -rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log -rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log -rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log -rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log 37:如何优化 Linux系统(可以不说太具体)? 不用root,添加普通用户,通过sudo授权管理 更改默认的远程连接SSH服务端口及禁止root用户远程连接 定时自动更新服务器时间 配置国内yum源 关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外) 调整文件描述符的数量 精简开机启动服务(crond rsyslog network sshd) 内核参数优化(/etc/sysctl.conf) 更改字符集,支持中文,但建议还是用英文字符集,防止乱码 锁定关键系统文件 清空/etc/issue,去除系统及内核版本登录前的屏幕显示 38:请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答) cut方法1: ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1 192.168.20.130 awk方法2: ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}' 192.168.20.130 awk多分隔符方法3: ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}' 192.168.20.130 sed方法4: ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.ddr:(.)Bc.*$#\1#g' 192.168.20.130 39:请写出下面 linux SecureCRT 命令行快捷键命令的功能? Ctrl + a —->光标移动到行首 Ctrl + e —->光标移动到行尾 Ctrl + c —->终止当前程序 Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断 Ctrl + l —->清屏 Ctrl + u —->剪切光标以前的字符 Ctrl + k —->剪切光标以后的字符 Ctrl + y —->复制u/k的内容 Ctrl + r —->查找最近用过的命令 tab —->命令或路径补全 Ctrl+shift+c —->复制 Ctrl+shift+v —->粘贴 40:每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包) cat a.sh #/bin/bash cd /var/www/ && /bin/tar zcf /data/html-date +%m-%d%H.tar.gz html/ crontab –e 00 00 * /bin/sh /root/a.sh