YUM保存软件包及离线下载

默认情况下,当前版本的 yum 在成功下载和安装软件包后,会把下载的文件删掉。这样可以减少 yum 占用的磁盘空间。你可以打开缓存,这样 yum 将在缓存目录保留下载到的文件。

1. 缓存优势:

  • yum 的性能可以提高

  • 只使用缓存你可以离线运行 yum 操作

  • 你可以复制缓存中的软件包以备用

默认情况下,yum 在 /var/cache/yum/ 目录保存临时文件,每个仓库都有自己的子目录。仓库目录中 packages/ 子目录包含了缓存的软件包。例如,目录/var/cache/yum/development/packages/ 包含从 development 仓库下载的软件包。

2. 启用 yum 缓存

要配置 yum 保留已下载的文件而不是删除,设置 /etc/yum.conf 中的keepcache 选项为 1:

keepcache=1

打开缓存后,每个 yum 操作都可能从仓库下载软件包数据。要保证缓存包含了软件包数据,在启用缓存后运行一个操作,例如 list 或 search 来下载软件包数据而不影响系统。

3.在只使用缓存的模式下使用 yum

要在没有网络的情况下执行 yum,只要启用了缓存,就可以用 -C 选项。这样 yum 就不会检查网络上的仓库,只使用缓存。在这个模式中,yum 只能安装已下载并缓存的软件包。

要在没有网络连接的时候搜索软件包 tsclient,输入命令:

su -c 'yum -C list tsclient'

4. 缓存带来的好处

如果你有多台机子 只须要一台机子从网上下载 软件包跟软件更新包 , 还有如果你想重装系统不想再下载的几个G的更新跟软件(前提缓存了你系统所有安装的软件的更新包).

在开启 缓存的状态下因为 yum 下载的软件包不会被删除,所以可以多次利用.(就是占硬盘空间而以, 呵呵几个G我不放在眼里,我硬盘有 1.2TB)

很简单的方法,把这台机子的 /var/cache/yum/ 目录下的所有文件包过目录. 复制到另一台机子下的相同目录. 执行.

# yum -C update
# yum -C install <软件包名>

5.清空 yum 缓存

# yum clean headers

要删除缓存中所有软件包,使用命令:

#yum clean package
[root@Iprayz ~]# rpm -ql yum    /var/cache/yum
[root@Iprayz ~]# cat /etc/yum.conf |grep  cachedir cachedir=/var/cache/yum/$basearch/$releasever
[root@Iprayz ~]# cat /etc/yum.conf |grep keep  keepcache=0
#  Fedora which don't keep old packages around. If you don't like this checking
[root@Iprayz ~]#

基础级别命令汇总

今天想写个数据同步的cron命令,写完了却脑抽的忘了赋权的chmod命令了

看样子 短路的时候 总归是让人各种忧桑啊……

好吧 上网检索了一下 并将基础的一些命令给偷取过来吧^_^

1、显示日期的指令: date

2、显示日历的指令:cal



3、简单好用的计算器:bc


怎么10/100会变成0呢?这是因为bc预设仅输出整数,如果要输出小数点下位数,那么就必须要执行 scale=number ,那个number就是小数点位数,例如:

4、重要的几个热键[Tab],[ctrl]-c, [ctrl]-d

[Tab]按键—具有『命令补全』不『档案补齐』的功能

[Ctrl]-c按键—让当前的程序『停掉』

[Ctrl]-d按键—通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit

5、man

退出用q,

man -f man

6、数据同步写入磁盘:sync

输入sync,那举在内存中尚未被更新的数据,就会被写入硬盘中;所以,这个挃令在系统关机戒重新启劢乀前, 径重要喔!最好多执行几次!

7、惯用的关机指令:shutdown

此外,需要注意的是,时间参数请务必加入指令中,否则shutdown会自动跳到 run-level 1 (就是单人维护的登入情况),这样就伤脑筋了!底下提供几个时间参数的例子吧:

重启,关机: reboot, halt,poweroff

8、切换执行等级: init

Linux共有七种执行等级:

–run level 0 :关机
–run level 3 :纯文本模式
–run level 5 :含有图形接口模式
–run level 6 :重新启动

使用init这个指令来切换各模式:

如果你想要关机的话,除了上述的shutdown -h now以及poweroff之外,你也可以使用如下的指令来关机:

9、改变文件的所属群组:chgrp

10、改变文件拥有者:chown

他还可以顸便直接修改群组的名称

11、改变文件的权限:chmod

权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

–数字类型改变档案权限:

–符号类型改变档案权限:

12、查看版本信息等

13、变换目录:cd

14、显示当前所在目录:pwd

15、建立新目录:mkdir


不建议常用-p这个选项,因为担心如果你打错字,那么目录名称就回变得乱七八糟的

16、删除『空』的目录:rmdir

17、档案与目录的显示:ls


18、复制档案或目录:cp







