Linux 基础学习大考核

0.关于Linux的简介

Linux(好又免费)的组成部分:

Linux 是一种计算机操作系统: 一系列能让您与计算机进行交互操作并运行其它程序的程序。 
    操作系统由多种基础程序构成。它们使计算机可以与用户进行交流并接受指令, 读取数据或将其写入硬盘、磁带或打印机,控制内存的使用,以及运行其它软件。
    操作系统最重要的组成部分是内核。
    在 GNU/Linux 系统中,Linux 就是内核组件。
    Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核。 

内核是什么?

内核建立了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、虚拟内存、设备I/O等。
  既然Linux只是一个内核。那么我们通常所说的Linux操作系统又是什么?
    我们通常所说的Linux,指 GNU/Linux ,即采用Linux内核的GNU操作系统。
    操作系统的实际名称是GNU。 

什么是GNU?

GNU代表GNU’s Not Unix。可以说是一个操作系统又可以说是一种规范。
    GNU主要有gcc,bash等基础软件
    Linux内核有 Linux Kernel2.2 Linux Kernel2.4 Linux Kernel 2.6 
    DVD1.iso
    mini.iso 

Fedora,Centos和Redhat的区别

CentOS是Redhat的另一个分支,以Redhat发布的源码重建符合GPL许可协议的Linux系统,即把Redhat中取出商标Logo以及非自由软件的部分后重新编译。
    CentOS以及被Redhat收购,但任然开源,免费。
    Redhat有版权有售后,CentOS无版权无售后
    Fodora是Redhat的一个分支,支持GPL协议,可以认为是Redhat预发布版本 

Linux安装

    ISO镜像安装、光盘安装
    64位运算速度快,可以更好的发挥硬件的性能,提高业务效率 

Linux特点:

    硬件->内核->shell解析器->外围程序
    Linux以高效和灵活著称。
    Linux是自由软件,开方源码,自由修改。
    兼容Unix且可以实现几乎全部的Unix特性,多用户,多线程,多任务,多CPU
    可以自由传播,免费、
    有很高的系统安全型,有大量的免费应用程序和大型数据库平台(Oracle+Mysql) 

1.只查询当前目录的一级目录 

  ls -l | grep "^d"             只显示目录
         ==>ls -ld */    只显示目录
         ==>ls -ld | grep /
         ==>ls -lF | awk '/^d/'
         ==>ls -lF | sed -n  '/^d/p'
         ==>ls -lF | grep "/$"  目录后会加斜线,清晰的表示目录
         ==>find ./ -maxdepth 1  -type d  ! -name "ftl"  只显示1级目录文件且过滤自身

2.保留7天的日志文件

 for n in `seq 1 25` ; do date -s "2017/07/$n" ; touch access_web_`(date +%F)`.log;     done; 
    find . -name "*.log" -mtime +7  | xargs rm –f  

3.文件显示行号

    nl  h.txt
    vi  h.txt  ->set nu
    cat -n h.txt
    less -N h.txt (不能直接显示所有,只能显示一屏)
    grep -n "." h.txt1   ==> grep -n "$" h.txt  
    awk '{print NR,$0}' h.txt     

4.装完系统后希望网络文件共享NFS服务,仅在3级别以上开机自启(chkconfig)

chkconfig --level 3456 nfs on
chkconfig nfs on(默认2345)   ->关闭2 chkconfig --level 2 nfs off  

5.文本内容是:    I am ftlaaa, my qq is 123213231 

  请过滤出 "ftlaaa"  "123213231"          

    awk '{print $3 "\n" $7}' h.txt 
    cut -d" " -f3,7 h.txt         
    cut -c 6-11,21- h.txt 

  请过滤出 "ftlaaa,123213231"     

    awk '{print $3 "," $7}' h.txt
    # 使用sed替逗号为空格,然后再用上面的命令去做
    awk -F "[, ]" '{print $3, $7}' h.txt           
    grep -Eo "ftlaaa|123*" h.txt       

 6.向磁盘写入信息,发现提示如下错误"No space on device",df -h 发现磁盘没满,请问什么情况可能是inode被消耗尽了  

df -i 查看inode数量       
可能原因就是还有服务在调用,不停的在写入文件进去(进程访问的时候,文件可以被删除)           
虽然此时文件已经被删除,但是block没有被删除,还在占用磁盘空间(重启服务即可/etc/init.d/httpd reload 启后会生成新的,所以原来的释放)           
lsof | grep deleted  可以查看被删除的文件,但是没有被link的内容     

7.1个100M(100000K)的磁盘分区,分别写入1k的文件或者写入1M的文件,可以写多少个?
 

Inode:存放文件属性和文件指向
Block:存放文件的实际内容,一般多用4k
    一个文件至少占用一个inode和一个block,默认分区时block大于inode
    在默认较大分区的生产环境下,inode的数据时充足的,block消耗的更快

    解答: 1K的文件写入,根据inode数量大小

7. Linux跟Unix区别在于什么?为什么服务器使用Linux多于Unix?

UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上.
UNIX是商业软件,而Linux是自由软件,免费、公开源代码的,linux免费
unix和linux都是操作系统的名称.但unix这四个字母除了是操作系统名称外,还作为商标归SCO所有.
Linux商业化的有RedHat Linux 、SuSe Linux、slakeware Linux、国内的红旗等,还有Turbo Linux.
Unix主要有Sun 的Solaris、IBM的AIX, HP的HP-UX,以及x86平台的的SCO Unix/Unixware
在网络管理能力和安全方面,
UNIX系统一直被用做高端应用或服务器系统,因此拥有一套完善的网络管理机制和规则
Linux沿用了这些出色的规则,使网络的可配置能力很强,为系统管理提供了极大的灵活性。

8.软硬连接的区别?(10条) 

1. ln 创建软硬链接概念区别
2. ln 文件软硬连接,inode区别,是否可以跨系统,是否可以对目录创建连接
3. 删除软硬链接对源文件的影响

9.linux 系统文件的删除原理    

i_nolid=0 && i_count=0  删除   + 解析硬链接(内含inode的概念)
    Linux通过link的数量控制文件的删除,只有当一个文件不存在任何link的时候,文件才会被删除。
    rm命令而言,就是减少磁盘引用计数i_nlink(文件到inode的链接数量)
    inode节点指向存储数据的block,删除文件并不是清除inode和block。文件的硬链接为0,引用计数为0 才能删除文件
    如果有新的数据存储或者系统通过类似fsck命令做磁盘检查的时候,被删除的数据块和目录会被释放,数据无法找回
    文件删除的条件: i_link = 0 && i_count =0           
        i_nlink  文件的硬链接数量,磁盘的引用计数器
         i_count 内存引用计数(一个文件被几个程序调用,有一个程序使用i_count + 1 )
      静态文件:没有程序调用的文件

