.Net程序员学习Linux最简单的方法(转载)

有很多关于Linux的书籍、博客。大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步。未入其门就路过了。

  所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语言来介绍Linux背景和动机。 就如同所有的的网络游戏都要先介绍游戏的历史观,然后再介绍游戏的操作。

  大多数初学者在刚刚接触Linux都会有非常陌生的感觉。往往会有一些疑惑和问题。而我们就沿着这些问题,从远及近,从宏观到微观来理解Linux的简洁和美丽。

  问题1:Winows有注册表,为什么Linux没有注册表?

  注册表是Windows核心组件,对整个系统进行配置。Linux是以整个文件系统作为“注册表”,Windows注册表的树形结构,可以粗略的对应Linux文件系统的树形结构。

  Linux的配置文件就相当于注册表的键,或者说Linux采用的是分布式的注册表。

  那么Linux为什么要这样设计呢?因为Linux是所谓的网络操作系统,所以单台电脑不是Linux的界限,如果是多台电脑组成的系统,那么分布式的管理就有着巨大的优势。

  例如:一个包含配置文件的磁盘的损害不会让整个系统瘫痪,而可能只是让部分功能失效。

  问题2:Windows有完善的图形界面,而Linux为什么要学命令行?

  首先,命令行绝对要比图形界面先进的多。命令行是程序员的第一界面,而图形界面是普通用户的第一界面。

  也许很多人会有不同意见,其实我们再向前想一步,就很清楚了。

  命令行的下一步演化是什么? 很简单就是语音控制,就是把人类自然语言转化为命令

  图形界面的的下一步演化是什么? 是姿势控制。从目前的Windows系统来说一共只有3种姿势, 单击,双击,拖放。而更先进的iPad有拨动,画圈等。

  姿势控制很简单,便于用户上手,语音控制很复杂,但是控制精度很高。

  作为程序员我们要求电脑完成的工作要比普通用户复杂的多,所以使用命令行会非常高效。

  退一步讲,图形界面本质也是命令行,只不过将姿势翻译成命令执行而已。

  程序员编程的代码也都是“命令行”,一条一条的指令而已。

  总之,只要能打破对Linux命令行的恐惧感,接下来的事就会非常容易了。这个命令行绝对不是你简单想像中的命令行,它是非常智能化的。

  问题3:Linux有那么多目录,那么多命令,怎么记得住呢?

  首先,Linux目录是Linux系统最灵魂的东西,所有的硬件都可以被抽象为文件,从而实现网络化。(Internet只不过是Unix/Linux的进一步的演化而已)

  所以只要掌握了Linux目录的规律,在理解的基础上记忆就可以容易的多。另外Linux的命令行有智能化功能,可以让你少打95%以上的字符来完成命令。

  绝非你所想象的傻乎乎的敲一大堆命令,那些用Linux大牛都是绝顶聪明的人,怎么可能让自己辛苦呢?

  问题4:Linux的文件夹结构看上去很复杂,怎么理解呢?

  我们这里假设,我们就是设计者,如果我们设计一个文件系统,我们会如何去做呢?

  我们需要一个起点, 这个起点就叫根目录,用“/”来表示,然后我们需要启动Linux,那么我们就会把所有核心的启动文件(包括Linux核心本身)都放到一个“/boot"目录下。

  当系统启动后,我们需要执行一些基本命令,这些命令都会放到“/bin"目录下。然后这些命令可能会用到一些库,这些库就被放到“/lib"下面,而这些库可能会会用到一些设备驱动文件,

  那么这些驱动文件就会放到“/dev"目录下。

  /:根目录

  /boot: 系统启动和内核

  /bin:系统基本命令 (bin是binary的缩写)

  /lib: 系统库(不能直接运行的代码)(lib是libary的缩写)

  /dev: 设备驱动 (dev是device的缩写)

  到目前为止只用5个目录,很简单吧。

  问题5:什么是"/usr" ,"/etc"和“/var“?

  当用户启动系统以后,要做一些更加复杂的工作,这时候就会涉及到一个叫“/usr",这个情况稍微有些复杂,是一个难点。不过也很容易解释清楚。

  早期的Unix系统都有很多块硬盘,当时硬盘的容量都很小, 所以往往一个硬盘只放一个目录,比如“/boot"可以放在一个单独的"boot"盘上,上面提到的5个目录,是系统运行必不可少的。

  而当系统启动以后,我们需要其他一些用于具体工作的程序时,我们就会加载一个“/usr"目录,上面放重要的运行程序。

  容易引起疑惑的是"usr"这个名字, 在历史上,原来这个确实是user的缩写,不过现在和user没有任何关系了,你可以把它看成是"Universal Software Resource"的缩写。

  这个“/usr"有点类似Windows里面的Program Files。

  因此 /bin 和 /usr/bin 的区别,就是 /bin 里面的程序更加核心。

  这时候,很多人会有疑问, 我们记住哪些命令在 /bin 还是在 /usr/bin 呢?

  放心,由于所有的bin目录都会登记到系统变量PATH里面, 因此无论你在任何当前目录中,只要输入命令文件的名称,系统都会帮你找到这个命令并运行。

  要点:

  1,/usr上面一般都是只读文件,数据文件和配置文件不放在上面(放到哪里,后面会讲)。

  2,没有“/usr",Linux系统也能正常运行。

  2,/usr可以被多台电脑共享(这里体现Linux系统的网络性)。

  由于/usr只放只读文件,那么配置文件和数据文件放哪里呢?这里就出现了2个新的目录“/etc"和“/var"。

  这里容易初学者迷惑的就是这个2个目录的名字。

  在历史上“etc”是“etcetera”的缩写,中文意为“其他”, 现在这个和“其他”没有任何关系,就是专门存放配置文件的地方,可以理解为“Editable Text Configuration"的缩写。

  比如 /etc/mysql 就是放 mysql 的配置文件 /ect/apache2 就是 apache2 的配置文件。

  在历史上“var”是“variable”的缩写,中文意为“变动”,现在主要用来存放log, lock等文件。

  例如 /var/mysql 就是用来存放mysql的log。

  问题6:用户自己产生的数据放到哪里?

  当我们运行程序后,会产生很多自己的结果,这些结果放哪里呢? 这里就出现了一个“/home”目录,不过你不能直接放到“/home”目录下,因为Linux是个多用户操作系统,所以系统会有一个以用户的名字命名的目录。

  例如:用户是jack,那么目录就是 /home/jack,这个目录也可以用“~“来表示。

  至此,我们.Net程序员也就基本了解了Linux的组成。

