一.了解内核的理论知识
1.目前,内核有两种,分别是:微内核,单内核
微内核:从理论上来讲比较先进,它是把内核做成n个组件,内核仅包括最核心的东西,所以,内核可以非常小。
目前的的微内核设计不够精良,所以,它的优点并没完全体现出来,windows是使用微内核的
单内核:就是把内核所需要的功能统统做进内核,使内核的体积非常庞大。
linux是单内核,但是,它引用了微内核的模块化,把需要的东西做成模块,在需要的时候加载模块
2.在/lib/modules/2.6.18-164.el5/目录里有内核编译的所有模块,在/lib/modules/2.6.18-164.el5/kernel/drivers放的是驱动模块。
3.CPU的多路复用:就是让CPU的可运行时间切成片,给每个进程运行时间段,运行完了,就让它一边歇着,去运行另一个进程 我们的linux系统有CPU时钟中断,就是让一些进程(优先级高的进程)插队,
4.内核的内存管理:有物理内存,线性内存,逻辑内存
线性内存跟CPU的位长有关,一般的CPU是32位的,在linux上只是用48位来管理,
5.内核的安全性:如:管理SElinux,iptables等
6.因为CPU的运行速度很快,所以需要缓冲;因为从磁盘读数据很慢,所以我们需要缓存;
7.内核的组件:有三部分组成,分别是,kenel,initrd,/lib/modules/(该目录放的是模块)
8.32位和64位的内核对内存的支持限制,(101页)
32位的:
kernel:最多支持32颗CPU,最大支持4GB 内存(这是标准的)
kernel-PAE:如果启用了PAE功能,我们的内存扩展32位的地址空间到36位,所以它的寻址能力是64GB的内存,而redhat linux值支持16GB。
PAE:物理地址扩展
kernel-xen:这是运用在xen虚拟机上面的,也是最多支持32颗CPU,16GB的内存
64位的:
kernel:最多支持64颗CPU,512GB的内存
9.在32位CPU上,我们的系统可以识别4GB内存,但是每个进程最大只能使用3GB内存,1GB被内核使用
二.我们的内存是用来管理进程的,那么,我们有哪些监控进程的状态呢?
1.工具:(在102页)
uname,
uptime:查看系统的运行时长
tload:这是一个基于文本的图形化系统负载查看工具
ps:进程管理工具
gnome-system-monitor:这是图形化的进程管理工具
free:查看内存的使用情况
vmstat:查看内存的情况;eg:vmstat -d 2
swapon:启用虚拟内存的,-s显示所有交换内存的使用情况
pmap:显示某一个进程的在物理内存中使用的空间的
pmap 进程号 --->这是pmap的使用方法
df:
iostat:这个命令是靠sysstat工具提供的,我们可能需要装这个软件;用于报告cpu的是用情况的
eg:iostat -d 2
lsof:显示所打开的文件的,
sosreport:生成报告信息格式的文档信息
三.内核映射和如何配置内核的
1./proc 这个目录里放的是正在工作的内核的映射输出目录
在/proc目录里有许多以数字命名的目录,这些数字就是进程号,该目录里放的是与该进程有关的东西
2.在/proc/sys/net/ipv4目录里,改变icmp_echo_ignore_all文件的值可以让其忽略其他主机的ping
eg:# echo "1" > icmp_echo_ignore_all --->忽略其它主机的ping
# echo "0" > icmp_echo_ignore_all
如果有两块网卡,我们是否允许从一个网卡进来,然后从另一个网卡出去,是由ip_forward 文件定义的,默认值是0,
eg:# echo "1" > ip_forward --->让其主机有路由功能,
3.在/proc/sys/vm目录中,有一个drop_caches 文件,默认值是0,如果设置成1,就是释放缓存
eg:# echo "1" > drop_caches
4.修改所有在/porc/sys/目录里的文件值可以用sysctl命令,用点(.)隔开
eg:sysctl -w net.ipv4.ip_forward=1 ----->这里的sysctl就是指向/proc/sys/目录,所以前面的路径可以省略
5.sysctl -a --->可以显示系统正在使用默认值的文件
6.我们手动设定的值在重启系统之后都会失效,因此,我们需要写在/etc/sysctl.conf 配置文件中,重启之后才不会失效
我们在启动系统的时候,/etc/rc.d/rc.sysinit脚本会读取/etc/sysctl.conf文件,来配置内核参数/etc/sysctl.conf
如果我们修改了/etc/sysctl.conf配置文件,需要用sysctl -p来重新读取一下该配置文件,才立即生效
7.x86info --->这是个命令可以查看更详细的CPU信息,
这个命令系统默认是没有装的,我们需要手动安装,# yum install x86info
四.一些设备文件和内核模块的加载和卸载
1./dev/md0 --->表示第一个软read设备
/dev/md1 --->表示第二个软read设备
2.字符设备,下面是两个逻辑设备,并不存在
/dev/null --->数据黑洞
/dev/zero --->这个设备只是吐出0,可以用来初始化设备
3.下面是用来生成随机数的设备
/dev/random
/dev/urandom
4.字符设备一般是线性设备
块设备一般是随机设备
5.lsmod ----->查看当前内核加载那些模块
eg:# lsmod
显示信息:
Module Size Used by
autofs4 29253 3
模块名称 模块大小 模块被哪些模块依赖
6.显示某个模块的详细信息,包括路径,作者等
# modinfo ipv6
7.装载和卸载模块:modprobe,这个命令加载模块时,会自动找到与内核版本相同的目录(uname -r),加载到这个目录中
eg:modprobe -r floppy --->卸载模块,-r表示卸载模块
eg:modprobe floppy --->表示卸载模块
eg:# lsmod | grep floppy --->查看一下是否卸载成功
# vim modprobe.conf
这里定义网卡别名,和一些设备别名
alias eth0 pcnet32 --->这里给网卡起个别名叫eth0
insmod 也可以加载模块,但是需要制定全路径
8.depmod --->生成模块间列表的依赖关系的
9.rmmod 从内核中移除模块,
10.mkinitrd创建initrd文件,
eg:mkinitrd /boot/init-$(uname -r).img $(uname -r) ---->就是封装initrd
指定创建路径,放在哪里 为哪个内核创建initrd文件
11.这里有一个重要的知识点,$和``一样,可以是命令替换
eg:mkinitrd /boot/init-$(uname -r).img $(uname -r)
五.linux的网络概念:linux network concepts
1.路由条目:
静态的,动态的
OSPF
RIP
EIGRP
BGP:边际网关协议
主机路由
网络路由
默认路由
2.ip命令的常用组合命令
ip addr show
ip link show
ip link dev eth0 down ---->禁用设备
ifdown eth0 --->这也是禁用网卡命令
3.ethtool 命令的用法
ethtool -i eth0 --->可以查看网卡的驱动,版本号,固件信息等
我们在网卡的配置文件中设定网卡的工作模式,速率等
如:我们将ETHTOOL_OPTS="autoneg off speed 100 duplex full" 这一句话写入网卡的配置文件/etc/sysconfig/network-scripts/ifcfg-eth0中时,再重启网卡后就会生效。(125页)
4.当我们的主机使用DHCP模式下分配地址时候,但是dhcp服务器down机了,系统会自动获得自动专有地址:169.254网段的地址
自动专用地址只能实现本地的网络通信
我们可以禁用此选项,可以在网卡配置文件中禁用
NOZEROCONF=yes ---->这样就禁止了网卡自动获得自动专有地址了。
5.网卡别名:
eg:eth0:0
我们使我们定义的别名网卡能用,做以下步骤
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
然后该在该配置文件中的网卡名字、地址等相关信息。
6.# route -n --->查看路由信息
# netstat -rn --->查看路由信息
7.为某个网段指定网关:
-net:是添加到目标网络的路由
route add -net TARGET/mask gw
eg:route add -net 172.15.0.0/24 gw 172.16.0.2 -->为172.15.0.0网段的地址指定网关为172.16.0.2
解释:这就是一个静态路由条目的,凡是发送到172.15.0.0网段的数据包都通过172.16.0.2进行转发
-host:添加到目标主机的路由
route add -host 10.10.10.10 gw 172.0.16.0.3 --->为主机10.10.10.10添加网关172.16.0.3
如果我们不想让我们的配置在重启之后就消失了,就需要写入配置文件(127页)
我们需要建一个与网卡相关的配置文件
eg:# vim /etc/sysconfig/network-scripts/route-eth0 --->这是建一个与网卡eth0有关的路由配置文件
内容如下:
ADDRESS0=172.15.0.0
NETMASK0=255.255.255.0
GATWAY0=172.16.0.2
ADDRESS1=10.3.3.0
NETMASK1=255.255.255.0
GATWAY1=172.16.0.3
解释:ADDRESS:表示目标地址
ADDRESS0:这里的0表示第一组
GATWAY:表示网关
注意:这里我们必须有一个网卡的地址是172.16.0.0网段的地址,这是为了保证我们的主机可以和这个网段通信,可以给我们的网卡取个别名
8.如何验证两台主机的连接性
ping
traceroute -->探测两台主机通信经过的路径
mtr --->是上面的结合
9.配置主机名
/etc/sysconfig/network
HOSTNAME=
要想立即生效,有三种:
hostname=
sysctl -w kernel.hostname=
echo "hostname" > /proc/sys/kernel/hostname
10.要想主机名转换成ip地址,有两种方式:
第一种:需该hosts文件
/etc/hosts文件的格式:IP hostname alias
ip地址 主机名称 主机别名
这时候就可以使用 ping 主机名 来ping某台主机了,它自动通过hosts文件来会解析的
11.如果我们的主机接入到网络中去了,想让自己的主机配置成DNS客户端的方法:
# vim /etc/resolv.conf --->修改该文件中的nameserver就可以了,nameserver后面跟的是NDS服务器的ip地址
注意:nameserver可以同时出现三个
# gethostip instructor.example.com ---->可以探测主机的ip地址是多少
# dig -t A instructor.example.com ---->探测主机的A记录
为了不让DHCP提供的DNS覆盖我们在/etc/resolv.conf中定义的DNS,我们可以在/etc/sysconfig/network-scripts/ifcfg-eth0文件中,添加如下内容:
PEERDNS=no
12.netstat
-t 查看所有的tcp连接
-u 查看所有的udp连接
-r 查看路由信息
-n 以数字的形式显示,而不是主机名
-l 显示正在监听的地址
-p 显示用哪个进程在监听
13.nmap 是一个监听工具
需要安装:yum install nmap
14.抓包工具
eg:tcpdump -i eth0
eg:wireshark --->这个工具需要安装,系统默认没有带,# yum install wireshark
eg:# yum install wireshark-gnome ---->这是安装wireshark的图形界面下的抓包工具
eg:# wireshark ---->这个命令可以打开图形化的抓包工具,
netcat --->这是一个被称为瑞士×××的抓包工具
15.当我们的一块网卡带宽满足不了服务时,我们可以将两块网卡绑定起来,就像路由与交换的trunk
在linux上也可以实现将两个网卡绑定在一块,
这样可以实现负载均衡和单点故障 (133页)
当我们的两块网卡处在同一个网络中是,即:用两根网线将两块网卡连接在同一个网络中的时候,才可以绑定两块网卡
步骤:
1)我们需要加载模块
# modprobe bonding
注意:这样加载模块在开机之后,不会自动加载的。我们需要写入modprobe的配置文件中区
2)# vim /etc/modprobe.conf ---->将上面加载的模块写入配置文件中去
内容如下:
alias dond0 bonding ---->注意:这里的bond0是接口的名字;在以后重启之后就会自动加载这个模块了
六.文件共享系统:nfs
1.在我们的linux内核中默认对NFS的支持,是因为NFS模块被内置到内核中去了,所以它是一个内核线程在工作
NFS:Network FileSystem 文件共享系统
2.我们作为一个客户端去访问别人共享的NFS文件,首先确保我们的系统是否开启了rpc服务
RPC:Remote Procedure Call 远程过程调用
RPC是工作在五层,ospf协议下的,不同进程之间的通信,基于二进制实现通信的
# service portmap status --->查看这个服务是否运行着,如果运行,则说明rpc是可以工作的,portmap提供rpc服务
# rpcinfo -p 192.168.0.254 --->查看远程服务的rpc是否运行着,看:nfs portmapper是否运行
# rpcinfo -p localhost --->查看本机的
3.查看对方的服务器是否共享了什么给我
# showmount -e 192.168.0.254
4.别人通过NFS共享的文件必须挂在到本地磁盘才可以用,挂在方法如下:
模板:mount IP:/var/ftp/pub /mount_point
eg:mount 192.168.0.254:/var/ftp/pub /pub ---->挂载之后,就可以直接访问了,不用再登陆了。
这种挂载方式是临时挂载,重启之后就会失效,我们先要永久挂载(有两种方式),就需要写在配置文件中去
# vim /etc/fstab
在最后面添加:192.168.0.254:/var/ftp/pub /pub nfs defaults 0 0
注意:这种挂载存在问题,就是在开机的时候,服务器没开机,系统就会卡在那里,知道验证好长时间之后,才会启动
第二种永久挂载方式:使用automount自动挂载,自动挂载是指当用户要访问的时候,就会挂载,当用户过一段时间不访问了,就会自动卸载掉。
1)automount是以后台进程的方式运行的。
启动这个进程的服务叫:autofs
autofs有两种挂载方式:直接挂载,间接挂载
直接挂载:就是明确指定关在位置
eg:192.168.0.254:/var/ftp/pub /pub --->就是指这里的/pub目录必须存在的
间接挂载:就是将nfs挂载一个事先并不存在的目录下
eg:192.168.0.254:/var/ftp/pub netfs ---->netfs这个目录可以事先不存在,在挂载的时候它会自动创建这个目录
eg:192.168.0.254:/var/ftp/pub /share/pub
解释:我们这里的/share目录是存在的,但是,/pub目录可以不存挂在的创建的
2)实现自动挂载的间接挂载步骤:
在客户端,所有的挂载配置都在/etc/auto.master中定义的
# vim /etc/auto.master --->我们可以在这个文件中定义挂载目录
写入内容:/share /etc/auto.pub --->意思:我们要在/share目录下创建一个挂载,这里不需要指定挂载到哪里去,而是在/etc/auto.pub文件中指定了挂载位置,这个文件是自己手动创建的。
下面我们要编写我们上面指定的挂在路径的配置文件/etc/auto.pub。
# vim /etc/auto.pub
内容如下:
pub -rw192.168.0.254:/var/ftp:/pub --->解释:就是将192.168.0.254:/var/ftp:/pub挂载到pub目录下,这里的pub目录使用的是相对路径,这里pub目录是指/share目录下,挂在时候自动创建的目录,-rw是指读写挂载
做了这些之后,重启服务:service autofs restart 就好了
3)总结上面得自动挂载的直接挂载步骤
直接挂载:
vim /etc/auto.master ---->编写这个自动挂载的配置文件
内容如下:
/- /etc/auto.pub ---->这就是表示直接挂载
vim /etc/atuo.pub ---->这里创建我们上面定义的配置文件
内容如下:
/pub -rw,soft 192.168.0.254:/var/ftp/pub --->我们这里可以看到,直接挂载前面有/,而间接没有
4)直接挂载本地设备
vim /etc/auto.master
内容:
/- /etc/auto.cdrom
vim /etc/auto.cdrom
内容:
/mnt/cdrom -fstype=9660,ro,soft :/dev/cdrom --->这里:是指挂载本地设备
重启服务就ok了
5)间接挂载服务器某路径下的所有子目录
下面的是单独挂载,就是不会像上面的那样,把所有的目录都挂载到目录下
vim /etc/auto.master --->定义我们要挂载设备的地方
内容:
/home/jun /etc/auto.home ---->这里就是定义我们要在/home/jun目录下挂载很多文件
vim /etc/auto.home
* -rw,soft 192.168.0.254:/home/guests/& -->这里*表示挂载后面192.168.0.254:/home/guests/里的每一个同名的子目录,&表示将192.168.0.254:/home/guests/目录下的所有子目录挂载到*里面去,*就是与192.168.0.254:/home/guests/里同名的目录,