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) |