Linux基础与服务器搭建-第一课

开始前的闲话:

相信大家都对Windows系统有一定的了解了,我个人认为Linux在某些方面比Win好用得多,水平不够,也不讨论孰优孰劣的问题,只是觉得这系统太TM好用了,仅此而已

预备知识:

基本不需要什么预备知识,但是推荐看一下这个:
提问的智慧
这个无疑是上个世纪的文章了,放到今天来看这文章甚至写得有点smug(我七年前读它的时候没这种感觉),但是关于如何提问的部分还是值得一看。

正文:

今天就简单的讲一些小东西:

  • Linux系统是什么
  • 包管理是什么
  • 设备文件是什么

1. Linux系统是什么
建议阅读 这个知乎问题的第一赞回答
这回答看起来也有点smug,但是今天我们只谈情怀,所以楼下那些关于广泛的就业机会的回答更加不合胃口。
接下来来一个比较官方的定义:
狭义上的Linux是指Linux内核,广义上的Linux是指Linux内核和运行与内核之上的一系列软件构成的操作系统
这个定义是我当年刚刚接触Linux的时候不知道从哪里看到的,现在拿去百度一下的话应该也是到处都是的一个定义,但是这个定义其实还比较准确的,下面来细讲一下。
和Windows完全不同,Linux只是一个叫Linus的人开发的操作系统内核(Kernel),Linus那时候完全是出于兴趣,自己编写了一个操作系统内核(起到管理硬件资源、抽象硬件层的作用),之后又将原本运行与Unix之上的几款软件(如Shell)移植到了这个内核之上,使得它可以和用户交互,初步有了一个操作系统的样子。
之后呢,又一群爱好者开始在Linux这个内核上开发软件/移植软件,一个叫GNU的东西注意到了Linux,GNU当时正想建立一个完全自由的操作系统,它什么都有了,就是缺个系统内核,于是和Linux合作,给Linux提供了一个标准C库(glibc)和一套完整的开发工具(gcc),从此在Linux上开发软件,移植软件变得相当简单,Linux的生态环境建立起来了。
再之后,我们就把运行Linux内核的东西都叫成Linux系统了。

2.包管理是什么
Python用户肯定用过一个叫pip的东西,这东西和Linux的包管理就有些像。
我们先回忆一下之前讲过的Linux系统的定义,Linux是一个内核,之后GNU提供了Linux的标准C库实现和编译器,从此之后在Linux上移植和编写软件变得非常容易,一大群人开始在Linux上编写软件,最终这些软件的集合形成了一个操作系统。
那么这里就有个问题,这些软件的编写者都不在一起啊,他们各写各的,如果要把他们的软件都凑起来,变成一个操作系统,需要到他们每个人的网站上去一个个下载源码包进行编译,这无疑是非常费时费力的。
(LFS了解一下)
于是就产生了一个叫Linux发行版的概念,它们有一群人(商业公司或社区)维护,有一个自己的包管理系统
,他们将各个分散的软件源代码集合起来,统一编译,又开发了一套软件安全包格式,这些被编译好的软件按照格式打包之后,经过包管理系统就可以轻松地瞬间安装好。这样省去了最终用户的编译时间,极大程度地方便了Linux系统的普及使用。(关于包管理系统可以参考这篇文章)

3.设备文件是什么
Linux把所有设备都当成文件来对待,设备文件都在/dev下
这里有一篇关于设备文件说明较详细的文章,可以参考,下面说一下我的个人的简化过的理解。

  • 块设备
    学过C++的人都知道C++里流的概念,块设备就是这些流的制造地/目的地。Linux会把io设备都抽象成块设备,这种抽象的接口极大程度上方便了软件开发。
    这里为了说明问题需要用到Linux里的几个命令,下面简单介绍一下这些命令:
echo  --- 和Windows的echo一样,不说了
cat --- 获取目标文件的内容
dd --- diskdump,通过指定参数可以实现读取指定快设备/写入指定块设备的目的

下面来看一下例子:
例如,你可以向stdout输入一个字符串test,之后你的屏幕上就会打印出一个test来,实际上,echo的默认输出就是重定向到/dev/stdout的。

root@archlinux /dev # echo test > stdout 
test

又例如,你可以通过从/dev/zero(一个特殊的产生0的块设备)读取数据并写入/dev/sda(硬盘),以此达到全盘低格的目的:

root@archlinux /dev # dd if=/dev/zero of=/dev/sda 

在Linux下制作系统安装U盘时,可以采用这条命令,将iso文件直接写入U盘内(假设/dev/sdb是U盘):

dd if=ubuntu.iso of=/dev/sdb

之后直接重启从U盘引导即可。

  • 其他设备文件
    当然了,块设备这种抽象接口只适合对io设备进行抽象,所以Linux还设计了用于抽象其他设备的设备文件,例如通过/dev/mem可以直接操作系统内存,/dev/tty*则是终端设备的虚拟设备文件,除此之外,还有其他特殊的设备文件,例如通过/dev/kmsg这个设备文件可以读取/写入内核日志等等。但是这些都并不怎么常用,也偏离了我们的主题,今天就不详细介绍了。

你可能感兴趣的:(Linux基础与服务器搭建-第一课)