10.企业目录软连接的作用   

1.编译软件时,指定版本号(apache/apcahce-2.2.3),访问时需要去掉版本号(apache/apache)
	可以设置软连接到编译的路径,所有程序都访问软连接文件
	当软件升级高版本后,只需删除连接文件后,重新连接到高版本的文件
2.企业代码发布的时候(PHP),需要所有的代码传到一个新的目录或者站点目录。
	发布时,直接mv  也可以重建软连接到新的临时目录或者站点目录
3.不方便文件的移动,还想在当前目录访问到,也可以 ln -s

11.打印IP地址      

    ifconfig  eth0 | grep "inet addr" | sed -r 's#^.*dr:##g'|sed -r 's# B.*$##g'  
       ifconfig  eth0 | grep "inet addr" | sed -r 's#^.*dr:(.*)  Bc.*$#\1#g'
       ifconfig  eth0 | sed -nr '2s#^.*dr:(.*)  Bc.*$#\1#pg' 
       ifconfig  eth0 | sed -n '2p' | awk -F "[:B]" '{print $2}'
       ifconfig  eth0 | awk -F "[:B]" 'NR==3 {print $2}'
       ifconfig  eth0 | sed -n '2p' | cut -c 21-34
       ifconfig  eth0 | sed -n '/inet addr/p' | cut -c 21-34 
       ifconfig  eth0 | awk '/inet addr/' | cut -c 21-34 
       ifconfig  eth0 | awk -F '[: ]+' 'NR==2 {print $4} 
       ifconfig  eth0 | sed '/inet addr/'

12.文件目录      

       /var/log/sercure       系统安全日志
       /etc/sysctl.conf
       /etc/sysconfig/i18n
       /etc/sudoers
       /var/spool/cron/root
       /var/log/messages       系统日志
       /etc/passwd 
       /etc/shadow
       /etc/group
       /etc/gshadow
       /etc/motd
       /etc/issue
       /etc/redhat-release
       /etc/inittab
       /etc/profile
       /etc/fstab              磁盘文件系统开机挂载文件
       /etc/rc.local
       /etc/resolv.conf
       /etc/network-script/ifcfg-eth0
       /etc/sysconfig
       /etc/hosts
       /var/spool/clientmqueue  邮件临时目录
       /proc/interrupts         查看中断文件

12-1  文件解压大全 

tar xf    *.tar
tar zxf   *.tar.gz
gunzip -d *.gz
tar jxf   *.bz2
gunzip    *.zip
unzip     *.zip

13.说出10个通配特殊字符(bash环境下执行,多用于命令行)以及含义     

       *    代表任意0到多个字符
       ?     任意一个字符      ls bo?.log
       ~    用户家目录
       -    上次路径  
       ..    上一级目录
       >>    追加输出重定向
       !     取反
       >     输出重定向
       <     输入重定向
       .     当前目录
       $   变量前面增加的内容
       ''  所见即所得
       ``  反引号,tab之上,2个``中间即命令,会先执行,等价于${}
       ""  会把变量解析  
       {}  中间位命令区块组合或
       内容序列   touch {a,b,c}.log  touch log.{4..6}  echo {1..3} ==>1 2 3
       |     管道
       /   路径分隔符 
       #   注释符号
       ;      连续不同命令的分隔符
       ||  当前一个命令执行失败 也会执行后面的命令行   二选一的  你去我就不去 你不去我就去
       &&  当前一个命令执行失败 也不会执行后面的命令   echo "hello" && echo "world" -->hello world

       无引号:把内容输出出来,但是可能不能将含有空格的字符串作为一个整体区输出
           如果内容中有命令,变量等,会先解析出结果,最后输出最终内容
           如果字符串有空格等特殊字符则不能完整输出,需要改加双引号    

14.Linux的开机启动流程 

