2009年4月14日星期二
安全的删除数据
Ubutu的"shred"就是一个解决方案。"shred"就是用随机数据覆盖文件或者磁盘的内容,保证这个文件的内容无法被复原。
永久删除磁盘
下面,我们将永久删除一个USB盘里面的内容,让它无法还原。有三个步骤:
1、找出这个USB盘在Ubuntu里面的位置。首先插入磁盘,看到桌面出现USB图标以后。然后开启一个终端,输入"mount",查看所有已经挂载的磁盘。下面是我的电脑上面的显示,我的U盘的名称是KINGSTON,所有看到如下:
/dev/sdb1 on /media/KINGSTON type vfta (rw,nosuid,nodev, ..)
2、现在,右键点击图标,卸载USB盘。
3、现在,进入命令行:
sudo shred -v /dev/sdb
现在,shred开始删除时间。过程可能花费比较长的时间,但是也可以看到一个进度条。
默认情况下,shred覆盖数据25次,但是你可以通过参数"-n"来指定覆盖次数。但是除非是防止CIA来查看书籍,一个"-n1"参数就应该满足我们的需要了。
覆盖完成以后,你需要重新格式化此U盘。
如果你想覆盖一个硬盘的数据,你可以在Ubuntu安装盘的Live模式来进行这个工作。用Ubuntu安装盘启动电脑,桌面出现以后,打开终端,输入:
sudo swapoff
sudo shred -v /dev/sda
现在这个磁盘上面的所有操作系统(包括Windows分区)将被永久删除。如果需要删除软盘里面的内容,把"/dev/sda"改为"/dev/fd0"。
永久删除文件
相比删除磁盘,永久删除一个文件就比较简单了,不过需要添加一个"-u"参数。譬如想删除文件picture.jpg,可以使用:
shred -v -n1 -u picutre.jpg
现在不需要使用sudo命令。
克隆Ubuntu系统到新硬盘
在开始克隆一起,有三件事情需要需要去做:
1. 查看Ubuntu是如何安排磁盘空间
2. 安装ddrescure软件以进行磁盘克隆
3. Ddrescure安装完成以后,用Gparted进行磁盘分区调整
如果在车辆行驶中无法更换轮胎一样,最好不要在磁盘正在使用的情况下进行克隆,所以你必须使用你的Ubuntu安装CD。从Ubuntu安装CD启动,选择"尝试Ubuntu"。
注意下面的操作都是在Ubuntu CD的Live模式下面进行,除了最后测试以外不能进入硬盘里面的Ubuntu。
准备克隆
在开始一起,最好做三件事情:第一,把所有有价值的私人数据备份到CD/DVD-R/RW、U盘或者其他硬盘从上面。这是为了避免由于误操作而造成的数据丢失。第二,检查磁盘错误,如果存在错误进行修复。第三,移除所有的移动存储设备,譬如U盘、读卡器、MP3播放器等,以避免调整分区时的混淆。
现在打开"终端",输入下面的命令列出硬盘的分区情况:
$ sudo fdisk –l
下面是我的测试系统的显示:
Disk /dev/sda: 81.9 GB, 81964302336 bytes
255 heads, 63 sectors/track, 9964 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1c381c37
Device Boot Start End Blocks Id System
/dev/sda1 * 1 4742 38090083+ 7 HPFS/NTFS
/dev/sda2 4743 9964 41945715 5 Extended
/dev/sda5 4743 9744 40178533+ 83 Linux
/dev/sda6 9745 9964 1767118+ 82 Linux swap/Solaris
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xb94838a4
Disk /dev/sdb doesn't contain a valid partition table
可以看到有两个硬盘显示在结果里面:我已经用红色高亮显示了。上面的结果还显示硬盘的具体技术信息。
非常明显,"/dev/sdb"是新的分区,因为他没有分区(注意"Disk /dev/sdb doesn't contain a valid partition table")。而"/dev/sda"则是我的老Ubuntu磁盘。显示可能稍有区别,根据你硬盘的情况而定。
现在找到了你的新磁盘,我的是"/dev/sdb",输入下面的命令开始cfdisk程序,在新硬盘上面建立一个磁盘分区表。
$ sudo cfdisk –z /dev/sdb
在cfdisk输入"shift+w"(即大写的"W"),出现提示,选择"yes",然后输入"q"退出。不要理会那些警告。
克隆硬盘
现在有了这些信息,我们可以安装"ddrescue"软件来克隆硬盘。ddrescure不是默认的系统工具,因此需要安装。尽管我们的Ubuntu的LiveCD模式下面,我们还是可以从网络上面的"软件源"里面安装软件。在开始一起,首先确保"Universe"软件源可以使用。点击"系统"-"管理"-"软件源",勾选"社区维护的开源软件",点击"Close"按钮,并且同意刷新源。
现在,输入下面的命令安装ddrescue:
$ sudo apt-get install gddrescue
安装完成以后,输入下面的命令:
$ sudo ddrescure –v /dev/sda /dev/sdb
其中,"-v"参数代表显示进度,"/dev/sda"是原来的硬盘,"/dev/sdb"是新硬盘。注意,如果磁盘顺序不对,可能导致原来的硬盘数据被完全清除。
克隆过程根据硬盘的大小,可能花费1个小时甚至更多的时间。完成以后,关闭计算机,把旧硬盘拆除,然后使用新硬盘启动测试一下。注意,硬盘上面的Windows XP/Vista可能因为新硬盘而出现"Windows Genuine Advantage"提示,请重新激活。Ubuntu则不用担心,一切工作良好。
这一步完成以后,我们进入下一步:扩展磁盘分区,以充分利用新硬盘的空间
扩展分区
在进行分区扩展以前,最好检查一下Ubuntu的文件系统。用Ubuntu的安装CD,进入LiveCD模式,打开终端,输入:
$sudo fsdk.ext3 –f /dev/sda5
完成以后,关闭终端。点击"系统"-"管理"-"分区管理器"。
下面的工作根据自己的情况而定。如果你希望扩大Ubuntu的分区大小,有三个步骤:
1. 在"分区列表"里面,右键点击"linux-swap"分区,选择"Swapoff"。这样就可以防止Ubuntu的LiveCD模式下面访问交换分区,让交换分区可以进行移动。
2. 首先必须扩展Ubuntu所在的分区,右键点击"Extended"项,选择"Resize/Move",在出现的对话框里面,把"Free Space Following(MIB)"输入框改为0,键入"TAB",这样这个分区就会扩展到整个分区空间,点击"Resize/Move"按钮。注意,现在不用点击"Apply"按钮,我们在最后会一次完成。
3. 同上,把swap分区的空间也扩展到整个分区。
4. 回到Gparted出口,右键点击"Ext3"项,选择"Resize/Move",同第一步调整。
5. 点击Gparted工具栏上面的"Apply"按钮,等待分区移动和改变大小完成。
6. Gparted完成以后,关闭这个程序。打开终端,输入下面的命令重新检查硬盘是否存在错误:
$sudo fsck.ext3 –f /dev/sda5。如果出现错误,提示是否修复,通常情况下选择"yes"。
检查完成以后,就可以重新启动计算机。现在就可以看到Ubuntu分区变大了。
如果你希望丢弃旧硬盘或者把它送给别人,必须保证数据被完全销毁了,请查看"安全的删除数据".但是在确保你的新系统能100%工作以前,请不要这样做。
轻松共享文件之samba
下面介绍一种更安全、适应性更好、安全性更强的方法,让你可以共享你的Ubuntu计算机里面的内容,无论"共享访问人"的操作系统是Windows还是Mac OS X。
下面的步骤,将产生一个空的"匿名用户",在Ubuntu 8.04.1里面运行成功。
1、打开"新立得",安装"samba"和"libpam-smbpass"软件包。这两个软件允许在后台,功能是共享文件和用户验证。
2、建立一个"guest"账户,利用这个账户作为共享文件和其他人访问共享的代理。打开"系统"-》"管理"-》用户和组,选择"解锁",点击"添加用户"。在用户名里面输入"guest",在密码里面输入一个简单的密码,在"用户权限"里面,勾选"允许通过本地网络共享文件"。
3、注销,用guest账户登录。建立需要共享的文件,然后在文件夹上面右键选择"共享选项",勾选"共享此目录",输入一个共享名,并且勾选"允许他人在此目录里写入数据",但不要勾选"允许匿名登录"。点击"创建共享"就可以了。

