初学者如何以最简单方式学习Linux?
2019-01-29 11:57
有很多关于Linux的书籍,博客。大多数都会比较繁琐,让很多Linux初学者未入其门就路过了。
所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语言来介绍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的组成。
===============
目录详解
/ 处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录、文件、设备都在/之下。
/bin bin是Binary的缩写,存放着linux系统命令。
/dev dev是Device的缩写。存放的是linux的外部设备,在linux中访问设备的方式和访问文件的方式是相同的。(注意:设备文件不是驱动程序。过去,在添加新磁盘或设备后,往往需要手动增加设备文件。现在通常我们不需要手动增加设备文件,运行一下service kudzu start ,系统就会自动配置相应的设备。)
/home 用户的主目录。在liunx系统中,每个用户都有一个自己的目录,一般该目录名是以用户的帐号命名的。
/lib 这个目录里存放着系统最基本的动态链接共享库,包含许多被/bin/和/sbin/中的程序使用的库文件,目录/usr/lib/中含有更多用于用户程序的库文件。作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。
/media linux系统自动识别的一些设备,例如U盘、光驱、移动硬盘等,linux会把识别的设备挂载到这个目录下。
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,可以将光驱挂载到/mnt/上,然后进入该目录就可以查看光驱里的内容。
/opt 主机额外安装软件所摆放的目录。默认是空的。
/root 这个不用介绍了吧,呵呵。超级管理员的用户主目录。
/selinux 这个目录是RedHat/CentOS所特有的目录,Selinux是一个安全机制,这个比较复杂,这个目录就是存放Selinux相关的文件的,一般我们安装操作系统的时候禁止使用它。
/sys 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs,sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统种被创建。
/usr 包括与系统用户直接有关的文件和目录,例如应用程序及支持它们的库文件。类似于windows下的program files目录。
/boot 包括内核和其它系统启动期间使用的文件。是启动linux时使用的核心文件,有连接文件和镜像文件。
/etc 存放系统配置文件和目录,非常重要,经常会用到它,要牢记。
/lost+found 默认为空,被FSCK(file system check用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)用来放置零散文件(没有名称的文件)。当系统非法关机后,这里就会存放一些文件。
/misc 存放杂项文件或目录,即那些用途或含义不明确的文件或目录可以存放在该目录下。
/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里。
/sbin 大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的。
/srv 该目录存放一些服务启动之后需要提取的数据。
/tmp 该目录用于存放临时文件,有时用户运行程序的时候,会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是相似的。
/var 该目录的内容是经常变动的,/var下有/var/log目录用来存放系统日志的目录。/var/www目录用来定义Apache服务器站点存放目录。/var/lib用来存放一些库文件。
=======================================================================
其它重要系统目录
/usr/bin 这个目录是可执行程序的目录,普通用户就有权限执行。当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。相似的目录是/usr/local/bin目录。有时/usr/bin中的文件是/usr/local/bin的链接文件。
/usr/sbin 这个目录也是可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行,相似目录是/sbin或/usr/local/sbin或/usr/X11R6/sbin等。
/usr/src 内核源码默认的放置目录
/proc/cpuinfo 关于处理器的信息,如类似、厂家、型号和性能等。比如cat /proc/cpuinfo
/proc/devices 当前运行内核所配置的所有设备清单。
/proc/filesystems 当前运行内核所配置的文件系统。
/proc/dma 当前正在使用的DMA通道。
/proc/interrupts 正在使用的中断和曾经有多少个中断。
/proc/ioports 当前正在使用的I/O端口。
/etc/init.d 这个目录是用来存放系统或服务器以System V模式启动的脚本,这在以System V模式启动或初始化的系统中常见。比如RedHat Fedora。
/etc/xinetd.d 如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。有些系统没有这个目录,比如Slackware,有些老的版本也没有。在Redhat Fedora中比较新的版本中存在。
/etc/rc.d 这是Slackware发行版中有的一个目录,是BSD方式启动脚本的存放地,比如定义网卡,服务器开启脚本等。
/etc/X11 是X-Window相关的配置文件存放地。
/usr/local 这个目录一般是用来存放用户自编译安装软件的存放目录。一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。
/usr/lib 该目录和/lib目录相似,是库文件的存储目录。存放一些常用的共享库。
/usr/share 该目录用于存放系统共用的东西,比如/usr/share/fonts是字体目录,是用户都共用的。
/usr/share/doc 该目录是Linux共享文档的存放地。
/usr/share/man 该目录是共享的帮助文件的存放地。
/var/adm 比如软件包安装信息、日志、管理信息等就存放在该目录下,在Slackware操作系统中是有这个目录的。在Fedora中好象没有。
/var/log 该目录用于存放系统日志。
/var/spool 打印机、邮件、代理服务器等假脱机目录存放在该目录下。