网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > 网络安全预防措施

网络运维所有知识总结篇(6)

AVG(Active Virtual Gateway):一个GLBP组中的成员会选举出一个网关,称为该组的AVG。其他组成员作为备份,ABG会为GLBP组中的每个成员分配一个虚拟MAC地址。

AVF(Active Virtual Forwarder):AVG会为网关分配虚拟MAC,每个网关负责转发到自己虚拟MAC地址的数据包。

 

各交换机最大mac条目

交换机:

2960   8000条

3560   12000条

3750   4k

3840   32000条

4945   32768条

6509   64k

7606   路由器,企业或运行商或数据中心。

路由器:

1921

2811

3825

路由器CISCO开头或者直接数字

交换机WS-C3560-48T

 

Linux基础

网易研究院,杭州 
9月9号。2:25 

查看superblock:dumpe2fs -h /dev/sda1 
磁盘分区:fdisk 
磁盘格式化:mkfs -t ext3 /dev/sda1 
磁盘检查:fsck -C -t ext3 /dev/sda1  这个命令呼叫的是e2fsck这个软件。 
检查磁盘坏轨:badblocks 
设置系统标头:e2label 

挂载:mount -a -l  我们要挂载光盘:mount -t iso9660 /dev/cdrom /media/cdrom 
挂载的时候还可以使用-o指定挂载后的权限。 
卸载装置:umount -f(强制)+装置或者目录 
Linux下所有的装置都以档案来替代,反过来档案以major(主要装置代码)和minor(次要装置代码)的 
数值来代表装置。 
如果我们想开机挂载的话需要修改:/etc/fstab。 
swap分区的功能是应付物理内存不足的情况。 
free来查看内存的使用量:free | grep -n "Mem:" | awk '{print $4}' 同时也可以查看交换分区的使用情况 
。 
关掉swap文件:swapoff /tmp/swap 
对硬盘的sda1的第一个分区进行备份:dd if=/dev/sda1 of=/uestc/mbr bs=512 count=1 
superblock大小为1kb 
ls -l第一行的total为该目录消耗的总block大小,这个我们可以通过ll -s来详细观察目录下每个文件及目录 
的block节点的使用情况。 
查看目录消耗的容量:du -sb /etc/ 以字节显示;du -sm /dev/以兆显示 

linux常见压缩扩展名即命令: 
*.Z compress uncompress 注意压缩源文件会被删除,保留用-c 
例如:compress -c /etc/passwd > /uestc/passwd.backup.Z 
*.gz gzip 
目前gzip可以解压compress,zip,gzip等软件压缩的档案。 
gzip -#用于指定压缩比,-9最大,-1压缩最快,默认为-6,注意压缩的时候会删除源文档,想要保留: 
gzip -9 -c /etc/passwd > /etc/uestc/passwd.gz。这个可以利用-v选项查看压缩文件的压缩比。 
解压缩用:gzip -d 。查看压缩后文件的内容:zcat。 
*.bz2 bzip2 
这个使用情况同gzip,查看压缩文档的内容用:bzcat 
*.tar tar 
*.tar.gz tar -zcvf打包压缩,解包解压缩:tar -zxvf 
*.tar.bz2 tar-jcvf打包压缩,解包解压缩:tar -jxvf 
打包的时候,将特殊的档案或目录移除在打包之列:--exclude="file" 
比如:tar -jcvf /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc  
/root 
tarfile 仅仅打包。 
tarball 打包+压缩 
dump备份,dump 0是完全备份,dump 1是仅对dump 0数据变化的部分进行备份,一次类推。 
dump -S /dev/sda1显示出dump备份需要多少容量 
dump -W 显示出被dump备份过的文档。 
比如对/boot施行dump 0备份:dump -0u -f /uestc/boot.dump.0 /boot 
如果我们想对备份dump包施行压缩的话:dump -0u -j -f /uestc/boot.dump.0 /boot 
对dump备份恢复:restore 
restore -t用于观察备份文件的内容,类似于tar -t。例如:restore -t -f /uestc/boot.dump.0 
类似的还有mkisofs建立光盘镜像,cdrecord:光盘刻录工具。 

cpio可以备份任何东西,不过cpio不会主动去找档案来备份,我们可以用find命令去寻找。 
备份:find /boot | cpio -ovcB > file(find默认 -print,即打印出找到的内容) 
还原:cpio -ivcdu < file 
查看:cpio -ivct < file 