时间: 2024-10-10 17:54:06

.Net程序员学习Linux最简单的方法(转载)的相关文章

.Net程序员学习Linux最简单的方法

有很多关于Linux的书籍,博客.大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步.未入其门就路过了. 所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语言来介绍Linux背景和动机. 就如同所有的的网络游戏都要先介绍游戏的历史观,然后再介绍游戏的操作. 大多数初学者在刚刚接触Linux都会有非常陌生的感觉.往往会有一些疑惑和问题.而我们就沿着这些问题,从远及近,从宏观到微观来理解Linux的简洁和美丽. 问题1: Winows有注册表,为什么Lin

Net程序员学习Linux

Net程序员学习Linux 本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 为什么学习linux? 1.很多人都说.net程序员只会在Windows的环境下进行工作,压根就不懂Linux的使用,也不懂Linux的命令,只会用鼠标,只会在图形界面下工作.其实刚开始听,心里挺不爽的,作为一个.net程序员,我所熟悉的当然是在windows下工作,因为我们压根不需要在linux

.Net程序员学习Linux(一)

本次知识点:Linux系统的多终端切换,linux下的用户,linux远程访问工具使用,linux下重要的目录,命令的组成,通配符,linux的路径问题,文件操作的综合运用 为什么学习linux? 1.很多人都说.net程序员只会在Windows的环境下进行工作,压根就不懂Linux的使用,也不懂Linux的命令,只会用鼠标,只会在图形界面下工作.其实刚开始听,心里挺不爽的,作为一个.net程序员,我所熟悉的当然是在windows下工作,因为我们压根不需要在linux环境使用编码工具,而且很多p

