2008年3月30日星期日

[转载]sshfs把远程主机的文件系统映射到本地的目录中

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接( http://www.fwolf.com/blog/post/329 )的形式标明文章原始出处和作者信息及本声明。

windows之外的世界比想像中要大得多呢,几乎天天都在用ssh,却到今天才知道有sshfs这个好东西,前几天还在为ZendStudio可以远程编辑文件欣喜,惭愧啊,终于有比vi scp://hostname//path/to/file更方便的方式了。

sshfs,就是可以把ssh连接到的主机资源,映射到本机的文件系统当中,然后用户可以像操作本地文件一样操作,而实际的文件改动将通过ssh传输到远程主机当中。类似于mount了一个windows共享目录,或者另外一台linux主机的samba共享,或者是nfs共享,只是“共享协议”变成了ssh通道罢了。

ubuntu源中已经包含了sshfs了,以及所需的fuse包,直接apt安装就可以了,一共是三个包:“fuse-utils libfuse2 sshfs”,不大,加起来才179k。安装的时候会自动创建用户组fuse,要使用sshfs的用户需要先加到这个用户组里才行(记得完成后还要重新登录),不然会没有权限执行fusermount:

fuse: failed to exec fusermount: Permission denied

使用就简单的多了,一般来说,连接远程主机到本地用户:

sshfs user@hostname:path mount_point

需要输密码就输密码,当然配置成自动登录的ssh更方便了。用完之后要umount,可以:

fusemount -u mount_point

都是在普通用户非sudo的环境下使用,非常方便的。如果想每次开机都自动挂载,可以在/etc/fstab中加入:

sshfs#user@hostname:path mount_point fuse defaults,auto,allow_other 0 0

这就要求必须先把ssh自动登录配置好了,让root用户能够使用user身份登录远程主机,另外allow_other这个参数很重要,没有这个参数的话,挂载过来的目录只有root能够访问。

关于自动挂载,参考文章中andot用脚本实现的方式也不错,建议大家看看去。

2008年3月21日星期五

[转]oracle数据库同步

oracle数据库同步


在两台oracle数据库之间测试成功,下面就总结一下吧:

需求:


现有两台oracle数据库服务器A和B(A,B可以是在同一内网,也可以是在互联网上的两台独立机器)。A和B里有都有testable表,结构一样,现需要当A库中的testable表变化时,B库里的testable也相应变化数据

我的解决方案:


在A中建立到B库的链接,然后对要同步的表做一个同义synonym,最后建一个触发器,就可以完成了。当然,你所用的当前的用户要有相应的权限去执行这些操作。

当从A向B同步数据时,应该在A上做所有的设置:
1,为保证连接到另一台远程服务器的数据库,你需要建立一个DB Link,但是,这里要注意语法格式,using +"connect string",这个connect string应该是存在于oracle服务器的TNSNAMES.ORA文件里,监听程序将从这里获取远方服务器
的ip地址等信息,我定义了一个'251'的connect string如下:

251 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.251)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mychoice)
)
)


把它存到你的TNSNAMES.ORA文件里。

2,然后就可以定义DB Link了:

create public database link TEST2.US.ORACLE.COM
connect to 用户名
identified by "密码"
using '251';



3,建立synonym(同义)
create or replace synonym TEST01
for MYCHOICE.TESTABLE@TEST2.US.ORACLE.COM;



建立完了以后,你可以通过:
select * from test01
上面的语句相当于在B服务器上执行:
select * from testable

4,封建触发器:
当A中的testable表变化时(这里只考虑插入操作),就会触发向远程的B库的testable也插入相应的数据:

create or replace trigger rtest
after insert on testable
for each row
begin


insert into test01 (something) values (:new.something);
end;



ok,现在我们可以测试一下,你在A库中往testable表中插入一条记录,看看B库中是不是也相应的增加了

http://blog.chinaunix.net/u/11317/showart_189040.html

2008年3月20日星期四

应用rsync轻松备份数据

