1、描述计算机的组成及其功能。 组成:硬件系统和软件系统 硬件系统: 主机:中央处理器CPU(运算器、控制器),内存储器(ROM、RAM) 外设: 输出:显示器、打印机、绘图仪 输入:键盘、鼠标、扫描仪 存储:硬盘、软盘、光盘、磁带 其它:调制解调器 软件系统: 系统软件:操作系统、程序语言处理系统、数据库管理系统、服务程序-检查|诊断|调试程序 应用软件:通用应用软件(如Office办公软件包)、专业软件(用户程序) 2、描述内核功能以及作用
首先,我们用图示的方法看一下系统与内核的大致关系:

内核的功能:
通常内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是一个操作系统的核心,是操作系统最基本的部分。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统等,决定着系统的性能和稳定性。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。需要主要的是:一个内核不是一套完整的操作系统。比如一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
内核的作用:
内核的主要作用有:进程管理、内存管理、文件管理、驱动管理、网络管理。
进程管理:内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出),不同进程间通讯(通过信号,管道,或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。另外, 调度器, 控制进程如何共享CPU,是进程管理的一部分。更通常地,内核的进程管理活动实现了多个进程在一个单个或者几个CPU 之上的抽象。
内存管理:计算机的内存是主要的资源, 处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。内核的不同部分与内存管理子系统通过一套函数调用交互,从简单的malloc/free对到更多更复杂的功能。
文件管理:Linux 在很大程度上基于文件系统的概念;几乎Linux中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用。另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准Linux的ext3文件系统,普遍使用的FAT文件系统,或者其他几个文件系统。
驱动管理:几乎每个系统操作终都映射到一个物理设备上,除了处理器,内存和非常少的别的实体之外,全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行。这些代码称为设备驱动。内核中必须嵌入系统中出现的每个外设的驱动,从硬盘驱动到键盘和磁带驱动器。
网络管理: 网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件。报文在某一个进程接手之前必须被收集,识别,分发,系统负责在程序和网络接口之间递送数据报文,它必须根据程序的网络活动来控制程序的执行。另外,所有的路由和地址解析问题都在内核中实现。
3、按系列罗列常见Linux的发行版,并描述不同发行版之间的联系与区别。 首先,一个典型的Linux发行版包括:Linux内核,一些GNU程序库和工具,命令行shell,图形界面的X Window系统和相应的桌面环境,如KDE或GNOME,并包含数千种从办公套件,编译器,文本编辑器到科学工具的应用软件。 发行版为许多不同的目的而制作, 包括对不同计算机结构的支持, 对一个具体区域或语言的本地化,实时应用,和嵌入式系统,甚至许多版本故意地只加入免费软件。已经有超过三百个发行版被积极的开发,最普遍被使用的发行版有大约十二个。 版本:Fedora Core、Debian、Mandrake、Ubuntu、Red Hat Linux、SuSE、Linux Mint、Gentoo、CentOS 版本比较: Redhat,应该称为Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server收费版本)、FedoraCore(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。Redhat应该说是在国内使用人群最多的Linux版本,甚至有人将Redhat等同于Linux,而有些老鸟更是只用这一个版本的Linux。所以这个版本的特点就是使用人群数量大,资料非常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。稳定性方面RHEL和CentOS的稳定性非常好,适合于服务器使用,但是Fedora Core的稳定性较差,最好只用于桌面应用。 Debian,或者称Debian系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支(branch): stable, testing和unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。Debian最具特色的是apt-get /dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。Debian的资料也很丰富,有很多支持的社区,有问题求教也有地方可去。 Ubuntu严格来说不能算一个独立的发行版本,Ubuntu是基于Debian的unstable版本加强而来,可以这么说Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的Linux桌面系统。根据选择的桌面系统不同,有多个版本可供选择,比如基于unity的Ubuntu,基于Gnome的Ubuntu Gnome,基于KDE的Kubuntu,基于LXDE的Lubuntu以及基于Xfce的Xubuntu等。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。 Gentoo,伟大的Gentoo是Linux世界最年轻的发行版本,正因为年轻,所以能吸取在她之前的所有发行版本的优点,这也是Gentoo被称为最完美的Linux发行版本的原因之一。 FreeBSD,需要强调的是:FreeBSD并不是一个Linux系统!但FreeBSD与Linux的用户群有相当一部分是重合的,二者支持的硬件环境也比较一致,所采用的软件也比较类似,所以可以将FreeBSD视为一个Linux版本来比较。 FreeBSD拥有两个分支:stable和current。顾名思义,stable是稳定版,而current则是添加了新技术的测试版。FreeBSD采用Ports包管理系统,与Gentoo类似,基于源代码分发,必须在本地机器编后后才能运行,但是Ports系统没有Portage系统使用简便,使用起来稍微复杂一些。FreeBSD的最大特点就是稳定和高效,是作为服务器操作系统的最佳选择,但对硬件的支持没有Linux完备,所以并不适合作为桌面系统。 下面给为选择一个Linux发行版本犯愁的朋友一些建议: 如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大量的钱购买商业软件,那么你就需要一款适合桌面使用的Linux发行版本了,如果你不想自己定制任何东西,不想在系统上浪费太多时间,那么很简单,你就根据自己的爱好在ubuntu、kubuntu以及xubuntu中选一款吧,三者的区别仅仅是桌面程序的不一样。 如果你需要一个桌面系统,而且还想非常灵活的定制自己的Linux系统,想让自己的机器跑得更欢,不介意在Linux系统安装方面浪费一点时间,那么你的唯一选择就是Gentoo,尽情享受Gentoo带来的自由快感吧! 如果你需要的是一个服务器系统,而且你已经非常厌烦各种Linux的配置,只是想要一个比较稳定的服务器系统而已,那么你最好的选择就是CentOS了,安装完成后,经过简单的配置就能提供非常稳定的服务了。 如果你需要的是一个坚如磐石的非常稳定的服务器系统,那么你的唯一选择就是FreeBSD。 如果你需要一个稳定的服务器系统,而且想深入摸索一下Linux的各个方面的知识,想自己定制许多内容,那么我推荐你使用Gentoo。 4、描述常见的开源协议(GPL,LGPL, BSD,Apache等)以及开源协议的区别 1 GNU GPL (GNU General Public License GNU通用公共许可证) 只要软件中包含了遵循 GPL 协议的产品或代码,该软件就必须也遵循 GPL 许可协议且开源、免费,因此这个协议并不适合商用软件。遵循该协议的开源软件数量极其庞大,包括 Linux系统在内的大多数的开源软件都是基于这个协议的。GPL 开源许可协议最大的 4 个特点如下所示: 复制自由:允许把软件复制到任何人的电脑中,并且不限制复制的数量。 传播自由:允许软件以各种形式进行传播。 收费传播:允许在各种媒介上出售该软件,但必须提前让买家知道这个软件是可以免费获得的;因此,一般来讲,开源软件都是通过为用户提供有偿服务的形式来盈利的。 修改自由:允许开发人员增加或删除软件的功能,但软件修改后必须依然基于GPL 许可协议授权。
2 LGPL(GNU Lesser General Public License)
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
3 BSD(Berkeley Software Distribution,伯克利软件发布版)许可协议
用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面 3 个条件:
如果再发布的软件中包含源代码,则源代码必须继续遵循 BSD 许可协议。 如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原 始代码遵循了 BSD 协议。 不允许用原始软件的名字、作者名字或机构名称进行市场推广。
4 Apache许可证版本(Apache License Version)许可协议
在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。该许可协议适用于商业软件,现在热门的 Hadoop、Apache HTTP Server、MongoDB 等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要严格遵守下面的 4 个条件:
该软件及其衍生品必须继续使用 Apache 许可协议。
如果修改了程序源代码,需要在文档中进行声明。
若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息。
如果再发布的软件中有声明文件,则需在此文件中标注 Apache 许可协议及其他许可协议。
5 MIT(MIT)
MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制,也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
MIT协议又称麻省理工学院许可证,最初由麻省理工学院开发。被授权人权利:
1、被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
2、被授权人可根据程式的需要修改授权条款为适当的内容。被授权人义务:在软件和软件的所有副本中都必须包含版权声明和许可声明。
5、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 准则 1. 小即是美 2. 让每一个程序做好一件事 3. 快速建立原型 4. 舍弃高效率而取可移植性 5. 采取纯文本方式存储数据 6. 宠粉利用软件的杠杆效应(软件复用) 7. 使用shell脚本来提高杠杆效应和可移植性 8. 避免强制性的用户界面 9. 让每个程序都成为过滤器
小准则
1. 允许用户定制环境
2. 尽量是操作系统内核小而轻量化
3. 使用小写字母并尽量简写
4. 沉默是金
5. 各部分之和大于整体
6. 寻求90%的解决方案(2/8定律)
6、描述linux目录结构以及目录结构命名规定。
早在 1996 年,在真正理解文件系统的结构之前,我就学会了如何在我崭新的 Linux 上安装软件。这是一个问题,但对程序来说不是大问题,因为即使我不知道实际的可执行文件在哪里,它们也会神奇地工作。问题在于文档。
你知道,那时候,Linux 不是像今天这样直观、用户友好的系统。你必须读很多东西。你必须知道你的 CRT 显示器的扫描频率以及拨号调制解调器的噪音来龙去脉,以及其他数以百计的事情。 我很快就意识到我需要花一些时间来掌握目录的组织方式以及 /etc(不是用于“其它”文件),/usr(不是用于“用户”文件)和 /bin (不是“垃圾桶”)的意思。
本教程将帮助你比我当时更快地了解这些。
结构
从终端窗口探索 Linux 文件系统是有道理的,这并不是因为作者是一个脾气暴躁的老人,并且对新孩子和他们漂亮的图形工具不以为然(尽管某些事实如此),而是因为终端,尽管只是文本界面,才是更好地显示 Linux 目录树结构的工具。
事实上,帮助你了解这一切的、应该首先安装的第一个工具的名为:tree。如果你正在使用 Ubuntu 或 Debian ,你可以:
sudo apt install tree
在 Red Hat 或 Fedora :
sudo dnf install tree
对于 SUSE/openSUSE 可以使用 zypper:
sudo zypper install tree
对于使用 Arch (Manjaro,Antergos,等等)使用:
sudo pacman -S tree
……等等。
一旦安装好,在终端窗口运行 tree 命令:
tree /
上述指令中的 / 指的是根目录。系统中的其他目录都是从根目录分支而出,当你运行 tree 命令,并且告诉它从根目录开始,那么你就可以看到整个目录树,系统中的所有目录及其子目录,还有它们的文件。
如果你已经使用你的系统有一段时间了,这可能需要一段时间,因为即使你自己还没有生成很多文件,Linux 系统及其应用程序总是在记录、缓存和存储各种临时文件。文件系统中的条目数量会快速增长。
不过,不要感到不知所措。 相反,试试这个:
tree -L 1 /
你应该看到如图所示。

上面的指令可以翻译为“只显示以 /(根目录) 开头的目录树的第一级”。 -L 选项告诉树你想看到多少层目录。
大多数 Linux 发行版都会向你显示与你在上图中看到的相同或非常类似的结构。 这意味着,即使你现在感到困惑,掌握这一点,你将掌握大部分(如果不是全部的话)全世界的 Linux 文件系统。
为了让你开始走上掌控之路,让我们看看每个目录的用途。 当我们查看每一个目录的时候,你可以使用 ls 来查看他们的内容。
目录
从上到下,你所看到的目录如下
/bin /bin 目录是包含一些二进制文件的目录,即可以运行的一些应用程序。 你会在这个目录中找到上面提到的 ls 程序,以及用于新建和删除文件和目录、移动它们基本工具。还有其它一些程序,等等。文件系统树的其他部分有更多的 bin 目录,但我们将在一会儿讨论这些目录。
/boot /boot 目录包含启动系统所需的文件。我必须要说吗? 好吧,我会说:不要动它! 如果你在这里弄乱了其中一个文件,你可能无法运行你的 Linux,修复被破坏的系统是非常痛苦的一件事。 另一方面,不要太担心无意中破坏系统:你必须拥有超级用户权限才能执行此操作。
/dev `/dev 目录包含设备文件。 其中许多是在启动时或甚至在运行时生成的。 例如,如果你将新的网络摄像头或 USB 随身碟连接到你的机器中,则会自动弹出一个新的设备条目。
/etc /etc 的目录名称会让人变得非常的困惑。/etc 得名于最早的 Unix 系统们,它的字面意思是 “etcetera”(诸如此类) ,因为它是系统文件管理员不确定在哪里放置的文件的垃圾场。 现在,说 /etc 是“要配置的所有内容Everything To Configure”更为恰当,因为它包含大部分(如果不是全部的话)的系统配置文件。 例如,包含系统名称、用户及其密码、网络上计算机名称以及硬盘上分区的安装位置和时间的文件都在这里。 再说一遍,如果你是 Linux 的新手,最好是不要在这里接触太多,直到你对系统的工作有更好的理解。
/home /home 是你可以找到用户个人目录的地方。在我的情况下,/home 下有两个目录:/home/paul,其中包含我所有的东西;另外一个目录是 /home/guest 目录,以防有客人需要使用我的电脑。
/lib /lib 是库文件所在的地方。库是包含应用程序可以使用的代码文件。它们包含应用程序用于在桌面上绘制窗口、控制外围设备或将文件发送到硬盘的代码片段。 在文件系统周围散布着更多的 lib 目录,但是这个直接挂载在 / 的 /lib 目录是特殊的,除此之外,它包含了所有重要的内核模块。 内核模块是使你的显卡、声卡、WiFi、打印机等工作的驱动程序。
/media 在 /media 目录中,当你插入外部存储器试图访问它时,将自动挂载它。与此列表中的大多数其他项目不同,/media 并不追溯到 1970 年代,主要是因为当计算机正在运行而动态地插入和检测存储(U 盘、USB 硬盘、SD 卡、外部 SSD 等),这是近些年才发生的事。
/mnt 然而,/mnt 目录是一些过去的残余。这是你手动挂载存储设备或分区的地方。现在不常用了。
/opt /opt 目录通常是你编译软件(即,你从源代码构建,并不是从你的系统的软件库中安装软件)的地方。应用程序最终会出现在 /opt/bin 目录,库会在 /opt/lib 目录中出现。 稍微的题外话:应用程序和库的另一个地方是 /usr/local,在这里安装软件时,也会有 /usr/local/bin 和 /usr/local/lib 目录。开发人员如何配置文件来控制编译和安装过程,这就决定了软件安装到哪个地方。
/proc /proc,就像 /dev 是一个虚拟目录。它包含有关你的计算机的信息,例如关于你的 CPU 和你的 Linux 系统正在运行的内核的信息。与 /dev 一样,文件和目录是在计算机启动或运行时生成的,因为你的系统正在运行且会发生变化。
/root /root 是系统的超级用户(也称为“管理员”)的主目录。 它与其他用户的主目录是分开的,因为你不应该动它。 所以把自己的东西放在你自己的目录中,伙计们。
/run /run 是另一个新出现的目录。系统进程出于自己不可告人的原因使用它来存储临时数据。这是另一个不要动它的文件夹。
/sbin /sbin 与 /bin 类似,但它包含的应用程序只有超级用户(即首字母的 s )才需要。你可以使用 sudo 命令使用这些应用程序,该命令暂时允许你在许多 Linux 发行版上拥有超级用户权限。/sbin 目录通常包含可以安装、删除和格式化各种东西的工具。你可以想象,如果你使用不当,这些指令中有一些是致命的,所以要小心处理。
/usr /usr 目录是在 UNIX 早期用户的主目录所处的地方。然而,正如我们上面看到的,现在 /home 是用户保存他们的东西的地方。如今,/usr 包含了大量目录,而这些目录又包含了应用程序、库、文档、壁纸、图标和许多其他需要应用程序和服务共享的内容。 你还可以在 /usr 目录下找到 bin,sbin,lib 目录,它们与挂载到根目录下的那些有什么区别呢?现在的区别不是很大。在早期,/bin 目录(挂载在根目录下的)只会包含一些基本的命令,例如 ls、mv 和 rm ;这是一些在安装系统的时候就会预装的一些命令,用于维护系统的一个基本的命令。 而 /usr/bin 目录则包含了用户自己安装和用于工作的软件,例如文字处理器,浏览器和一些其他的软件。 但是许多现代的 Linux 发行版只是把所有的东西都放到 /usr/bin 中,并让 /bin 指向 /usr/bin,以防彻底删除它会破坏某些东西。因此,Debian、Ubuntu 和 Mint 仍然保持 /bin 和 /usr/bin (和 /sbin 和 /usr/sbin )分离;其他的,比如 Arch 和它衍生版,只是有一个“真实”存储二进制程序的目录,/usr/bin,其余的任何 bin 目录是指向 /usr/bin` 的“假”目录。
/srv /srv 目录包含服务器的数据。如果你正在 Linux 机器上运行 Web 服务器,你网站的 HTML文件将放到 /srv/http(或 /srv/www)。 如果你正在运行 FTP 服务器,则你的文件将放到 /srv/ftp。
/sys /sys 是另一个类似 /proc 和 /dev 的虚拟目录,它还包含连接到计算机的设备的信息。 在某些情况下,你还可以操纵这些设备。 例如,我可以通过修改存储在 /sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness 中的值来更改笔记本电脑屏幕的亮度(在你的机器上你可能会有不同的文件)。但要做到这一点,你必须成为超级用户。原因是,与许多其它虚拟目录一样,在 /sys 中打乱内容和文件可能是危险的,你可能会破坏系统。直到你确信你知道你在做什么。否则不要动它。
/tmp /tmp 包含临时文件,通常由正在运行的应用程序放置。文件和目录通常(并非总是)包含应用程序现在不需要但以后可能需要的数据。 你还可以使用 /tmp 来存储你自己的临时文件 —— /tmp 是少数挂载到根目录下而你可以在不成为超级用户的情况下与它进行实际交互的目录之一。
/var /var 最初被如此命名是因为它的内容被认为是可变的 variable ,因为它经常变化。今天,它有点用词不当,因为还有许多其他目录也包含频繁更改的数据,特别是我们上面看到的虚拟目录。 不管怎样,/var 目录包含了放在 /var/log 子目录的日志文件之类。日志是记录系统中发生的事件的文件。如果内核中出现了什么问题,它将被记录到 /var/log 下的文件中;如果有人试图从外部侵入你的计算机,你的防火墙也将记录尝试。它还包含用于任务的假脱机程序。这些“任务”可以是你发送给共享打印机必须等待执行的任务,因为另一个用户正在打印一个长文档,或者是等待递交给系统上的用户的邮件。 你的系统可能还有一些我们上面没有提到的目录。例如,在屏幕截图中,有一个 /snap 目录。这是因为这张截图是在 Ubuntu 系统上截取的。Ubuntu 最近将 snap[1] 包作为一种分发软件的方式。/snap 目录包含所有文件和从 snaps 安装的软件。
更深入的研究 这里仅仅谈了根目录,但是许多子目录都指向它们自己的一组文件和子目录。图 2 给出了基本文件系统的总体概念(图片是在 Paul Gardner 的 CC BY-SA 许可下提供的),Wikipedia 对每个目录的用途进行了总结[2]。
如图:标准 Unix 文件系统

要自行探索文件系统,请使用 cd 命令:cd将带你到你所选择的目录( cd 代表更改目录)。
如果你不知道你在哪儿,pwd会告诉你,你到底在哪里,( pwd 代表打印工作目录 ),同时 cd命令在没有任何选项或者参数的时候,将会直接带你到你自己的主目录,这是一个安全舒适的地方。
最后,cd ..将会带你到上一层目录,会使你更加接近根目录,如果你在 /usr/share/wallpapers 目录,然后你执行 cd .. 命令,你将会跳转到 /usr/share 目录
要查看目录里有什么内容,使用 ls 或这简单的使用 l 列出你所在目录的内容。 当然,你总是可以使用 tree 来获得目录中内容的概述。在 /usr/share 上试试——里面有很多有趣的东西。
总结
尽管 Linux 发行版之间存在细微差别,但它们的文件系统的布局非常相似。 你可以这么说:一旦你了解一个,你就会都了解了。 了解文件系统的最好方法就是探索它。 因此,伴随 tree ,ls 和 cd 进入未知的领域吧。
引用源:https://linux.cn/article-9798-1.html?pr