19、移除档案或目录:rm



20、移动档案与目录,或更名:mv


21、取得路径的文件名与目录名:basename,dirname


22、由第一行开始显示档案内容:cat


23、从最后一行开始显示:tac(可以看出 tac 是 cat 的倒着写)

24、显示的时候,顺道输出行号:nl



25、一页一页的显示档案内容:more

26、与 more 类似,但是比 more 更好的是,他可以往前翻页:less

27、只看头几行:head

28、只看尾几行:tail

29、以二进制的放置读取档案内容:od


30、修改档案时间或新建档案:touch



31、档案预设权限:umask

32、配置文件档案隐藏属性:chattr



33、显示档案隐藏属性:lsattr

34、观察文件类型:file

35、寻找【执行挡】:which


36、寻找特定档案:whereis

37、寻找特定档案:locate

38、寻找特定档案:find


39、压缩文件和读取压缩文件:gzip,zcat


40、压缩文件和读取压缩文件:bzip2,bzcat


41、压缩文件和读取压缩文件:tar






Linux查看系统资源情况

1. 查看CPU使用情况的命令

$ vmstat 5

每5秒刷新一次,最右侧有CPU的占用率的数据

$ top

top 然后按Shift+P,按照进程处理器占用率排序

2. 查看内存使用情况的命令

$ free

$ top

top 然后按Shift+M, 按照进程内存占用率排序

3. 查看网络流量

可以用工具iptraf工具

$ iptraf -g

“”针对某个Interface的网络流量可以通过比较两个时间网络接口的RX和TX数据来获得

$ date; ifconfig eth1

4. 查看磁盘i/o

$ iostat -d -x /dev/sdc3 2

用iostat查看磁盘/dev/sdc3的磁盘i/o情况,每两秒刷新一次

$ vmstat 2

用vmstat查看io部分的信息

procs:
r–>;在运行队列中等待的进程数
b–>;在等待io的进程数
w–>;可以进入运行队列但被替换的进程

memoy:
swap–>;现时可用的交换内存(k表示)
free–>;空闲的内存(k表示)

pages:
re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面

disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换

cpu 表示cpu的使用状态
cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间

其中:
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

Linux查看进程运行的完整路径

Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。
[codesyntax lang=”bash”]

ll /proc/PID

[/codesyntax]

Linux查看进程运行的完整路径 三联

cwd符号链接的是进程运行目录;
exe符号连接就是执行程序的绝对路径;
cmdline就是程序运行时输入的命令行命令;
environ记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号连接。

自同步 局域网文件同步

自同步是一款小巧实用的局域网文件同步工具,具有使用方便、同步快速的特点,在局域网内,它可以让你在任意两台电脑(手机)的两个目录之间建立同步,你在一个目录中添加/修改的文件,在另一个目录中也会相应的添加/修改。

基本介绍

1、 无需再用 U盘、QQ、邮件传输文件;
2、 windows 用户可以抛弃文件夹共享、winScp;
3、 linux 用户可以抛弃scp、samba、rsync;
4、 mac用户不用设置“文件共享”;
5、 Android 和 IOS的图片能便捷同步(备份)到你的电脑上了。

使用方法

下面例子是教你如何在两台 windows 电脑(zisync-window1与 zisync-window2)之间建立同步,如何让 zisync-window1桌面上的目录 A与 zisync-window2桌面上的目录B建立同步关系。
Step1:启动”自同步”程序,设置同步口令(token),自同步会自动发现局域网内有相同同步口令的设备,如图:

输入您的同步口令(我们在此输入同步口令 zisync),点击完成,发现另外一台同步口令为zisync的设备(zisync-window2),其中 zisync-window1为当前设备,如图:

Step 2:建立设备间的互相信任, 鼠标右键点击设备 zisync-window2,点击【添加信任】,向 zisync-window2 发送请求信任的请求,如图,

然后在 zisync-window2 设备上同意信任该设备,完成后,可以看到与 zisync-window2已经建立了信任,如图:

Step 3:建立同步目录。点击选项页上的【同步目录】 ,可以看到当前没有已建立的同步关系,所以我们点击左下角的【添加】按钮来建立同步目录,如图:

选择【使用已有的同步目录】,然后点击下一步,会出现让您选择其它设备的同步目录界面,如图:

当前在zisync-window2上没有看到已存在的同步目录,所以我们点击【创建同步目录】,选择“桌面/B”来为 zisync-window2 创建新的同步目录,点击完成后,我们可以看到zisync-window2多了一个同步目录的信息,如图:

注:这里也可以为本机创建同步目录,这样不仅可以在两台设备的目录之间建立同步关系,也可以在一台设备的目录之间建立同步关系。
点击【下一步】去选择本地的目录,如图:

选择与建立同步关系的本地目录,在该教程中,我们选择“G:/zisync” ,点击【完成】后,这样我们就完成了在两个设备目录之间建立同步关系的操作。
Step 4:在自同步主界面上【同步目录】可以看到你刚刚建立同步关系,如图:

 

