糾正國人對Linux的誤解和錯誤認識
國人對Linux的誤解和錯誤認識羅列如下:
1. Linux下的軟件太少
回答:Linux 下的軟件一點也不少。Windows還在娘肚子里的時候,Unix已經如日中天了。要知道微軟公司開發的第一個操作系統是什么嗎?是一個叫做Xenix的東西,是Unix的一個分支,后來才去搞DOS的。有人又問了,Unix不是Linux阿,要知道,Linux完全重新的實現了Unix,是一個完整的類Unix系統,幾乎所有的Unix下的軟件要移植到Linux下不費吹灰之力,甚至把二進制代碼拷貝過來就能用 (前提是硬件平臺相同)。另外,GNU旗下的自由軟件更是數不勝數,完全能滿足你的任何需要。
如果硬要說Linux有什么硬傷的話,那就是游戲軟件不足。Windows下的許多大家耳熟能詳的游戲,是不能直接在Linux下玩的,但是現在出來了一些軟件,可以使得Windows下的軟件在Linux下直接運行,如wine. 據我所知,在Linux下安裝wine后,可以跑起來許多游戲,包括魔獸爭霸等等,而且不卡,很流暢。但可惜的是,wine還不太成熟,還有部分軟件跑不起來。
但是Linux下的游戲軟件仍然很多,不過許多大家都不熟,但在歐美很流行。要知道Linux在歐美是相當流行的。
撇開游戲軟件來說,Linux下的軟件完全能取代Windows。有許多重要的軟件甚至只有Linux版的,沒有Windows版的(要知道,在好萊塢,制作電影特效,Windows就完全敗給了Linux)。下面把我們常見的軟件在Linux下的代替品羅列一下
Photoshop---> Gimp
Office------> OpenOffice 等等
……
其中只有autoCAD的替代品不行,也有可能是我不知道。
2. Linux下的軟件難用
說句實話,許多軟件是基于命令行的,沒用習慣會很難受,因為要記大量的命令和參數。但是用習慣了后,會瘋狂的愛上他。理由如下:GUI的界面雖然用起來很方便,但是等功能復雜到一定程度后,你一定會有找了N久都找不到一個功能藏到哪個菜單里的經歷。此時調用命令是很方便的。在畫圖方面,GUI的界面精確度不夠,如autoCAD就設計了命令接口。如果工作量很大,又都是些重復的操作的時候,使用GUI就不再是享受,而是折磨。此時你肯定非常的需要一個程序能自動化操作這些,也就是所謂的腳本化。而腳本化在命令行是很自然的事情。用GUI可以做大量工作,但是表現力不夠,不能表達復雜的東西:比如在word中,大家一定有這樣的經歷,想調整一些位置和間距,但word死活不按自己的意思來,光點鼠標又沒辦法傳達自己精確的意思,只有惱火而已。我說這些,并不是有意敵對GUI,而是想說明一點,GUI并不是萬能的,他的缺陷恰好命令行可以完美的彌補。
Linux也不是只有命令行,也有豐富的GUI,你可以充分的按你的意愿來配置你的桌面,玩一些花哨的特效,如3D,模仿蘋果的酷眩的應用程序欄,你可以做任何你想作的事情。
不過有一點是要承認的,Unix是為程序員設計的系統,因此普通用戶覺得難用是不可避免的。不過這一點已經通過GUI得到了很大的彌補。
3. Linux下的開發環境不友好,沒什么好的集成開發環境
說到這里,我只想說一句,閣下你一定是一個菜鳥。你肯定不知道你在VS下編譯程序時后面都發生了什么事,你調試程序時都調用了什么程序,你的模塊是怎么連接起來的,你只知道點一下按鈕。集成開發環境,也叫IDE,意思是把編輯器,編譯器,調試器,文件管理器等等集成到一起。
在這里插入一點Unix的知識:Unix的文化有這么幾點:
1. 一個程序只做一件事,并且把這件事做好。
2. 程序之間通過協作來做一個復雜的任務。
因此在這些思想的指導下,Unix骨子里是比較反對IDE這種東西的。像IDE這種軟件背后隱藏了許多Windows背后的價值觀:
1. 把功能集成到一個軟件里,大而全。
2. 如果功能需要改進,就等著軟件升級下一版。
兩者的差別顯而易見,Windows下會經常對某一個功能實現一次又一次。如VS有實現了編輯器,Word也實現了編輯器,記事本也實現了編輯器,每個軟件如果需要編輯器,如果有特殊的需要,就需要自己實現一次。而在Unix下,編輯器是分開的,幾乎所有的軟件如果設計到編輯工作,一定會開一個分進程調用專門的編輯器程序,如果你習慣了vi ,你可以總是選擇用vi進行編輯。
當然了,Linux下也有 IDE,Emacs就基本上說可以是。有人笑話說Emacs是一個偽裝成編輯器的操作系統。你可以搜一下用 Emacs的人有多少,有多少牛人在用這個東西。
編輯器用vi或者Emacs,編譯器用gcc,調試器用gdb(可以和vi和Emacs聯合起來用),編譯整個軟件用make,自己寫 makefile,或者用工具自動生成makefile。這些用習慣了,就會發現一點都不麻煩。另外,Linux下編程經常的會用到一些代碼生成器,如lex, yacc,這些都是標準化了的基本工具,這些在IDE下不太好用(Windows),在makefile 里寫則稀松平常。
在Windows下習慣了的用戶,一定會對軟件不停的更新換代記憶頗深,還以為世界本來就是這樣的。而在Unix下,因為都是分開的程序,你對編輯器不滿意,你換一個編輯器就完了,而沒有必要等升級換代。
Windows下的東西沒有核心價值,許多技術隨著時間會貶值甚至消亡。
Unix下的東西擁有核心價值,技術幾乎沒有貶值,如vi編輯器,80年左右就出來了,發展到今天,基本操作變化很少,仍然流行,你掌握的技能不會失去作用。
如perl, lex, yacc等等,這些使用了數十年的程序太多了。
而在Windows下,遠的不說MFC,現在已經沒什么人用了,VB也被改成了幾乎成了另一種語言,現在又是.NET,我去年開發項目還在用.NET 2.0,現在都已經出到.NET 4.0了,總感覺在微軟后面不停的追阿追,新東西還沒學會,可能就要淘汰。微軟又在搞一個什么M語言,我的天納,技術貶值的速度也太快了。
而我在Linux下,可以開心的學幾十年前就有的軟件,而不用擔心會過時。并不是說在Linux下就不會有軟件過時,而是你會很清楚什么東西不會過時,什么有可能過時。在Windows下就做不到。
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的強大功能,姑且拭目以待!
留言列表