.Net程序员学习Linux(二)

本次知识点:递归命令符,wc命令,文档编辑器 vi的简单使用,文本常用操作命令,find查询文件命令,grep匹配文本中对应的关键字 递归命令符 递归对于程序猿来说不默认,经常用于级联关系,一层套一层直达最后一层,在linux的命令中,例如 ls rm mv等等都可以递归,   只需要在后面加上-R 即可进行递归操作 计算文件行数,字节数的wc命令 wc命令用来打印文件的文本行数.单词数.字节数等. [[email protected] etc]# wc krb5.conf      -----

.Net程序员学习Linux(三)

  基础命令 ll 文件名 命令可以查看文件的大小 file 文件名 可以看到文件后缀,大小 压缩与解压工具 这些压缩工具按照我理解应该是很少单独拿出来用,应该是需要配合其他命令或者工具来使用 gzip 是用于压缩文件 gzip -v 文件名            ------>压缩文件并且显示压缩后文件的详细信息 gzip -l 压缩后文件       ------>也可以查看压缩后文件的详细信息,上面那个跟随的未压缩文件并压缩,这里是跟随压缩后的文件名 gzip -9 -c 文件名    

医生转行程序员竟然是最简单的?转载自宅客学院

“现在的编程工作就像是对你需要解决处理的部分做科学研究.” ——Gerald Sussman 设计和维护好的软件就像是一个抵制复杂度的永无止境的奋斗过程.任何足够大小的应用程序的代码路径和组件都能迅速成长成令人眼花缭乱的组合爆炸. 一点都不简单. 当部署类似于Heroku和AWS的平台时,单服务器的Web应用程序成为了分布式系统.现代浏览器模糊了客户端和服务器之间的界线.当简单程序在多个CPU内核上运行时,它们就会成为复杂的协调问题.虽然像测试驱动开发等实践和SOLID原则等指导,可以帮助我们模

C#程序员学习Android开发系列之学习路线图

通过前面的3篇博客已经简单的介绍了Android开发的过程并写了一个简单的demo,了解了Android开发的环境以及一些背景知识. 接下来这篇博客不打算继续学习Android开发的细节,先停一下,明确一下接下来的学习目标以及学习路线. 一.对Android开发的基本认识 1.Android原生开发是基于Java语言的,由于我比较擅长C#,所以对Java语言本身不太熟练,需要加强Java语言基础的练习,这一块我会穿插到具体的知识点练习当中,并且在必要的地方给出与C#语言的对比(其实基本上在语法层

优秀游戏程序员学习资料推荐

这两天给单位的技术做的一次学习材料推荐培训,直接ppt上拷过来的. 优秀游戏程序员学习资料推荐 主讲人:臧旭 前言 今天提到的纯粹是我个人心得和理解,可能片面,可能以偏概全. 目的是给大家做一定的指引作用,想让大家知道自己还有哪些可以去学习,还有哪些不足,我们距离优秀还有多远. 对我今天提到的东西,如果大家有时间,一定要去深入了解,在技术的道路上才有可能看得远.走得稳.飞得高. 另外有一句对所有技术人员想说的话: 学无止境.切忌坐井观天.有一点小小的成就就沾沾自喜.止足不前. 扎实的基础 万丈高

聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路

阿里社招面试都问什么? 和之前一样,文章一上来,我们先来谈谈阿里的社招面试都问什么,其实这个话题并不是什么秘密,所有来阿里面试过的同学,都能回答一二. 两年前的时候,笔者在文章里是这么回答的. 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题. 说实话,LZ只能隐约想起并发.JVM.分布式.TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住.而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小. 甚至,就算你运气好被问到了