下载地址:

官网下载

VPS增加SWAP

最近入手了一台阿里云的VPS 经过测试,性能挺好,速度也挺快,要备案是个杯具,反正不能开站,拿来折腾是不错的!

安装好LNMPA,打开探针,发现根本没有SWAP区(虚拟内存)。

SWAP

虽然说有512MB的物理内存,但是在必要时刻,虚拟内存还是有用的,Windows的虚拟内存可以自行设定,那么Linux不可能不行吧,于是发挥我的DIY精神,自己动手添加SWAP区(虚拟内存)!

虚拟内存,就是把内存设在硬盘上,那就要用硬盘的空间,现在的VPS一般都至少有10GB硬盘的。我的阿里云就有40GB。

于是用“开玩笑”的方法,把未使用的空间给挂载到/home上:Xen Linux VPS硬盘挂载教程(重装系统不丢数据) (已挂载硬盘或者使用已有空间的可以忽略)

挂载完成后,分别用:
[codesyntax lang=”bash”]
fdisk -l
df -l
[/codesyntax]

可以看见已成功挂载到/home/

进入hone目录,执行一下命令创建一个名为”iprayz”的512MB大的SWAP(此步骤可能有点慢,需要等一下)。
[codesyntax lang=”bash”]
cd /home
dd if=/dev/zero of=iprayz bs=1024 count=524288
[/codesyntax ]

说明:

of=iprayz的iprayz是swap文件的名称,可以自行修改,但是下文执行的命令中也要相对应的修改该名称。

bs=1024的1024是指每个扇区占用1024Byte,也就是1KB。一般不用修改。

count=524288的524288指的是SWAP文件大小。计算方法如下:512MB有512个1024KByte,512*1024=524288,524288刚刚好是512MB。如果要设置为1GB的话,那就是有1024个1024KB,1024*1024=1048576,那就把524288改成1048576。如果是256MB,那就是有256个1024KB,256*1024=262144,那就把524288改成262144!以此类推!

执行完上面那步后,执行以下代码(打了颜色的部分代码代表如果你在执行上文代码时改了,就要相对应的进行修改):

创建swap文件:
[codesyntax lang=”bash”]
/sbin/mkswap iprayz
[/codesyntax ]

激活swap文件:
[codesyntax lang=”bash”]
/sbin/swapon iprayz
[/codesyntax ]

检查swap是否正确:
[codesyntax lang=”bash”]
/sbin/swapon -s
[/codesyntax ]
返回如下结果,表示成功:

虽然SWAP区已成功启用,但是重启后又会消失,因此需要设置开机自动启用SWAP:

使用vim或者SFTP工具修改 /etc/fstab

vim工具:#vim /etc/fstab

在末尾添加如下内容:
[codesyntax lang=”bash”]
/home/iprayz swap swap defaults 0 0
[/codesyntax ]
如图:

修改完成后,保存,进行重启:
[codesyntax lang=”bash”]
reboot
[/codesyntax ]
重启完成后,查看空闲的内存:
[codesyntax lang=”bash”]
free -m
[/codesyntax ]

可以看到SWAP的大小已经相对应的增加了!使用PHP探针,也看到SWAP区了:

PHP探针

为了测试SWAP区是否可用,我特意用VNC在VPS上使用Qemu运行Windows耗费RAM:

从PHP探针可以看到,SWAP区已相对应地使用了一部分:

PHP探针

到这一步,就表示你大功告成了!!!

如果要停用此SWAP,也很简单:
[codesyntax lang=”bash”]
swapoff /home/iprayz
[/codesyntax ]
如果要删除的话,可以直接执行:
[codesyntax lang=”bash”]
rm -rf /home/iprayz
[/codesyntax ]
当然,也要相对应地对/etc/fstab进行修改了!

本文参考至: Micro Universe

备份工具tar详细用法