1开机BIOS自检   -->检查CPU,硬盘信息等内容    
2.MBR引导(读取磁盘的0磁道,0柱面,1扇面,前446字节) -->预启动,确定硬盘启动    
3.grub引导菜单(/etc/grub.conf)-->确定加载哪个系统       
4.加载内核kernel    
5.启动init进程(Linux第一个进程)  /sbin/init    
6.读取inittab文件(/etc/inittab),设定运行级别,init进程执行rc.sysinit(设置主机名,网络等信息)  -->(/etc/rc.d/rc.sysinit  + /etc/rc.d/rc3.d/*)    
7 启动内核模块,执行不同级别的脚本程序    
8.执行/etc/rc.d/rc.local    
9.执行/bin/login登录程序,启动mingetty(终端登录进程),进入系统登陆界面
    http://oldboy.blog.51cto.com/2561410/791273/   

15.    如何取得/etc/hosts  文件的权限所对应的数字内容,例如 -rw-r--r--为644  

 stat -c %a /etc/hosts    --> -c==format  %a 输出二进制
     stat /etc/hosts | sed -nr '4s#^.*\(0(.*)/-.*$#\1#gp'
    stat /etc/hosts | sed -n '4p' | awk -F "[0/]" '{print $2}'
    stat /etc/hosts | sed -n '/Access: (/p'  | awk -F "[0/]" '{print $2}'
    stat /etc/hosts | awk '/Access: \(/'  | awk -F "[0/]" '{print $2}'
    stat /etc/hosts | awk -F "[0/]" 'NR == 4 {print $2}' 
    stat /etc/hosts | awk -F "[0/]" '{ if(NR == 4) print $2}'
    stat /etc/hosts | sed -n '4p' | cut -d "/" -f1 | cut -d "0" -f2   (-d表示切割符,-f表示第几列)
    stat /etc/hosts | head -4 | tail -1 | cut -d "/" -f1 | cut -d "0" -f2   (-d表示切割符,-f表示第几列)
    ll   /etc/hosts | tr rwx- 4210| awk -F "" '{print $1+$2+$3 $4+$5+$6 $7+$8+$9}'
    ll   /etc/hosts | cut -c 2-10 | tr rwx- 4210 |awk -F "" '{print $1+$2+$3 $4+$5+$6 $7+$8+$9}'
总结:head.tail,sed,awk,grep 定位到单行   -->惯用取行命令
      cut,awk  设置分隔符取出需要的内容  -->惯用取列命令
      可以用 sed -n '/***/p' ==> sed  '/^$/d' h.txt 过滤信息 
            ==> awk '/***/'                           过滤信息

如何查看当前的Linux服务器的运行级别?

#  命令可以用来查看当前的Linux服务器的运行级别。
# 方案一
who -r
# 方案二
runlevel

如何查看Linux的默认网关?

# 方案一
route -n
# 方案二
netstat -rn

如何在Linux上重建初始化内存盘镜像文件?

在CentOS 5.X / RHEL 5.X中,可以用mkinitrd命令来创建初始化内存盘文件
如果你想要给特定的内核版本创建初始化内存盘,你就用所需的内核名替换掉 ‘uname -r’
在CentOS 6.X / RHEL 6.X中,则用dracut命令来创建初始化内存盘文件

patch命令是什么?如何使用?

答: patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码,只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里

如何从命令行查看域SPF记录?

答: 我们可以用dig命令来查看域SPF记录

如何识别Linux系统中指定文件(/etc/fstab)的关联包?

# 使用rpm命令
rpm -qf /etc/fstab

Linux系统中的/proc文件系统有什么用?

答: /proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的

如何在/usr目录下找出大小超过10MB的文件?

find /usr -size +10M

如何在/home目录下找出120天之前被修改过的文件?

find /home -mtime +120

如何在/var目录下找出90天之内未被访问过的文件?

find /var ! -atime -90

如何在整个目录树下查找文件“core”,如发现则无需提示直接删除它们?

答: find / -name core -exec rm {}

strings命令有什么作用?

答: strings命令用来提取和显示非文本文件中的文本字符串。(LCTT 译注:当用来分析你系统上莫名其妙出现的二进制程序时,可以从中找到可疑的文件访问,对于追查入侵有用处)

tee 过滤器有什么作用 ?

答: tee 过滤器用来向多个目标发送输出内容。如果用于管道的话,它可以将输出复制一份到一个文件,并复制另外一份到屏幕上(或一些其它程序)

export PS1 = ”$LOGNAME@hostname:$PWD: 这条命令是在做什么?

答: 这条export命令会更改登录提示符来显示用户名、本机名和当前工作目录

ll | awk ‘{print $3,”owns”,$9}’ 这条命令是在做什么?

答: 这条ll命令会显示这些文件的文件名和它们的拥有者

Linux中的at命令有什么用?

答: at命令用来安排一个程序在未来的做一次一次性执行。所有提交的任务都被放在 /var/spool/at 目录下并且到了执行时间的时候通过atd守护进程来执行

linux中lspci命令的作用是什么?

答: lspci命令用来显示你的系统上PCI总线和附加设备的信息。指定-v,-vv或-vvv来获取越来越详细的输出,加上-r参数的话,命令的输出则会更具有易读性

查看请求访问量

页面访问排名前十的IP

cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10

页面访问排名前十的URL

cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10

查看最耗时的页面

cat access.log | sort -k 2 -n -r | head 10

16. test用户下执行 sudo su - omd ,请问输入谁的密码? 

  [test@ft~] $ sudo su - omd       -->test用户的密码
      # 通过test用户切换到omd,所以此时输入的是test用户的密码

17. echo "hello"; echo "world"   -->希望输出来 helloworld怎么解决  

 echo -n "hello"; echo "world"
 echo $?   -->为0表示执行没有报错

18. 希望输出date日期为 17-08-02 

date +%F  --> 2017-08-02
date +%y-%m-%d -->17-08-02  
date +%y-%m-%d\ %H-%M-%S -->17-08-02 21-16-14
date +%y-%m-%d\ %H:%M:%S -->17-08-02 21:16:14
date +%F\ %T   --> 2017-08-02 21:18:14
安装时间打包:
    tar -czvf omd-`date +%F`.tar.gz  ./home/
    tar -czvf omd-$(date +%F).tar.gz ./home/
echo $(date +%F -d +3day)
--实现安装周打包
date +%w    第3天   
tar -czvf system_$(date +%F).tar.gz /host

19.生产环境中,要求保留最近的7天的内容,何解?
  

1. 定时删除7天之前的文件(一定要用-name -f -mtime 3个参数确定好你的文件)
	find /var/log -type f -name "*.log" -mtime +7 | xargs rm -f   删除7天前的
2. 按照周打包文件
	tar -czvf system_$(date +%w).tar.gz ./home/

20.root用户切换到omd后,执行ifconfig后显示命令不存在,何解?

  这个是因为omd用户的系统环境变量PATH路径问题导致,但在只在CentOs5中有,因为此命令在/sbin,不再全局变量中
  解决1:
        带全路径执行   /sbin/ifconfit eth0
  解决2:-->临时
        将ifconfig的环境变量添加到PATH路径中   export PATH=$PATH:$HOME/bin:/sbin
  解决3: -->永久
        omd用户下编辑vi .bash_profile ,修改如下后保存
            PATH=$PATH:$HOME/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
        source .bash_profile

20-1. 自动删除n天前日志

删除文件命令
find /var/log/ -mtime +30 -type f -name '*.log' -exec rm -f {} \;
find /var/log/ -mtime +30 -type f -name '*.log' |xargs rm -f ;

21. 如何把文件中的空行去掉:
 

grep -v "^$" h.txt -->标准
grep "." h.txt     -->不标准
sed  '/^$/d' h.txt
awk '/^[^$]/' h.txt 


22.查找命令:
      

快速查找ifconfig的全路径,请给出命令
which   --> 重PATH路径查找     which ifocnfig
whereis --> -b 查找二进制文件  whereis -b ifconfig
find     --> find / -type f -name "ifconfig"
locate  --> locate ifconfig | head -l  locate是从一个数据库(需要提前updatedb更新数据库)中查找-->一般不用的

23. 开关机命令
     

关机 
	关机之前使用  sync;sync;sync;将缓存中的数据写入磁盘,避免造成数据丢失
	***shutdown -h now    shutdown -h 1(1分钟后)     -->生产环境
	init 0    -->切换到运行级别0
	***halt      -->立即停止系统,需要人工关闭电源   -->生产环境
	poweroff  -->停止系统,关闭电源

   重启命令
       reboot
       shutdown -r now 
       shutdown -r +1    1分钟后重启
       init  6
   
   注销:
       logout
       exit
       ctrl + d    -->常用 

24. 说出10个linux正则表达式

 .
 *
 .*
{n,m} 
[] 
[^abc] 
\b 
\w 
\d 
^
$ 
? 
+ 
() 
| 
^$ 
\ 

25. 说出Linux的默认目录以及目录对应权限,如何控制默认权限
         

文件    644  umask 022  666 - 022 644 (umask遇奇数位 + 1 )
目录    755  umaks 022  777 - 022 755 

26. 如何Linux修改文件以及目录权限
   

1.chmod 755 h.txt 
2.chmod u=rx,g=rx,o=wx h.txt

27. 如何普通用户执行某个特殊命令的使用?
 

  a.sudo
  b.suid 
  c.chmod 

28. Linux的特殊权限suid的作用以及应用场景
 

  suid: 普通用户执行某个命令的时候获得了这个二进制命令/程序对应的用户的权限  omd获得root用户的rwx,s用4表示
    应用场景:所有普通用户需要处理的工作,但是很危险,又希望获得root的特殊命令来自己执行
              passwd ping 授权uid

29. 描述对于文件和目录,rwx-分别是什么权限作用

区别root和普通用户不同的权限
    文件:
        r:查看内容 cat 
        w:修改文件内容  echo >>  vi(需要r配合) 
        x:执行文件 需要wr配合
        -:没有权限
    目录:
        r:ls 显示出来
        w:rm 创建文件,目录
        x:cd 需要wr配合
        -:没有权限

30. 描述一下三次握手和四次挥手

三次握手建立连接

    1)客户端发送 SYN 消息,其中包含服务器的端口和客户端的初始序列号(ISN)到服务器(活动打开)。
    2)服务器会发送回SYN和ACK(其中包括的客户端的 ISN + 1)。
    3)客户端发送一个 ACK,(其中包括的服务器的 ISN + 1)。 