vim常用 
aAoOiIrR 
跳到指定行:nG或者:n 
跳到第一行:gg 
跳到最后一行:G 
搜索关键字:/word 
光标上面搜索第一个关键字:?word 
继续搜索下一个关键字:n 配合/word 
继续搜索上一个关键字:N 配合?word 
搜索指定行替换所有:/1,ns/word1/word2/gc(c代表替换前需要确认) 
向后删除n个字符:nx 
删除或剪切光标所在行:dd 
删除或剪切光标所在行向下n行:ndd 
删除光标所在行到行末:dG 
删除改行最前面的字符:d0 类似删除改行最后一个字符:d$ 
复制光标所在行:yy 
复制光标所在行向下:n行 
类似的还有yG、Y0、Y$ 
在光标所在行下一行粘贴:p 
在光标所在行上一行粘贴:P 
撤销:u 
重复上一个动作[Ctrl]+r或者使用“.”(没错是小数点) 
:wq、:q、:q!、:w、:w! 
将编辑的数据另存为:w filename 
在编辑的数据中,读入另一个档案,并将内容加到光标所在行的后面:r filename 
暂时离开vim到指令模式执行命令::!commond 
设置行号:set nu 
取消行号:set nonu 
ab mymail  [email protected] AB替换 
利用映射定义快捷键:map T :q! 这样按下T就是强制退出vim的意思。 

当系统宕机后,导致我们正在编辑的文本无法按正常流程关闭,此时我们需要重新编辑的时候系统提醒有 
人已经在编辑,我们可以通过删除指定文本的.swp后缀文件,通过ls -al查看。 

vim的配置文件在:/etc/vimrc,这个不建议修改,不过你可以修改处在家目录下的~/.vimrc 
我们使用cat -A发现win下的行末为:^M$,而Linux行末为:$。我们可以使用dos2unix和unix2dos互相 
转换。-k保留修订时间不变。 
wget+网址:直接下载网址内的程序。 

语系转换:iconv -f big5 -t utf8 passwd -o passwd.1(-f from, -t to, -o 保留源文件) 

Shell,这个专门看一本书 

当你使用login接口登入系统时,系统做了一下处理: 
1.寻找/etc/passwd里面有没有你要输入的账号,有的话将对应的UID和GID(在/etc/group中)读出来, 
并读出家目录与Shell设定。 
2.然后核对密码,Linux会进入/etc/shadow里面对应的UID。 
3.一切ok的话,进入Shell接管系统。 

当root密码忘记的时候:通过Live CD开机后挂载根目录去修改/etc/shadow,将里面root密码字段清空。 
重启后root将不用密码即可登录。 