正如业界专家所分析和预测的一样,Linux正在和微软、UNIX争夺服务器市场份额,尽管UNIX系统一直在做服务器方面有绝对的优势。如今,已成三足鼎立之势,Linux逐渐发展成为第三大服务器操作系统,也成为微软在低端服务器市场的主要竞争者。其中的原因之一就是Linux的安全性能,另外一个就是费用问题。如果需要执行自动备份操作或部署安全策略,无论是对一个单一的工作站还是对一个网络内所有的服务器和工作站,rsync工具绝对是一个很好的选择。它能够及时报告所有意外事件的发生,尤其是把它和其他合适的工具配合使用的时候,可以极大地提高安全防护性能。

文件拷备功能
rsync被设计成一个简单的文件拷备工具,但不同于其他拷备工具,如cp和rcp,rsync在功能上比他们更胜一筹。因为它具备校验比较功能,可以决定哪个文件需要被拷备,哪个文件已经存在目标机上而不需要拷备。例如,如果需要将位于foo计算机上一个包含30个文件的目录拷备到bar机上时,如果选用cp,则拷备的仅仅只是文件,并且覆盖bar机器上具有相同文件名的文件,可能某些文件已经从 foo拷备到bar上了。但是,如果选用的是rsync,它将快速地比较foo和bar上相同的目录,查看两者之间的差别所在,最后将那些foo上存在而bar上不存在的文件拷备到bar上,不用拷备重复文件。这将极大地节省在文件拷备上所花费的总时间,尤其是需要将某台机器上的数据备份到另外一台机器上的时候。rsync工具使用起来非常简单、方便,若使用得当的话还可以增强操作的安全性。此外,它还可以被用作一款安全检测工具,不需要任何其他软件的支持,就可以完成文件系统的完整性审计。

数据备份功能
数据安全性的实施一般需要备份关键数据。可以通过效仿小生意的经营方法来解决,比如:到办公室的每一台工作站上,将一些重要的文件刻录到一张光盘上,这比在网络上运行一些自动备份软件要快一些。最有效的方式当然是使用目前推出的低成本并带有高速硬盘的备份服务器,通过网络定期地将需要备份的文件复制到备份服务器的硬盘上。对于那些办公任务比较大的单位来说,可以调用出一台老式的计算机来扮演这个备份服务器的角色,它的工作极为简单,在没有人使用网络的时间段,如半夜或周末,拷备重要的数据文件,完成备份。rsync在计算机之间通过网络拷备文件是一个非常简单的过程。如果需要拷备的文件在一个Linux系统上,则还有一个极为简单的方法,只需要在目标Linux系统上键入如下命令即可:

rsync localdir host:remotedir

上述命令行是使用rsync默认的操作,在本地系统上(localdir)指定希望被拷备的目录,同时指定远程系统的主机名(host)和用来存放被拷备文件的目录(remotedir)。例如,如果想将位于foo系统上/home/baz目录拷备到主机bar的/home/backup/qux目录中,在主机 foo上,则需要键入的命令为:

rsync /home/baz bar:/home/backup/qux

数据备份完成后该操作会自行终止。

但如果仅有上述操作的话,在安全性方面还是没有保障。同时,上述操作也不能拷备链接文件,不能保存权限、用户与群之间的所有关系以及新建的时间。对于此,最好是在上述命令的基础上再添加一个“-a”选项(对于文件)和“-e”选项,指定使用远程的shell程序,以保障安全。此时,远端的 shell将使用一个加密协议,比如ssh,以便远程的shell可以使用-e ssh格式。这样,上述rsync命令就有了ssh加密协议的保护,具体形式如下:

rsync -a -e ssh localdir host:remotedir

如果想了解整个文件拷备过程中所发生的一切,可以使用-v和-progress选项。-v选项表示打印出详细的操作过程。rsync默认的操作是单纯地拷备文件,不打印任何东西,尽量不打扰用户,只是简单而快速地完成任务。若只使用一次,-v选项将会报告所有被拷备的文件,并在最后给出总量。若使用两次-v选项,即在命令中使用-vv的话,rsync将不仅报告所有被拷备的文件,还会报告那些勿需拷备的文件,并在最后给出更详细的信息。-progress选项的任务则主要是显示当前的拷备进度,包括当前文件的大小,已完成的百分比,当前的传输速度,剩余时间估计等等。如果要写一条使用复选项模式和ssh隧道协议的命令,同时还要求有进度指示器的话,则可采用如下形式:

