仓酷云

标题: Linux编程之实在Unix很复杂仓酷云 [打印本页]

作者: 冷月葬花魂    时间: 2015-1-18 11:38
标题: Linux编程之实在Unix很复杂仓酷云
vim除非你打算真正的学好linux,或者说打算长久时间学习他,而且肯花大量时间vim,否则,最好别碰
  本文出自:http://blog.csdn.net/haoel/archive/2007/03/19/1533720.aspx
  良多编程的伴侣都在网上问我如许的几个成绩,Unix怎样学?Unix怎样这么难?怎样才干学好?而且让我给他们一些学好Unix的履历。在尽年夜多半时分,我发明问这些成绩的伴侣都有两个特性:
  1)对Unix有畏难心思,对其没有信念;
  2)喜好用拿Windows来和Unix做对照。
  这两种特性就像两个“心思表示”,表示着本人Unix很欠好学,表示着Unix很糟,不如Windows好。因而,本人也就被本人的这类临时的“表示”所催眠了。由于,从一入手下手就有畏难心情,以是也就以为Unix欠好,以为十分很费劲,最初还会招致对Unix的讨厌和恶感的心情。以是,为了改正上述伴侣们的“心思表示”。我想写下这篇文章,想告知人人,Unix真的很复杂。
  在正式叙说“复杂的Unix”之前,我想做几点申明:(以避免堕入偶然义的争辩)
  1)本文是站在开辟者的角度来讲明的,以是,假如有伴侣分歧意我的概念,请也以开辟者的角度来向我提出诘责和会商,自己十分接待。
  2)本文不免要用Windows来和Unix做对照。这其实不代表我不喜好Windows,也不代表我要叫你保持Windows。我们也晓得这类对照已没有甚么意义了,但由于浩瀚的伴侣被Windows先进为主了,以是,我必定要拿Windows来开刀,才干改变谁人“心思表示”。仅此罢了。
  OK,言回正传。先说Unix的一个最主要的特性——“高内聚,低藕合”!也就是说,Unix下的各类使用程序都和他人不干系。这就是贯串全部Unix的头脑——模块和程序的高度自力性。如许的计划和做法,会让你的体系对照的不乱,也会让你的体系出格地简单办理和保护。Unix下的使用程序们就像一支正轨军一样分列地整划一齐,只需司令(内核)还在,体系是不会由于某个戎行的丧失而没法自举的。而Windows的使用程序们就像一片树林一样,从地表上看已往,树木们分列地整划一齐,可是他们的树根在地下却互相环绕纠缠在一同,剪不休,理还乱,非常地庞大。
  “高内聚,低藕合”的给Unix酿成的了局是,其体系中基础上都是功效单一的小程序,这些小程序就像积木一样,当我们必要机关建一个自界说的修建时,年夜多半情形下,我们只必要做的只是一个“搭积木”的复杂游戏。Windows建立得丽都堂皇,惋惜,他人的“积木”你几近不成能拿到本人的修建中来。老是要你仿照或重写。
  (插一句:你是不是注重到在网高低载Windows的软件时,会有一种所谓的“绿色软件”?这就是对Windows的最年夜取笑,Windows下装一个软件,N个DLL放到Windows体系目次下,注册内外写进N个键值,另有良多你不晓得的举措。而在Unix装软件,你不必忧虑你的体系目次下会莫明其妙地多出些七零八落的文件。就是copy那末复杂,那怕是rpm主动安装,安装完后,你也可以查询到软件安装后对体系所做的改动。以是,你在Unix下分发你的软件时,你会以为比Windows下要做得复杂了很多很多。)
  再说说Unix的另外一个最主要的特性——“一切的设备都能够像文件一样地操纵”。复杂吧。一切的调备,文件、打印机、显现器、终端、收集、软盘、磁带、USB、CDROM、等等的I/O操纵,都以文件形貌符的体例举行操纵。两个Unix下最主要的体系挪用read/write就能够胜任一切设备的I/O了。Unix早就在/dev目次下为你建好了这些文件。利用起来很复杂。
  大概良多人都以为Unix的命令行太甚庞大。一个命令有着多少的参数,非常地庞大。但之以是明天Unix下的使用程序还在以字符界面为主,这刚好表现了Unix的复杂的特性。这也是Unix的另外一个特性——“命令的互相撑持性”,命令们经由过程一个管道或是重定向,能够相互接洽在一同,再加以Shell剧本的撑持,哪怕要完成一些庞大的功效(好比一个小型的文本数据库),也是复杂之极。
  假如下面的叙述仍然不克不及让你佩服Unix很复杂,那末,让我们来用一些详细地实践的例子来看一下,Unix是怎样复杂的。让我们试着做上面的如许一个假定:“假如我们在进修编程的时分一入手下手是学Unix,然后转往做Windows”,那会是怎样的一个情形?
  1)我们在Unix下创立历程,利用fork挪用。到了Windows下,我们查了MSDN,发明了一个叫CreateProcess的体系挪用能够创立历程,但我们却发明这个体系挪用有10个参数。而Unix下的fork却一个参数都没有。这类情形下,你是不是会有一种头年夜的感到?由于,在Unix下,你基本看不到会有10参数如许庞大的体系挪用API。
  2)我们在Unix下操纵文件权限很复杂,文件权限分三组(自己,同组,他人),每组都是可读,可写,可实行。两个复杂的体系挪用chmod/chown就弄定。到了Windows下,假如是NTFS,假如要以程序的体例设置文件权限,呵呵,你必要先懂得甚么是:SID,甚么是DACL,甚么是SACL,甚么是ACE,另有十几相干的体系API函数等着你。(参看我的《以程序操纵NTFS文件权限》)你大概会以为这么庞大的平安战略是让体系更平安的基本,能够自从Windows呈现的那一天今后,在平安方面的体现就没有赛过Unix。这无疑让人感应Windows做了一件费劲不奉迎的事。
  (插一句:Unix下的用户切换是相称浅易便利的。而Windows下的用户切换会招致你必要加入以后用户的前台程序。这招致了Windows下的用户几近无一破例地城市选择在超等用户的权限下事情/上彀,这完整是让本人的呆板在裸奔,以是,Windows下的病毒一旦在体系中运转就随心所欲了。而Unix下,很罕用户会以root身份操纵本机,由于切换用户十分便利。)
  3)在Unix下,用户有ID,用户组有ID,历程/线程都有ID。ID很复杂易懂,就像我们的身份证一样。到了Windows下,用户标识叫Token,历程标识叫Handle(实在也就是一个DWORD的范例),我看到网上良多成绩都在问Windows下的Handle的观点成绩。我一向在想,为何微软不取一个复杂易懂的术语?要获得那末笼统,那末让人很利诱。固然这让Windows看起很NB,但也会因而加年夜了进修庞大度。(Windows的开辟进修庞大度要比Unix庞大多了,并且有太多的看似很深邃的术语让人一头雾水)
  4)让我们再来看一下用户办理和程序一切者方面的工具。在Unix下,必要你做的是设置NIS服务器和NFS服务器(以Autofs主动mount),简便,分明。到了Windows下,与其类似的是一个叫Domain的工具(主域把持器),起首,为了到场域,你必要重启电脑(Unix下只必要设置/etc/nsswitch.conf文件来告知本机的用户登录源,无需重启),而对开辟者来讲,Unix的这个设置对程序是完整通明的。而Windows的域用户和当地用户必要一个域名来辨别。在程序中切换用户时,Unix只必要setuid/seteuid就好了,Windows对此有三个对照庞大的API:CreateProcessAsUser,ImpersonateLoggedOnUser,LogonUser,其庞大度就不必对照了。别的,在Domain体例下,你的DocumentandSetting目次下的文件,会全体放到Domain服务器上往,你在其余呆板上登录时,必要下载这些文件。最初,我倒不忧虑你和网友的MSN谈天纪录会由于你的登录而各处都是,我忧虑的是,你在这么庞大的办理情况中写出来的代码是不是能让他人宁神?:-(
  5)在Unix下,要把本人的程序到场体系的启动服务只必要在/etc/init.d中设置就好了。写下一个有启动中断功效剧本,以特别定名的体例链接到分歧启动形式目次下就好了。Windows下加一个启动服务,假如你不编写程序,估量对照坚苦。
  6)在Unix下,假如要获得体系的信息。只必要到/proc目次下往cat那堆文件。一切进/线程的形态、命令行、内存/互换区利用情形、翻开的文件形貌符,等等,体系的CPU,内存,互换区,内存文件IO,分区,信息,收集,体系运转形态,体系设备,等等,要有多具体就有多具体,并且完整是纯文本的,间接就能够看了。到了Windows下,要穷举体系以后历程的信息,就不是一样很简单的事,更别说要获得其余信息了。
  我很信服微软把操纵体系弄得那末庞大,又是注册表,又是平安战略,又是OLE,又是COM……。每次翻开regedit.exe时,我基本不敢碰HKEY_CLASSES_ROOT,由于我看着内里那些不计其数个CLSID,我有点晕菜。
  自1995年以来,10来年已往了。微软推出了多种形形色色的手艺。我还记得VisualStudio6.0中另有两个叫做FoxPro和J++的工具,FoxPro来自Foxbase,另有个几年,J++仿佛就没有几年。ActiveXControl完整是一个失利的手艺,而谁人叫做VB的编程言语,明天看来,它切实其实毁了良多很有潜力的程序员。在COM呈现的时分,不晓得明天另有几人还记得一个叫MTS的玩意?明天,不晓得另有几人记得有一个叫ODBC的工具?在这类庞大凌乱的Windows天下中,是不是让你疲于追逐?明天的.NET不晓得又有几手艺会跟着工夫所沉淀?在Windows下面,我们进修了很多的失利手艺或是说是过渡手艺。而我们的Unix自从上纪70年月以来,就没有多年夜的变更,而由于Unix应运而生的C言语直到明天仍然光芒耀眼。我信任这个30多年来久经磨练还那末复杂的Unix。
  Unix就是这么复杂,列位想在Unix放学开辟的伴侣,Windows那末庞大的操纵体系都过去了,你还会怕这么复杂的Unix么?
  (转载时请说明作者和出处。未经允许,请勿用于贸易用处)

