4。说一下windows下文化与Unix/Linux下文化的差别 在一个操作系统上呆久了,一定会造就相应的文化。windows下的文化,也就是大家所谓的常识,有这么些:软件比较庞大,软件越来越胖;每隔数月要重装系统;软件频繁的升级换代;杀毒;混乱的注册表;新装好的系统啥都干不了,满天下的去找破解版软件,找到后又满天下的搜注册码,装好软件有可能还中毒…… 在Unix/Linux下,这些文化几乎都不存在。新装好的操作系统,除非是自己要搞坏,一般是不可能坏的。前提是不用root登录桌面,养成用sudo的习惯。几乎没有病毒,反正我用了一年了,从来没遇到病毒。软件多而全,一般体积都很小,不是那种一个大型软件包干一切,而是许多专门性的小程序在一起协作搞定,需要的时候,很容易自己写一个小软件出来和原来的软件集协作,极端的时候只要10行以内的C代码就可以搞定。配置文件放到/etc下,整洁有序;有些读者可能想知道详细一点的内容,在这里我略微说一些: Linux下每一个设备(除了网卡)都是一个文件,基本都放在/dev下,你可以用基本的拷贝,等命令来操作这些文件。因此,Linux不需要虚拟光驱。一个iso文件,只需要将其放到回环设备上,然后挂载到主文件系统就行: # losetup xx.iso /dev/loop0 # mount /dev/loop0 /mnt/cdrom 或者简便一点,只用mount命令: # mount -o loop -t iso9660 xx.iso /mnt/cdrom 这些命令都是每个Linux发行版一定都有的基础命令。 备份硬盘的MBR: 这个在windows下没有专门软件,还做不到,而在Linux: # dd if=/dev/sda of=/home/MBR.backup bs=512 count=1 搞定。dd命令是Linux基础命令。 建立一个内存磁盘,就是在内存中虚拟一个硬盘分区出来,在windows下要专门软件,而在linux下用基础性的东西轻松搞定: 如果要小分区,就直接用/dev/ram0-15 系统自带了16个内存设备文件,只要把这些设备文件格式化,然后挂载到文件系统就行: $ sudo mkfs.ext2 /dev/ram0 $ sudo mount -t ext2 /dev/ram0 /mnt/my_directory sudo 意思是用超级管理员的权限来执行这个命令。这样挂载上来的假分区,一般只有64MB大。如果要很大的分区,可以用tmpfs文件系统: $ sudo mount -t tmpfs 任意名 /mnt/my_directory 搞定。默认情况下这个分区会占用一半的内存。 现在你看到了吧!什么叫做把设备当作文件,就是可以用操作一般文件的命令来操作设备文件!不需要额外的软件。不知道这个算不算做方便? 统计某篇英语文章的词频:在windows下要专门编程或者专门的软件吧?在linux下且看: tr 'A-Z' 'a-z' | tr -cs 'a-z' '\012' | grep -v '^\s*$' | sort | uniq -c | sort -n 结果就出来了。解释下:|表示管道,意思把前一个程序的输出作为下一个程序的输入,这样形成一系列的过滤器。第一个tr命令,把所有的大写字母转换为小写;第二个tr命令把不是a-z的字母转换为换行符,接下来的grep过滤掉空行,然后sort排序将重复的单词排到一起,uniq 将重复单词的数目放到单词前面,最后又用sort对单词的数目排序。怎么样?漂亮吧。这里所有用到的命令,都是Linux下的基础命令。 再者,如果你写了个排序的程序,想测试性能,可以如此: seq 1 10000 | shuf | time sort seq命令产生一个数字序列,这里是1到10000,结果通过管道传递给shuf命令,shuf是用来将输入行的顺序随机打乱的,之后送给sort。time放到sort前面是测试sort执行的时间。 在Linux下,这样组合各种小程序来完成一个任务是再稀松平常的事情了,现在你能理解为什么Linux许多的程序不会过时的原因了吧?编程会让你感到十分有趣,因为写一个程序只要做一件事,其他的和其他程序协作就可以了。许多程序不用写的很多,就是产生些文本,过滤些文本而已,简单,搞定一切。 这些,恐怕是在windows下想都不敢想的吧。听说现在windows 7出了个power shell, 意思是要超越Unix/Linux shell的强大功能,姑且拭目以待! |