rsync -avv -e ssh -progress localdir host:remotedir

如果在拷备文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷备的部分文件。如果想在下次拷备时续传文件,不需要重新拷备所有文件的话,可以使用-partial选项阻止rsync在传输中断时删除已拷备的部分。如果希望同时使用-partial和-progress选项的功能,则可以使用-P选项,这是rsync提供的一个更便捷的选项,可以代替上述两者。因此,如果想使用复选项模式的文件拷备,并关闭删除选项,同时要求有进度指示器和ssh隧道协议的保护,则可以采用如下命令:

rsync -avvP -e ssh localdir host:remotedir

如果希望系统按照预定的调度计划自行处理,可以简单地在后台守护进程任务中添加rsync命令。如:要添加rsync命令到/etc/crontab文件中,方法如下所示:

30 4 * * * user rsync -aP -e ssh localdir host:remotedir

完整性检测
通常,文件系统的完整性检查是通过操作特定的安全工具来完成的,比如tripwire。这类工具的操作十分彻底,功能非常强大,并提供一系列灵活的策略来帮助系统管理员完成文件系统的完整性检测。但是,对系统管理员来说,可能由于诸多原因而倾向于采用另外的方法来完成完整性检测。rsync工具就具备这个功能。它所具有的校验功能能够将原始文件和拷备后的文件进行对比,可以判断并检查出哪些文件被改变,还可以判断这些文件的更改操作是否合法,是否具备足够的授权。对文件系统的完整性检测来说,rsync所做的第一件事情是为文件系统创建一份快照。这必须在检查文件系统的完整性之前完成,因为必须有一份完好无缺的拷备用于检查文件系统是否正确。

完成上述操作之后,在命令行简单地运行一条rsync复制命令,如拷备一个rsync的二进制文件版本(可能位于/usr/bin/rsync)到一个可写的媒介上,如光盘上。当使用rsync时,还需要指定rsync二进制文件位于哪个媒介上,而不是指向计算机上的某个版本。如CD安装/mnt/cdrom ,运行如下命令,可从一台计算机上复制文件到另外一台主机上:

rsync -av --rsync-path=/mnt/cdrom/rsync -e ssh host:/ localdir

上述命令表示,从远端主机上复制整个文件系统(期望被检查的文件系统)到运行rsync所在机器的一个本地文件目录中,一旦拥有了文件系统的快照,就可以使用如下的命令来检查文件系统的完整性了:

rsync -avn --rsync-path=/mnt/cdrom/rsync -e ssh host:/ localdir

前面提到的-n选项是用来确保没有任何文件被拷备。而在rsync工具中则有所不同,它仅报告拷备之前和拷备之后的差别所在。如果不希望两者间出现差别,就应该对它们进行仔细检查,确保没有发生未授权的更改。 bin/ls、/bin/bash和/bin/sshd等文件若发生改变的话是需要特别留意一下的,如果它们本来是不应该被更改但却被改动了,这可能表示系统已遭受了某种安全威胁。但是,如果系统自动更新程序正在运行,这些文件被更新进程所改变就是很正常的了。因此,最好让更新程序做好日志记录,将那些更新进程替换过的包或文件都做好标记,再和rsync的完整性检测报告中列出来的所有被更改过的文件进行对照,这样就可以检测出哪些文件已经被非法更改了。

系统备份与完整性检查相结合
可以将自动备份和完整性检查合并起来。例如,用自动备份工具备份整个系统,在备份之前创建一个后台守护进程,用于完成完整性检查,并将输出结果重定向到一个日志文件中。在这种情况下,如果需要备份整个文件系统时,一般只需要检测出那些未曾被更改的部分文件。例如,假设需要将系统文件备份到root目录,但完整性检测的审计过程却遗漏了一些目录,而这些目录中的内容发生了常规变化,如 /home和/var等内容都发生了变化。在这种情况下,如果文件系统的审计程序总是过于“热心”地检查每一个文件的话,结果往往会导致系统备份的效率大大降低。

