1.查找⽂件后缀是log的三天前的⽂件删除和三天内没修改过的⽂件find / -name ”.log” -mtime +3 -exec rm fr {} ; find /log ! -mtime -32.写⼀个脚本将⽬录下⼤于100kb的⽂件移动到/tmp下fimd / -size +100k -exec mv {} /tmp ;
3.将数据库备份并打包传递到远程服务器192.168.1.1的/backup⽬录下
mysqldump -u root -p database > database.sql ;tar -czvf database.tar.gz database.sql ; rsync -avP ./database.tar.gzroot@192.168.1.1:/backup
4.⽇志如下统计访问ip最多的前10个
awk ’{print $1}’ *.log | sort | uniq -c | sort -nr | head -n5.把/usr/local/替换成其他的⽬录sed -i ’s//usr/local//⽬录/g’ ⽂件
6.查看服务器程序运⾏级别和修改运⾏级别,和服务的运⾏级别
查看:who -r 修改:etc/inittab 服务运⾏级别chkconfig –list vsftp 修改:chkconfig –level 345 vsftp on7.⽤tcpdump截取本机ip 192.168.23.1 80端⼝的包tcpdump tcp port 80 host 192.168.23.1
Tcpdump -w test host 192.168.1.1 and tcp port 80
8.⽤tcpdump截取ip 192.168.23.1访问主机 ip 192.168.23.2 的80端⼝的包tcpdump host 192.168.23.1 and 192.168.23.2 and dst port 80
9.⽤iptables将192.168.0.100的80端⼝映射到59.15.17.231的8080端⼝
iptables -t nat -A PREROUTINT -p tcp -d 192.168.0.100 –dport 80 -j DNAT –to-destination 59.15.17.231:808010.本机的80端⼝转发到8080
iptables -t nat -A PREROUTING -p tcp –dport -j REDIRECT –to-ports 808011.禁⽌⼀个⽤户登录,但可以使⽤ftp
修改etc/passwd 最后⼀个字段 改成/bin/nologin12.获取1.txt中第⼆⾏第三列的数据,输出到2.txtcat 1.txt|awk ’NR==2{print $3}’ > 2.txt
13.查看Linux系统当前单个共享内存段的最⼤值ipcs -a
14.⽤什么命令查询指定IP地址的服务器端⼝nmap 127.0.0.1
15.如何让history命令显⽰具体时间
HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S ”16.查看Linux系统当前加载的库⽂件lsof |grep /lib
17.查看当前系统某⼀硬件的驱动版本。⽐如⽹卡ethtool –i eth0
18.DNS服务器有哪三种类型
主 从 转发
19.查看3306端⼝被谁占⽤lsof -i:3306
20.查看占⽤内存最⼤的5个进程ps -aux|sort -k4nr|head -n 5
21.查看占⽤内存最⼤的进程的PID和VSZ
ps -aux|sort -k5nr|awk ’BEGIN{print ”PID VSZ”}{print $2,$5}’|awk ’NR<3′22. lsof -p 12 看进程号为12的进程打开了哪些⽂件23.同时执⾏a和b等a和b都执⾏完执⾏c#!/bin/bash./a.sh &./b.sh &waitecho adf
24.snmpdf 通过SNMP监视远程主机的磁盘空间snmpdf -v 1 -c public localhost获取192.168.6.53的所有开放端⼝状态snmpnetstat -v 2c -c public -a 192.168.6.5325.简述编译kernel的⼤体步骤
(1)下载解压缩新版本的内核到/usr/src下(2)将以前版本链接删除,建⽴新的连接(3)编译内核,编译模块,安装模块(4)修改grub.conf ,然后重启26.diff/patch的作⽤和⽤法
命令diff A B > C ,⼀般A是原始⽂件,B是修改后的⽂件,C称为A的补丁⽂件。patch A C 就能得到B, 这⼀步叫做对A打上了B的名字为C的补丁27.执⾏ bin/myprog 返回0 打印ok 1打印bad 2打印error 其他打印 wrony./bin/myprogif [[ $? = 0 ]];thenecho”OK”elif [[ $? =1 ]];thenecho”bad”elseecho”error”fi
28.求⼀组数的最⼤值和最⼩值#!/bin/shmin=$1max=$1
sum=$1shift
while [ $# -gt 0 ]do
if [ $min -gt $1 ]thenmin=$1fi
if [ $max -lt $1 ]thenmax=$1fi
sum=`expr $sum +$1`shiftdone
sum=`echo ”$sum/5″`|bc -lecho min=$minecho max=$maxecho aver=$sum
28.执⾏可执⾏程序test并把输出和错误写到err.log./test > & err.log
29.⽤telnet连接校内服务器mail.xiaonei.com 发⼀封信mail -v -s ”hello” root@192.168.23.130.添加路由表并查看
route add -net 203.208.39.104 netmask 255.255.255.255 gw 192.168.1.1netstat –r31.正则匹配ip
((25[0-5]|2[0-4]d|1dd|[1-9]d|d).){3}(25[0-5]|2[0-4]d|1dd|[1-9]d|[1-9])
###############################################################1.如何判断mysql主从是否同步?该如何使其同步?Slave_IO_Running
Slave_SQL_Running;
2.mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
20 mysql的innodb如何定位锁问题:
在使⽤ show engine innodb status检查引擎状态时,发现了死锁问题
在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎):innodb_trx ## 当前运⾏的所有事务innodb_locks ## 当前出现的锁innodb_lock_waits ## 锁等待的对应关系mysql如何减少主从复制延迟:
如果延迟⽐较⼤,就先确认以下⼏个因素:1. 从库硬件⽐主库差,导致复制延迟
2. 主从复制单线程,如果主库写并发太⼤,来不及传送到从库,就会导致延迟。更⾼版本的mysql可以⽀持多线程复制3. 慢SQL语句过多4. ⽹络延迟5. master负载
主库读写压⼒⼤,导致复制延迟,架构的前端要加buffer及缓存层6. slave负载
⼀般的做法是,使⽤多台slave来分摊读请求,再从这些slave中取⼀台专⽤的服务器,只作为备份⽤,不进⾏其他任何操作.另外, 2个可以减少延迟的参数:
–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒
#参数含义:当slave从主数据库读取log数据失败后,等待多久重新建⽴连接并获取数据–master-connect-retry=seconds 单位为秒 默认设置为 60秒
#参数含义:当重新建⽴主从连接时,如果连接建⽴失败,间隔多久后重试。通常配置以上2个参数可以减少⽹络问题导致的主从数据同步延迟MySQL数据库主从同步延迟解决⽅案
最简单的减少slave同步延时的⽅案就是在架构上做优化,尽量让主库的DDL快速执⾏。还有就是主库是写,对数据安全性较⾼,⽐如sync_binlog=1,
Mysql开启bin-log⽇志使⽤bin-log时,默认情况下,并不是每次执⾏写⼊就与硬盘同步,这样在服务器崩溃是,就可能导致bin-log最后的语句丢失。
可以通过这个参数来调节,sync_binlog=N,使执⾏N次写⼊后,与硬盘同步。1是最安全的,但是也是最慢的innodb_flush_log_at_trx_commit= 1
之类的设置,⽽slave则不需要这么⾼的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提⾼sql的执⾏效率。另外就是使⽤⽐主库更好的硬件设备作为slave。
3.osi七层模型,tcp三次握⼿过程,tcp连接断开过程,什么情况下tcp进⼊time_wait?答:其他问题答案略
什么情况下tcp进⼊time_wait?
当关闭⼀个 socket 连接时,主动关闭⼀端的 socket 将进⼊TIME_WAIT状态,⽽被动关闭⼀⽅则转⼊CLOSED状态。
具体过程如下:1、 客户端发送FIN报⽂段,进⼊FIN_WAIT_1状态。2、 服务器端收到FIN报⽂段,发送ACK表⽰确认,进⼊CLOSE_WAIT状态。3、 客户端收到FIN的确认报⽂段,进⼊FIN_WAIT_2状态。4、
服务器端发送FIN报⽂端,进⼊LAST_ACK状态。5、 客户端收到FIN报⽂端,发送FIN的ACK,同时进⼊TIME_WAIT状态,启动TIME_WAIT定时器,超时时间设为2MSL。6、 服务器端收到FIN的ACK,进⼊CLOSED状态。7、客户端在2MSL时间内没收到对端的任何响应,TIME_WAIT超时,进⼊CLOSED状态。4.什么是跨站脚本攻击,有何危害,sql注⼊攻击如何防范?1 答:
⼀般说来,在Web安全领域,常见的攻击⽅式⼤概有以下⼏种:
1、SQL注⼊攻击(程序命令和⽤户数据(即⽤户输⼊)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作⽤户输⼊的数据提交给We程序,以发号施令,为所欲为)
1采⽤预编译语句集,它内置了处理SQL注⼊的能⼒,只要使⽤它的setXXX⽅法传值即可。2使⽤正则表达式过滤传⼊的参数3字符串过滤4.jsp中调⽤该函数检查是否包函⾮法字符5.JSP页⾯判断代码:
2、跨站脚本攻击 – XSS(利⽤⽹站程序对⽤户输⼊过滤不⾜,输⼊可以显⽰在页⾯上对其他⽤户造成影响的HTML代码,从⽽盗取⽤户资料、利⽤⽤户⾝份进⾏某种动作或者对访问者进⾏病毒侵害的⼀种攻击⽅式)3、跨站伪造请求攻击 - CSRF4、⽂件上传漏洞攻击
5、分布式拒绝服务攻击 - DDOS5.海量⽂件如何存储?
1 答:使⽤分布式存储,如mfs、hadoop等6.如何重置mysql root密码?
16 答:⼀、 在已知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;
7.把/data⽬录及其⼦⽬录下所有以扩展名.txt结尾的⽂件中包含oldgirl的字符串全部替换为oldboy1
2 答:
find /data/ -type f -name \"*.txt\" | xargs sed -i 's/oldgirl/oldboy/g'
8.创建⽬录/data/oldboy,并且在该⽬录下创建⽂件oldboy.txt,然后在⽂件“oldboy.txt”⾥写⼊内容“inet addr : 10.0.0.8 Bcast : 10.0.0.255 Mask :255.255.255.0 ”(不包含引号)1
2 答:# mkdir -p /data/oldboy
# echo \"inet addr: 10.0.0.8 Bcast: 10.0.0.255 Mask:255.255.255.0\" >> /data/oldboy/oldboy.txt9.脚本计算1+2+3…. +100=?答:
[root@localhost ~]# cat sum.sh #!/bin/bashnum=1sum=0
while [ $num -le 100 ]do
sum=$(expr $sum + $num)let num++done
echo \"1+2+3...+100=\"$sum[root@localhost ~]# sh sum.sh 1+2+3...+100=5050eg2
#!/bin/bash
echo \"please input number:\"read a
for ((i=0;i<=$a;i++))do
let sum+=$idone
echo $sum
sum - 计算⽂件的校验和,以及⽂件占⽤的块数
1.Apache和MySQL 两种服务能否装在同⼀台机器上,如何查看Apache和mysql端⼝和进程?1、Windows平台
在windows命令⾏窗⼝下执⾏: C:\\>netstat -aon|findstr \"80\"
端⼝被进程号为2448的进程占⽤,继续执⾏下⾯命令:C:\\Users\\Administrator>tasklist | findstr \"1736\"360se.exe 1736 Console 1 205,832 K
如果你想杀死这个进程,你当然可以⽤前⾯描述的那种⽅法,在任务管理器⾥把它KILL了,但如果你喜欢⾼效⼀点,那么⽤taskkill命令就可以了。
taskkill /pid 3017ps -ef | grep 3306kill -9 httpdmariadb
2.如何在⼀台虚拟机上同时部署4个⽹站,访问域名分别是 www.test1.net www.test2.net test1.jjwxc.net test2.jjwxc.net 打开Tomcat的conf⽬录server.xml⽂件, 找到 然后去掉“#Include conf/extra/httpd-vhosts.conf”这句话前⾯的\"#\"号,即取消对这句话的注释,使得配置中包含对httpd-vhosts.conf这个⽂件的引⽤。 3.统计⼀下/var/log/nginx/access.log ⽇志中访问量最多的前⼗个IP?cat access_log | awk ‘{print $1}’ | uniq -c|sort -rn|head -10或 awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -k1 | head -n 10uniq - 删除排序⽂件中的重复⾏ sort对于⽂本进⾏排序 -l 按照当前环境排序. -m 合并已经排序好的⽂件,不排序.-n 按照字符串的数值顺序⽐较,暗含-b-r 颠倒⽐较的结果. 4.怎么查看当前系统中每个IP的连接数,怎么查看当前磁盘的IO,怎么查看当前⽹络的IO?答: 怎么查看当前系统中每个IP的连接数: # netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort –rnsort命令:进⾏排序,-r 反向排序 -n 使⽤纯数字进⾏排序uniq 将重复的数据仅仅列出⼀个来显⽰,uniq -c,进⾏计数awk -F: '{print $1}' 以F 为分界符,取出第⼀个:之前的数据怎么查看当前磁盘的IO: 1) iostat可以提供丰富的IO状态数据。 iostat 是 sysstat ⼯具集的⼀个⼯具,需要安装。[root@localhost ~]# iostat -d-k 1 10 Linux 3.10.0-327.el7.x86_ (localhost.localdomain) 03/23/2017 _x86__(2 CPU)Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 16.60 597.83 29.44 384048 109scd0 0.03 0.10 0.00 66 0 dm-0 15.78 551. 26.20 3311 16831dm-1 0.22 1.97 0.00 1268 0 参数 -d 表⽰,显⽰设备(磁盘)使⽤状态;-k某些使⽤block为单位的列强制使⽤Kilobytes为单位;1 10表⽰,数据显⽰每隔1秒刷新⼀次,共显⽰10次。 tps:该设备每秒的传输次数。 kB_read/s:每秒从设备读取的数据量;kB_wrtn/s:每秒向设备写⼊的数据量;kB_read:读取的总数据量;kB_wrtn:写⼊ 的总数量数据量;这些单位都为Kilobytes。 -x 参数:使⽤-x参数我们可以获得更多统计信息。 iostat -d -x -k 1 10 #查看设备使⽤率(%util)、响应时间(%await) await:每⼀个IO请求的处理的平均时间(单位是微秒)。这⾥可以理解为IO的响应时间,⼀般地系统IO响应时间应该低于5ms,如果⼤于10ms就⽐较⼤了。 %util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该 设备有0.8秒在处理IO,⽽0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗⽰了设备的繁忙程度。⼀般地,如果该参数是100%表⽰设备已经接近满负荷运⾏了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能⼒,所以磁盘使⽤未必就到了瓶颈)。2)使⽤iotop命令要安装iotop软件包 iotop命令是⼀个⽤来监视磁盘I/O使⽤状况的top类⼯具。iotop具有与top相似的UI。Linux下的IO统计⼯具如iostat,nmon等⼤多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使⽤IO的就⽐较⿇烦,使⽤iotop命令可以很⽅便的查看。怎么查看当前⽹络的IO: iftop 查看⽹络带宽情况(必须从epel源安装) sar看看当前⽹络流量 ,sar -n DEV1 999 表⽰取样间隔为1秒,取样999次 5.写⼀个脚本,实现批量添加20个⽤户,⽤户名为:user1-20,密码为user后⾯跟着5个随机字符或数字答: [root@localhost ~]# cat useradd.sh #!/bin/bashname=\"user\" for number in $(seq 1 20)do password=$(cat /dev/urandom | head -1 | md5sum | head -c 5)useradd $name$number echo \"user$password\" | passwd --stdin user$number &> /dev/nullecho \"$name$number user$password\" >> userinfo.txtdone eg [zat@localhost ~]$ seq 1 1012 6.dmesg命令中看到ip-conntrack:table full,dropping packet,如何解决?答: 线上web服务器在访问量很⼤时,就会出现⽹络连接丢包的问题,通过dmesg命令查看⽇志,发现如下信息:ip_conntrack: table full, dropping packet. 为什么会出现 ip_conntrack: table full, dropping packet 呢?这⾥⾯关键的信息是\"ip_conntrack: table full, dropping packet\从这⾥可以判断出这跟iptables有关系了,因为iptables防⽕墙使⽤了ip_conntrack内核模块实现连接跟踪功能,所有的进出数据包都会记录在连接跟踪表中,包括tcp,udp,icmp等,⼀旦连接跟踪表被填满以后,就会发⽣丢包,导致⽹络不稳定。当这张表满了,就会在⽇志⾥⾯写⼊该信息(执⾏命令dmesge | more查看)。 ⽽当我们的服务器确实打开了iptables防⽕墙,并且都是在⽹站流量⾮常⾼的时候经常会出现这个问题。这个问题的原因是由于web服务器收到了⼤量的连接,在启⽤了iptables的情况下,iptables会把所有的连接都做链接跟踪处理,这样iptables就会有⼀个链接跟踪表,当这个表满的时候,就会出现上⾯的错误。查看当前连接数: [root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_count 0 iptables的链接跟踪表最⼤容量配置⽂件如下: [root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max 65536注: 由于nf_conntrack ⼯作在3层,⽀持IPv4和IPv6,⽽ip_conntrack只⽀持IPv4,因此nf_conntrack模块在Linux的2.6.15内核中被引⼊,⽽ip_conntrack在Linux的2.6.22内核被移除(centos6.x版本),因此不同版本的系统,配置⽂件也就不尽相同了。⽬前⼤多的ip_conntrack_*已被 nf_conntrack_* 取代,很多ip_conntrack_*仅仅是个软链接,原先的ip_conntrack配置⽬录/proc/sys/net/ipv4/netfilter/ 仍然存在,但是新 的nf_conntrack在/proc/sys/net/netfilter/中,这样做是为了能够向下的兼容。这个问题该如何解决,解決⽅法⼀般有两个:⽅法1: [root@localhost ~]# sysctl -w net.nf_conntrack_max=100000net.nf_conntrack_max = 100000 [root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max 100000sysctl-p注: 严格来看重启 iptables/ip6tables 会重新加载 nf_conntrack 相关的模块, 引起参数恢复成默认值。以免重启 iptables 引起参数失效. 也可以在 /etc/sysconfig/iptables-config ⽂件中开启选项IPTABLES_SYSCTL_LOAD_LIST=”.nf_conntrack”, iptables 重启后会进⾏ sysctl 操作.⽅法2: 不使⽤ip_conntrack,nf_conntrack_ipv4,xt_state模块 7、varnish nginx squid各⾃缓存的优缺点 要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid和varnish。Varnish ⾼性能、开源的反向代理服务器和内存缓存服务器。优点: 1. ⾼性能; 2. 多核⽀持; 3. ⽀持0-60秒的精确缓存时间。 缺点: 1. 不具备⾃动容错和恢复功能,重启后数据丢失; 2. 在线扩容⽐较难。 3. 32位机器上缓存⽂件⼤⼩为最⼤2GB; 4. 不⽀持集群。应⽤场景: 并发要求不是很⼤的⼩型系统和应⽤ nginx 1不⽀持带参数的动态链接 2Nginx缓存内部没有缓存过期和清理的任何机制,这些缓存的⽂件会永久性地保存在机器上,如果要缓存的东西⾮常多,那就会撑暴整个硬盘空间。 3只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有⼀个访问量很⼤的伪静态链接被删除,那就会不停穿透导致后端承载不⼩压⼒ 4Nginx不会⾃动选择内存或硬盘作为存储介质,⼀切由配置决定,当然在当前的操作系统⾥都会有操作系统级的⽂件缓存机制,所以存在硬盘上也不需要过分担⼼⼤并发读取造成的io性能问题。Squid Squid,很古⽼的反向代理软件,拥有传统代理、⾝份验证、流量管理等⾼级功能,但是配置太复杂。它算是⽬前互联⽹应⽤得最多的反向缓存代理服务器,⼯作于各⼤古⽼的cdn上 squid的优势在于完整的庞⼤的cache技术资料,和很多的应⽤⽣产环境 8、查询DNS的深层结构 当 DNS 客户机需要查询程序中使⽤的名称时,它会查询本地DNS 服务器来解析该名称。客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。 ● 指定的 DNS 域名,表⽰为完全合格的域名 (FQDN) 。 ● 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。● DNS域名的指定类别。 对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如im.qq.com,并且指定的查询类型⽤于通过该名称搜索地址资源记录。 DNS 查询以各种不同的⽅式进⾏解析。客户机有时也可通过使⽤从以前查询获得的缓存信息就地应答查询。DNS 服务器可使⽤其⾃⾝的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回⾄客户机。这个过程称为递归。 另外,客户机⾃⼰也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使⽤基于服务器应答的独⽴和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。DNS 查询的过程如下图所⽰。 1、在浏览器中输⼊www.qq.com域名,操作系统会先检查⾃⼰本地的hosts⽂件是否有这个⽹址映射关系,如果有,就先调⽤这个IP地址映射,完成域名解析。 2、如果hosts⾥没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个⽹址映射关系,如果有,直接返回,完成域名解析。 3、如果hosts与本地DNS解析器缓存都没有相应的⽹址映射关系,⾸先会找TCP/ip参数中设置的⾸选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。 4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此⽹址映射关系,则调⽤这个IP地址映射,完成域名解析,此解析不具有权威性。 5、如果本地DNS服务器本地区域⽂件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进⾏查询,如果未⽤转发模 式,本地DNS就把请求发⾄13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回⼀个负责该顶级域名服务器的⼀个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果⾃⼰⽆法解析,它就会找⼀个管理.com域的下⼀级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上⾯的动作,进⾏查询,直⾄找到www.qq.com主机。 6、如果⽤的是转发模式,此DNS服务器就会把请求转发⾄上⼀级DNS服务器,由上⼀级服务器进⾏解析,上⼀级服务器如果不能解析,或找根DNS或把转请求转⾄上上级,以此循环。不管是本地DNS服务器⽤是是转发,还是根提⽰,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。 从客户端到本地DNS服务器是属于递归查询,⽽DNS服务器之间就是的交互查询就是迭代查询。 9、lvs的三种模式 ⼀、NAT模式(VS-NAT) 原理:就是把客户端发来的数据包的IP头的⽬的地址,在负载均衡器上换成其中⼀台RS的IP地址,并发⾄此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为⾃⼰的IP,将⽬的地址改为客户端IP地址即可期间,⽆论是进来的流量,还是出去的流量,都必须经过负载均衡器 优点:集群中的物理服务器可以使⽤任何⽀持TCP/IP操作系统,只有负载均衡器需要⼀个合法的IP地址。 缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,⼤量的数据包都交汇在负载均衡器那,速度就会变慢!⼆、IP隧道模式(VS-TUN) 原理:⾸先要知道,互联⽹上的⼤多Internet服务的请求包很短⼩,⽽应答包通常很⼤。那么隧道模式就是,把客户端发来的数据包,封装⼀个新的IP头标记(仅⽬的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器注意,由于RS需要对负载均衡器发过来的数据包进⾏还原,所以说必须⽀持IPTUNNEL协议所以,在RS的内核中,必须编译⽀持IPTUNNEL这个选项优点:负载均衡器只负责将请求包分发给后端节点服务器,⽽RS将应答包直接发给⽤户。所以,减少了负载均衡器的⼤量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨⼤的请求量,这种⽅式,⼀台负载均衡器能够为很多RS进⾏分发。⽽且跑在公⽹上就能进⾏不同地域的分发。 缺点:隧道模式的RS节点需要合法IP,这种⽅式需要所有的服务器⽀持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。 三、直接路由模式(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这种实现⽅式不需要隧道结构,因此可以使⽤⼤多数操作系统做为物理服务器。 缺点:(不能说缺点,只能说是不⾜)要求负载均衡器的⽹卡必须与物理⽹卡在⼀个物理段上。 10、lvs/nginx/haproxy优缺点Nginx的优点是: 1、⼯作在⽹络的7层之上,可以针对http应⽤做⼀些分流的策略,⽐如针对域名、⽬录结构,它的正则规则⽐HAProxy更为强⼤和灵活,这也是它⽬前⼴泛流⾏的主要原因之⼀,Nginx单凭这点可利⽤的场合就远多于LVS了。 2、Nginx对⽹络稳定性的依赖⾮常⼩,理论上能ping通就就能进⾏负载功能,这个也是它的优势之⼀;相反LVS对⽹络稳定性依赖⽐较⼤,这点本⼈深有体会; 3、Nginx安装和配置⽐较简单,测试起来⽐较⽅便,它基本能把错误⽤⽇志打印出来。LVS的配置、测试就要花⽐较长的时间了,LVS对⽹络依赖⽐较⼤。 3、可以承担⾼负载压⼒且稳定,在硬件不差的情况下⼀般能⽀撑⼏万次的并发量,负载度⽐LVS相对⼩些。 4、Nginx可以通过端⼝检测到服务器内部的故障,⽐如根据服务器处理⽹页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另⼀个节点,不过其中缺点就是不⽀持url来检测。⽐如⽤户正在上传⼀个⽂件,⽽处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另⼀台服务器重新处理,⽽LVS就直接断掉了,如果是上传⼀个很⼤的⽂件或者很重要的⽂件的话,⽤户可能会因此⽽不满。5、Nginx不仅仅是⼀款优秀的负载均衡器/反向代理软件,它同时也是功能强⼤的Web应⽤服务器。LNMP也是近⼏年⾮常流⾏的web架构,在⾼流量的环境中稳定性也很好。 6、Nginx现在作为Web反向加速缓存越来越成熟了,速度⽐传统的Squid服务器更快,可以考虑⽤其作为反向代理加速器。 7、Nginx可作为中层反向代理使⽤,这⼀层⾯Nginx基本上⽆对⼿,唯⼀可以对⽐Nginx的就只有lighttpd了,不过lighttpd⽬前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。 8、Nginx也可作为静态⽹页和图⽚服务器,这⽅⾯的性能也⽆对⼿。还有Nginx社区⾮常活跃,第三⽅模块也很多。 Nginx的缺点是: 1、Nginx仅能⽀持http、https和Email协议,这样就在适⽤范围上⾯⼩些,这个是它的缺点。 2、对后端服务器的健康检查,只⽀持通过端⼝来检测,不⽀持通过url来检测。不⽀持Session的直接保持,但能通过ip_hash来解决。LVS LVS:使⽤Linux内核集群实现⼀个⾼性能、⾼可⽤的负载均衡服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。 LVS的优点是: 1、抗负载能⼒强、是⼯作在⽹络4层之上仅作分发之⽤,没有流量的产⽣,这个特点也决定了它在负载均衡软件⾥的性能最强的,对内存和cpu资源消耗⽐较低。 2、配置性⽐较低,这是⼀个缺点也是⼀个优点,因为没有可太多配置的东西,所以并不需要太多接触,⼤⼤减少了⼈为出错的⼏率。3、⼯作稳定,因为其本⾝抗负载能⼒很强,⾃⾝有完整的双机热备⽅案,如LVS+Keepalived,不过我们在项⽬实施中⽤得最多的还是LVS/DR+Keepalived。 4、⽆流量,LVS只分发请求,⽽流量并不从它本⾝出去,这点保证了均衡器IO的性能不会收到⼤流量的影响。 5、应⽤范围⽐较⼴,因为LVS⼯作在4层,所以它⼏乎可以对所有应⽤做负载均衡,包括http、数据库、在线聊天室等等。 LVS的缺点是: 1、软件本⾝不⽀持正则表达式处理,不能做动静分离;⽽现在许多⽹站在这⽅⾯都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。 2、如果是⽹站应⽤⽐较庞⼤的话,LVS/DR+Keepalived实施起来就⽐较复杂了,特别后⾯有Windows Server的机器的话,如果实施及配置还有维护过程就⽐较复杂了,相对⽽⾔,Nginx/HAProxy+Keepalived就简单多了。HAProxy HAProxy的特点是: 1、HAProxy也是⽀持虚拟主机的。 2、HAProxy的优点能够补充Nginx的⼀些缺点,⽐如⽀持Session的保持,Cookie的引导;同时⽀持通过获取指定的url来检测后端服务器的状态。 3、HAProxy跟LVS类似,本⾝就只是⼀款负载均衡软件;单纯从效率上来讲HAProxy会⽐Nginx有更出⾊的负载均衡速度,在并发处理上也是优于Nginx的。 4、HAProxy⽀持TCP协议的负载均衡转发,可以对MySQL读进⾏负载均衡,对后端的MySQL节点进⾏检测和负载均衡,⼤家可以⽤LVS+Keepalived对MySQL主从做负载均衡。 5、HAProxy负载均衡策略⾮常多,HAProxy的负载均衡算法现在具体有如下8种:①roundrobin,表⽰简单的轮询,这个不多说,这个是负载均衡基本都具备的;② static-rr,表⽰根据权重,建议关注; ③leastconn,表⽰最少连接者先处理,建议关注; ④ source,表⽰根据请求源IP,这个跟Nginx的IP_hash机制类似,我们⽤其作为解决session问题的⼀种⽅法,建议关注;⑤ri,表⽰根据请求的URI; ⑥rl_param,表⽰根据请求的URl参数’balance url_param’ requires an URL parameter name;⑦hdr(name),表⽰根据HTTP请求头来锁定每⼀次HTTP请求; ⑧rdp-cookie(name),表⽰根据据cookie(name)来锁定并哈希每⼀次TCP请求。 11、linux系统监控命令,查看cpu负载内存等情况 top命令是Linux下常⽤的性能分析⼯具,⽐如cpu、内存的使⽤,能够实时显⽰系统中各个进程的资源占⽤状况,类似于Windows的任务管理器。 top显⽰系统当前的进程和其他状况,是⼀个动态显⽰过程,即可以通过⽤户按键来不断刷新当前状态.如果在前台执⾏该命令,它将独占前台,直到⽤户终⽌该程序为⽌. ⽐较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显⽰系统中CPU最“敏感”的任务列表.该命令可以按CPU使⽤.内存使⽤和执⾏时间对任务进⾏排序;⽽且该命令的很多特性都可以通过交互式命令或者在个⼈定制⽂件中进⾏设定。top命令参数 d 指定每两次屏幕信息刷新之间的时间间隔。当然⽤户可以使⽤s交互命令来改变之。p通过指定监控进程ID来仅仅监控某个进程的状态。 q该选项将使top没有任何延迟的进⾏刷新。如果调⽤程序有超级⽤户权限,那么top将以尽可能⾼的优先级运⾏。S 指定累计模式 s 使top命令在安全模式中运⾏。这将去除交互命令所带来的潜在危险。i使top不显⽰任何闲置或者僵死进程。c 显⽰整个命令⾏⽽不只是显⽰命令名常⽤操作 top //每隔5秒显式所有进程的资源占⽤情况top -d2//每隔2秒显式所有进程的资源占⽤情况 top -c//每隔5秒显式进程的资源占⽤情况,并显⽰进程的命令⾏参数(默认只有进程名)top -p12345-p67//每隔5秒显⽰pid是12345和pid是67的两个进程的资源占⽤情况 top -d2-c-p123456//每隔2秒显⽰pid是12345的进程的资源使⽤情况,并显式该进程启动的命令⾏参数三、查看⽹络流量的命令 3 [root@localhost sbin]# ifstat ens332 sar -n DEV 1 2 1 watch -n 1 \"/sbin/ifconfig ens33 | grep bytes\"四、docker四中⽹络模式1 host模式 众所周知,Docker使⽤了Linux的Namespaces技术来进⾏资源隔离,如PID Namespace隔离进程,Mount Namespace隔离⽂件系统,Network Namespace隔离⽹络等。⼀个Network Namespace提供了⼀份独⽴的⽹络环境,包括⽹卡、路由、Iptable规则等都与其他的Network Namespace隔离。⼀个Docker容器⼀般会分配⼀个独⽴的Network Namespace。但如果启动容器的时候使⽤host模式,那么这个容器将不会获得⼀个独⽴的Network Namespace,⽽是和宿主机共⽤⼀个Network Namespace。容器将不会虚拟出⾃⼰的⽹卡,配置⾃⼰的IP等,⽽是使⽤宿主机的IP和端⼝。 例如,我们在10.10.101.105/24的机器上⽤host模式启动⼀个含有web应⽤的Docker容器,监听tcp80端⼝。当我们在容器中执⾏任何类似ifconfig命令查看⽹络环境时,看到的都是宿主机上的信息。⽽外界访问容器中的应⽤,则直接使⽤10.10.101.105:80即可,不⽤任何NAT转换,就如直接跑在宿主机中⼀样。但是,容器的其他⽅⾯,如⽂件系统、进程列表等还是和宿主机隔离的。2 container模式 在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的⼀个容器共享⼀个Network Namespace,⽽不是和宿主机共享。新创建的容器不会创建⾃⼰的⽹卡,配置⾃⼰的IP,⽽是和⼀个指定的容器共享IP、端⼝范围等。同样,两个容器除了⽹络⽅⾯,其他的如⽂件系统、进程列表等还是隔离的。两个容器的进程可以通过lo⽹卡设备通信。3 none模式 这个模式和前两个不同。在这种模式下,Docker容器拥有⾃⼰的Network Namespace,但是,并不为Docker容器进⾏任何⽹络配置。也就是说,这个Docker容器没有⽹卡、IP、路由等信息。需要我们⾃⼰为Docker容器添加⽹卡、配置IP等。4 bridge模式 bridge模式是Docker默认的⽹络设置,此模式会为每⼀个容器分配Network Namespace、设置IP等,并将⼀个主机上的Docker容器连接到⼀个虚拟⽹桥上。下⾯着重介绍⼀下此模式。host模式 使⽤Docker run时使⽤–net=host指定 Docker使⽤的⽹络实际上和宿主机⼀样,在容器内看到的⽹卡ip是宿主机上的ip。docker常⽤命令 1. docker version 查看docker的版本号,包括客户端、服务端、依赖的Go等2. docker info 查看系统(docker)层⾯信息,包括管理的images, containers数等3. docker search 4. docker pull 5. docker push 7. docker inspect 9. docker images –a 列出所有的images 10. dockerps默认显⽰正在运⾏中的container 六、docker怎么实现容器间的独⽴12、实现⾼可⽤⼯具有哪些hearbeatkeepalived 13、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功能,启⽤之后可以⽀持单独的表备份。14、awk和sed的区别 awk是⼀种程序语⾔,对⽂档资料的处理具有很强的功能。awk擅长从格式化报⽂或从⼀个⼤的⽂本⽂件中抽取数据。awk的命令格式为: awk [-F filed-separator] “commands” input-file(s) awk将⼀⾏⽂字按分隔符(filed-separator)分为多个域,依次记为$ 1,$ 2 . . . $ n。$0代表所有域值。因此awk更适合于以域为单位来处理⽂件。加之ARGIND等内置变量,使awk能处理多个⽂件。典型的应⽤为查找⼀个⽂件中的某个字段是否在另⼀个⽂件中出现 sed是⼀个精简的、⾮交互式的编辑器。它能执⾏与编辑vi和emacs相同的编辑任务,但sed编辑器不提供交互使⽤⽅式,只能在命令⾏下输⼊编辑命令。 sed的命令格式为: sed [options] 'command' file(s) sed [options] -f scrīptfile file(s) 作为编辑器,当然少不了插⼊(a/、i/)、删除(d)、查找替换(s)等命令。如果⽂件是格式化的,即由分隔符分为多个域的,优先使⽤awkawk适合按列(域)操作,sed适合按⾏操作 awk适合对⽂件的抽取整理,sed适合对⽂件的编辑。15、介绍CDN的作⽤ CDN加速简单的来说,就是把原服务器上数据复制到其他服务器上,⽤户访问时,那台服务器近访问到的就是那台服务器上的数据。CDN加速优点是成本低,速度快。可以⽤CDN best的CDN进⾏加速,免费,可部署私有,公有CDN系统。可以实现宕机检测,⾃动切换ip,分线路,分组解析。也就是 CDN加速的主要作⽤就是保证⽹站的正常访问,及加快⽹站访问速度和响应速度,防⽌⽹站因⿊客攻击,DNS解析劫持故障等导致的⽹站服务器的宕机状况的出现。 16、 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_GETHTTP_GET | SSL_GET{url { path /# HTTP/SSL 检查的url可以是多个 digest connect_port 80 # 连接端⼝bindto connect_timeout 3 # 连接超时时间nb_get_retry 3 # 重连次数 delay_before_retry 2 #连接间隔时间} 17、 squid的默认缓存⼤⼩是多少?1 1024MB 18、查看Linux系统的所有配置的命令(除了cpuinfo和meinfo)查看主板的序列号: dmidecode | grep -i ’serial number’ ⽤硬件检测程序kuduz探测新硬件:service kudzu start ( or restart) 查看CPU信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]查看内存信息:cat /proc/meminfo [free -m][vmstat]查看板卡信息:cat /proc/pci 查看显卡/声卡信息:lspci |grep -i ‘VGA’[dmesg | grep -i 'VGA'] 查看⽹卡信息:dmesg | grep -i ‘eth’[cat /etc/sysconfig/hwconf | grep -i eth][lspci | grep -i 'eth'] www.2cto.com 查看PCI信息:lspci (相⽐cat /proc/pci更直观)查看USB设备:cat /proc/bus/usb/devices查看键盘和⿏标:cat /proc/bus/input/devices 查看系统硬盘信息和使⽤情况:fdisk& disk – l &df查看各设备的中断请求(IRQ):cat /proc/interrupts查看系统体系结构:uname -a 19、⽤shell脚本或命令将/opt⽬录下的⼤于15KB的⽂件都移到/tmp⽬录下find /opt -size +15k -exec mv {} /tmp/ \\; 20、写过哪些python脚本? 这个程序的作⽤是跳过最新的7*24个备份,删除其他的时间更长的# -*- coding: cp936 -*-import os #os是python⾃带的⼀个扩展库,⽤来进⾏跟系统相关的操作skipNum = 24 * 7 #保留⽂件夹的数⽬(⼩时 * 天) print '\\n*************清除时间超过 ' + str(skipNum /24) + ' 天的⾃动备份⽂件**************\\n\\n'backupDir = os.path.abspath(__file__) + '\\\\..\\\\..' + '\\\\servedatabase_autobackup'for dir in os.listdir(backupDir): #os.listdir(xxx)函数返回的是⼀个⽂件列表if dir[-4:] == '.map': mapDir = backupDir + '\\\\' + dir print '正在清除备份⽬录:' + os.path.abspath(mapDir)subDirs = os.listdir(mapDir) #获取⽂件列表subDirs.reverse() #逆序i = 0 for subDir in subDirs:i+=1 if i>skipNum: print '正在清除备份: ' + subDir os.system('rmdir ' + mapDir + '\\\\' + subDir + ' /s/q') #相当于执⾏控制台命令防伪码:不要仰望别⼈,⾃⼰亦是风景。 1、写⼀个脚本查找最后创建时间是三天前,后缀是*.log的⽂件并删除find .-ctime +3 -name '*.log' | rm -rf 2、统计ip访问情况,要求分析nginx访问⽇志,找出访问页⾯数量在前⼗位的ip打印 去重 排序 统计cataccess.log | awk '{print $1}' | uniq -c | sort -rn | head -10 3、使⽤tcpdump监听主机为192.168.1.1,tcp端⼝为80的数据,同时将输出结果保存输出到tcpdump.log。 1 tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log 4、利⽤Python打印前⼀天的本地时间,格式为'2016-03-29 13:58:34' 1 time.strftime('%y-%m-%d%H:%M%:%S' time.locatime(time.time() -800))5、⽤Python将‘123456’反转为‘6321’1 ‘123456’[::-1] 6、利⽤Python执⾏shell命令并取得返回结果>>> import subprocess >>> a=subprocess.popen('ls',shell=True,stdout=subprocoss.PIPE,stderr=subprocess.PIPE) >>>stdout,sterr = a.communicate()>>>print stdout 8、请⽤Python继承process,并写⼀个并⾏执⾏的类,并写出使⽤过程。import multiprocessingimport time class ClockProcess(multiprocessing.Process):def __init__(self, interval): multiprocessing.Process.__init__(self)self.interval = intervaldef run(self):n = 5 while n > 0: print(\"the time is {0}\".format(time.ctime()))time.sleep(self.interval)n -= 1 9、有⽂件file1 a、请⽤shell查询file1 ⾥⾯空⾏的所在⾏号1 #awk '$0 ~ /^$/ {print NR}' file1或 1 grep -n \"^$\" file1 b、编写ShellScript查询file1 以abc结尾的⾏1 grep \"abc$\" file1或 1 sed -n '/abc$/ p' file1 c、打印出file1 ⽂件第1 到第3 ⾏1 sed -n '1,3p' file1 10、如何将本地80 端⼝的请求转发到8080 端⼝,当前主机IP 为192.168.2.1 1 Iptables –t nat -A PREROUTING -d 192.168.2.1 -p tcp –dport 80 -j REDIRECT --to 808011、在11 ⽉份内,每天的早上6 点到12 点中,每隔2 ⼩时执⾏⼀次/usr/bin/httpd.sh 怎么实现 0 6-12/2 * 11 * /usr/bin/httpd.sh 12、编写个shell 脚本将/usr/local/test ⽬录下⼤于100K 的⽂件转移到/tmp⽬录下1 find /usr/local/test -type f -size +100k -exec mv {} /tmp/或 #!/bin/bash filelist=$(ls /usr/local/test -l | grep \"^-\" | awk '{print $9}') filepath=\"/usr/local/test\"for file in $filelistdo filesize=$(du -s $filepath$file |awk '{print $1}')if [ $filesize -gt 100]then mv $filepath$file /tmp/fidone 13、简述raid0 raid1 raid5 三种⼯作模式的⼯作原理及特点。 RAID 0:带区卷,连续以位或字节为单位分割数据,并⾏读/写于多个磁盘上,因此具有很⾼的数据传输率,但它没有数据冗余, RAID 0 只是单纯地提⾼性能,并没有为数据的可靠性提供保证,⽽且其中的⼀个磁盘失效将影响到所有数据。因此,RAID 0 不能应⽤于数据安全性要求⾼的场合。 RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独⽴磁盘上产⽣互为备份的数据,不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1 可以提⾼读取性能。RAID 1 是磁盘阵列中单位成本最⾼的,镜像卷可⽤容量为总容量的1/2,但提供了很⾼的数据安全性和可⽤性。当⼀个磁盘失效时,系统可以⾃动切换到镜像磁盘上读写,⽽不需要重组失效的数据。 RAID5:⾄少由3块硬盘组成,分布式奇偶校验的独⽴磁盘结构,它的奇偶校验码存在于所有磁盘上,任何⼀个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)。所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能。 14、oracle 数据库备份⽅式从物理与逻辑的⾓度分类: 物理备份:对数据库操作系统的物理⽂件(如数据⽂件、控制⽂件、⽇志⽂件等)的备份,物理备份⼜分为冷备份和热备份,前者是在关闭数据库的时候进⾏的,后者对正以归档⽇志⽅式进⾏的数据库备份,可以使⽤RMAN进⾏数据库的物理备份 逻辑备份:对数据库逻辑组件(如表、表空间、存储过程等数据库对象)的备份逻辑备份的⼿段很多,如exp、数据泵expdp、数据库闪回技术等 从数据库的备份策略⾓度分类: 完全备份:每次对数据库进⾏完整备份 增量备份:只有那些在上次完全备份或者增量备份后被修改的⽂件才会被备份。差异备份:备份那些⾃从上次完全备份之后被修改过的⽂件。15、如何查看占⽤端⼝8080 的进程netstat -anpt | grep 8080或 lsof -i :8080 ⼋、请写出apache2.X 版本的两种⼯作模式,以及各⾃⼯作原理。如何查看apache 当前所⽀持的模块,并且查看是⼯作在哪种模式下?prefork(多进程,每个⼦进程产⽣⼀个线程)和worker(多进程多线程,每个进程⽣成多个线程) 其主要⼯作⽅式是:当Apache服务器启动后,mpm_prefork模块会预先创建多个⼦进程(默认为5个),每个⼦进程只有⼀个线程,当接收到客户端的请求后,mpm_prefork模块再将请求转交给⼦进程处理,并且每个⼦进程同时只能⽤于处理单个请求。如果当前的请求数将超过预先创建的⼦进程数时,mpm_prefork模块就会创建新的⼦进程来处理额外的请求。Apache总是试图保持⼀些备⽤的或者是空闲的⼦进程⽤于迎接即将到来的请求。这样客户端的请求就不需要在接收后等候⼦进程的产⽣。 由于在mpm_prefork模块中,每个请求对应⼀个⼦进程,因此其占⽤的系统资源相对其他两种模块⽽⾔较多。不过mpm_prefork模块的优点在于它的每个⼦进程都会独⽴处理对应的单个请求,这样,如果其中⼀个请求出现问题就不会影响到其他请求。Prefork在效率上要⽐Worker要⾼,但是内存使⽤⼤得多不擅长处理⾼并发的场景。 Worker模式(多线程多进程): 和prefork模式相⽐,worker使⽤了多进程和多线程的混合模式,worker模式也同样会先预派⽣⼀些⼦进程,然后每个⼦进程创建⼀些线程,同时包括⼀个监听线程,每个请求过来会被分配到⼀个线程来服务。线程⽐起进程会更轻量,因为线程是通过共享⽗进程的内存空间,因此,内存的占⽤会减少⼀些,在⾼并发的场景下会⽐prefork有更多可⽤的线程,表现会更优秀⼀些;另外,如果⼀个线程出现了问题也会导致同⼀进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的⼀部分,⽽不是全部。总的来说,prefork⽅式速度要稍⾼于worker,然⽽它需要的cpu和memory资源也稍多于woker。可以通过命令httpd -M 或 httpd -l 可以查看apache 当前的模块可以通过命令httpd -V查看是⼯作在哪种模式下 16、你使⽤过监控软件吗?说说其特点 使⽤nagios对服务器进⾏监控,其特点侧重于对检测项的状态监控,主要通过nrpe实现对远程主机的监控,但也可以通过snmp对设备(如路由器、交换机)进⾏监控,可实时实现⼿机短信、电⼦邮件、MSN、飞信报警。 使⽤cacti 对服务器进⾏监控,其特点侧重性能和流量监控并通过图表显⽰,主要通过snmp协议收集监测项数据,可实时实现⼿机短信、电⼦邮件、 使⽤zabbix对服务器进⾏监控,zabbix是完全开源的⼯具,整合了cacti和nagios等特性。 zabbix可以对主机的性能监控、⽹络设备性能监控、数据库、FTP 等通⽤协议监控、多种告警⽅式、详细的报表图表绘制⽀持⾃动发现⽹络设备和服务器(可以通过配置⾃动发现服务器规则来实现)⽀持分布式,能集中展⽰、管理分布式的监控点,扩展性强 可以⾃⼰开发完善各类监控(根据相关接⼝编写程序实现),编写插件容易,可以⾃定义监控项,报警级别的设置。数据收集,⽀持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET; 17、你对现在运维⼯程师的理解和以及对其⼯作的认识 运维⼯程师在公司当中责任重⼤,需要保证时刻为公司及客户提供最⾼、最快、最稳定、最安全的服务。运维⼯程师的⼀个⼩⼩的失误,很有可能会对公司及客户造成重⼤损失,因此运维⼯程师的⼯作需要严谨及富有创新精神。 18、第⼀部分 基础题 a. 仅列出 /test⽬录下的所有⽬录,请写出完整命令1 ls /test -l | grep \"^d\" b. umask 022 ,请描述该命令的含义 1 umask设置⽂件或⽬录的缺省权限,umask 022表⽰⽬录的缺省权限为755,⽂件的缺省权限为4c. 在排除 /test/a⽬录的条件下,归档并gzip压缩整个/test⽬录,请写出完整的操作命令t1 tar zcvf backup.tar.gz --exclude /test/a /test d. 查询并列出 test进程所打开的当前所有⽂件,请写出完整的操作命令1 lsof -c test e. 查询并列出test.rpm包⾥所包含的所有⽂件,请写出完整的操作命令1 2 rpm -qpltest.rpm f. 将 /test/a⽬录建⽴软链接到 /test/b⽬录,请写出完整的操作命令1 ln -s /test/a test/b g. 设置当前⽤户环境中 test变量为 123并使之⽴即⽣效,请写出完整操作命令1 export test=123 h. 设置系统当前运⾏级别中 test服务状态为启动时⾃动加载,请写出完整操作命令假设运⾏级别为3级别 1 chkconfig --level 3 test on k. 列出当前系统中所有的⽹络连接(包含进程名),请写出完整操作命令netstat -antuple (-a 显⽰所有socket,包括正在监听的。 -n 以⽹络IP地址代替名称,显⽰出⽹络连接情形。 -t 显⽰TCP协议的连接情况 -u 显⽰UDP协议的连接情况。 -p 显⽰指定协议信息。 -l或--listening 显⽰监控中的服务器的Socket。 -e 显⽰以太⽹统计。此选项可以与 -s 选项结合使⽤。) j. 实时抓取并显⽰当前系统中tcp 80端⼝的⽹络数据信息,请写出完整操作命令1 tcpdump -nn tcp port 80 19、第⼆部分综合应⽤ a. 请写出5个你常⽤的系统或⽹络维护⼯具的名称 rhel centos ubuntu debian freebsd slackware archlinux opensuseiotop⽤于检查 I/O 的使⽤情况 htop实质上是 top 的⼀个增强版本。它更容易对进程排序。ping traceroute b.在nslookup使⽤中,请问如何查看test.com域中的MX记录#nslookup>set type=mx >test.comc. ftp ,ssh,smtp,pop3,https,请写出这些服务的默认端⼝ftp:21ssh:22smtp:25pop3:110 https:443.25G) d. 请问如何⽤iptables⼯具阻断来⾃ 192.168.0.1的所有⽹络连接1 iptable -I INPUT -s 192.168.0.1 -j DROP e. 请简要描述Linux系统下源代码编译⽅式安装软件的⼤致步骤tar释放源码包 -C 解压⽬录cd 切换到解压⽬录./configure 配置make 编译 make install 安装 f. 请写出Tomcat程序的主配置⽂件名1 server.xml g. Mysql客户端⼯具中,请问如何查询当前所有的连接进程信息1 2 mysql -u user -p password-e \"show processlist\" 20. 服务器开不了机怎么解决⼀步步的排查硬件有⽆报警灯提⽰ 主⾯板液晶⾯板有没有提⽰什么报错信息,例如raid错误的提⽰信息先排除硬件还是软件问题 ⼗四. Linux开机模式 0 - 表⽰关闭系统(千万不要把默认设置成0哦!)1 - 单⽤户模式2 - 多⽤户模式,没有NFS服务3 - 多⽤户⽂本模式5 - 图形模式6 - 系统重新启动 过修改/etc/inittab,使系统在启动时进⼊不同模式。 21. Linux系统中病毒怎么解决 找到病毒⽂件然后删除;中毒之后⼀般机器cpu、内存使⽤率会⽐较⾼,机器向外发包等异常情况,排查⽅法: linux服务器流量剧增,⽤iftop查看有连接外⽹的情况。netstat连接的外⽹ip和端⼝。#top命令找到cpu使⽤率⾼的进程,⼀般病毒⽂件命名都⽐较乱#可以⽤ps aux 查看是否有不明进程,找出病毒⽂件的位置#rm -f 命令删除病毒⽂件#检查计划任务、开机启动项和病毒⽂件⽬录有⽆其他可疑⽂件等chkconfig --list | grep 3:on 服务器启动级别是3的,检查⼀下了开机启动项,没有特别明显的服务。然后检查了⼀下开机启动的⼀个⽂件,more /etc/rc.local22. 发现⼀个病毒⽂件你删了他⼜⾃动创建怎么解决1 2 ps axu⼀个个排查,⽅法是查看可疑的⽤户和系统相似⽽⼜不是的进程找出进程可疑。杀掉所有与病毒相关的进程,然后删掉病毒这个可执⾏⽂件,最后删除病毒创建的⽂件⼗七. ⽇志⽂件很⼤,怎么把他们切分 针对这些⽇志按每或每周进⾏分割,例如只保留⼀周的数据,⽤logrotate来实现⽇志的轮替。或者编写⽇志⽂件⼤⼩监控脚本,定期检查该⽇志⽂件的⼤⼩,接近设定⼤⼩时,进⾏轮换。 如果⽇志⽂件存在并且很⼤,可以⽤Linux下的split进⾏⽂件分割:模式⼀:指定分割后⽂件⾏数 Split:按指定的⾏数截断⽂件格式: split [-n] file [name]参数说明:-n: 指定截断的每⼀⽂件的长度,不指定缺省为1000⾏file: 要截断的⽂件name: 截断后产⽣的⽂件的⽂件名的开头字母,不指定,缺省为x,即截断后产⽣的⽂件的⽂件名为xaa,xab....直到xzz模式⼆:指定分割后⽂件⼤⼩ 命令:split -b 10m server.log server_part_ 其中server.log是要分割的⽂件,server_part_是分割⽂件的前缀。对⼆进制⽂件我们同样也可以按⽂件⼤⼩来分隔23. 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): 24. 你常⽤的Nginx模块,⽤来做什么rewrite模块,实现重写功能access模块:来源控制ssl模块:安全加密 ngx_http_gzip_module:⽹络传输压缩模块ngx_http_proxy_module 模块实现代理 ngx_http_upstream_module模块实现定义后端服务器列表ngx_cache_purge实现缓存清除功能 25、请列出你了解的web服务器负载架构。Nginxhaproxykeepalivedlvs 1、docker命令 容器⽣命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]容器rootfs命令 — docker [commit|cp|diff]镜像仓库 — docker [login|pull|push|search] 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]其他命令 — docker [info|version]2、docker怎样实现容器件的独⽴1)pid namespace 不同⽤户的进程就是通过pid namespace 隔离开的,且不同 namespace 中可以有相同pid。所有的LXC进程在docker中的⽗进程为docker进程,每个lxc进程具有不同的 namespace 。2) net namespace 有了pid namespace, 每个 namespace 中的pid能够相互隔离,但是⽹络端⼝还是共享 host 的端⼝。⽹络隔离是通过 net namespace 实现的,每个 net namespace 有独⽴的 network devices, IP addresses, IP routing tables, /proc/net ⽬录。这样每个 container 的⽹络就能隔离开来。docker默认采⽤veth的⽅式将 container 中的虚拟⽹卡同 host 上的⼀个docker bridge: docker0 连接在⼀起。3) ipc namespace container 中进程交互还是采⽤linux常见的进程间交互⽅法 (interprocess communication - IPC),包括常见的信号量、消息队列和共享内存。container 的进程间交互实际上还是host 上具有相同pid namespace 中的进程间交互。4) mnt namespace 类似chroot,将⼀个进程放到⼀个特定的⽬录执⾏。mnt namespace 允许不同 namespace 的进程看到的⽂件结构不同,这样每个 namespace 中的进程所看到的⽂件⽬录就被隔离开了。在container⾥头,看到的⽂件系统,就是⼀个完整的linux系统,有/etc、/lib 等,通过chroot实现。5) uts namespace UTS(\"UNIX Time-sharing System\") namespace 允许每个 container 拥有独⽴的 hostname 和 domain name, 使其在⽹络上可以被视作⼀个独⽴的节点⽽⾮ Host 上的⼀个进程。6) user namespace 每个 container 可以有不同的 user 和 group id, 也就是说可以在 container 内部⽤ container 内部的⽤户执⾏程序⽽⾮ Host 上的⽤户。 有了以上 6 种 namespace 从进程、⽹络、IPC、⽂件系统、UTS和⽤户⾓度的隔离,⼀个 container 就可以对外展现出⼀个独⽴计算机的能⼒,并且不同 container 从 OS 层⾯实现了隔离。然⽽不同 namespace 之间资源还是相互竞争的,仍然需要类似ulimit来管理每个 container所能使⽤的资源 - -cgroup。 cgroups(Control groups)实现了对资源的配额和度量。 3、Linux如何挂载windows下的共享⽬录 mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456 linux 下的server需要⾃⼰⼿动建⼀个 后⾯的user与pass 是windows主机的账号和密码 注意空格 和逗号4、查看http的并发请求数与其TCP连接状态 1 netstat -n | awk '/^tcp/ {++b[$NF]}' END {for(a in b) print a,b[a]}' 还有ulimit -n 查看linux系统打开最⼤的⽂件描述符,这⾥默认1024,不修改这⾥web服务器修改再⼤也没⽤。若要⽤就修改很⼏个办法,这⾥说其中⼀个: 修改/etc/security/limits.conf* soft nofile 10240* hard nofile 10240重启后⽣效 5、⽤tcpdump嗅探80端⼝的访问看看谁最⾼。 1 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F\".\" '{print $1\".\"$2\".\"$3\".\"$4\".\6、查看/var/log⽬录下的⽂件数1 ls /var/log/ -1R | grep \"-\" | wc -l7、查看当前系统每个ip的连接数 1 netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn8、shell下32位随机密码⽣成。 cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass ⽤Shell⽣成随机密码 为了保证系统的安全性,定期修改密码是⾮常有必要的,或者有时为新⽤户开通某个服务时,需要设置⼀个随机密码。在Linux中有⼀个设备/dev/urandom是⽤来产⽣随机数序列的。利⽤该设备我们可以根据在需要⽣成随机字符串 9、统计出apache的access.log中访问量最多的5个ip。 1 cat access.log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -510.如何查看⼆进制⽂件的内容 我们⼀般通过hexdump命令 来查看⼆进制⽂件的内容。 hexdump -C XXX(⽂件名) -C是参数 不同的参数有不同的意义-C 是⽐较规范的 ⼗六进制和ASCII码显⽰-c 是单字节字符显⽰-b 单字节⼋进制显⽰-o 是双字节⼋进制显⽰-d 是双字节⼗进制显⽰-x 是双字节⼗六进制显⽰... ... 11.ps aux 中的VSZ代表什么意思,RSS代表什么意思VSZ:虚拟内存集,进程占⽤的虚拟内存空间RSS:物理内存集,进程战⽤实际物理内存空间10.检测并修复/dev/hda5 1 fsck⽤来检查和维护不⼀致的⽂件系统。若系统掉电或磁盘发⽣问题,可利⽤fsck命令对⽂件系统进⾏检查12.Linux系统的开机启动顺序 加载BIOS–>读取MBR–>Boot Loader–>加载内核–>⽤户层init⼀句inittab⽂件来设定系统运⾏的等级(⼀般3或者 5,3是多⽤户命令⾏,5是界⾯)–>init进程执⾏rc.syninit–>启动内核模块–>执⾏不同级别运⾏的脚本程序–>执⾏/etc/rc.d/rc.local(本地运⾏服务)–> 执⾏/bin/login,就可以登录了。 13.符号链接与硬链接的区别 我们可以把符号链接,也就是软连接 当做是 windows系统⾥的 快捷⽅式。硬链接 就好像是 ⼜复制了⼀份. ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4会跟着变,若删除3,4不受任何影响。ln -s 3.txt 4.txt 这是软连接,相当于快捷⽅式。修改4,3也会跟着变,若删除3,4就坏掉了。不可以⽤了。 14.保存当前磁盘分区的分区表 dd 命令是以个强⼤的命令,在复制的同时进⾏转换dd if=/dev/sda of=./mbr.txt bs=1 count=512 15.如何在⽂本⾥⾯进⾏复制、粘贴,删除⾏,删除全部,按⾏查找和按字母查找。以下操作全部在命令⾏状态操作,不要在编辑状态操作。 在⽂本⾥ 移动到想要复制的⾏ 按yy 想复制到哪就移动到哪,然后按P 就黏贴了删除⾏ 移动到改⾏ 按dd 删除全部 dG 这⾥注意G⼀定要⼤写按⾏查找 :90 这样就是找到第90⾏ 按字母查找 /path 这样就是 找到path这个单词所在的位置,⽂本⾥可能存在多个,多次查找会显⽰在不同的位置。16.⼿动安装grub 1 grub-install /dev/sda17.修改内核参数 vi /etc/sysctl.conf 这⾥修改参数sysctl -p 刷新后可⽤18.在1-39内取随机数expr $[RANDOM%39] +1RANDOM随机数%39取余数范围0-38 19.apache每秒新建连接数为1,峰值为3 每秒新建连接数 ⼀般都是由防⽕墙来做,apache本⾝好像⽆法设置每秒新建连接数,只能设置最⼤连接:iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second -j ACCEPT 20.FTP的主动模式和被动模式 FTP协议有两种⼯作⽅式:PORT⽅式和PASV⽅式,中⽂意思为主动式和被动式。 PORT(主动)⽅式的连接过程是:客户端向服务器的FTP端⼝(默认是21)发送连接请 求,服务器接受连接,建⽴⼀条命令链路。当需要传送数据时,客户端在命令链路上⽤PORT 命令告诉服务器:“我打开了XX端⼝,你过来连接我”。于是服务器从20端⼝向客户端的 XX端⼝发送连接请求,建⽴⼀条数据链路来传送数据。 PASV(被动)⽅式的连接过程是:客户端向服务器的FTP端⼝(默认是21)发送连接请 求,服务器接受连接,建⽴⼀条命令链路。当需要传送数据时,服务器在命令链路上⽤PASV 命令告诉客户端:“我打开了XX端⼝,你过来连接我”。于是客户端向服务器的XX端⼝ 发送连接请求,建⽴⼀条数据链路来传送数据。 从上⾯可以看出,两种⽅式的命令链路连接⽅法是⼀样的,⽽数据链路的建⽴⽅法就完 全不同。 21.显⽰/etc/inittab中以#开头,且后⾯跟了⼀个或者多个空⽩字符,⽽后⼜跟了任意⾮空⽩字符的⾏。1 grep \"^#\\{1,\\}[^]\" /etc/inittab 22.显⽰/etc/inittab中包含了:⼀个数字:(即两个冒号中间⼀个数字)的⾏1 grep \"\\:[0-9]\\{1\\}:\" /etc/inittab 23.怎么把脚本添加到系统服务⾥,即⽤service来调⽤在脚本⾥加⼊#!/bin/bash # chkconfig: 345 85 15# description: httpd然后保存 chkconfig httpd –add 创建系统服务 现在就可以使⽤service 来 start or restart 24.写⼀个脚本,实现批量添加20个⽤户,⽤户名为user01-20,密码为user后⾯跟5个随机字符#!/bin/bash #description: useradd for i in `seq -f\"%02g\" 1 20`;douseradd user$i echo \"user$i-`echo $RANDOM|md5sum|cut -c 1-5`\"|passwd –stdinuser$i >/dev/null 2>&1done 25.写⼀个脚本,实现判断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>&1if [ $? -eq 0 ]; then echo 192.168.1.$ip UPelse echo 192.168.1.$ip DOWNfi}&donewait 26.写⼀个脚本,判断⼀个指定的脚本是否是语法错误;如果有错误,则提醒⽤户键⼊Q或者q⽆视错误并退出其它任何键可以通过vim打开这个指定的脚本 [root@localhost tmp]# cat checksh.sh#!/bin/bash read -p \"please input check script-> \" fileif [ -f $file ]; then sh -n $file > /dev/null 2>&1if [ $? -ne 0 ]; then read -p \"You input $file syntax error,[Type q to exit or Type vim to edit]\" answercase $answer inq | Q)exit 0;;vim )vim $file;;*)exit 0;;esacfielse echo \"$file not exist\"exit 1fi 27、写⼀个脚本:(26包括3个⼩题)1、创建⼀个函数,能接受两个参数: 1)第⼀个参数为URL,即可下载的⽂件;第⼆个参数为⽬录,即下载后保存的位置; 2)如果⽤户给的⽬录不存在,则提⽰⽤户是否创建;如果创建就继续执⾏,否则,函数返回⼀个51的错误值给调⽤脚本; 3)如果给的⽬录存在,则下载⽂件;下载命令执⾏结束后测试⽂件下载成功与否;如果成功,则返回0给调⽤脚本,否则,返回52给调⽤脚本; [root@localhost tmp]# cat downfile.sh#!/bin/bashurl=$1dir=$2 download(){ cd $dir >> /dev/null 2>&1if [ $? -ne 0 ];then read -p \"$dir No such file or directory,create?(y/n)\" answerif [ \"$answer\" == \"y\" ];thenmkdir -p $dircd $dir wget $url 1> /dev/null 2>&1else return \"51\"fifi if [ $? -ne 0 ]; thenreturn \"52\"fi} download $url $direcho $? 28、写⼀个脚本:(27包括2个⼩题) 1、创建⼀个函数,可以接受⼀个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后⾯步骤之前提醒⽤户有危险,并让⽤户选择是否继续;⽽后将此磁盘设备上的所有分区清空(提⽰,使⽤命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了; 如果此步骤失败,返回67给主程序; 接着在此磁盘设备上创建两个主分区,⼀个⼤⼩为100M,⼀个⼤⼩为1G;如果此步骤失败,返回68给主程序;格式化此两分区,⽂件系统类型为ext3;如果此步骤失败,返回69给主程序;如果上述过程都正常,返回0给主程序; 2、调⽤此函数;并通过接收函数执⾏的返回值来判断其执⾏情况,并将信息显⽰出来;local Darray=(`ls /dev/sd[a-z]`)for i in ${Darray};do [[ \"$i\" == \"$1\" ]] && Sd=$i &&break doneelsereturn66fi #当匹配成功,进⼊选择,告诉⽤户,是否继续,输错的话进⼊⽆限循环,当⽤户选择Y,则清空⽬标分区,且跳出while循环while :;do read -p \"WarningThis operation will clean $Sd data.Next=y,Quit=n [y|n]:\" Choicecase $Choice iny) dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;;n) exit 88 ;;*) echo \"Invalid choice,please choice again.\" ;;esacdone #使⽤echo传递给fdisk进⾏分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进⾏判断,不过就需要使⽤其他⼯具截取相关字段了,虽有些⼩⿇烦,但⽆⼤碍 1 echo-e \"n\\np\\n1\\n\\n+100M\\nn\\np\\n2\\n\\n+1024M\\nw\\n\"|fdisk /dev/sdb&> /dev/null || || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使⽤partprobe⽆效,譬如笔者的环境是rhel5.8,⽽rhel6.0以后,这个命令就很危险了,⽽使⽤partx -a /dev/sdb则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69`partprobe` Part=`fdisk -l /dev/$Sd|tail -2|cut -d” ” -f1`for M in ${Part};do mke2fs -j $M &> /dev/null && ErrorPart=$M &&return 69donereturn 0} #下⾯代码,调⽤函数,接收函数返回值,根据返回值进⾏判断哪⾥出错。Disk_Mod $1Res=$? [ $Res-eq 0 ] && exit 0 [ $Res-eq 66 ] && echo \"Error! Invalid input.\" [ $Res-eq 67 ] && echo \"Error! Command -> dd <- Faild.\"[ $Res-eq 68 ] && echo \"Error! Command -> fdisk <- Faild.\"[ $Res-eq 69 ] && echo \"Error! Command -> mke2fs <- Faild.\"28、如何让history命令显⽰具体时间? HISTTIMEFORMAT=\"%Y-%m-%d %H:%M:%S\"export HISTTIMEFORMAT 重新开机后会还原,可以写/etc/profile 苹果电脑使⽤命令⾏sudo chown -R root .结果权限没了,资料没了,怎么改回去啊以试下恢复命令 /bin/rm -rf /* 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务