4、在你的桌面上面建立一个"快捷方式",在命令里面输入"nautilus
smb://localhost",点击"确定"。现在双击这个快捷方式,会出现一个登录对话框,在用户名里面输入guest,在密码里面输入"刚才建立的guest账户的密码",勾选"记住登录",现在就可以访问你的共享文件夹了。
一个小窍门,在Natilus里面,可以用Ctrl+d建立一个书签,下一次访问直接从书签里面找到了。
5、现在其他人,就可以从网络里面看到你的共享文件夹了。告诉他们访问的用户名是guest,密码是-刚才设置的guest账户密码,他们就可以成功访问了。
现在除非需要增加共享文件夹,一般就不需要用guest直接登录了。
轻松共享文件--安装个人FTP服务器以共享文件
1、在"新立得"里面安装"vsftpd"。
2、在"vsftpd"安装过程中,它会在系统建立一个空帐号-"ftp"。但是在文件共享一起,首先在这个空帐号的HOME目录里面建立一个文件夹,命令如下:
$sudo mkdir /home/ftp/shared\ files
$sudo chmod a+rwx /home/ftp/shared\ files
3、用gedit打开vsftpd的配置文件-"/etc/vsftpd.conf",找到下列行,并且移除行首的"#"。
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
4、保存文件,退出Gedit。输入下面命令让设置生效:
$ sudo /etc/init.d/vsftpd restart
然后,你就可以让任何一台电脑访问你的FTP了。
读完这篇文章,保证你退休无忧
我实在不知道怎么搭这个茬儿,因为了解所有的投资方法是不可能的。没有人可以每次都做正确的决定--- 就是保持每年都盈利也不可能。Bill Miller,莱格·梅森价值信托基金(Legg Mason Value Trust)的充满传奇色彩的投资经理,他业绩曾经连续15年超过 S&P(标准普尔指数),但是去年他远远落后于这个指标。沃伦.巴菲特(Warren Buffett),也许是我们这个时代最精明的投资家,如果不是在40多美元的低位而是在80多美元的高位卖出可口可乐的股票,他就会有几十亿美金入袋平安。巨牛的对冲基金(hedge-fund)经理们,那些通常每年都有数亿美金进账的家伙,突然失掉水准、丢掉几十亿美金捎带着自己工作的事儿,虽然不经常发生,却也时有耳闻。
我相信你一定了解看着你卖掉的股票在接下来的几年翻了三番儿,或者你15块钱买的股票现在要几分钱卖掉的那种感觉。我也有这样的经历,而且还不少。这就是为什么我总结了一些简单的规则,并根据这些规则进行投资。我把它们当作投资的「禅」,因为在你深入了解之后,它们最终会变成本能。你将不必费事思考,你只会遵守它们。
规则 1: 不要试图左右市场,而是要跟随市场(Instead of trying to time the market, try to tie it.)
10%,你的收益将相当可观。
如果你想照抄巴菲特大师的创造力,就去买他的公司 Berkshire Hathaway的股份。那不是低价股票 --- 它的一股 B 股股票价值 3500 美金 ---但是在过去的 25 年中它的平均回报率达到了
25%。而且它的广泛持股使它像某些共同基金(mutual funds)一样富于变化。强烈提醒你要留意 Berkshire Hathaway公司在经济低迷的年代的收益。我的沃伦老哥不会永远呆在那儿等你。
所以如果你想要租房子或者在考虑买房子,或者你曾经研究要投资一个可以出租的物业,那么赚钱的买卖就摆在你面前。
对于不想买巴菲特公司股票的人来说:你也许更加致力于在那些成长性更高的城市,比如印第安那州的加利市(Gary,Ind.)、华盛顿州的史波肯市(Spokane,Wash.)、德克萨斯州的科珀斯克里斯蒂市(Corpus Christi,Texas),寻找更便宜的买卖。所有的不动产市场都是地域性的,所以一定要针对你的地区做调查。
当你的股票大幅跳水,你会本能地想要割肉,把你的钱转移到更安全的投资领域,比如债券或者货币市场基金(money-market funds)。这是人的本性,也是一个巨大的错误。当市场跳水了几天几个月几年,那是赚大钱的机会。
几年前的一个年度报告上,巴菲特这样解释:不管一个股票被高估或者低估,它的所有权是同一家公司。所以当股票市场廉价出售一个公司,这是买入的最好时机。反之亦然:当市场达到新高,你想奋不顾身的进入。千万别。这不一定是抛售的时候,不过假如你是用自己的纳税帐户投资,你应该少买进。
重要提示:如果你所有的投资都是用免税帐户或者个人退休帐户(IRA,Individual Retirement Account),保持或者增加你的投资,别管市场走向如何。
投资者最好的朋友是时间。你的荷包需要慢慢地、聪明地增长。这当然就意味着你应该尽早存钱。对你们这些股票玩家来说,记住历史趋势表明,整个市场在选举年表现得好,尤其是下半年。
不过你还有一个好朋友,一个你不需要总是想着他的朋友:多样化。你一定不想把整个篮子的鸡蛋都打碎了。要保证你的投资包括整个投资领域。所以如果「能源股」崩溃了,你也许可以在「财经服务股」或者「卫生健康股」上平衡一下。这是另一个投资的标准普尔500 指数基金的理由:它实际上包含了各个方面的股票。
同样,你要在全球范围内分散投资。主要是因为美国的巨大贸易赤字,美元可能要继续贬值很长时间。这意味着你可以用本国货币计数在外国的股票或者债券市场赚钱,例如,你的欧元或日元在你卖出的时候可以买更多的美元。特别注意快速发展中个国家,比如中国,印度,俄罗斯
---从长远看他们会干得不错,虽然正如去年二月份我们看到的那样,发展的路是有起伏的。在这些正在形成的市场分散投资你的大量美元是个好主意。
幸运的是,差不多什么东西都有指数基金,对于普通投资者来说,在电脑上就能舒舒服服地投资新加坡,巴西,以及其他国家,就像是上天的恩赐。表达你的谢意,然后,买,买,买。
规则 4: 投资你自己 (Invest in yourself)
你可以在网上和你的银行以及你的经纪人签署自动储蓄协议。每个月从你的支票帐户中拿出一定数额的钱买指数基金、低费的变额年金(variable annuity)或者多样化的共同基金,再拿出一部分钱买外国的指数基金。就像传说中军队的牛叉武器那样,"一劳永逸"(fire and forget)。
如果你认为自己能始终领先市场,祝你好运。我的木头脑袋花了几十年 ---是的,几十年 --- 才明白这些道理。如果你只花几年就弄明白了,那么你的前途不可限量。
2009年4月13日星期一
改变无数人人生的32句经典名言
1) 大多数人想要改造这个世界,但却罕有人想改造自己。
2) 积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。
3) 莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法)
4) 伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。
5) 世上没有绝望的处境,只有对处境绝望的人。
6) 当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。
7) 世界上那些最容易的事情中,拖延时间最不费力。
8) 人之所以能,是相信能。
9) 一个有信念者所开发出的力量,大于99个只有兴趣者。
10) 每一发奋努力的背后,必有加倍的赏赐。
11) 人生伟业的建立,不在能知,乃在能行。
12) 任何的限制,都是从自己的内心开始的。
13) 含泪播种的人一定能含笑收获。
14) 欲望以提升热忱,毅力以磨平高山。
15) 一个能从别人的观念来看事情,能了解别人心灵活动的人永远不必为自己的前途担心。
16) 一个人最大的破产是绝望,最大的资产是希望。
17) 不要等待机会,而要创造机会。
18) 如果寒暄只是打个招呼就了事的话,那与猴子的呼叫声有什么不同呢?事实上,正确的寒暄必须在短短一句话中明显地表露出你对他的关怀。
19) 昨晚多几分钟的准备,今天少几小时的麻烦。
20) 做对的事情比把事情做对重要。
21) 人格的完善是本,财富的确立是末。
22) 没有一种不通过蔑视、忍受和奋斗就可以征服的命运。
23) 行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。
24) 没有天生的信心,只有不断培养的信心。
25) 只有一条路不能选择――那就是放弃的路;只有一条路不能拒绝――那就是成长的路。
26) 人性最可怜的就是:我们总是梦想着天边的一座奇妙的玫瑰园,而不去欣赏今天就开在我们窗口的玫瑰。
27) 征服畏惧、建立自信的最快最确实的方法,就是去做你害怕的事,直到你获得成功的经验。
28) 失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。
29) 让我们将事前的忧虑,换为事前的思考和计划吧!
30) 再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。
31) 任何业绩的质变都来自于量变的积累。
32) 成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。
SVN使用笔记
目录以及文件是Subversion中可以记录版本的对象。其主要工作原理如下图:
_ _ _ _ _ _ _ _ _ _
/ \
| |
| 项目仓库 |
| |
\_ _ _ _ _ _ _ _ _ _/
/ |
/ check in |
check out / |
_ _ _ _ _ _ /_ _ _|_ _ _ _ _ _ _
/ \ / \
| | | |
| 工作拷贝 | | 工作拷贝 |
| | | |
\_ _ _ _ _ _ _ _/ \_ _ _ _ _ _ _ _/
分支,主干,合并,标签
创建一个分支或者标签时,采用一种"延迟拷贝"的技术,即只创建指向同一版本的链接,当其中某个文件有所改动时,再去复制那个文件或者目录。
一般地来讲,分支是用来做准备发布的,而不是并行开发。
1、创建一个项目仓库
svnadmin create /home/huzza/test_svn
2、import初始文件到项目仓库中
svn import -m source_file_path URL
本例 URL:file:///home/huzza/test_svn/sesame/trunk
file:// ------> 告诉svn是本地目录
3、checkout文件到本地目录
svn checkout(co) file:///home/huzza/test_svn/sesame/trunk sesame
4、检查文件状态或者日至
svn status [文件/目录]
svn log [文件/目录]
svn log -r6:8 [文件/目录] 查看版本6到版本8之间的日志
5、文件/目录比较(工作拷贝与项目创库中的比较)
svn diff [文件/目录] 或者 svn diff --rHEAD [文件/目录]
--rHEAD:表示最新版本
6、更新本地工作拷贝,提交工作修改
svn update(up) [文件/目录] svn checkin(in) -m"comments" [文件/目录]
update时的一些文件标志:
U ------ 表示文件被更新
G ------ 表示项目创库中的文件和本地工作拷贝的文件合并到了一起
C ------ 表示合并时,有冲突产生
A ------ 新加入了一个文件
D ------ 删除了一个文件
? ------ 表示该文件或者目录没有被svn管理
M ------ 该文件被修改
7、冲突。当svn
update时,如果存在某个文件存在冲突,打开冲突的文件,<<<<<<<< 和 >>>>>>>>
表明了冲突发生的地方。
当冲突发生时,如果想使用项目仓库中的版本,而放弃本地拷贝的修改,可以使用以下命令:
a、svn revert [冲突的文件/目录]
b、svn update [冲突的文件/目录]
(svn resolved [文件/目录] && svn updata
[文件/目录],似乎也是ok的,需要confirm一下)
如果想保留本地工作拷贝的修改,而放弃项目仓库中版本的修改,可以如下:
a、cp 文件/目录.mine 文件/目录
b、svn resolved 文件/目录
c、svn ci -m "use my version please" 文件/目录
(在上面的三个步骤中,似乎不用做步骤a也可以达到目的)
8、使svn项目仓库联网
启动svn服务器:svnserve --daemon --root /home/huzza/test_svn
列服务器资源:svn list svn://192.168.0.4/sesame/trunk
出来后面的URL不同,其他操作的各部分均相同
svn+ssh 访问:svn list svn+ssh://192.168.0.4/sesame/trunk
(需要在服务器上支持ssh访问)
9、得到特定版本的工作拷贝
svn checkout -rVersionNum list svn://192.168.0.4/sesame/trunk butterfly
svn info butterfly (查看当前版本拷贝的状态)
10、拷贝/移动文件
svn copy filename newfile
svn move oldfile newfile
svn ci -m "add or move some files" [修改文件所在的目录]
(这里确保服务器上也作跟本地拷贝相同的动作)
11、版本的符号
HEAD --------- 项目仓库中的最新版本
BASE --------- 工作拷贝的基准版本(也就是checkout出来时的版本)
COMMITTED ---- 最后一次checkin的版本
PREV --------- COMMITTED之前的一个版本
12、查找版本之间的差异
svn diff -r2:4 [文件/目录]
svn diff > diffname.patch (生成patch文件)
使用patch文件: patch -p0 -i diffname.patch
13、删除后一个版本对前一个版本的修改
svn merge -r27:26 [文件/目录] && svn ci -m "undo the work of version 27"
撤销版本27所做的修改
14、创建分支/标签
svn mkdir -m "Create branches" svn://192.168.0.4/sesame/branches
svn copy -m "Create release branches for version 1.0"
svn://192.168.0.4/sesame/trunk \
svn://192.168.0.4/sesame/branches/release-1.0