四次挥手关闭连接

    TCP的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。客户机给服务器一个FIN为1的TCP报文,然后服务器返回给客户端一个确认ACK报文,并且发送一个FIN报文,当客户机回复ACK报文后(四次握手),连接就结束了。
    1)客户端发送一个FIN(活动收盘)。这是一个现在半关闭连接。客户端不能再将数据发送,但仍然能够从服务器接收数据。收到此 FIN 服务器进入被动关闭状态。
    2)服务器发送一个ACK(这时客户端 FIN 序列 + 1)
    3)服务器发送其自身FIN。
    4)客户端发送一个ACK(这是服务器的 FIN 序列 + 1)。收到此 ACK 服务器关闭连接。

30-1 描述/dev/null和/dev/zero的区别

    1./dev/null:表示 的是一个黑洞,通常用于丢弃不需要的数据输出, 或者用于输入流的空文件
        1.1 将无用的输出流写入到黑洞丢弃。
            curl -Iwww.baidu.com 2>/dev/null | head -l  错误信息定位到黑洞
        1.2 清空文件      
            cat /dev/null > /home/omd/h.txt
        1.3 在书写定时任务总,规范的写法就是将所有定时任务脚本结尾加上>/dev/null 2>&1,让所有的输出流(包括错误的和正确的)都定向到空设备丢弃。
            00 01 * * * /bin/sh/server/scripts/mysqlbak.sh >/dev/null 2>&1
    2./dev/zero:当我们使用或者读取他的时候,她是会提供无限连续不断的空的数据流
        2.1覆盖其他的文件信息
        2.2产生指定大小的空文件,如交换文件,模拟虚拟文件系统    

31.程序和进程的区别:
  

 程序:静止的汽车
 进程:运动中的汽车    -->运行的程序叫进程

32.关于crond的问答:
   

omd用户编辑内容:     crontab -u omd -e   
查看omd用户编辑内容:crontab -u omd -l
    ==> cat /var/spool/cron/omd 
问:显示omd用户没有权限执行修改命令,为何还能修改:
[root@localhost cron]# ll /var/spool/cron/omd 
   -rw-------. 1 root root 2 Aug  5 21:25 /var/spool/cron/omd
答:因为crontab命令的权限是 -rws  可以执行root用户的权限
   [root@localhost cron]# which crontab
   /usr/bin/crontab
[root@localhost cron]# ll /usr/bin/crontab
   -rwsr-xr-x. 1 root root 47520 Mar  4  2011 /usr/bin/crontab
问:怎么可以让omd用户不执行crontab命令呢?
答:1.取消/usr/bin/crontab 文件的s权限
    2.vim /etc/cron.deny   

33.邮件队列有哪些?怎么清空?
   

crond里面顶一楼很多定时任务,每执行一次,就会发送一个邮件给管理员,文件会占用系统的inode资源,导致服务器报错,可以定时删除,或者vi /etc/crontab 将‘MAILTO=root’改写为MAILTO="" 或 crontab -e 第一行添加MAILTO=""
/var/spool/clientqueue/       -->  centOs5
/var/spool/postfix/maildrop/  -->  centOs6
find /var/spool/clientqueue -type f | xargs rm -f  -->删除

34.每隔2小时,打包/home/omd文件到/tmp ? 定时任务    $(date +%Y%H:%M:%S)
     

 vim tar.sh 
cd /home && tar -xfz /tmp/omd_$(date +%F_%H:%M:%S).tar.gz 
/bin/sh /home/omd/tar.sh
crontab -e 
    #tar  /home/omd to /tmp for backup
    0 */2 * * * /bin/sh /home/omd/tar.sh >/dev/null 2>&1 
	01.每隔2小时  0 */2
	02.打包到上级目录打包
	03.测试命令正确后粘贴到crontab  
	04.定向的空设备,不要屏幕输出,可以写入log文件  
	05.写脚本用来执行任务,脚本路径要规范
	06.直接写入crontab -e 里面注意特殊字符的转义

35.为什么只要一添加用户,就会从/etc/skel下面拷贝.bash*的文件呢? 

 因为在/etc/default/useradd文件中写了默认从这个文件拷贝文件

36.批量创建10个用户stu01-stu10,并且随记设置8个密码
     

1.Linux中也有可以实现批量添加用户并且设置密码的命令(newusers   chpasswd)
2.思路如下:  -->待完善
    2.1 00 创建
        seq -w 10  --> 00 01 02 03 04 05 06 07 08 09 10 
            ==>echo {00..10} --> 00 01 02 03 04 05 06 07 08 09 10 
    2.2 随记密码生成  
        echo $RANDOM      -->5位
        echo $RANDOM|md5sum|cut -c 1-8  ->8位
        pass=$((RANDOM + 10000000));     -->生成8为密码
    2.3 创建用户
        echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;pass=$((RANDOM + 10000000));echo "$pass"|passwd --stdin \1;echo -e "\1 \t `echo "$pass"`" >> /home/omd/h.txt#g'|bash
        ->分解一下
                echo stu{01..10}   -->打印stu01到stu10 默认是空格显示
                tr " " "\n"        -->空格换成换行
                sed -r 's#(.*)#useradd \1; #g'   -->显示useradd stu01 
                    pass=$((RANDOM + 10000000));     -->生成8为密码
                    echo "$pass"|passwd --stdin \1;  -->交互式写入用户密码
                    echo -e "\1 \t `echo "$passwd"`" -->stu01 密码
                sed -r 's#(.*)#useradd stu01 -p $pass  #g'  
                echo -e "stu01 密码"  >> /home/omd/h.txt 
    2.4 批量删除
            echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#userdel -r \1#g' |bash