有效群组(当前用户所处的群组)和初始群组(这个群ID位于/etc/passwd中,而有效群组位 
于/etc/group中群组后面) 
观察当前用户所属的有效组:groups 
切换用户群组:newgrp 
将用户加入群组中:root管理员:usermod;组管理员:gpasswd 
新增加用户:useradd,相关配置文件,passwd,usermod,userdel 
useradd的默认参考文件:useradd -D(呼叫的源文件位于:/etc/default/useradd) 
而UID和GID密码参数在:/etc/login.defs 
总结:useradd建立账号时,会参考以下文件: 
/etc/default/useradd 
/etc/login.defs 
/etc/skel/*(家目录参考的基准目录) 

passwd +用户 进行修改密码 
使用标准输入来修改密码:echo "abc123456" | passwd --stdin root 
查看命令帮助文档:man 1 passwd 查看配置文件帮助文档:man 5 passwd 
让某个用户失效:passwd -l danbo,解锁某个用户:passwd -S danbo 
更加详细的密码设定:chage,比如:查看某个账号的详细密码参数:chage -l root。这个主要是修 
改/etc/shadow文件。 
修改/etc/passwd文件的:usermod 
删除用户:userdel 
查看用户相关信息:finger 
增加用户账户的额外信息,比如姓名、办公室、电话等:chfn(change finger) 
改变用户shell:chsh 
无论是chfn和chsh都是修改/etc/passwd文件 
与用户组相关的命令: 
增加组:groupadd 
改变组:groupmod 
删除组:groupdel 
创建群组管理员:gpasswd -A danbo groupname 这个是将danbo设为群组的管理员。 
gpasswd -M user1 groupname 这个是将user1加入到groupname组中。 

getfacl:取得某个档案/目录的ACL设定; 
setfacl:设定某个档案/目录的ACL规范。 

切换用户su -(“-”一定要加,否则不会改变用户环境变量) 
sudo -u danbo touch /uestc/haah 
以danbo用户创建文件。 
用户能否执行sudo主要看/etc/sudoers的设定,使用visudo进行编辑。 
sudo命令可以是非root用户在以root的身份去执行命令。 

查看此时计算机的使用者:w who last lastlog(每个账户最近的登录时间) 
使用者交谈:write mesg wall  write+somebody(ctrl+d结束) 
发送邮件:mail danbo -s “nice to meet you” < filename(也可通过重定向导入事先写好的文本) 
接收邮件同样使用mail,然后进入邮件后输入?查看更多命令。 
pwck:检查/etc/passwd配置是否正确。 
pwconv: 

crontabl 计划任务 
linux工作安排种类:at和cron 
at:处理仅执行一次就结束安排的指令,比如我们要指定某个任务在指定时间内运行一次,那么就会把任 
务放到/var/spool/at目录内,到指定时间就运行一次。(at time) 
比如我们要执行一个脚本: 
at 3:00 tomorrow 
at > /var/spool/at 
at > Ctrl+D 
at中的时间使用方法: 
at now + 5 minutes任务在5分钟后运行 
at now + 1 hour  任务在1小时后运行 
at now + 3 days  任务在3天后运行 
at now + 2 weeks 任务在两周后运行 
at midnight  任务在午夜运行 
at 10:30pm  任务在晚上10点30分 
之前一定要确保atd服务处于启动状态:service atd start|status 
编辑/var/spool/at目录内 
另外还有一个batch命令,这个是在CPU工作负载小于0.8时进行指令的下达。 

crontab 
首先确认这个服务启动状态: 
service crond start|stop|restart|reload|status 
也可以在系统启动的时候就启动,编辑:/etc/rc.d/rc.local末尾加上:/sbin/service crond start 
必须记住以下几个: 
crontab -u username #指定编辑某个用户的crontab,只有root才能使用这个命令 
crontab -e #编辑crontab的工作内容 
crontab -r #移除所有的crontab内容 
crontab -l #查阅crontab的内容 
基本格式: 
*           *           *           *           *         command 
分钟   小时(24)   天         月         星期      cmd       #周日可以是0或7 
辅助字符: 
*:代表任意时刻都 
,:代表分割时段 
-:代表一段时间范围内 
/n:每隔n单位间隔。 
下面举一些实例: 
注意后面的额command也可以包含多个指令(每个指令用;分割) 
例如:每天造成3点20执行用户目录下的两个指令: 
20 3 * * * * (/bin/rm -rf /tmp;/bin/uptime) 
注意cron服务最低侦测间隔为分钟。 
当我们配置完crontab之后,我们必须重启crond服务才能使其生效(针对unix,linux会自动执行): 
service crond restart 或者 /etc/init.d/crond restart 

cat /etc/crontab #这个是系统的crontab,注意与用户的crontab不相同,这里需要指定执行者。 
# .---------------- minute (0 - 59) 
# |  .------------- hour (0 - 23) 
# |  |  .---------- day of month (1 - 31) 
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... 
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 
# |  |  |  |  | 
# *  *  *  *  * user-name command to be executed 
SHELL=/bin/bash #使用哪个shell 
PATH=/sbin:/bin:/usr/sbin:/usr/bin #执行文件搜索路径 
MAILTO=root #执行例行工作发生错误将错误指令发给谁。我们也可以以邮件形式发给执行邮件: 
MAILTO= [email protected]
HOME=/ 
01 * * * * root run-parts /etc/cron.hourly: 
run-parts实际上是个脚本,后面接目录,也就是说,如果你想让系统每小时主动帮你执行某个指令,将 
该指令写入脚本中,并将该脚本放入到/etc/corn.hourly/目录下的意思。 
crontab优化:注意将不同计划任务执行时间尽量隔开;并不需要输出信息的结果导入到/dev/null中;周 
和日月不能同时使用; 
另外还有一个指令比较有用:anacron,当我们的机器没有24*7运行时,比如周末机器会停机一天,可能 
在停机期间会有没有执行的crontab任务,那么利用anacron在机器开机后进行执行crontab,它会读取时 
间记录(timestamps)了解到系统什么时候关机,然后分析现在与关机之前anacron之间的差异,就会发 
现没有执行的crontab了,然后就会执行之前没有执lrontab。 

操作系统总结: 
程序与进程的区别: 
程序只是一组指令的有序组合,是一个静态的实体。 
进程是一个动态的实体,有自己的生命周期。 
Linux的进程状态: 
可运行态(Running 0,R):只有该状态才能在CPU上运行。 
可中断的等待(Interruptible 1,S):处于这个状态的进程因为等待某个事件的发生而被挂起,通过ps命 
令绝大多数进程都处于Interruptible状态。 
不可中断的等待(Uninterruptible 2,D):与S态类似,只是此时的进程是不可中断的,包括利用kill -9  
也无法杀死这个进程。 
暂停态或者跟踪态(Stopped,Traced 4):工作在背景(暂停)或者处于排错(Traced)状态。 
僵死状态(Zomble 3,Z):程序已经终止但却无法从内存中移除,子进程终止,父进程却不知道。 

子程序与父程序 
当我们登入系统后会取得一个Shell,然后我们利用这个Shell提供的接口去执行另外一个指令,另外执行 
的指令也有一个PID,那么后来执行的那个指令的PID就是子程序了,而原本的Shell就是父程序了。 

将程序置于背景下执行:cp file1 file2 &,此时bash会给予这个指令的工作号码(job number)+PID此 
时要注意导出的信息,我们最好加上> /dev/null 2>&1 
我们也可以将目前的工作目录丢到后台去执行:按下ctrl+z。注意:使用ctrl+z丢到背景都是暂停状态 
观察背景工作状态:jobs -r(列出处于运行态的工作)-s(列出处于暂停的工作)-l(列出所有) 
将后台工作拿到前台:fg %n 
我们知道ctrl+z将目前工作丢到后台中并暂停,那么如果让其工作呢?使用:bg %n 
关掉后台工作:kill 
后台指的是:避免在终端下按下ctrl+c中断执行过程。 

而前面讲到的at是将工作放到后台执行,这个与终端无关,也可以使用nohop,这个可以让你在脱机或注 
销状态下仍可以运行。 
nohup cmd (&)加上&带包在后台执行,如果你想让在后台的工作在你注销后还能够继续执行,就使用 
nohup+&组合。 

程序 
观察系统所有的程序:ps(静态);top(动态);pstree(程序树之间的关系) 
ps -l:只查看自己bash的程序; 
ps aux:查看所有系统运作的程序。 

当使用ps -l观察到一下: 
F:程序的flag:4代表此程序的权限为root;1代表此程序仅进行复制(fork),而没有实际执行(exec) 
。 
PRI/NI:表示执行优先级,数字越小越优先。 
PID和PPID:进程号和父进程号。 

top -d 3 >/uestc/top.log 也可以将top输出的信息导出到top.log文档中 
查看自己bash的PID:echo $$,然后通过top观察此PID:top -d 3 -p 13000 
tty是本机登录。 
pts/0默认是从ssh网络登录 

使用pstree时,我们观察到所有程序都依附于init这个程序下,使用pstree -p观察到init的PID是1,因为 
init是Linux内核启动的第一个程序,而重启init也就意味着重启系统了(reboot)。 
终止某进程:killall -9 httpd,其中9表示sigkill:代表强制中断一个程序的进行。 
而kill后面必须要跟PID或者job n服务区如:kill -9 %1)才行,跟服务名称就需要用到killall了。 
pgrep +服务区例如:pgrep ssh这样就可以找到相应服务区的PID 


执行优先级: 
PRI(new)=PRI(old) 
nice可调整的范围:-20~19,而一般用户调节的范围为0~19(防止一般用户抢占资源) 
用法: 
nice -n +nice值 cmd:以新的nice值执行命令cmd(例如:nice -n -9 ps) 
renice n PID:调整一个已经存在的程序的优先级。 

free:观察内存使用情况,包括物理内存和虚拟内存(Swap) 
cache与buffer的区别: 
cache:缓存区,是高速缓存,位于CPU与主内存之间的容量较小但是速度很快的存储器,Cache主要保 
存CPU刚用过的数据,减少CPU等待时间。 
buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间的数据传输,减少进程间通信的等 
待时间。 
查看系统内核相关信息:uname -a 
查看系统启动时间与工作负载(即top的第一行):uptime 
查看网络:netstat -tunlp(tcp,udp,以端口号显示而不是服务名,处于侦听,PID) 
分析核心产生的信息:dmesg |more,比如查看网卡的信息:dmesg | grep -i eth 
侦测系统资源变化:vmstat 

内存中的所有数据都是写入到/proc这个目录当中,并且是以PID进行分目录存储的 
fuser -k /dev/pts/0:强制清除掉某个用户,可以通过w来查看 
或者使用:fuser -k /mnt/cdrom 或者使用umount 
fuser还可以找到那个程序在利用该档案,比如当我们卸载的时候发现device is busy,我们可以通过fuser 
查看那个程序在利用该档案,例如:找到使用/proc的程序:fuser -mvu /proc 
我们知道fuser是知道装置或目录找到使用其的程序,而知道程序如何知道其使用了哪些文件或装置呢,这 
个就需要:lsof,例如:lsof -u root  

查看SELinux状态:getenforce 
关闭SELinux:临时:setenforce 0;永久:修改/etc/selinux/config,将SELINUX=enforcing改为 
SELINUX=disabled,重启即可。 
开启SELinux:setenforce 1 

守护进程deamon与服务service 
系统为了某功能必须要提供一些服务service;但是service的提供总需要程序来支持吧,我成称这个程序 
为daemon。 
daemon可以分为两类: 
1.stand alone:可以自行单独启动服务,个别窗口负责单一的服务。 
2.super daemon:同一窗口负责各种业务(xinetd) 
跟service相关的目录和文件: 
/etc/rc.d/init.d包含所有service的控制脚本。 
/etc/rc.d/rc*.d包含所有service自启动选项配置。 
/etc/sysconfg/*各服务的初始化配置文件。 
/etc/*各服务各自配置文件。 
/var/lib/*各服务数据库。 
例如: 
重启某服务:service crond restart或者/etc/init.d/crond restart这个是/etc/rc.d/init.d/的软链接。 
观察某服务:netstat 
Linux启动过程: 
1. 打开电源,加载BIOS开机自检。 
2. 透过BIOS找到启动盘,读取MBR的bootloader。(Linux主流的为grub,包括两个stage,stage1为执 
行bootloader的主程序;stage2:主程序加载位于/boot底下的配置文件。menu.lst提供选单) 
3. 透过Bootloader取得内核并加载。 
4. 内核启动init进程。 
5. init 程序开始执行系统初始化 (/etc/rc.d/rc.sysinit) 
6. 依据 init 的设定加载  (/etc/rc.d/rc[0-6].d/*) 
7. 加载本机设定 (/etc/rc.d/rc.local,用户自定义开机启动程序,只要将脚本放到/etc/rc.d/rc.local/目 
录内开机就会执行。) 

管理系统服务开机启动:chkconfig 
chkconfig --list +服务名 
chkconfig --level(0123456) 服务名 on|off 
比如关闭httpd自启动:chkconfig --234 httpd off 
然后观察状态看是否关闭:/etc/init.d/httpd status或者service httpd status 
图像话管理工具:ntsysv 

init加载主要流程如下: 
1.init处理系统初始化流程/etc/rc.d/rc.sysinit,主要目的是在开始加载系统各项服务前,做好整个系统环 
境,主要就是利用rc.sysinit这个脚本。 
2.系统根据/etc/inittab设定选择启动级别,启动位于相应目录内的启动服务/etc/rc.d/rc*.d/与启动配置 
文件/etc/sysconfig。 
3.然后启动用户自定义开机启动程序/etc/rc.d/rc.local。 

第3步透过bootloader加载系统核心和核心模块,核心位于:/boot/vmlinuz,而核心是压缩的,解压缩需 
要RAM Disk/boot/initrd,作用:在没有挂载/之前,系统需要先挂载磁盘驱动,于是就把initrd加载到内 
存中,虚拟出“/”,然后完成vmlinuz核心模块的加载。 
核心模块:/lib/modules/$(uname -r)/kernel,通过lsmod查看加载了哪些模块。 
利用modinfo可以查看模块详细信息。 
安装模块:insmod,移除模块:rmmod 
修改模块的额外参数设定:/etc/modprobe.conf 
当核心加载完成后那么就会在内存中记录:/proc/kernel 

grub 
安装在mbr的grub主程序,最重要的任务就是从磁盘加载核心文件,以便让核心能够顺利驱动整个硬件。 
grub识别硬盘的如:(hd0,0),第一个0表示搜索第一个硬盘,第二个0表示搜索硬盘的第一个分区。 

忘记root密码: 
1.重启 
2.进入grub(在选单界面按e,然后在要kernel那一行按e,在行尾输入single,回车后进入单用户模式) 
3.此时系统会以root的权限给你一个shell,然后直接passwd修改密码即可,之后init 3进入字符模式。 

在Red Hat系列Linux中都提供了系统设定工具:setup。我们可以利用这个综合管理系统。 

提供密码验证的服务器有NIS、LDAP 

网卡配置:1.透过setup。2.编辑/etc/sysconfig/network-script/ifcfg-eth0 
编辑DNS服务器:vim /etc/resolv.conf 
重启网卡配置:/etc/init.d/network restart 
防火墙配置:1.透过setup。2.编辑/etc/sysconfig/iptables 

硬件信息的收集: 
/proc/cpuinfo;/proc/partitions;/proc/interrupts 
vmstat:分析系统(CPU、RAM、IO)目前的状态,分析IO也可以用iostat 

软件安装 
Linux系统中可执行的文件都是二进制文件(binary program),而Shell Scripts其实也是利用shell这个程 
序(例如bash)来执行的呢。 

可执行问阿金的编写过程: 
1.写程序,也就是源代码,其实就是纯文本文件。 
2.编译,就是将源代码编译成系统能看懂的二进制代码咯,而此时需要专门的编译程序(例如gcc,利用 
已存在的库函数编译C语言写出的源代码)来处理,经过编译与连结之后,就是可执行的二进制程序了。 
事实上在编译的过程中还产生了目标文件(Object file),然后在引用外部子程序或者加入函数库,将程 
序代码与函数库连结(Link)之后才能执行。 

make过程: 
当执行make时,make首先会在当前目录搜索Makefile这个文本文件,Makefile记录而来源代码该如何编 
译的详细信息,而Makefile则是利用configure侦测程序去检测用户具体的系统环境(比如系统版本,内核 
,是否安装了相应的编译器等)建立的。 

我们在安装源码包要看说明文档:README或者INSTALL 

源码包的安装过程: 
1../configure 
2.make clean(可以没有,作用:去除当前目录中不是本次编译过的额目标档案。) 
3.make 
4.make install 

建议安装在:/usr/local目录下,而源码包建议存储在:/usr/local/src 
不过都安装在/usr/local/目录下的话以后不好删除,建议单独在/usr/local/目录下建立一个以程序名命名 
的文件夹,这样以后删除直接删除相应文件夹即可。不过这样环境变量就没有相应的记录了,我们在执行 
时就必须要附加绝对路径,因此我们可以将相应目录加入到PATH里面。 

软件包校验: 
md5sum/sh1sum 
用法:md5sum +安装包,然后与官网提供给的md5值比较。 

Linux两大主流:RPM和DPKG 
rpm使用指令rpm,在线安装yum。 
dpkg使用指令dpkg,在先安装apt-get 

rpm安装命令: 
rpm -i 安装;-v(verbose)显示安装详细信息;-h(hash)以哈希显示安全过程。 
rpm -ivh +安装包 
rpm常用选项: 
--nodeps:忽略安装包的依赖性强制安装。 
--test:测试安装,是否有依赖问题。 
--prefix:自定义目录,而非默认目录/bin,/etc等 
--force:暴力安装,不管之前是否已经安装过了。重复安装(--replacepkgs),覆盖安装比如要安装 
的软件包比已安装的旧(--replacefiles) 
rpm -Uvh 安装包:升级安装,如果没有安装则执行安装过程。 
rpm -Fuh 安装包:仅执行升级安装,如果没有安装,则不安装。 
rpm -e 安装包:卸载rpm包。 

rpm -qa:查询已安装的软件。 
rpm -qf:查询已安装的文件属于哪个安装包。 
rpm -qi:查询已安装软件包的信息,比如作用,版本什么的,未安装加上-p 
rpm -ql:查询已安装软件包安装了哪些文件,未安装加上-p 
rpm -V:校验软件包,如果正确没提示,可以根据返回值来确认哪些改变了,5:md5;S:大小改变 
从rpm包中提取所需要的文件: 
首先将rpm包转化为cpio:rpm2cipo 
然后通过管道|提出文件: rpm2cipo bind.x86_64 | cpio -idv +指定文件到当前目录 
还可以通过数字签名的方式来验证。 

yum:自动解决rpm包的依赖关系 
yum -y install 安装 
yum -y update 升级 
yum list 查询安装包 
yum info 软件包信息 
yum remove 卸载 
修改yum源,一般直接复制163yum源到/etc/yum.repos.d/CentOS-Base.repo 

Linux备份 
备份工具:tar、cpio、dd、dump 
推荐备份的目录: 
/boot 
/etc 
/home 
/root 
/usr/local 
/var 

dd备份:dd读取的是扇区,并且读取速度慢。 
dd if=/dev/sda1 of=/dev/sda2 
cpio备份:find / -print | cpio -covB >/dev/sda2 
还原:cpio -iduv < /dev/sda2 
dump完整备份:dump -0u -f /backupdata/home.dump /home 
第一次增量备份:dump -1u -f /backupdata/home.dump.1 /home 
tar完整备份:tar --exclude /proc --exclude /mnt --exclude /tmp -jcvf  
/backupdata/system.tar.bz2 / 
cp -a也可以进行备份。 

增量备份(差异备份):tar 
tar -N '2015-09-04' -jcvf /backupdata/home.tar.bz2 /home只有比20150904更新的文档才备份 
也可以透过rsync进行镜像备份:rsync -av 来源目录 目标目录。 
第一次备份完毕后,在此进行备份时就是增量备份。 


Shell脚本学习 
/etc/profile:初始化系统全局Shell变量。 
/etc/bashrc:定义Shell函数和别名的系统全局定义。 
~/.bash_profile:用户个人环境。 
~/.bashrc:用户个人的别名及变量设置文件 
source或者. 将自定义变量导出到环境变量。 

fork系统调用: 
Linux系统通过fork系统调用创建进程。fork系统调用创建调用进程的副本即为子进程。子进程与父进程共 
享一个CPU,并且子进程继承父进程的环境变量。 

wait系统调用: 
子进程执行阶段,父进程处于等待状态,此时wait一直保持待机状态,当1个子进程终止。执行wait终止 
子进程,返回子进程的PID。若在子进程终止前父进程挂了,那么子进程就成了孤儿进程,所以wait进程 
不仅让父进程处于等待状态,也可以终止进程。 

exit系统调用: 
执行exit终止子进程,并且返回sigchild信号,0为成功,非0失败。使用echo $?查看。 

所有Shell都可以使用的变量称为全局变量或环境变量,使用env或者printenv查看。 
局部变量只能用于当前Shell,利用set查看系统所有变量(全局和局部) 

删除变量 unset VAR 
显示变量:echo $VAR或者echo ${VAR} 
局部变量转化为全局变量:exprot VAR="fuck"或者declare -x VAR="fuck" 
注意:当export在shell脚本内使用时,一旦shell脚本执行结束,变量也会消失。 

注意一下参数变量: 
$* 
$@ 
$? 
$# 
$!:最后运行后台进程的PID,而连续两个!!则是运行history最后执行的命令,等于!-1。 
或者是!+关键字第一个字母,这个是运行最近的第一个字母是前面输入的那条命令。 
$_:最后运行命令的最后一个参数 
$0:shell脚本的全名,在脚本中echo $0等于basename $0 
$$:当前Shell的PID。例如ps aux | grep bash 显示的PID等于此时echo $$的PID 

读入变量read VAR1 VAR2,或者是read -p "Plead input an integer: " a 
shift将参数左移。 
替换命令``,例如:now=`date`;echo $now 
整数的计算:expr 10 + 110 注意,运算符号两边必须有空格,两边可以为数字,也可以是变量。 

Shell条件语句 
if 命令 
then ** 
elif 
fi 

case i in 
模式1) 
语句 
;; 
模式2) 
语句 

;; 
esac 

循环语句 
for i in "@*" 
do 
echo $i 
done 

文件测试:test -f /etc/passwd ;或者[ -f /etc/passwd ],返回0为真,返回1为假。注意exit返回结果 
0为真,非零为假。 
-f:文件存在 
-d:目录存在 
-s:文件存在且为非空 
-e:文件存在即为真 
-r:可读 
-w:可写 
-x:可执行 
-L:文件为软链接 

函数 
function() { 
echo "***" 
echo "***" 

调用函数直接在要调用的位置协商函数名即可。 

增加目录到PATH中:PATH=$PATH:*** 
通过kill -l可以查看所有的信号变量,最常用的就是-9SIGKILL 

定义别名:alias mv='mv -i',删除用:unalias命令 
如果我们想让别名永久生效可以将其写入到~/.bashrc文件当中,之后导出source ~/.bashrc 

[]检索字符范围,例如:file[1-3] 
{},当中使用,可以检索多个,例如:file{ile?,oo} 

..上级目录 
-上一个目录 

declare命令 
-a:声明变量为数组 
-i:声明整数变量 
-r:声明只读变量 
-x:声明环境变量,declare -x等于export 

type用于显示命令的类型:别名、内建等等 
file用于识别文件的类型:b、c、d等等 

变量扩展修饰: 
${var:-word}:若变量var为空,则返回word。 
${var:=word}:若变量var为空,则将变量设置为word并返回word 
${var:?word}:若变量var为空,则将显示var:word 
${var:+word}:若变量var存在,则返回word,否则返回null,常用语测试变量是否存在。 
${var#pattern}:从前匹配最短删除。 
${var##pattern}:从前匹配最长删除。 
${var%pattern}:从后匹配最短删除。 
${var%%pattern}:从后匹配最长删除。 
${var:offset}:提取含有offset关键字的字符串。 
${var:offset:length}:从offset开始之后提取长度为length的字符,例如:var="12345";echo  
${var:2:2};34 
${var/substring/newstring}:使用newstring代替var中的第一个substring。 
${var//substring/newstring}:使用newstring代替var中的所有substring。 
${#var}:返回变量var的长度。 
${var}:返回变量的内容,推荐这样写。$var这样也可以。 
$1、$2、...$(n),返回第n个位置的参数。$1-$9返回第1-9个参数。$0:当前shell脚本的名称。 

$():括号内为命令组合。 
``:``内命令执行完毕后返回。 
'':单引号内命令原样输出。 

数值计算: 
$[]或者$(()) 
定义数组: 
declare -a numbers=(11 22 33 44 55) 
echo ${numbers[2]} 
22 
echo ${#numbers[@]} 


sort 
grep 
awk 
sed 
uniq 

grep详解 
将匹配的行打印出来 
常用选项 
-c(count):值输出匹配行的数目 
-i(ignore-case):不区分大小写 
-n:输出匹配行和行号 
-v:反选匹配文本的行 
-An:after:除了列出该行外,后续的n行也列出来。 
-Bn:before:除了列出改行外,前面n行业列出来。 
使用扩展正则表达式:grep -E或者egrep 
比如:去掉空行和注释行: 
egrep -v '^$|^#' /etc/passwd 

cut详解 
-d:指定分割符。 
-f:依据-d指定的分隔符分割的数段,利用-f去除第几段,当截取多个段的时候,中间用,号隔开。 
-c:以字符单位去除固定字符区间。注意在linux中tab键默认是8个空格。   
截取多段,1,3,4。 
截取4-15段,cut -d ":" -f4-15,对于-c截取字符同样适用。 

sort基础 
-f(ignore-case):忽略大小写 
-b(ignore-leading-blanks):忽略开头的空格 
-n(numeric-sort):以纯数字进行排序(默认以文本排序,数字的话以第一个数字为准。) 
-r(reverse):反向排序。 
-u(uniq):相同的数据中,仅出现一行。 
-t(field-separator):指定分隔符,默认是以tab键来分割。 
-k(key):以哪个field进行排序。 

uniq基础 
-i:忽略大小写 
-c:进行计数 

wc基础 
-w(word):字数 
-m(character):字符数 
-c(bytes):字节数 
-l(lines):行数 
wc默认输出行数、字数、字符数 

tee基础 
双向重导向 
-a(append):以累加方式加入到数据file当中。 
例如:last | tee -a file.log | more 

tr基础 
-d:删除匹配的字符 
-s(squeeze-repeats):删掉重复的字符。 
例如:小写转大写:tr '[a-z]' '[A-Z]' 注意只能用管道字符,这个后面不能直接跟文件。 
删除字符:cat /etc/passwd | tr ':' -d  
我们知道在dos下会在每行行尾加上"^M"这个断行符 

col基础 
-x:将tab键转换成对等的空格键盘。 

sed基础 
选项: 
-n(silent):使用安静模式,仅输出sed处理的行。 
-f(file):将sed动作写在后面的文本内。 
-r(regexp-extended):支持扩展正则表达式。 
-i:直接修改读取的文本,而不是输出。 
范围: 
n1,n2 
动作: 
a(apped):新增,a后面接字符串,这些字符串会出现在目前行的下一行。 
c(replace):取代,c后面接字符串,这些字符串可以取代n1,n2之间的行。 
d(delect):删除 
i(incert):插入,i后面接字符串,这些字符串会出现在目前行的上一行。 
p(print):打印,通常与-n一起使用。 
s(replace):取代,例如:1,20s/old/new/g(g取代所有,p取代一次) 

nl /etc/passwd | sed '2,5d'删除2-5行。 
nl /etc/passwd | sed '2a fuck'在第2行后面增加内容为fuck的一行。 
nl /etc/passwd | sed '2i fuck'在第2行前面增加内容为fuck的一行。 
nl /etc/passwd | sed '2,5c No-2-5 lines'用后面内容取代2-5行。 
nl /etc/passwd | sed -n -p '10-15p'打印20-15行。不加-n的话,2-5行会重复输出。 
利用sed取出IP地址: 
ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/  Bcast.*//g' 

