又是一个下雨天。
今天的笔记主要是关于Linux操作系统基础的相关知识。那就从我面前的电脑开始讲起。
计算机和操作系统
计算机主要包括五个部分:运算器,控制器,存储器,输入设备和输出设备。通常,运算器,控制器再加上其他一些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。运算器,控制器和存储器可以实现数据的处理.
但是数据从何而来,运算之后的结果去往哪里?
这就需要输入设备和输出设备(I/O设备)。我们通常用到的输入设备包括键盘鼠标等,输出设备为屏幕,打印机等。值得一提的是,计算机中有个叫做硬盘的东西,它并不是存储器,而是一个I/O设备。在将数据读取到内存时,它是一个输入设备;而将结果保存到磁盘时,它就变成了一个输出设备。
这么多设备整合在一起,就成了一台计算机。它可以接收我们的指令(键盘鼠标),通过运算(CPU),把结果展示给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作用,共同完成一个任务而不会我行我素地乱来呢?我们需要一个东西,它可以控制硬件有序地工作,各自执行自己的任务,这个东西就是操作系统(Operating System)。
操作系统是一个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的几乎一切。假如一台电脑没有操作系统,它可能只是一个艺术品,或者一堆废铁。
一个完整的操作系统包括内核和一些辅助软件。
内核的主要任务就是进行硬件管理,它是一个操作系统最基础最底层的东西。内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的一对,全都仰仗于驱动的帮忙。驱动是硬件的灵魂,它向操作系统提供了访问和使用硬件的接口,以便在某项任务中最高效地调用硬件。
什么是Linux
Linux就是一个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。Linux是由Linus Torvalds在1991年开发的,它稳定性高,配置要求低,而且免费。不同的发行商使用linux内核,对其进行软件和管理工具的封装,形成了不同的Linux发行版。不同发行版之间的差别并不是太大,根据发行商的不同,各种linux发行版也被分为多个系列:如红帽系列的RedHat, CentOs, Fedora; Debian系列的Ubuntu, Mint以及Suse系列等。
Shell:用户与内核之间的中介
操作系统除了要与硬件打交道,还要和我们人类打交道,毕竟电脑是为人民服务。而我们与系统之间的交互,仰仗于一个重要的软件—Shell。
Shell是用户与内核之间的中介,我们可以把它当作一个命令解释器,我们输入某些命令,shell将它解释成内核可以理解的语言,从而使内核执行后续的相关操作。
Shell可以分为图形界面shell(GraphicalUser Interface,GUI)和命令行shell(Command Line Interface,GLI)。我们常用的windows操作系统所用的WindowsExplorer就是图形界面的shell,而在linux中流行的bash则是命令行shell。当然,linux中也有图形界面的shell,如x-window等。后面我们会慢慢讲到Shell(bash)的一些特性。
Linux的根文件系统
Linux的基本哲学之一:“一切皆文件”。
不管是普通的文件,目录还是设备,在linux中都被当作文件并对其进行操作。而linux对这些文件进行管理则主要依赖于它的根文件系统(root file system)。
Linux下的每一个文件都必须处于根文件系统下的某一路径,最底层的路径为root,我们用/来表示。/下可以延伸出其他路径,这个路径下可以有文件或者目录(目录也是一种特殊的文件)。Linux系统的一切都处于/下,为了方便的大家的管理和使用,Filesystem Hierarchy Standard (文件系统层次标准,FHS)应运而生。简单地讲,FHS定义了根下的某个特定目录必须放置特定类型文件,而不能随意更改。比如/boot下只能放置系统启动相关的文件,/etc下是系统主要的配置文件,而任何设备文件都在/dev目录下。
我们使用tree命令可以显示/目录下的各个子目录,以及子目录下的内容。比如我们进入到根目录,看看这个目录下有哪个写子目录,可以使用
Tree –L 1;
我们会发现,根目录下有多个子目录,而这些子目录的名字以及目录下的文件都是被定义好的,下面是FHS系统的详细说明:
/boot:系统启动相关文件,如内核、initrd,以及grub(bootloader)
/dev:设备文件。Linux下一切皆文件,设备也是以文件的形式存在于这个目录中,里面存放有如/dev/hd*,/dev/sd*等设备文件。
/etc:配置文件。如用户的账号文件/etc/passwd,密码文件:/etc/shadow等都存放在这个目录中。
/home:用户的家目录。用户登陆后默认处于自己的家目录中,常用~代表当前用户的家目录。
/root:管理员的家目录
/lib:库文件,主要放置开机时会用到的库。库文件可以分为静态库(*.a)和动态库(*.so)。库文件不能单独执行,只能被调用
/media:挂载点目录,通常用于挂载移动设备
/mnt:额外的临时文件系统,如光盘
/opt:可选目录,早期为第三方程序安装目录
/proc:伪文件系统,内核映射文件,为内核工作的统计数据等
只有内核运行时才有文件,关机下为空的
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件
/var:可变化文件
/bin:binary,可执行文件,用户命令
/sbin:管理命令
/usr:universal shared read-only,全局共享只读文件
/usr/bin
/usr/sbin
usr下的bin和sbin是与系统提供某些功能相关的命令
根目录下的bin和sbin是和系统启动相关的命令
更详细的信息大家可以参照:
通过上面我们了解了什么是linux系统以及它的根文件系统,基本都是一些理论知识,但是个人觉得了解这些知识还是挺有必要的。后面,如果我们要想真正开始使用linux系统,首先还要学会一些基本的命令,如:
目录管理命令:mkdir, rmdir
文件管理命令:touch, rm, cp,mv
文本查看命令:cat, tac,more, less, head, tail
文本处理命令:cut, sort,uniq, wc, tr
以及一些其他常用命令如ls, cd,alias, history等。具体的使用可以参考我们之前的一些生信入门文章或者网上搜一下。
下周,我的笔记内容将会是bash的相关特性以及文件名通配等,会介绍相关的理论知识和命令等。欢迎大家多多交流,共同学习。
参考资料:
《鸟哥的linux私房菜》
《马哥linux》
欢迎关注我们