3.shell编程
    for stu in stu{00.10}
       do
           pass=$(echo $RANDOM|md5sum|cut -c 1-8)
           useradd $stu && echo "$pass"|passwd --stdin $stu
       done; 

37.怎么可以阻止一个用户登录?
   

1.确保删除一个文件之前,先进行备份,管好你的回车键,除非你确保没问题
2.比删除更好的是注释掉这个文件
3.删除用户,可以#也可以使用/bin/nologin
4.pawd -l omd   -->锁定账户
5.设置文件过期
    chage -E "2017/08/11" omd
            ==>useradd -e "2017/08/11" omd
            ==>usermod -e "2017/08/11" omd

38.企业生产环境用户权限集中管理方案实例              
   

1.创建初级工程师3个,网络工程师1个,中级工程师1个,经理1个
    for user in chuji{01..03} net01 senior01 manager01 
    > do
    >  useradd $user
    > echo "111111"|passwd --stdin $user
    > done;
2.创建5个开发人员,属于phpers组
    groupadd -g 999 phpers
    for n in `seq 5`
    do 
        useradd -g phpers php0$n
    done
3.创建开发经理,中级phper
    for user in kaifaManager seniorPhper
    > do
    > useradd $user
    > echo "111111"|passwd --stdin $user
    > done
