『壹』 linux 和 WINDOWS 内核的区别
二者最大的区别在于WINDOWS是个商业软件,而LINUX是开源软件。商业软件的好处是可以集中一大批人力物力做一件事情。容易统一,兼容(因为客户需求)。而开源的好处在于灵活,开放。
在下面的比较中,我一般先介绍下WINDOWS的,然后再介绍LINUX的。
1、观念:商业 VS 开源
WINDOWS是个商业软件,它的源码是保密的. 当然,其他非MS的人也还是有机会看到源码的. 如果你和MS 签订一个NDA(NON DISCLOSURE AGREEMENT),那么你也有可能拿到WINDOWS代码.
不过对于广大穷学生,以及连VISUAL STUDIO都在用盗版的抠门公司来说,和MS签个NDA几乎是不可想象的. 所以在WINDOWS世界,想了解WINDOW 内核的具体信息变得很难. 只能靠DDK(DRIVER DEVELOPMENT KIT) 和WINDBG(内核调试工具)泄漏出来的一些. 然后就是REVERSE ENGINEERING (逆向工程,可以简单的理解为反汇编,实际上更复杂一些).
这也造成了 <WINDOWS INTERNALS> 一书超级火爆的原因. 因为它是微软授权的,而且公布了很多内部细节. 另外一本讲内核的书是<UNDOCUMENTED WINDOWS 2K SECRETS>,虽然老了点,但是很多内幕。关于WINDOWS, undocumented 和secrets 这2个字绝对是可以类比“超级美女”的字眼。因为这些东西平时是看不到的.
与此对应,在LINUX世界,常见的一个词是RTFS。也就是READ THE FXXXXXX SOURCE CODE (这句话据说最早出于linus torvalds, 也就是LINUX之父)。意思也就是说“去读该死的代码”。言外之意,我把代码都给你你了,你还想要啥啊?这就好像一个男人对他GF / LP / LD说,我把全部的银行帐户密码都给你了,你还想要啥啊?
其实他不知道(或者认识不到)女人还需要你的时间,精力来陪她。就好像LINUX 程序员意识不到文档也是很重要的。当然,LINUX程序员应该也是知道文档的重要的,不过一个是维护成本太高,另外是LINUX 内核变化太快。所以LINUX 的文档总感觉比MSDN要差点。
话说当年WIN 2K的源码泄漏出来了一些,我也迫不及待的下载了一份.虽然至今也没看过,但是拿到WINDOWS 源码的感觉,绝对不比娶了一个绝世美女差. (当然,真要娶老婆还是看内在).
相比之下, LINUX 是开源的,代码随时可见. 这对刚从WINDOWS世界转过来的我是十分震撼的. 虽然我一直都知道这个事实, 但是当你发现了以前需要用尽各种方法,采用各种手段才可以得到只言片语的信息现在完全呈献在你面前的时候,你才能真正体会开源确实是一件伟大的工程.
看了LINUX源码之后,我终于发现,原来内核里大部分也是C语言(而不是以前想象的汇编). 同时内核似乎也就那样,不像之前想象的那么神秘. 原来编译内核也就是比编译个普通程序稍微麻烦点,用的时间长点. 原来编译内核用普通的C编译器就可以. 原来内核也是一个普通的可执行文件.(PS: 我怀疑MS也是用VS来编译WINDOWS的. 同时我也知道WINDOWS内核也是一个可执行文件.) 原来更换内核是如此的简单.
终于,内核可以被我随便改了. 哇哈哈哈!
言规正传,我觉得商业也还是有好处的。比如兼容性好,我以前用WDM写一个驱动,最多改下编译选项就可以在WIN 98, WIN 2K, WIN XP下运行。十分方便。而如果换成LINUX,那么你只好祈祷不同的内核版本之间没改那些你用到的头文件,函数接口。否则就要改代码了。
同时,开源的好处是适合学习,十分灵活。我觉得LINUX十分适合学校,学生。因为开源,当你发现不明白的地方的时候,可以直接去看源码(还记得RTFS? )。看不懂还可以到论坛上问。而对于WINDOWS,你想了解它的内部机制就只好GOOGLE,然后祈祷了。比较好的一个资源是MSDN下面的一个杂志,其中有一个主题叫UNDER THE HOOD, 或者搜搜 BUGSLAYER 也可以。这2个专题的作者Matt Pietrek和John Robbins都是大牛级的人物。
顺便说下UNDER THE HOOD 这个名字本身。以前一直不太理解,因为查字典的话,HOOD 的意思也就是个盖子。那么盖子下面有啥呢?为啥要看盖子下面呢?
来到美国之后,我渐渐明白了。HOOD 在这里应该理解为汽车的引擎盖。在美国,汽车是很普遍的。如果你开车,但是从来没打开过引擎盖,那么说明你只会用,而不了解汽车内部。那么如果你打开盖子看看呢?就可以看到很多内部细节,比如发动机啥的了。
在美国这个汽车王国,很多软件术语和汽车有关,因为人们日常生活中对汽车也很了解。比如“引擎”这个词,以前玩3D游戏的时候,常会看到介绍说,本游戏采用了最新的3D引擎。啥意思呢?就是游戏最核心的部分(汽车引擎)已经升级了。不是只把外面的人物形象改了下而已。
另外,开源软件也经常用汽车来类比。开源意外着你买了车(软件)后,可以随便拿到一个修理厂去修。也就是什么人都可以改,只要他懂。而COPY RIGHT 软件呢,就是你买了车,但是引擎盖子是锁着的,坏了只能去生产厂家修,其他人修不了。如果万一生产厂家不想修或者不会修呢?那你就只能认命了。
扯得有点远了,打住。
1.1、发布:2进制 VS 源码
这里主要讨论下WINDOWS和LINUX在发布程序采用的不同的形式和观念,这些和前面的商业还是开源的基本观念是联系在一起的。
在WINDOWS 世界,安装程序几乎全部都是以二进制形式发布的。也就是说,用户下载了一个程序,然后双击,一路NEXT,NEXT,NEXT就可以了。这个方法很适合初学者。在LINUX世界也有类似的机制,比如YUM, APT-GET 等。不过YUM和APT-GET都是比较晚才出现的,在那之前,在LINUX世界安装程序要更麻烦些。
有的时候,LINUX的YUM, APT-GET还不够用。比如有的人写的一个小软件,没有放到这些大的公共的库里面。这时,你就会发现他们一般提供一个或者一堆源文件,然后需要使用者自己下载,“编译”,安装。这也就是LINUX世界常见的源代码发布的形式。
一开始的时候,十分不习惯LINUX的这种发布形式。用惯了WINDOWS的双击安装,总觉得LINUX的安装很麻烦,又要自己./CONFIGURE, MAKE, MAKE INSTALL. 万一这个软件又依赖于其他的库,那么又要自己去找那些库,万一那些库又依赖其他的库...... 另外,各种库的版本也是一个问题,万一不兼容,那么又要找一个兼容的。
为什么LINUX世界这么多源代码发布呢?为什么WINDOWS世界流行2进制文件发布,而不是源代码呢?关于后者,很好解释,因为WINDOWS那边很多源代码都是商业秘密,是不公开的。同时,WINDOWS的程序用到的那些库在一般的系统里都装好了。所以2进制发布可行,也十分方便。
关于前一个问题,我觉得源代码发布的一个好处是可以在编译的时候进行一些优化和设置。比如同样的代码,在32或64位平台下编译的时候可以进行适当的优化。另外,用户也可以在编译的时候设置一些开关,这样在编译期间的优化一般要好于运行时间的优化。
不过源代码发布的一个坏处就是对使用者要求较高。如果运行configue,make命令顺利的话还好。如果万一不顺利,要自己改下头文件啥的,无疑是一般的使用者无法做到的。另外库之间的依赖关系如果是人手工处理的话也十分麻烦。好在LINUX世界后来有了YUM APT-GET之类的包管理系统。大多数软件都可以很方便的安装了。
2、进程及其创建 CreateProcess VS fork+execv
在WINDOWS世界,创建进程最常用的WIN 32 API 是 CreateProcess以及相关函数。这个函数需要一堆参数(WINDOWS API 的特点),不过很多参数可以简单的用NULL, TRUE OR FALSE来表示。另外,你直接告诉它要执行的是哪个文件。
到了LINUX世界,我模糊的知道fork是用来创建一个新进程的。但是当我看fork的函数说明的时候,呆住了。因为fork不需要任何参数。习惯了 CreateProcess 的10来个参数,突然换成一个不要任何参数的函数,感觉很奇妙。一方面觉得似乎事情简单了很多,不用去把10来个参数的每个意思都搞明白。另外一方面又很疑惑,我怎么告诉它我要执行某个文件呢?
后来才知道,LINUX中的进程的含义和WINDOWS中是不一样的。LINUX中的进程本身是可以执行的。而WINDOWS中,进程只是表示一个资源的拥有体,是不能执行的。要执行的话,一定需要一个线程。这也部分解释了为什么CreateProcess中为啥一定要传入要执行的文件的名字。
而fork的含义是把进程本身CLONE一个新的出来。也就是说,FORK之后,父进程和子进程都执行同样的一段代码。如果想区分的话,可以根据FORK的返回值来区分。引用一段fork的说明:
On success, the PID of the child process is returned in the parent's thread of execution, and a 0 is returned in the child's thread of execution.
同时在LINUX程序中,常见的写法如下:
int pid;
pid = fork();
switch (pid)
{
case 0: //I am the child
;
case -1: //failed.
;
default: //I am the parent
}
为什么要这样设计呢?因为LINUX的设计目标之一就是应用于服务器。这种情况下,一个SERVICE可能会启动很多进程(线程)来服务不同的CLIENT. 所以FORK设计成快速复制父进程。子进程直接使用父亲的地址空间,只有子进程加载一个新的可执行文件的时候才创建自己的地址空间。
这样节省了创建地址空间这个庞大的开销,使得LINUX的进程创建十分快。不过实际上,这里的进程相对于WINDOWS中的线程,所以同WINDOWS中的线程创建相比,二者的开销应该差不多。
那么如何才能让新的进程加载一个可执行文件呢,这时就要用execv以及相关函数了。所以LINUX中,代替CreateProcess()的函数是fork+execv
3、文件格式 PE VS ELF
WINDOWS中的可执行文件格式是PE。到了LINUX就变成了ELF。2者有相似的地方,比如都分成几个SECTION,包含代码段,数据段等。但是2个又不一样。使得从一个转到另外一个的人不得不重新学习下。有点象在国内开惯了车的人,到了香港或者英国开车,虽然也是4个轮子一个方向盘,但是一个靠左行驶,一个靠右。总是需要些时间来习惯。
那么为啥LINUX不能和WINDOWS用同样的文件格式呢?我觉得可能的原因有几个。首先可能是2个差不多同时在设计的,彼此不知道对方的存在。所以也没法一方压倒一方。另外一个可能的原因是PE格式最开始还是保密的(后来MS公开了PE的SPEC),所以即使LINUX想直接用PE都不行。
顺便说下,MS OFFICE 的文档格式以前也是保密的,直到最近(好像是2008年)才公开。希望这可以使得OPEN OFFICE的开发顺利很多。
4、内核API:固定 VS 非固定
WINDOWS内核有一套固定的API,而且向后兼容。这使得WINDOWS 驱动的开发人员在不同版本之间移植时变得很容易。比如我用WDM (WINDOWS DEVICE MODEL) 开发一个驱动,最多改下编译选项就可以在WIN 98, 2K, XP, 2003 下使用。VISTA 我觉得也许都可以。
而LINUX没有固定的内核API。2.4版本的内核模块在2.6几乎很大可能是不能兼容的。要移植的话,不只是改个编译选项,而是要改一堆的头文件和实现文件等。而麻烦的是,即使都是2.6内核,不同的小版本之间也有些不同。如果你的内核模块刚好用到了变化的部分,那么也只好重新学习,然后改自己的头文件或者实现文件了。
固定内核API的好处是兼容性好,坏处是包袱比较大,不得不随时支持老的,也许是过时的接口。比如WINDOWS内核里有WDM 一套API, 但是又有网卡专用的 NDIS 一套API. 实际上2套API的很多设计目标是重合的。那么为什么有2个呢?因为NDIS是先出来的,为了兼容性,一定要支持。而NDIS又只针对网卡,所以又出来了WDM。
不固定API的坏处是升级很麻烦,外围的内核模块维护者很辛苦。好处是可以随时采用更新的设计。
5. WINDOWS与LINUX中的中断处理比较
5.1不同之处:
在WINDOWS中,有一个IRQL (注意不是IRQ)的概念。最早的时候,我以为是CPU设计里就包括了这个东东。后来看INTEL CPU手册,发现似乎没有。最近又看了一遍WINDOWS INTERALS 4TH。感觉这个东西应该是包括在PIC OR APIC里面的(关于APIC,可以看我以前的帖子)。对于X86-32,硬件设备的IRQ于IRQL之间的关系是:IRQL= 27-IRQ。引入IRQL的动机似乎是这样的:当CPU运行在低IRQL时,如果来了一个高IRQL对应的中断,那么低的中断的ISR是会被高的ISR抢过去的。就是说低的ISR又被一个更高级的ISR中断了。这样的好处是优先级高的ISR可以更快的得到响应。
另外,在具体实现中,由于操作PIC OR APCI改IRQL是比较费时的,所以WINDOWS是尽量不去直接操作硬件,而是等到万不得已的时候才改。
在LINUX中,似乎没有类似IRQL这样的观念。就我目前看过的书和代码来看,LINUX中的ISR或者是KERNLE最多是操作下CPU上的中断标志位(IF)来开启或者关闭中断。也就是说,要么中断全开,要么全关。
从这一点来看,LINUX在这部分的设计上比WINDOWS简单。
5.2 相似之处:
WINDOWS和LINUX似乎都把中断分成了2部分。在LINUX中叫ISR(还是其他?)和BOTTOM HALF。而WINODWS中,DPC(Deferred Procere Calls)和APC(Asynchronous Procere Calls)就非常类似BOTTOM HALF。二者把中断分成两部分的动机是差不多的。都是为了把ISR搞得越快越好。LINUX中,在ISR里一般关中断,所以时间太长的话,其他中断就得不到响应。WINDOWS中,ISR跑在一个很高的IRQL里面,同样会阻塞其他IRQL比较低的任务。
LINUX中的BOTTOM HALF 又可以分为TASKLET 和SOFIRQ。二者的主要区别是复杂度和并发性(CONCURRENCY)。下面COPY自<UNDERSTANDING LINUX NETWORK INTERNALS>一书。
Tasklet: Only one instance of each tasklet can run at any time. Different tasklets can run concurrently on different CPUs.
Softirq: Only one instance of each softirq can run at the same time on a CPU. However, the same softirq can run on different CPUs concurrentlyOnly one instance of each softirq can run at the same time on a CPU. However, the same softirq can run on different CPUs concurrently.
WINDOWS中的DPC有点类似TASKLET和SOFTIRQ。 DPC是系统范围内的,并且运行在DPC IRQL。是一个类似中断上下文的环境(INTERRUPT CONTEXT)。APC和DPC的区别是运行在更低级别的APC IRQL。另外,APC是针对每一个线程的。执行在某个线程环境中。主要目的也是把一部分事情放到以后去执行。APC又分为KERNEL APC 和USER APC。APC这个观念在LINUX中似乎没有类似的?至少我还没想到。
5.3 参考文献:
1. WINDOWS INTERALS 4TH
2. UNDERSTANDING LINUX NETWORK INTERNALS, 2005
UNICODE VS ASCII
KERNEL 4M/4K MIXED PAGE VS 4K PAGE
FS SEGMENT VS NO FS
GDI VS XWINDOWS
IRP VS FUNCTION POINTER
注册表 VS 普通文件
『贰』 windows和linux服务器哪个好
面对这个问题,一些人尤其是互联网相关从业人员,会觉得服务器系统当然选择Linux更好啊,我们公司的服务器就是Linux系统的;但同样也有一些人,会觉得Windows操作系肆告统操作便捷,还有微软作为技术保证。
先说我个人的观点,Windows和Linux系统在服务器上的表现都很好,具体选择哪一个,还要看你的需求到底是什么了。
至于原因呢?还是基于同样的原则,不要以自己看到的主观感受来判断,而是通过客观的数据来说明这个问题。
首先,介绍一个网站工具,netcraft(也可直接输入网址:https://searchdns.netcraft.com/)。
在输入框中输入目标网站,可以通过列表看到图中箭头所指的OS列信息(若想看具体信息,可以关注site report列)。如果我可以遍历这个世界上所有的网站,那么我就可以获取一份统计表,对应就是Linux和Windows的市场占比。
为了方便起见,我这里就不写爬虫进行爬取,而是直接使用现成的。w3techs,是一个广泛而可靠的网络技术调查网站(这个网站上的数据会按照天进行更新,还是很有权威性和实时性的),在这个网站上找到了我们希望得到的统计结果,具体信息如下图所示。
从图中可以看到,除去unknown的服务器外,Linux占比35.0%,Windows占比29.2%。
对网站进行进一步细分,细分的依据是按照该网站的排名,可以看到一个有趣的现象。越是顶尖的网站,服务器使用Windows的占比就越高,例如,针对Top1000的网站,其中Windows占比52.9%,而Linux仅占比34.3%。
换句话说,越是牛逼的网站越是倾向于使用Windows,是不是跟各位的认知产生了一定的偏差?
还是根据w3techs网站的最新数据显示,Linux的市场占有率有较大的下滑趋势。
也许这里就会更加疑惑,为什么服务器选择Windows操作系统不仅不是非主流,而且还有如此大肆雹弯的裂闷市场占有率,那么所谓的Windows系统不稳定的问题又是如何呢?
上面这个图中显示的是Linux和Windows系统在人气和流量方面的情况。其中横坐标为使用者的数量,即人气;纵坐标为服务的流量。
那么又有一个现象出现了,Windows操作系统比起Linux系统,更多的被使用在高流量的网站上。
现在回到最开始的那个问题,Windows和Linux服务器哪个好?还有那么绝对的答案吗?这个问题也逐步的变成了, 在企业级服务器应用场景下, Linux和Windows服务器各有什么优势。
总的来说,Linux与Windows的核心区别:
一个开源生态下依赖众多开发者所维系的一种操作系统
VS
一个利益驱动下依赖企业进行维护迭代的一种操作系统
因为生态环境,造就了两个操作系统最大的差别,深刻理解了这一点,就会明白为何有人选择Linux,而也有人选择Windows,只是大家做选择时的核心诉求不一致而已。
举例说明一下具体情况:
这个时候,再回过头去看之前的统计数据,对于数据本身所表现出来的问题,还会觉得意外吗?
目前看上去确实有一定的差别,例如很多人所说的安全性,一个公开的依靠世界各地顶尖开发者维护的系统,与一个闭源的由垄断巨头所维护的系统,看似确实前者安全性更好,但是也不要忽略利益的趋势,既然微软作为一个企业,那么赚钱就是其最大化体现,为了更好的赚钱,提供更好的服务也许是最简单的途径。
Windows和Linux的优劣其实网上一搜一大堆,但是我要说的是,随着时间的发展,Linux会越来越Windows,而Windows也越来越Linux,竞品的出现本身就会按照时间的发展而取长补短。同样按照市占率和后续发展,支持Linux的同时支持Windows也会越来越重要。
『叁』 我在Windows下用VS2013编写的程序,如何能让它在Linux上也能编译运行
总共又三种方案:mingw+codeblocks,是windows下的gcc编译工具+跨的轻量ide,可以编译c++的程序,还可以使用wxWidget(跨的界面工具)版
使用cygwin,是windows下中间件权级别的编译工具。可以在cygwin下用命令行编译程序。
使用vmware或者其他虚拟机,安装目标linux系统,并且编译。这是虚拟硬件级别的编译工具,其编译的程序是完全可以在linux系统上运行的。
『肆』 到底是选择linux开发还是windows开发他们到底有什么区别
可是linux的C开发有什么不同呢?
回答:Windows上的C开发是什么呢? 如果你只是在潭浩强书的水平的话,Windows上的开发跟Linux上的C开发没有什么链薯空不同,因为都是基本的简单的语言的学习.C语言的学习到什么平台都一样.
那么Windows中的C开发和Linux中C开发有什么不同.不同是有的.比如.Windows下开发用Windows的库,Linux下用Linux下的库.虽然库不同,但是通一懂百,所以不管是选择在Windows下棚瞎C开发.还是Linux下开发.都是学习进步,以后再根据需要学习下对方就可以了.
另外一个不同的地方.Windows上的C开发主要借助 VS或者VC平台.但是Linux下就有更多的选择了.当然了很多的人认为Linux那么多的选择也不如Windows上的VS强大.
但是也有人认为Linux上的开发很美妙.比如你所说的.
linux开发,一旦毕业,会有公司要么?
答: 国内在Linux下开发的人还不够,因为嵌入式的发展很快.不过话说回来,只要你学好了,到时候,你自己的眼界开了.不要说公司要你,也许你自己就开公司了...但是如果你学得不好,就算Windows大行天小,你一样没有公司要.
国内的Linux公司这么少,是不是linux程序员只能在Linux下开发,没有能力在windows下开发?
回答:什么叫Linux公司? ,国内对于Linux系统相关方面应用是很多的.这是你的了解错误..
Linux没有公司,Linux是一个生态环境.
没有能力在windows下开发? 这个问题,其实很好回答,你会用Nokia的手机,转去用三星的手机就不会用了吗?确实但是比从没有用过手机的呢?
上面的例子也许不是很恰当,但是说明了一个问题.知识是很具有普遍适当性的.但是只是一些思想.
如果想深入当然还得另花时间.
总结: 山都很高,上到了山顶都可以 一览众山小.
PS: 尝试在Linux下学习编程,会比在单纯在Windows下学习编程手弊获得更多..
『伍』 windows vs 编译的动态库 能不能在linux 下调用
这个理虚迹论上是可以实现的。但是很复杂,通用性不强。
1、windows上的动态库DLL文件是PE格式,而linux上的可执行文件是ELF格式,这两种格式首先不同。
2、但是,你可以在Linux上模拟实现一个PE加载器,然后加载DLL文件,实际上就是在Linux上实现一个PE Loader。 但是,这是一个相当复杂的事情差扮并,因为,微软没有公布PE的完全细节,我们现在所有了解的PE结构,那都是非官方公布的!
综上所述,不建议这样操作,但是理论上能实缺漏现。
『陆』 Linux vs Windows:有什么区别
Mac OS使用UNIX核心。从Mac OS切换到Linux将相对顺利。
Windows用户需要进行一些调整。在本教程中将介绍Linux操作系统并将其与Windows进行比较。
[TOC]
在Microsoft Windows中,文件存储在不同数据驱动器上的文件夹中,如C:D:E:
但是,在 Linux中,文件以从根目录开始的树结构排序 。
该根目录可以被视为文件系统的开始,并且它进一步分支出各种其他子目录。根用正斜杠'/'表示。
UNIX上的常规树文件系统可能如下所示。
在Linux和UNIX中,一切都是文件。目录是文件,文件是文件,以及打印机,鼠标,键盘等设备。
让我们更详细地研究文件类型。
常规文件也称为普通文件。它们可以顷早稿包含图像,视频,程序或简单的文本。它们可以是ASCII格式或二进制格式。这些是Linux用户最常用的文件。
这些文件是其他文件类型的仓库。你可以在目录(子目录)中拥有目录文件。你可以将它们作为Windows操作系统中的“文件夹”。
在MS Windows中,打印机,CD-ROM和硬盘驱动器等设备表示为驱动器字母,如G:H:。
在Linux中,有文件表示。例如,如果第一个SATA硬盘有三个主分区,它们将被命名并编号为/ dev / sda1,/ dev / sda2和/ dev / sda3。
注意 :所有设备文件都位于/ dev /目录中
所有上述文件类型(包括设备)都具有权限,允许用户读取,编辑或执行(运行)它们。这是一个强大的Linux / Unix功能。通过更改权限,可以对不同类型的用户应用访问限制。
Linux中有3种类型的用户。
在系统上安装Ubuntu时,将为你创建常规用户帐户。你的所有文件和文件夹都存储在/ home /这是你的主目录。作为普通用户,你无权访问其他用户的目录。
除常规帐户外,还会在安装时创建另一个名为root的用户帐户。root帐户是 超级用户 ,可以访问受限文件,安装软件并具有管理权限。每当你想要安装软件,更改系统文件或在Linux上执行任何管理任务时; 你需要以root用户身份登录。否则,对于播放音乐和浏览互联网等常规任务,你可以使用常规帐户。
Linux被广泛用作服务器操作系统。Apache,Squid,电子邮件等服务都有自己的服务帐户。拥有服务帐户可以提高计算机的安全性。Linux可以根据服务允许或拒绝访问各种资源。
注意:
在Windows中,有4种类型的用户帐户类型。
在Windows中,你不能在同一文件夹中拥有2个具有相同名称的文件。见下文
在Linux中,只要它们使用不同的大小写,你就可以在同一目录中拥有2个具有相同名称的文件。
对于Linux中的每个用户,目录创建为 / home /
考虑一下,常规用户帐户“Tom”。他可以将他的个人文件和目录存储在“/ home / tom”目录中。他无法将文件保存在其用户目录之外,也无法访问其他用户的目录。例如,他无法访问另一个用户帐户“Jerry”的目录“/ home / jerry”。
该概念类似于Windows中的C: Documents and Settings。
引导Linux操作系统时睁者,你的用户目录(来自上面的示例/ home / tom)是 默认的工作目录 。因此,目录“/ home / tom也称为 主目录 ,这是一个用词不当。
可以使用我们稍后将学习的一些命令来更改工作目录。
在Windows中,系统和程序文件通常保存在C:驱动器中。但是,在Linux中,你会在不同的目录中找到系统和程序文件。例如,引导文件存储在/ boot目录中,程序和软件文件可以在/ bin下的/ bin,设备文件中找到。下面是重要的Linux目录以及它们包含的内容的简短雀孝描述。
这些是Linux和其他操作系统之间最显着的差异。切换到Linux时会有更多变化,我们将在教程中进行讨论。
『柒』 linux下编程和windows下的编程有什么区别
Linux编程C语言用的比较多一些,C++语言也常用,Linux编程调用的接口叫做“系灶竖统调用”,C标准库、第三方开源C/C++库也是常用的,Linux编程会用到许多代码库,代码库选择上比较灵活;但是Windows编程C语言就用的少了,用C语言调用Windows API编程叫做Win32编程,微软将Windows API作了C++封装,封装成了C++库叫MFC,因为MFC库是和微软编程数大工具VC++/VS进行捆绑的,加上MFC编程的便捷,所以Windows编程C语言用的比较少,而C++语言用的比较多,后来微软退出.NET平台后,C#语言也成为了Windows编程的主流语言。
另外就是Linux编程,编写命令行程序仍然占很大比例,而Windows命令行编程已经非常少了,Windows主要是图形界面编程。还有就是Linux上脚本编程很普遍,而Windows上脚本编程的程序规模都比较小,鉴于脚本语言(除了shell脚本)是跨平台的,在Windows上也可以用,而且有些脚本编程属于Web开发的范畴,这里就不讨论了。隐毕大
『捌』 [杂烩]Windows IOCP与Linux的epoll机制对比
看到一些资料,说Windows的IOCP后发制人,比Linux的epoll优越很多。那么优势到底在哪里?如何选择Linux或Windows作为服务器呢?
也看到有资料说,同样在Linux上,使用reactor机制的网络库性能比使用Proactor机制的Asio性能好接近1/5,这个例子可能与题目无关,不过我在文中可基如能会做一些相关的分析。
系统姿让I/O模型 可分为三类:
IOCP基于非阻塞异步模型,而epoll基于非阻塞同步模型。
参考 Hyunjik Bae, A game programmer since 1995 说的:
参考[4]比较了Windows IOCP和Linux epoll的性能,结论是如果使用Linux,应该使用支持RSS(multi-queue)的NIC,这样可以达到与IOCP类似的性能。
Boost.Asio为了兼容Windows和Linux,在Linux上用epoll和select去模拟proactor模式,影响了它的效率和实现复杂度。其效率不及使用原生I/O机制的其它实现为Reactor模式的网搏册启络库。
引用来自参考[3]的话:
[1] Why doesn't Linux have a system like IOCP or Rio does? , 2014.
[2] 两种高性能I/O设计模式(Reactor/Proactor)的比较 - 文章 - 伯乐在线
[3] Practical difference between epoll and Windows IO Completion Ports (IOCP)
[4] Windows IOCP vs Linux EPOLL Performance Comparison
『玖』 linux与windows的区别是什么
对刚刚接触Linux的人来说,很容易从windows的观念去理解Linux系统。今天扒一扒Win和Linux之间常见的8个区别。
一、Linux终端输入吵配密码不回显字符
用户的密码在Linux系统中非常重要,所以在终端等程序中输入密码是不会回显任何符号的,这样的设计是为了避免旁人记住你的密码位数从而破解你的密码,所以在终端输入密码的时候请盲打密码后轻敲回车即可!
二、Linux的C盘是什么?
Linux系统下的文件系统结构和Windows完全不同,如果真的要说Linux下的C盘,那么只能说是/,如果说Linux的用户文件链没夹,那就是 /home,更为详细的说明,你可以查看Deepin网络,此外把Linux系统的文件系统结构想象成一棵大树,能够迅速帮你理解Linux系统下的文件 系统结构。
三、Linux的软件安装目录
这个与Linux的文件系统有关。虽然Linux系统的C:Program Files是/usr,但是并不是安装的软件所有文件都在/usr下,Linux系统下的软件的文件一般都是散落在Linux下的多个目录下。
四、Linux需要优化和清理软件?
Linux系统天生优良,基本不需要什么优化软件。如果需要优化,可以尝试以下工作:
1、优化内核,精简内核功能和大小
2、关闭不需要或不常用的服务
至于清理系统,Linux系统下没有什么垃圾文件,一般只有缓存文件,集中存放在/tmp目录下,并且该目录会定期自动清理,无需用户操心。
五、Linux需要杀毒软件?
Linux系统下严密的权限机制,导致Linux系统下少有威胁性的病毒,并且Linux也不能运行windows系统下的病毒,所以Linux系统天生很安全,但是,不要泄露Root密码和个人用户密码,并且不随意运行不知道来源和功能的脚本程序,
六、Linux的软件安装和来源
深度商店就是为这个而生的,你只需要打开深度商店就可以完全用鼠标操作,安装任何你喜欢的软件,至于网上的编译安装和使用PPA等安装方式,建议你先对系统的包管理器工具有一定的了解后才去尝试。
七、系统更新和软件更新
Linux系统是一个系统和软件都很紧密的棚碰纳系统,很难区分什么是系统和软件的更新,议是当系统提示你更新,请全部更新。
八、Linux同时安装多个软件?
这个和Linux系统下的软件依赖问题,因此Linux系统安装软件不能并行多个安装。