只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而有些朋友们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础。这是相当困难的。
作者: 山那边是海    时间: 2015-1-21 11:46
应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。
作者: 仓酷云    时间: 2015-1-29 11:49
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
作者: 第二个灵魂    时间: 2015-2-6 00:36
熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。
作者: 海妖    时间: 2015-2-7 01:26
Linux?最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具,所以Linux操作系统有着广泛的应用空间。
作者: 乐观    时间: 2015-2-19 08:11
Windows?是图形界面的,Linux类似以前的?DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux?也能显示图形界面,也有开始菜单、桌面、图标等。
作者: 因胸联盟    时间: 2015-2-23 13:54
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
作者: 简单生活    时间: 2015-3-7 09:04
请问谁有Linux的学习心得的吗?简单的说说?
作者: 精灵巫婆    时间: 2015-3-11 04:16
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
作者: 爱飞    时间: 2015-3-17 16:09
我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
作者: 蒙在股里    时间: 2015-3-19 05:45
即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
作者: 小妖女    时间: 2015-3-20 17:44
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
作者: 愤怒的大鸟    时间: 2015-3-22 21:08
随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。
作者: 再现理想    时间: 2015-3-31 06:16
目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和DebianLinux是网络管理员的理想选择。
作者: 若天明    时间: 2015-4-4 03:22
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
作者: 变相怪杰    时间: 2015-4-12 21:20
然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。
作者: 兰色精灵    时间: 2015-4-16 17:53
虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。
作者: 透明    时间: 2015-4-19 12:46
其实老师让写心得我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验报告里已经说了,这里再写就多余了。
作者: 再见西城    时间: 2015-4-26 15:10
查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。
作者: 飘飘悠悠    时间: 2015-5-4 15:59
为什么要学Linux呢?每个人都有不同的看法,下面我说说自己的感想吧。?




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2