tar是Linux环境下最常用的备份工具之一。tar(taparchive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件。
tar可用于建立、还原、查看、管理文件,也可方便的追加新文件到备份文件中,或仅更新部分的备份文件,以及解压、删除指定的文件。
熟悉其常用参数,能方便日常的系统管理工作。

一、版本

还是那句,不同的操作系统,tar的命令参数是有点区别的:
[codesyntax lang=”bash”]

# tar --version
tar (GNU tar) 1.14

[/codesyntax]

二、简单操作

命令格式:
[codesyntax lang=”bash”]

tar [options] [tarfile] [other-files]
tar--long-option -function-options files

[/codesyntax]

tar可使用的参数非常多,先列举几个最常用的参数:
[codesyntax lang=”text”]

-t, --list
	列出归档文件内容目录
-x, --extract, --get
	从归档文件中解析文件
-c, --create
	创建新的归档文件
上面三个参数,不能同时存在,仅能使用其中一个,即t/x/c
-f file, --file=file
	指定备份文件,或设备,例如磁带机/dev/st0
-v, --verbose
	显示命令的执行过程
-Z, --compress, --uncompress
	使用compress命令处理备份文件
-z, --gzip, --gunzip, --ungzip
	使用gzip命令处理备份文件
-j, --I, --bzip
	使用bzip2命令处理备份文件
	-z和-j都是在备份文件打包后才进行压缩的操作的,并且,该操作会影响其他的参数。
-C directory, --directory=directory
	先进入指定的目录,再释放

[/codesyntax]

举例:
把/etc目录中所有的文件打包为etc.tar文件
[codesyntax lang=”bash”]

tar -cvf /tmp/etc.tar /etc

[/codesyntax]
把/etc目录中所有的文件打包并使用gzip压缩为etc.tar.gz文件
[codesyntax lang=”bash”]

tar -zcvf /tmp/etc.tar.gz /etc

[/codesyntax]
把/etc目录中所有的文件打包并使用bzip2压缩为etc.tar.bz2文件
这里的tar.gz或tar.bz2都是惯例,并不是特定条件。它仅为方便标识,也可将其设置成如tgz等。但建议遵循惯例
[codesyntax lang=”bash”]

tar -jcvf /tmp/etc.tar.bz2 /etc

[/codesyntax]
查看备份包中的内容,若为已经压缩的文件,需加上-z或者-j参数
[codesyntax lang=”bash”]

tar -ztvf /tmp/etc.tar.gz

[/codesyntax]
默认情况下,tar打包时都是使用相对路径的。所以释放时需要先进入目录目录,然后再解压。
同样的,根据使用的压缩方式,应加上-z或者-j参数
[codesyntax lang=”bash”]

cd /tmp && tar -zxvf /tmp/etc.tar.gz

[/codesyntax]
PS:这是另一种写法,结果和上面的相同,其会先进入/tmp目录,然后再释放包的
[codesyntax lang=”bash”]

tar -zxvf /tmp/etc.tar.gz -C /tmp

[/codesyntax]
释放单个etc/passwd文件,正如前面提到的,tar包中的是相对路径,所以不能使用“/etc/passwd”
并且,这里不能使用-C参数,释放文件是当前路径的相对路径,并带目录释放
[codesyntax lang=”bash”]

tar -zxvf /tmp/etc.tar.gz etc/passwd

[/codesyntax]
tar还可以支持很多额外的参数,方便我们在备份和释放的时候进行控制。

三、更多参数

1、备份

[codesyntax lang=”text”]

-d, --diff, --compare
	找出归档文件和文件系统的不同之处
-r, --append
	将文件附加到归档文件之后
-u, --update
	只附加比归档中新的文件
-A, --catenate
	将 tar 文件附加到归档文件之后
--concatenate
	与 -A 相同
--delete
	从归档文件中删除 (不能在磁带上!)
-N date, --newer=date, --after-date=date
	只将比指定日期更新的文件保存到备份文件
--exclude=pattern
	排除符合查找模式的文件
-P, --absolute-names
	备份文件中的文件名使用绝对路径,而不移除文件名前的“/”,默认是相对路径的
-l, --one-file-system
	复制文件或目录存放的文件系统必须和tar命令当前执行的文件系统相同,否则不执行;也就是讲,不处理其他分区的文件。(可忽略mount挂载分区的问题)
--mode=permissions
	备份时,把加入备份文件中的文件属性修改为指定的属性,格式和chmod命令接受的格式相同
--group=group
	备份时,把加入备份文件中的文件所属组设定成指定的组
--owner=owner
	备份时,把把加入备份文件中的文件所有者设定成指定的用户
--numeric-owner
	以UID和GID代替用户名和组名
--recursion
	递归模式(默认)
--no-recursion
	不进行递归处理,即不把指定目录下的所有文件和文件夹都备份
--newer-mtime=date
	仅增加指定日期后修改过内容的文件到备份文件中
--anchored
	排除时,排除匹配式中匹配整个文件路径(默认)
--no-anchored
	排除时,排除匹配式中可匹配“/”后的路径
--ignore-case
	排除时,排除匹配式中忽略大小写
--no-ignore-case
	排除时,排除匹配式中大小写敏感(默认)
--wildcards
	排除匹配式支持通配符(默认)
--no-wildcards
	排除匹配式不支持通配符
--wildcards-match-slash
	排除匹配式的通配符匹配“/”(默认)
--no-wildcards-match-slash
	排除匹配式的通配符不匹配“/”
-X file, --exclude-from file
	指定样式文件,供程序执行时剔除符合条件的文件
--remove-files
	删除已经加入到备份文件中的文件

[/codesyntax]
举例:
创建当前目录的全备份到backup.tar文件
(使用find的原因是,这样可以打包所有隐含文件或不符合命令规范的文件和目录)
[codesyntax lang=”bash”]

tar cvf - `find . -print` > backup.tar

[/codesyntax]
比2005年6月1日新的文件才会备份
[codesyntax lang=”bash”]

tar -N '2005/06/01' -zcvf home.tar.gz /home

[/codesyntax]
除/home/dmtsai目录外,/home和/etc目录的所有东西都打包
[codesyntax lang=”bash”]

tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

[/codesyntax]
删除etc.tar文件中的etc/pbm2ppa.conf文件
[codesyntax lang=”bash”]

tar --delete etc/pbm2ppa.conf -vf etc.tar

[/codesyntax]
把tmp.tar文件附加到etc.tar后面
[codesyntax lang=”bash”]

tar -A tmp.tar -vf etc.tar

[/codesyntax]
根据-T参数后的样式文件list.txt,打包/etc中指定的文件,同样的,list.tx默认也是相对路径的
[codesyntax lang=”bash”]

find . -name "*.d" -o -name "*.conf" > list.txt
	tar -T list.txt -czvf etc.tar.gz /etc

[/codesyntax]
通过管道,使用一条命令实现上面相同的功能
[codesyntax lang=”bash”]

find . -name "*.d" -o -name "*.conf" | tar -czvf etc.tar.gz -T -

[/codesyntax]

值得注意几个地方:
1)-f后面必须紧跟备份文件,xxx.tar或者xxx.tar.gz
2)使用–delete、-u、-r、-A的时候,后面跟的备份文件都必须为未压缩的,若备份文件已经压缩,需要使用gunzip先解压,操作完后再gzip;
也就是说,不能对tar.gz、tar.bz2等文件直接操作的;
3)备份打包时,默认为相对路径;而排除匹配式默认也是全路径匹配的
所以,在打包时,会提示:“tar: Removing leading `/’ from member names”
除非你使用-P参数或特定的参数指定

2、释放

[codesyntax lang=”text”]

-k, --keep-old-files
	还原备份文件时,不覆盖已存在的文件
-m, --modification-time, --touch
	还原文件时,不变更文件的更改时间
-p, --same-permissions
	解析许可权限信息,即保留备份文件中的权限信息
-s, --same-order, --preserve-order
	以与备份文件相同的顺序还原文件
--preserve
	等于同时设置-p和-s
--no-same-permissions
	不解析许可权限信息,这是普通用户的默认设置,仅对影响管理员的操作有影响
--no-same-owner
	不使用备份文件中的所有者信息,而以您自己的身份解析文件
--same-owner
	使用相同的文件所有者还原文件
--overwrite
	覆盖已经存在的文件和目录
--overwrite-dir
	覆盖已经存在的目录
--recursive-unlink
	释放前,先删除整个目录下所有文件的连接

[/codesyntax]
举例:
释放文件时,设置为备份文件中的相同所有者(仅对管理员而言)
[codesyntax lang=”bash”]

tar --same-owner -xzvf etc.tar.gz

[/codesyntax]
通过管道,把/etc目录用tar整个“拷贝”到/backup/etc,而不用建立任何临时文件
因为根本不需要生成备份包文件,所以这里不需要-z参数
[codesyntax lang=”bash”]

tar cvf - /etc | tar xvf - -C /backup/etc

[/codesyntax]
这里同上面的原理是一样的,只不过通过ssh直接“拷贝”到远端机器上而已
配合ssh密钥匹配,可实现不用人工干预的备份工作
[codesyntax lang=”bash”]

tar cvf - /etc | (ssh root@192.168.228.244 'tar xvf - -C /backup/etc')

[/codesyntax]

3、操作磁带设备

部分参数只适用于磁带设备,不适用于常规的磁盘文件。
[codesyntax lang=”text”]

-K file, --starting-file=file
	从指定的文件开始还原(按顺序)
-L length, --tape-length=length
	设置磁带的容量,单位为1024字节(bytes)
-M, --multivolume
	在建立、还原备份文件或列出其中内容时,采用多卷模式(不能对文件操作)
-V name, --label=name
	建立使用指定卷标的备份文件
-W, --verify
	写入备份文件后,校验文件是否正常
-F script, --info-script=script, --new-volume-script=script
	更换磁带时执行指定的脚本文件,必须与参数-M同时使用

[/codesyntax]
举例:
把/bin、/usr/bin目录都打包到st0磁带设备中
[codesyntax lang=”bash”]

	tar cvf /dev/st0 /bin /usr/bin

[/codesyntax]
把old.dmp文件追加到st0磁带中(使用cvf,会删除原来的文件的)
[codesyntax lang=”bash”]

	tar rvf /dev/st0 old.dmp

[/codesyntax]

4、其他

还有一些控制参数这里不详细讨论了,请自行测试。
但提醒一句,-T参数比较重要哦。
[codesyntax lang=”text”]

--null
-T
	从null设备读取文件名,覆盖-C的设置
-o, --old-archive, --portability
	将数据写入备份文件时使用V7格式
--posix
	将数据写入备份文件时使用POSIX格式
-G, --incremental
	处理旧GNU格式的增量备份
--rsh-command=command
	不使用rsh命令连接远程主机,而使用指定的命令进行
--suffix=suffix
	指定要删除文件前备份文件,该备份文件使用的后缀,默认是“~”
--totals
	创建备份文件时,列出已建立的备份文件的大小
tar --totals -cvf tmp.tar tmp/
-R, --block-number
	在输出信息时,一同block number信息
-S, --sparse
	若文件中有大量连续0字节时,将该文件保存成稀疏文件
-T file, --files-from=file
	指定样式文件,文件内容为一个或多个条件样式,供程序还原或创建符合指定条件的文件
--use-compress-program=program
	使用指定的压缩程序对备份文件压缩或解压
--volno-file=FILE
	使用或更新FILE文件中指定的卷号码
-w, --interactive, --confirmation
	当遇到问题时,要求用户先确认
-B, --read-full-records
	读取数据是重设扇区大小,仅适用于BSD 4.2的管道操作
-O, --to-stdout
	把从备份文件里还原的文件输出到标准输出设备
--version
	版本信息
--help
	帮助信息

[/codesyntax]

网络流量捕捉:Wireshark

Wireshark简介

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。网络封包分析软件的功能可想像成 “电工技师使用电表来量测电流、电压、电阻” 的工作 – 只是将场景移植到网络上,并将电线替换成网络线。
网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使用Wireshark来为新的通讯协定除错,普通使用者使用Wireshark来学习网络协定的相关知识当然,有的人也会“居心叵测”的用它来寻找一些敏感信息。
Wireshark不是入侵侦测软件(Intrusion DetectionSoftware,IDS)。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark撷取的封包能够帮助使用者对于网络行为有更清楚的了解。Wireshark不会对网络封包产生内容的修改,它只会反映出目前流通的封包资讯。 Wireshark本身也不会送出封包至网络上。
Linux网络流量分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。
在Linux系统中,1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包过滤器的一种的实现,BPF(BSD Packet Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。在window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。

层次化的数据包协议分析方法

取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。
如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点(比如图中的TCP和UDP协议就是IP协议的儿子节点)。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。Tcp.port=21就可以认为是ftp协议,特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。
在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。
由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。

基于插件技术的协议分析器

所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它着名的应用实例有:媒体播放器winamp、微软的网络浏览器IE等。
由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。

安装Wireshark

该软件有极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。目前最新版本为:Wireshark 1.0.3。安装该软件请按照如下步骤进行:
1. 将下载的最新版本软件拷贝到临时文件夹
[codesyntax lang=”bash”]

cp wireshark-1.0.3.tar.gz /usr/local/src/

[/codesyntax]
2. 切换到临时文件夹目录
[codesyntax lang=”bash”]

cd /usr/local/src/

[/codesyntax]
3. 解压缩文件
[codesyntax lang=”bash”]

tar -xvf wireshark-1.0.3.tar.gz

[/codesyntax]
另外,同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Wireshark时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Wireshark:
[codesyntax lang=”bash”]

cd wireshark-1.0.3
 ./configure
 make
 make install

[/codesyntax]
当编译并安装好Wireshark后,就可以执行“wireshark”命令来启动Wireshark

iptables设置大全

对于Internet上的系统,不管是什么情况都要明确一点:网络是不安全的。因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的。 Linux提供了一个非常优秀的防火墙工具netfilter/iptables。它完全免费、功能强大、使用灵活、可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行。本文将简单介绍使用netfilter/iptables实现防火墙架设和Internet连接共享等应用。

netfilter/iptabels应用程序,被认为是Linux中实现包过滤功能的第四代应用程序。netfilter/iptables包含在2.4以后的内核中,它可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。 netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。netfilter/iptables从ipchains和 ipwadfm(IP防火墙管理)演化而来,功能更加强大。下文将netfilter/iptabels统一称为iptables。可以用iptables为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptales只读取数据包头,不会给信息流增加负担,也无需进行验证。要想获得更好的安全性,可以将其 和一个代理服务器(比如squid)相结合。

基本概念

典型的防火墙设置有两个网卡:一个流入,一个流出。iptables读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做 些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表 内的链中。关于添加、去除、编辑规则的命令,一般语法如下:

[codesyntax lang=”bash”]

iptables [-t table] command [match] [target]

[/codesyntax]

1.表(table)

[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、? nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。各表实现的功能如表1所示。


表1 三种表实现的功能

2.命令(command)

command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。表2是最常用的一些命令及例子。


表2 命令的功能和样例

3.匹配(match)

iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。这里将介绍可用于采用任何协议的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。


表3 通用匹配及示例说明

4.目标(target)

目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。表4是常用的一些目标及示例说明。

除表4外,还有许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。

表4 目标及示例说明

应用iptables与ipchains和ipfwadm不同的是,iptables可以配置有状态的防火 墙。iptables可以检测到源地址和目的地址、源端口和目的端口及流入数据包的顺序,即iptables记住了在现有连接中,哪些数据包已经被允许接 收。这使得暂时性的端口只有在需要时才会被打开,并且会拒绝所有永久性占用端口的请求,大大地加强了安全性。同时,那些被更改了报头的数据包,即使包含有 一个被允许的目的地址和端口,也会被检测到并被丢弃。此外,有状态的防火墙能够指定并记住为发送或接收信息包所建立连接的状态。防火墙可以从信息包的连接 跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。

?具体使用:

1.启动和停止iptables

下面将正式使用iptables来创建防火墙。启动和停止iptables的方法取决于所使用的Linux发行版,可以先查看所使用Linux版本的文档。

一般情况下,iptables已经包含在Linux发行版中,运行iptables –version来查看系统是否安装了iptables。在Red Hat 9.0中,安装的版本是iptables v1.2.7a。如果系统没有安装iptables,则可以从http://www.netfilter.org下载。

2.查看规则集

上面仅对iptables的用法做了一个简单介绍,使用中可以运行man iptables来查看所有命令和选项的完整介绍,或者运行iptables -help来查看一个快速帮助。要查看系统中现有的iptables规划集,可以运行以下命令:

[codesyntax? lang=”bash”]
iptables –list
[/codesyntax?]

下面是没有定义规划时iptables的样子:
[codesyntax? lang=”bash”]
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[/codesyntax ]
如上例所示,每一个数据包都要通过三个内建的链(INPUT、OUTPUT和FORWARD)中的一个。

filter是最常用的表,在filter表中最常用的三个目标是ACCEPT、DROP和REJECT。DROP会丢弃数据包,不再对其进行任何处理。REJECT会把出错信息传送至发送数据包的主机。


图1 Red Hat 9.0中安全设置的GUI工具

在Red Hat 9.0中,提供一个GUI程序来让用户对系统的安装级别进行简单的配置。该工具的启动方法是:主选单→系统设置→安全工具(如图1所示)。在此将安全级别 设为“高级”,并选择使用默认的防火墙规则。点击确定后,再用iptables -list显示,发现iptables与没有定义规则前已经有很大不同,如下所示:

[codesyntax ? lang=”bash”]
[root@workstation root]# iptables –list
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Lokkit-0-50-INPUT all — anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Lokkit-0-50-INPUT all — anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
……
[/codesyntax ?]

现实中一般不使用这个GUI工具,因为它的功能有限,也不够透明。相比较而言,SuSE 9.0中相应的配置工具要好得多,它可以在GUI下对防火墙进行更加细化的配置(比如增加了IP转发和伪装等功能的配置)。尽管这样,一般还是自己来增加和删除规则。


图2 SuSE 9.0中YaST配置工具中的防火墙设置

3.增加规则

本例中的规则将会阻止来自某一特定IP范围内的数据包,因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动:
[codesyntax lang=”bash”]
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP
[/codesyntax]
也可以很轻易地阻止所有流向攻击者IP地址的数据包,该命令稍有不同
[codesyntax lang=”bash”]
#?iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP
[/codesyntax]
注意这里的A选项,如前所述,使用它说明是给现有的链添加规则。

4.删除规则

网络上的恶意攻击者总是在变化的,因此需要不断改变IP。假设一个网上攻击者转移到新的IP地址,而其老的IP地址被分配给一些清白的用户,那么这时这些用户的数据包将无法通过你的网络。这种情况下,可以使用带-D选项的命令来删除现有的规则:
[codesyntax lang=”bash”]
#?iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP
[/codesyntax]

5.缺省的策略

创建一个具有很好灵活性、可以抵御各种意外事件的规则需要大量的时间。对于那些没有时间这样做的人,最基本的原则是“先拒绝所有的

数据包,然后再允许需要的”。下面来为每一个链设置缺省的规则:
[codesyntax lang=”bash”]
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
[/codesyntax]
这里选项-P用于设置链的策略,只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出,但不允许信息流入。很多时候需要接收外部信息,则可使用以下命令:
[codesyntax lang=”bash”]
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
[/codesyntax]

6.SYN的使用

不能关闭所有端口,也不能只指定某些端口处于打开状态,那么怎样才能设置一个有效的规则,既可以允许普通用户正常通过,又可以阻止恶意攻击者访问网络呢?刚开始使用iptables的人可以充分利用syn标识来阻止那些未经授权的访问。 iptables只检测数据包的报头,事实上,除iptables以外,很多其它有用的数据包分析都是基于报头的。比如,在进行Web冲浪时,一个请求从 你的PC发送至其它地方的Web服务器上,该服务器会响应请求并发回一个数据包,同时得到你系统上的一个临时端口。与响应请求不同的是,服务器并不关心所 传送的内容。可以利用这种特点来设置规则,让它阻止所有没有经过你系统授权的TCP连接:

[codesyntax lang=”bash”]# iptables -t filter -A INPUT -i eth0 -p tcp –syn -j DROP[/codesyntax]

这里的-i指的是网卡,-p则是指协议,–syn则表示带有syn标识设置的TCP数据包。SYN用于初始化一个TCP连接,如果自己机器上没有运行任何服务器,别人也就不会向你发送SYN数据包。

7.有状态的数据包的检测

前边的例子把每一个数据包看成是独立的,而不是相互关联的,依靠的是数据包的头信息。 iptables会检查数据包的源和目的IP地址、源和目的端口、流入数据包的顺序号、TCP先后顺序的信息及头标记(SYN、ACK、FIN、RST 等)的状态,即它会跟踪整个连接会话,从而使整个过滤过程是相互关联的。

8.共享一个Internet连接

网络地址翻译和IP伪装都可以实现多台主机共享一个Internet连接,这个局域网 可以是Linux和Windows系统组成的多系统局域网。假设现在有一台机器,配有两个网卡,其中eth0为“公共”网卡,eth1为“私有”网卡,即 eth0被分配了一个静态的、可路由的IP地址,而eth1被分配了一个私有的、不能路由的IP,该IP是属于该局域网子网的。要实现上述功能,需要向 nat和filter表中添加一些链:
[codesyntax lang=”bash”]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t filter -A FORWARD -i eth0 -o eth1 -m state –state RELATED,ESTABLISHED -j ACCEPT
# iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT[/codesyntax]
这显示了有状态的数据包检测的价值。请注意,这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许,而所有来自局域网内流向外的数据包则都允许通过。第一条规则让所有流出的信息看起来都是来自防火墙机器的,而并不会显示出防火墙后面还有一个局域网。

下面的命令为FORWARD和POSTROUTING链设置缺省的策略,在使用伪装时,有一个缺省的POSTROUTING DROP策略非常重要,否则就可能有心怀恶意的用户突破网关后伪装自己的身份。
[codesyntax lang=”bash”]# iptables -t filter -P FORWARD DROP
# iptables -t nat -P POSTROUTING DROP[/codesyntax]
下面的命令为拨号连接设置,它可以动态地分配IP地址
[codesyntax lang=”bash”]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE[/codesyntax]

9.运行服务器时的情况

有时也会把服务器放置在防火墙后面,这时iptables就需要知道从哪儿通过数据包,设置如下所示:
[codesyntax lang=”bash”]# iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.10:80
# iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT -to 192.168.0.11:25[/codesyntax]

10.规则的保存

到现在为止,所有的例子都是在命令行中进行的。在测试新的规则时,这是一种很好的方式,但一旦测试结果令人满意,就可以将它们保存为脚本。可以使用 iptables-save 命令来实现:

[codesyntax lang=”bash”]$ iptables-save > iptables-script[/codesyntax]

信息包过滤表中的所有规则都被保存在文件iptables-script中。无论何时再次引导系统,都可以使用iptables-restore命令将规则集从该脚本文件恢复到信息包过滤表。恢复命令如下所示:

[codesyntax lang=”bash”]$ iptables-restore iptables-script[/codesyntax]

如果愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化Shell脚本中。

下面的例子并不是一个完整的脚本,它只是描述了如何使用变量及提供了一些附加的规则样例。

[codesyntax lang=”bash”]#!/bin/sh
#为变量赋值
IPTABLES=/sbin/iptables
LAN_NET=”192.168.1.0/24″
IFACE= “eth0″
LO_IFACE=”lo”
LO_IP=”127.0.0.1″
#加载所需的内核
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_nat
#缺省情况下,IP转发都处于不可用状态,将其设置为可用状态:
echo 1 > /proc/sys/net/ipv4/ip_forward
#使IP的动态分配功能可用
echo 1> /proc/sys/net/ipv4/ip_dynaddr
#每次重启这个脚本时,最好清除以前所设的规则
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -F -t nat
#只允许在LAN中使用SSH连接
$IPTABLES -A INPUT -s LAN_NET -p tcp –destination-port ssh -j ACCEPT
#允许loopback!
$IPTABLES -A INPUT -i lo -p all -j ACCEPT
$IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
#丢弃那些流入的宣称是来自本地机器的数据包
#丢弃那些流出的不是出自本地机的数据包
$IPTABLES -A INPUT -i $IFACE -s $LAN_NET -j DROP
$IPTABLES -A OUTPUT -o $IFACE -s ! $LAN_NET -j DROP
#限制一些流出的信息
$IPTABLES -A OUTPUT -o eth0 -p tcp -dport 31337 -j DROP
$IPTABLES -A OUTPUT -o eth0 -p tcp -sport 31337 -j DROP
#此外,31335、27444、27665、20034 NetBus、9704、137-139(smb)端口也应被禁止[/codesyntax]