如果想象力丰富,思维活跃的话,可以尝试去写一个脚本程序,在后台守护进程上运行。在第一次进行完整性检查的过程中,只有当完整性检测没有发现任何错误时,才允许系统接着运行备份程序。然后,再亲自对完整性检查产生的日志文件进行仔细地检查,如果仍然没有发现任何错误,就可以选择一个比较空闲的时间段来运行系统备份程序。一般来说,最好是在完成完整性检测过程之后,且自动审计程序没有发现任何被改动的文件时,再来运行系统备份程序。

rsync实现文件的自动备份是相当简单的,这也正是设计rsync工具的动机和目标。不过,除此之外,rsync也有很多其他的功能。比如,可以用rsync完成文件系统的完整性检测,也是Linux提供的工具的灵活性的一个例证。Linux提供了很多小工具,每个工具都可以非常出色的完成某一类操作。这也正是与那些大程序的区别所在,一个大程序总是试图解决所有的问题,但最后的结果往往并不理想。此外,这些小工具使用起来十分灵活,用户可以按照自己的需要将它们组合起来完成一些比较大的复杂的任务。比如rsync借助SSH就可以用来加密和压缩经由网络所传输的数据,只需要键入简单的命令行就可以大大地提高数据安全性和系统安全性。总之,rsync工具简单易用,值得推荐。在那些富有经验的系统管理员眼中,rsync是一套多功能的、高效的安全防护工具。

源文地址: http://www.cweek.com.cn/cweek/network/technology/story/0,3800084341,39450126,00.htm

2008年3月12日星期三

linux 的终端设备类型[转载]

终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种 终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以 下几 种:

1. 串行端口终端(/dev/ttySn)

串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为 那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或 /dev/ttyS1)等,设备号分别是(4,0)、(4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1 会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。

2.伪终端(/dev/pty/)

伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(或着在设备文件系统中分别是/dev/pty/m3和 /dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把ttyp3看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑 终端设备对的另一个上面(ttyp3)。而ttyp3则是另一个程序用于读写操作的逻辑设备。这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中 一个使用ttyp3的程序则认为自己正在与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于ttyp3(s3),任何设计成使用一个串行端 口设备的程序都可以使用该逻辑设备。但对于使用ptyp3的程序,则需要专门设计来使用ptyp3 (m3)逻辑设备。例如,如果某人在网上使用telnet程序连接到你的计算机上,则telnet程序就可能会开始连接到设备ptyp2(m2)上(一个 伪终端端口上)。此时一个getty程序就应该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2 传递给getty程序,而getty程序就会通过s2、m2和telnet程序往网络上返回”login:”字符串信息。这样,登录程序与telnet程 序就通过“伪终端” 进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。 在使用设备文件系统(device filesystem)之前,为了得到大量的伪终端设备特殊文件,使用了比较复杂的文件名命名方式。因为只存在16个ttyp(ttyp0—ttypf) 的设备文件,为了得到更多的逻辑设备对,就使用了象q、r、s等字符来代替p。例如,ttys8和ptys8就是一个伪终端设备对。不过这种命名方式目前 仍然在RedHat等Linux系统中使用着。 但Linux系统上的Unix98并不使用上述方法,而使用了”pty master”方式,例如/dev/ptm3。它的对应端则会被自动地创建成/dev/pts/3。这样就可以在需要时提供一个pty伪终端。目录 /dev/pts是一个类型为devpts的文件系统,并且可以在被加载文件系统列表中看到。虽然“文件”/dev/pts/3看上去是设备文件系统中的 一项,但其实它完全是一种不同的文件系统。

3.控制终端(/dev/tty)

如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它 具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。

4.控制台终端(/dev/ttyn, /dev/console)

在Linux系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设 备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换 到tty2、tty3等上面去。tty1 –tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信 息都会发送到控制台终端上。你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有系统或超级用户root可以向 /dev/tty0进行写操作,

5 虚拟终端(/dev/pts/n)

在Xwindows模式下的伪终端,或者来自远程登录的终端,如:telnet, ssh。¹

6.其它类型

Linux系统中还针对很多不同的字符设备存在有很多其它种类的终端设备特殊文件。例如针对ISDN设备的/dev/ttyIn终端设备等。

原文链接:http://topic.csdn.net/u/2...
原文作者:cceczjxy

1. 斜体字部分属于本人添加内容,原文未提及。