awk基础 
以行为单位处理,倾向于一行中分成若干个字段处理,默认字段分割符为“tab”或“空格”。 
比如取last登入的用户名和IP: 
last -n 5 | awk '{print $1 "\t" $3}' 
awk处理流程: 
1.读入第一行,并将第一行的资料填入$0、$1、$2....等中。 
2.依据条件的限制,判断是否进行后面的动作。 
awk以字段为最小的处理单位。 
awk内建变量: 
NF:每一行($0)拥有的字段总数。 
NR:目前awk所处理的是第几行数据。 
FS:目前的分隔符,默认是空格。 
注意:awk在print打印非变量数据时,要加上双引号。 
比如: 
[ root@localhost]# last -n 3 | awk '{print $1 "\t lines:"NR "\t columes:" NF}' 
root  lines:1  columes:10 
root  lines:2  columes:10 
root  lines:3  columes:10 
awk的逻辑运算字符举例: 
cat /etc/passwd | sort -n -t ":" -k3 | awk '{FS=":"} $3 > 50 {print $1 "\t" $3}' 
不过我们发现第一行并没有经过awk处理就输出了。我们可以使用BEGIN这个关键词: 
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 > 50{print $1 "\t" $3}' 
当大括号内使用printf时就必须按照C个数输出了%10s、%10d。并且结尾使用\n进行分行。 
另外一个例子: 
cat a.log | awk 'NR >=2 {printf "%10s %10s %10s %10s\n",$1,$2,$3,$4,totoal}' 

diff档案对比:以行为单位对比 
-b:忽略一行中多个空白的差异。 
-i:忽略大小写。 
-B:忽略空白行的差异。

 

LVS三种模式简介

IP虚拟服务器软件IPVS

IPVS软件中的三种IP负载均衡技术。

1.Virtual Server via NAT

(责任编辑:admin)