4.sudo的配置内容
    ########################Cmnd_Alias By FTL ###################################
    
    Cmnd_Alias CY_CMD_1=/usr/bin/free, /usr/bin/iostat,/usr/bin/top, /bin/hostname, /sbin/ifconfig, /bin/netstat, /sbin/route 
    Cmnd_Alias GY_CMD_1=/usr/bin/free, /usr/bin/iostat,/usr/bin/top, /bin/hostname, /sbin/ifconfig, /bin/netstat, /sbin/route, /sbin/iptables, /etc/init.d/network, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /bin/rpm, /usr/bin/updatedb, /usr/bin/yum, /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
    Cmnd_Alias CK_CMD_1=/usr/bin/tail, /bin/grep, /var/log/messages*
    Cmnd_Alias GK_CMD_1=/sbin/service, /sbin/chkconfig, /bin/tail, /var/log/*, /bin/grep, /bin/cat, /bin/ls, /bin/sh
    Cmnd_Alias GW_CMD_1= /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /sbin/iwconfig, /sbin/mii-tool, /bin/cat, /var/log/*
    
    ########################User Aliases By FTL ###################################
    
    User_Alias  CHUJI_YUNWEI_ADMINS=chuji01,chuji02,chuji03
    User_Alias  CHUJI_KAIFA_ADMINS=php01,php02,php03,php04,php05
    User_Alias  GAOJI_WANG_ADMINS=net01

    ########################Runas_Alias By FTL ###################################
    
    Runas_Alias  OP = root     -->未来切换到某个角色执行任务

    ########################Config By FTL ###################################

    senior01               ALL=(OP)      GY_CMD_1
    manager01           ALL=(ALL)   NOPASSWD:ALL
    kaifaManager        ALL=(ALL)   ALL, /usr/bin/passwd [A-Za-z], !/usr/bin/passwd root, !/usr/sbin/visudo,\
                                    !/usr/bin/vi *sudoer*,  !/usr/bin/sudo su -, !/bin/su
    seniorPhper            ALL=(OP)    GK_CMD_1
    CHUJI_YUNWEI_ADMINS ALL=(OP)    CY_CMD_1
    CHUJI_KAIFA_ADMINS  ALL=(OP)    CK_CMD_1
    GAOJI_WANG_ADMINS   ALL=(OP)    GW_CMD_1

        注意:别名要大写   
             命令的路径要全路径  
             超过一行,用"\"换行  
             排除的命令一定在最后面写
             kaifaManager 因为有ALL,所以可以直接su - 切换root,但是 sudo su -切换不了

39.企业生产环境日志审计解决方案                   

1.日志审计:记录所有系统以及相关用户行为的信息,并且可以自动分析,处理,展示(文本形式)
2.思路如下:
    1.通过环境变量命令以及syslog服务进行全部日志的审计         -->信息太大,不推荐
    2.sudo配合syslog服务,进行日志审计                (信息较少,效果不错,推荐使用)
    3.在bash解释器程序中潜入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash作为程序解释程序
    4.使用商业产品    -->堡垒机
3.项目;sudo日志审计   -->专门对使用sudo命令的系统用户记录其执行的命令
  
  3.0.以下针对单机版本(完整版):
    1.安装/查看sudo命令,syslog服务
        rpm -qa | egrep "sudo|syslog"
    2.配置/etc/sudoers
        增加配置,表示sudo的log记录到/var/log/sudo.log文件中  
            echo "Defaults  logfile=/var/log/sudo.log"  >> /etc/sudoers
            echo "local2.debug   /var/log/sudo.log" >> /etc/rsyslog.conf     -->其实可以不用的
                --> 再rsyslog.conf的文件指定一个local2的设备,执行级别是debug,把执行的命令,通过rsyslog写入sudo.log

        查看添加的配置信息
            tail -1 /etc/sudoers
            tail -l /etc/rsyslog.conf 
        echo使用时要检查语法
            visudo -c        -->针对/etc/sudoers
        重启rsyslog服务
            service rsyslog restart
                ==> /etc/init.d/rsyslog restart
        查看日志文件:
            ll /var/log/sudo.log
                权限600 root.root

      3.1 日志集中管理   ---集群环境(部分参考版)
            1.思路  
                1.rsync + inotify或者定时任务+rsync,推送日志管理到服务器上, 10.185.163.162_20170813_sudo.log
                2.rsync服务处理
                    echo "10.185.163.162 logserver" >> /etc/hosts
                    日志服务器地址:
                        echo "*.info  @logserver" >> /etc/rsyslog.conf     -->适合所有的日志推走
                3.日志收集  scribe
                            flume对nginx采集
                            storm
                            logstash

            2.配置日志服务器记录日志
                1.配置logserver服务器
                    echo "10.185.163.162  logserver" >> /etc/hosts
                    tail -1 /etc/hosts
                    ping logserver
                2.配置客户端syslog文件
                    echo "*.info    @logserver" >> /etc/rsyslog.conf    将日志推送到服务器
                    tail -1 /etc/syslog.conf
                    /etc/init.d/rsyslog restart


40.已知一个端口为333,如何查看端口对应的服务名
  

 1. lsof -i :333
 2. netstat -lntup|grep 333
         -n:number  数字形式显示
         -t: tcp协议
         -u: udp协议
         -l: list
         -p: print 进程
 附加:如果给你一个进程名,如何查看端口:
     netstat -lntpu|grep sshd

41.如何查看一个已经被删除但任然占用进程的文件名?
  lsof |grep deleted
    groff     5734      root    0r      REG              253,0    53449     534312 /tmp/man.HZYQ8B (deleted)

42.网络以及服务故障的检查:

-->先确定是个人问题还是全部的问题
1.上不了网(局域网以及个人)
    0. 网卡坏了      
    a. ping www.baidu.com   -->icmp协议
        1.1不通则 ping 网关 -->不通则路由有问题
    b. traceroute www.baidu.com    -->测试路由之间是否通
    c. telnet www.baidu.com 22     -->测试服务器WEB有没有开启服务,以及防火层有没有挡
        ==>nmap     www.baidu.com  -p 22
        ==>nc  
    不通:端口没开,或者不存在
         fw防火墙阻挡
         服务监听的端口不在连接的IP上
    其他: IP被占用,IP冲突,其他人是否可以上网,大面积不能上网,检查路由,交换机
    附:window的跟踪路由
        tracert -d www.baidu.com
2.能上网,但是很慢(运维人员)
    同上abc
    服务器负载资源过高,服务器以及服务器的连接数过多
    服务器带宽满了,用户带宽  流量监控
    检查是不是存储服务器,NFS以及磁盘IO搞
    查看数据库是不是负载高,IO搞,CPU搞
    服务器受攻击

3.总结以上:
    1.先确定是个人还是全部
        a. ping www.baidu.com   -->icmp协议
              通:
                  不丢包: 正常
                  丢包:   服务器带宽不稳定,过载
            不通:服务器挂了,交换机故障
        b. traceroute www.baidu.com    -->测试路由之间是否通
    
    2.机房业务是否OK
        c. telnet www.baidu.com 22     -->测试服务器WEB有没有开启服务,以及防火层有没有挡
            ==>nmap     www.baidu.com  -p 22
    3.外部问题
        d.带宽满了
        f.服务器IO,CPU过载等
        g.代码问题
    4.其他问题
        客户自己的问题,带宽小,CPU处理慢等
    5.集群架构(数百台服务器)
        h.数据库问题,登录数据库,优化数据库等
        i.存储服务器的问题等,IO以及NFS是否过高等

43.http协议(应用层)的工作原理
   

超文本传输协议(HTTP:Hypertext Transport Protocol)是万维网应用层的协议。
        它通过两个程序实现:一个是客户端程序(各种浏览器),另一个是服务器 (常称Web服务器)。
        这两个通常运行在不同的主机上,通过交换报文来完成网页请求和响应。
一次HTTP操作称为一个事务,其工作过程可分为四步:
    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。        
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。        
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。	
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。        如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了


44.dns的解析原理                                      -----画图解答
45.OSI的7层模型  
46.生产环境中磁盘的选型和应用案例             --

 磁盘接口类型:IDEA,SCSI,SAS(15000/m),SATA,SSD(除了SSD,都是串口),光纤
 IDEA:淘汰
 企业级SAS:    15000/分, 300G 600G 1T,    多用线上的服务器    -->首选
 企业级SATA:7200-10000/分  1T 2-4T 6T  经济实惠,多用数据存储,站点数据库,线下备份等   -->HW 
 企业级SSD: 线上高并发,小容量业务
 思想: 根据/业务场景进行选择,SSD + STAT(访问频率大的放SSD,访问次数不高的放入SATA,始终把SSD放入高频率用户,冷热数据可以动态调动,从而兼顾性能,容量,成本)
	提醒: 不要用SATA用作磁盘做在线的高并发服务存储数据和数据库业务

41.磁盘工作的过程和原理
  

 磁盘工作的过程:
    磁盘工作的时候,磁盘会高速运动,当达到一定速度的时候,气流很强,足够将磁头托起并保持微小的距离(距离越小,磁头读取数据的灵活性越高),磁头会慢慢地由启停区向外移动,磁头读取最外面的0磁道的数据(由0磁道检测器进行引导)
        磁头沿着直径做径向运动,盘片旋转,转一圈读取一圈的数据。·不工作的时候回到启停区。
        1.磁盘的读写是按照柱面为单位进行的;从0盘面开始,读取完数据后,读取1盘面相同半径的数据,以此类推,读取半径相同的磁盘的数据到结束后读取另一个半径的数据
        2.不同磁头之间的切换是电子切换,不同半径直接的切换是机械的(依靠电机移动磁头手臂)
    磁盘读取数据的原理:电脉冲信号转换为电脑可识别的信息
            利用特定的磁粒子的极性来记录数据。
            磁头在读取数据时,将磁里自带不同极性转换成不同的电脉冲信号,再利用数据转换器将原有的初始信号变成电脑可用的数据。
            写与此相反
    磁盘读写数据的时候,应尽可能的让磁头不动,这样才能尽可能多的读取更多的数据

42.问172.16.22.38/27,求子网ID,广播地址,主机数和主机可用数目

    答: 32-27=5,故主机为有2的5次方 -2 = 30个(这串地址的最小和最大地址分别用作网络地址(也叫网络号)和广播地址,不能分配给主机)
        子网掩码连续27个1
        11111111 11111111 11111111 11100000  -> 子网DI为255.255.255.224.0
        网络位27个,172.16.22就不用看了,占用了24个网络位,还有3个网络位,计算一下38的二进制00100110,我们取前三位001;那就是现在这样
        172.16.22.001xxxxx,如果我们都改成0就是网络地址(网络号),都改成1就是广播地址,计算一下,地址的范围是32到63

4? 一台服务器6块600G磁盘,raid5后,总大小3T,此时无法安装操作系统,解决办法是做raid5后,不要重启装系统,而是raid界面,继续分1个小的虚拟磁盘vd 200G,用这个200G的虚拟磁盘安装系统,安装完成后再把剩余的2.8T分区通过parted

43.企业不同业务场景的服务器你是如何区分的?(备用)
 

    普通: /boot 100  /dev 1.5(8-16G)   /  
    db:    /boot 100  /dev 1.5(8-16G)   date 50G  / 
    门户:  /boot 100  /dev 1.5(8-16G)   / 50-100 剩余的留着备用

44.说出5个以上的磁盘管理的命令*(分区,格式化,挂载)
  

    fdisk -l -cu
    parted
    mkfs
    mount -a -t -o 
    umount 
    tune2fs -c -1
    dump2fs(块组,可用的inode) 详细信息
    df -hi
    du -sh 
    partprobe

45.RAID 0 1 5 10原理,冗余,性能的区别?
   

Raid有”廉价磁盘冗余阵列”的意思,就是利用多块廉价的硬盘组成磁盘组,让
        数据分部储存在这些硬盘里面,从而达到读取和写入加速的目的;
        也可以用作数据的冗余,当某块硬盘损毁后,其他硬盘可以通过冗余数据计算出损坏磁盘的数据,这样就提高了数据储存的安全性。
        可以提供较普通磁盘更高的速度、安全性,所以服务器在安装时都会选择创建RAID。
    创建方式:
        软RAID(通过操作系统软件来实现)
        硬RAID(使用硬件阵列卡)。
    为什么用RAID:
        提高数据安全性 
        提升数据读写性能 
        提供更大的单一逻辑磁盘数据容量存储
    RAID-0 :striping(条带模式)
        特点:在读写的时候可以实现并发,所以相对其读写性能最好,每个磁盘都保存了完整数据的一部分
              读取也采用并行方式,磁盘数量越多,读取和写入速度越快。
              因为没有冗余,一个硬盘坏掉全部数据丢失
              至少两块硬盘才能组成Raid0阵列。 
              容量:所有硬盘之和。磁盘利用率为100%
        生产应用场景 
            1、负载均衡集群下面的多个相同RS节点服务器 
            2、分布式文件存储下面的主节点
            3、MySQL主从复制的多个slave服务器 
            4、对性能要求很高,对冗余要求很低的相关业务
    RAID-1 :mirroring(镜像卷)
        特点:
            至少需要两块硬盘
            raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样)
            数据有冗余,在存储时同时写入两块硬盘,实现了数据备份; 
            磁盘利用率为50%,即2块100G的磁盘构成RAID1只能提供100G的可用空间。
    RAID-5
        特点:
            采用奇偶校验,可靠性强
            磁盘校验和被散列到不同的磁盘里面,增加了读写速率。
            只有当两块磁盘同时丢失时,数据才无法恢复
            至少三块硬盘并且硬盘大小应该相等才能组成Raid5阵列。
        容量:
            所有硬盘容量之和减去其中一块硬盘的容量
                被减去的容量被分配到三块硬盘的不同区域用来存放数据校验信息。
    Raid10(Raid1+Raid0)
        特点:
            是现在比较常用的一种磁盘阵列级别,
            它的容错好,读写数据效率较高,但经费相对也较高。
            备份和并发式存取数据,可靠性强。
            D1、D2组成一个阵列Raid1,其中D1是数据盘,D2是备份盘;
            D3、D4也组成一个Raid1,其中D3是数据盘,D4是备份盘;
            在这个基础上将D1、D2作为一个整体,将D3、D4也作为一个整体
            这两个整体之间再组成一个Raid0阵列。
            这样不仅仅读取数据会非常快,并发写入的速度也会随着磁盘的增多而变快。
            至少四块硬盘并且每块硬盘大小应该相等才能组成Raid10阵列。
        容量:所有硬盘容量之和的一半(一半写数据,一半用来备份数据)。
    总结:
        (从节点)RAID0 读写速度很快  没有任何冗余      MySQL Slave(数据库的从库,小弟),集群的节点RS
        (监控,重要)RAID1 100%冗余,镜像 读写性能一般     成本高 单独的,数据重要,且不能宕机的业务,监控,系统盘
        (正常业务)RAID5 具备一定性能和冗余,可以坏一块盘,读性能不错 写入性能不高 一般的业务都可以用
        (数据库的主节点)RAID10 读写速度很快,100%冗余 成本高 性能和冗余要求很好的业务。数据库主库和存储的主

46.fstab修改错误导致文件系统无法启动故障修复案例
   

维护、单用户模式
    mount -o remount,rw  /     -->文件系统只读的时候需要处理
    修改fstab

47.磁盘设备实战

1.磁盘的外部,内部构造以及原理
2.机械磁盘的读取数据的工作原理
3.什么是磁道,扇区,柱面
4.什么是文件系统,常见的文件系统
5.磁盘存储的最小单位是?数据均为10-100M的视频文件,该如何配置
    文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。
    每个扇区储存512字节(相当于0.5KB)。
6.一个硬盘最p多有多少分区?为什么?
7.一个100M大小的分区,1k的文件可以写入多少个,威慑么?
8.如何查看操作系统以及内核的版本
    uname -r
    cat /etc/redhat-release
    uname -m
9.配置nfs需要启动那些相关的服务
    服务器端:
        /etc/init.d/rpcbind
        /etc/init.d/nfs
    客户端:
        /etc/init.d/rpcbind    -->挂载完成后可以卸载
10.如何在客户端查看当前nfs挂载的客户端以及共享目录有哪些
        showmount -e ip
11.NFS的局限:
    有网络要求
    耦合度高
    高并发下性能差
    文件是铭文的

12.配置NFS服务后,不重启服务,如何使配置生效
    /etc/init.d/nfs reload ==> exportfs -tv
13.救援模式修复/etc/fstab ?    
14.root密码忘记如何修改 ?
15.如何添加IP    
    基于别名配置:ifconfig eth0:ws 192.168.25.132/24 up     -->临时生效,重启失效
    基于辅助IP:  ip addr add 192.168.25.131/24 dev eth0    

48.全网服务器数据备份方案的cron+rsync            
   

1.针对公司重要的数据备份混乱状况和领导提出备份全网数据的解决方案
2.通过本地打包备份,然后rsync结合inotify应用将全网数据统一备份到一个固定的存储服务器
    然后在存储服务器上通过脚本检查并报警管理员备份结果
3.定期将IDC机房的数据备份公司内部的服务器,防止自然灾害导致数据丢失

49.网络的面试题
    1.写出下面端口对应的服务
     

grep -b "\b22\b"  /etc/services
    端口 21   ftp
    端口 22   ssh
    端口 25   SMTP  -->sendmail
    端口 3306 mysql
    端口 873  rsync
    端口 161  snmp  -->远程管理设备
    端口 111  rpcbind
    端口 3389 window远程桌面 
    端口 80   http
    端口 443  https
    端口 110  pop3
    端口 53   dns
    端口 514  syslog

 

    2.FTL R2288的6块600G SAS盘作RAID5后,计划安装部署mysql提供读取服务器,如何划分分区安装操作系统?
        用什么命令来分区?
        分区后如何不启服务就能生效?
 

0.若3T的内存安装不了系统
1.RAID界面分出200G虚拟磁盘安装系统,boot分区200G swap分区100G(内存大于16G 2倍,小于则1.5) /分区给剩余data(用于数据存储)
   安装系统后用parted(先设置为gpt后分区)进行分区
2.如果不是RAID5,则可以先划分2个RAID1进行安装操作系统
3.NFS 的启动没有问题,但是为什么chkconfig|grep nfs 任然是关闭的呢?


        答:chkconfig是系统开机自启动,与现在系统的状态无关

    4.批量改名题,移除文件名中的fin字样

# ll stu*
-rw-r--r--. 1 root root   0 Aug 25 22:53 stu_1_fin.jpg
-rw-r--r--. 1 root root   0 Aug 25 22:53 stu_2_fin.jpg
-rw-r--r--. 1 root root   0 Aug 25 22:53 stu_3_fin.jpg
0.touch stu_{1..3}_fin.jpg
1. rename 原字符  目标字符  文件
   rename "fin" "" *
2. for f in `ls *.fin.jpg`
    do
           mv $f `echo $f|sed 's#_fin##g'`
    done
3.ls *.jpg|awk -F '_fin' '{print "mv " $0 " " $1$2}'|bash
4.ls *.jpg|sed -r 's#(^.*)_fin.*$#mv & \1.jpg #g'|bash

50.把/etc/hello.sh 配置成开机自启动的服务
   

1. 添加到rc.local
2. 添加到/etc/init.d下  增加chkconfig

51.查看apache进程命令
  

 prefork进程模式:
        ps -ef | grep httpd
 worker线程:
        pstree -a |grep httpd | wc -l

52.192.168.0.0/24 网段通过192.168.0.1网关连入172.16.1.0/ip段,请问路由如何添加
 

   route add -net 172.16.1.0 gw 192.168.0.1 netmask 255.255.255.0 

53.处理一下的文件内容,将域名取出并根据域名进行计数排序处理

    http://www.etiantian.com/index.html
    http://www.etiantian.com/1.html
    http://post.etiantian.com/index.html
    http://mp3.etiantian.com/index.html
    http://www.etiantian.com/3.html
    http://post.etiantian.com/2.html

54.使用expect交互式命令语言把文件从A服务器推送到B,C服务器,请写出脚本。
   

已知root/HHH200@FTL 22端口

55.集群环境防止木马的方案:
   

主要是防止web,文件root.root  文件644 目录755
分开服务器:
    上传服务器:限制木马访问,只能post,不能get,然后数据存储在Mysql服务器上
    动态服务器:只能跟数据库进行读写(双向),控制文件的解析
    图片服务器:只能读取图片(单向)                
程序目录: 目录755 文件644,用户root
上传文件: 目录755 文件644,用户webserver

56.Linux下安装软件的方式

    1.源码编译安装:灵活,自己做饭自己吃
    2.yum或rpm: 简单,但不灵活,下饭店吃
        访问量小的时候可用  
        追求方便
        服务器数量大
    3.结合编译和yum的双重优点
        根据业务需求->自制rpm->放到yum仓库
            自制rpm?
            放到yum仓库?


57.Apache分析日志
    1.分析所有Web服务器的访问日志,对IP地址段进行去重

awk '{print $1}' h.log|sort|uniq -c|sort -rn
awk '{++S[$1]} END {for (key in S) print S[key], key }' www-access_20170905_log |sort -rn -k1

58.清空日志的方法: 

 1.echo  >/var/log/runlog.log
 2.>/var/log/runlog.log
 3.cat /dev/null >/var/log/runlog.log   -->查看黑洞并重定向到日志文件

      59.高可用?
    60.Rsync Nfs Crond Ssh key 基础命令 Apache Mysql Php Nginx Lvx+keepalive + Iptables +Cacti/流量监控 ?
    61.Linux 高可用(HA)集群之keepalived详解?        

http://freeloda.blog.51cto.com/2033581/1280962

keepalived是一个类似于layer3(网络层), 4(传输层) & 7(应用层)交换机制的软件 Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP); 作用:检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。 Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。 Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。 Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

 

    62.怎么把自己写脚本放在服务里面,即使用service调用
        方案一:
       

#!/bin/bash
# chkconfig: - 90 10
# description: just a test
    echo "Hello,$1"
# mv test /etc/init.d/
# chmod +x /etc/init.d/test
# chkconfig --add test
# service test start
//可以看到Hello,start表示成功

 

        方案二:
      

1、开机自启(两种方法)
     1、加入到rc.local系统配置文件
     2、将脚本做成服务形式(拷贝到/etc/init.d/)
2. 可以通过init.d下的脚本控制其启动
    说明脚本要支持start|stop|restart等参数,使用case配合函数进行控制
3、每5分钟将系统进程信息发送至syslog
     提示:logger命令是syslogd提供的shell接口。通过调用该命令可达到效果
     每5分钟自动发送系统进程信息:
   方法:1、脚本中加入sleep 300(秒为单位)
         2、定时任务      

 

    63.如何执行秒级别的任务:
        

1.用while循环执行
	while true
		do
			uptime 
			usleep 1000000  ->usleep表示毫秒级别,1000000为1秒
		done
	
    64.随机数的6中方法
       
echo $RANDOM|
echo $RANDOM|md5sum|cut -c 1-6
echo $((RANDOM+100000))
echo $(date +%t%N)
cat /proc/sys/kernel/random/uuid 

 

    65.判断一个网络里面有哪些IP在线:
        方案一:
         

#!/bin/bash
     while true; do
       for I in {1..5};do
         ping -c 2 -w 2 192.168.3.$I &>/dev/null
         if [ $? -eq 0 ]; then
           echo -e "\033[32;40m 192.168.3.$I is UP.\033[0m"
         else
           echo -e "\033[31;40m 192.168.3.$I is Down.\033[0m"
         fi
           done
             break
     done
  
        方案二:
        
#!/bin/bash
    IP=1
    while [ $IP -le 5 ]; do
        ping -c 2 -w 2 192.168.3.$IP &>/dev/null
        STRING=$?
    #    if ping -w 2 -c 2 192.168.3.$IP &>/dev/null;then
         if [ $STRING -eq 0 ];then
           echo -e "\033[32;40m192.168.3.$IP is up.\033[0m"
        else
           echo -e "\033[31;40m192.168.3.$IP is down.\033[0m"
        fi
        let IP=$IP+1
    done
            

 



posted @ 2018-07-13 22:40  小a玖拾柒  阅读(1113)  评论(0编辑  收藏  举报