# Linux 是什么 ？

- **Linux**，全称GNU/Linux，是一种免费使用和自由传播的类UNIX操作系统，其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布，它主要受到Minix和Unix思想的启发，是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想，是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版，如基于社区开发的debian、archlinux，和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

## **发展历程**
- Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱：Unix操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。
- 20世纪80年代，计算机硬件的性能不断提高，PC的市场不断扩大，当时可供计算机选用的操作系统主要有Unix、DOS和iOS这几种。Unix价格昂贵，不能运行于PC；DOS显得简陋，且源代码被软件厂商严格保密；MacOS是一种专门用于苹果计算机的操作系统。此时，计算机科学领域迫切需要一个更加完善、强大、廉价和完全开放的操作系统。由于供教学使用的典型操作系统很少，因此当时在荷兰当教授的美国人AndrewS.Tanenbaum编写了一个操作系统，名为MINIX，为了向学生讲述操作系统内部工作原理。MINIX虽然很好，但只是一个用于教学目的的简单操作系统，而不是一个强有力的实用操作系统，然而最大的好处就是公开源代码。全世界学计算机的学生都通过钻研MINIX源代码来了解电脑里运行的MINIX操作系统，芬兰赫尔辛基大学大学二年级的学生Linus Torvalds就是其中一个，在吸收了MINIX精华的基础上，Linus于1991年写出了属于自己的Linux操作系统，版本为Linux0.01，是Linux时代开始的标志。他利用Unix的核心，去除繁杂的核心程序，改写成适用于一般计算机的x86系统，并放在网络上供大家下载，1994年推出完整的核心Version1.0，至此，Linux逐渐成为功能完善、稳定的操作系统，并被广泛使用。
- 2021年6月，根据Linux 5.14刚刚进入合并队列的char-misc-next提交，Linux 5.14正式移除了RAW驱动。

## **特点**

- Linux，全称GNU/Linux，是一套免费使用和自由传播的类Unix操作系统，是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展，Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外，在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制，而且可以根据自身的需要来修改完善Linux，使其最大化地适应用户的需要。
- Linux不仅系统性能稳定，而且是开源软件。其核心防火墙组件性能高效、配置简单，保证了系统的安全。在很多企业网络中，为了追求速度和安全，Linux不仅仅是被网络运维人员当作服务器使用，甚至当作网络防火墙，这是Linux的一大亮点。
- Linux具有开放源码、没有版权、技术社区用户多等特点，开放源码使得用户可以自由裁剪，灵活性高，功能强大，成本低。尤其系统中内嵌网络协议栈，经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。

## **主要特性**

### 基本思想
Linux的基本思想有两点：第一，一切都是文件；第二，每个文件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件，包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言，都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的，很大程度上也是因为这两者的基本思想十分相近。
### 完全免费
Linux是一款免费的操作系统，用户可以通过网络或其他途径免费获得，并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点，来自全世界的无数程序员参与了Linux的修改、编写工作，程序员可以根据自己的兴趣和灵感对其进行改变，这让Linux吸收了无数程序员的精华，不断壮大。
### 完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时，就想到以前在Windows下常见的程序是否能正常运行，这一点就消除了他们的疑虑。
### 多用户、多任务
Linux支持多用户，各个用户对于自己的文件设备有自己特殊的权利，保证了各用户之间互不影响。多任务则是现代电脑最主要的一个特点，Linux可以使多个程序同时并独立地运行。
### 良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统，用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似，可以说是一个Linux版的Windows。
### 支持多种平台
Linux可以运行在多种硬件平台上，如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统，可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作，使系统性能大大提高。
### 优点
1. Linux由众多微内核组成，其源代码完全开源；
2. Linux继承了Unix的特性，具有非常强大的网络功能，其支持所有的因特网协议，包括TCP/IPv4、TCP/IPv6和链路层拓扑程序等，且可以利用Unix的网络特性开发出新的协议栈；
3. Linux系统工具链完整，简单操作就可以配置出合适的开发环境，可以简化开发过程，减少开发中仿真工具的障碍，使系统具有较强的移植性；

## 系统功能

### 系统内核的路由转发
- **Linux**操作系统嵌入了TCP/IP协议栈，协议软件具有路由转发功能。路由转发依赖作为路由器的主机中安装多块网卡，当某一块网卡接收到数据包后，系统内核会根据数据包的目的IP地址，查询路由表，然后根据查询结果将数据包发送到另外一块网卡，最后通过此网卡把数据包发送出去。此主机的处理过程就是路由器完成的核心功能。
- 通过修改Linux系统内核参数ip_forward的方式实现路由功能，系统使用sysctl命令配置与显示在/proc/sys目录中的内核参数。首先在命令行输入：cat /proc/sys/net/ipv4/ip_forwad，检查Linux内核是不是开启IP转发功能。如果结果为1，表明路由转发功能已经开启；如果结果为0，表明没有开启。出于安全考虑，Linux内核默认是禁止数据包路由转发的。在linux系统中，有临时和永久两种方法启用转发功能。
-** 临时启用：**此种方法只对当前会话起作用，系统重启后不再启用。临时开启的命令格式：sysctl–wnet.ipv4.ip_forward=1。
- **永久启用：**此种永久性的启用IP转发功能，通过更改配置文件/etc/sysctl.conf中的语句行“net.ipv4.ip_forward=0”，修改为“net.ipv4.ip_forward=1”，保存配置文件后执行命令sysctl–p/etc/sysctl.conf，配置便立即启用。
### 开发工具
**Linux**已经成为工作、娱乐和个人生活等多个领域的支柱，人们已经越来越离不开它。在Linux的帮助下，技术的变革速度超出了人们的想象，Linux开发的速度也以指数规模增长。因此，越来越多的开发者也不断地加入开源和学习Linux开发的潮流当中。在这个过程之中，合适的工具是必不可少的，可喜的是，随着Linux的发展，大量适用于Linux的开发工具也不断成熟。  
### 容器
放眼现实，如今已经是容器的时代了。容器既极其容易部署，又可以方便地构建开发环境。如果针对的是特定的平台的开发，将开发流程所需要的各种工具都创建到容器映像中是一种很好的方法，只要使用这一个容器映像，就能够快速启动大量运行所需服务的实例。 
### 版本控制工具
如果正在开发一个大型项目，又或者参与团队开发，版本控制工具是必不可少的，它可以用于记录代码变更、提交代码以及合并代码。如果没有这样的工具，项目几乎无法妥善管理。 
### 文本编辑器
如果没有文本编辑器，在Linux上开发将会变得异常艰难。当然，文本编辑器之间孰优孰劣，具体还是要取决于开发者的需求。 
### 集成开发环境
集成开发环境（Integrated Development Environment，IDE） 是包含一整套全面的工具、可以实现一站式功能的开发环境。 
### 文本比较工具
有时候会需要比较两个文件的内容来找到它们之间的不同之处，它们可能是同一文件的两个不同副本（例如有一个经过编译，而另一个没有）。这种情况下，肯定不想要凭借肉眼来找出差异，而是想要使用像Med这样的工具。
### 嵌入式Linux
- 对Linux进行适当的修改和删减，并且能够在嵌入式系统上使用的系统，就是嵌入式Linux操作系统。具有如下的特点： 
- Linux系统是完全开放、免费的。正是开放性，它才能和其他系统互相兼容，进而实现信息的互联。而且它可以任意修改源代码，这是其他系统所不具备的。
- Linux操作系统的显著优势是多用户和多任务。保证了多个用户使用互不影响；多任务独立开后，互不干扰，使得效率方面大大提高，可以充分把性能发挥出来。
- 设备是独立的。只要安装驱动程序，在驱动程序的支持和帮助下，任何用户都可以像使用文件一样，对任意设备进行使用和操作，这使得人们完全不用考虑设备存在的具体形式。
### Linux服务器
**Linux**服务器是设计出来进行业务处理应用的，在网络和计算机系统当中有广泛的应用，可以提供数据库管理和网络服务等内容，是一种性能非常高的和开源的服务器，在我国的计算机系统的客户端当中，有很多采用的就是Linux系统，其使用的范围非常广泛，用户体验反应较好。但是对于一些希望计算机应用性能比较高的单位而言，windows系统需要经常进行资源整合和碎片化管理，系统在配置的时候经常需要重新启动，这就无法避免产生停机的问题。同时，由于Linux系统的处理能力非常强悍，具备不可比拟的稳定性特征，因而Linux系统就不用经常进行重启，Linux系统的变化可以在配置的过程中实现，所以Linux服务器出现故障的概率比较小，所以很多企业组织在计算机配置的过程中经常使用Linux系统，从而降低服务器发生崩溃的可能性，很多企业在配置Linux系统的时候，都是通过减少服务器的故障发生率，实现企业业务的高效运转。 

## 使用说明

### 常用命令及技巧
1. date：打印或者设置系统的日期和时间
2. stty-a：可以查看或者打印控制字符（Ctrl-C、Ctrl-D、Ctrl-Z等）
3. passwd：用passwd-h查看
4. login、 logout ： shell的登录和注销命令
5. more，less，head tail：显示或部分显示文件内容
6. lp/lpstat/cancel，lpr/lpq/lprm：打印文件
7. chmod u+x：更改文件权限
8. rm -fr dir：删除非空目录
9. cp -R dir：拷贝目录
10. fg jobid：可以将一个后台进程放到前台
11. kill的作用：send a signal to a process、eg：kill-9发送的是SIG_KILL信号，具体发送什么信号可以通过man kill查看、
12. ps的用法，ps-e或ps-o pid，ppid，session，tpgid，comm（其中session显示的sessionid，tpgid显示前台进程组id，comm显示命令名称）
13. ip a 查看ip地址信息的命令
14. zcat /proc/config.gz > config 到内核配置文件

### 安全隐患及加固措施
**用户账户以及登录安全**
- 删除多余用户和用户组。Linux是多用户操作系统，存在很多种不一样的角色系统账号，当安装完成操作系统之后，系统会默认为未添加许用户组及用户，若是部分用户或是用户组不需要，应当立即删除它们，否则黑客很有可能利用这些账号，对服务器实施攻击。具体保留哪些账号，可以依据服务器的用途来决定。
- 关闭不需要的系统服务。操作系统安装完成之后，其会在安装的过程当中，会自主的启动各种类型的服务程序内容，对于长时间运行的服务器而言，其运行的服务程序越多，则系统的安全性就越低。所以，用户或是用户组就需要将一些应用不到的服务程序进行关闭，这对提升系统的安全性能，有着极大的帮助。
- 密码安全策略。在Linux之下，远程的登录系统具备两种认证的形式：即密钥与密码认证。其中，密钥认证的形式，主要是将公钥储存在远程的服务器之上，私钥存储在本地。当进行系统登陆的时候，再通过本地的私钥，以及远程的服务器公钥，进行配对认证的操作，若是认证的匹配度一致，则用户便能够畅通无阻的登录系统。此类认证的方式，并不会受到暴力破解的威胁。与此同时，只需要确保本地私钥的安全，使其不会被黑客所盗取即可，攻击者便不能够通过此类认证方式登陆到系统中。所以，推荐使用密钥方式进行系统登陆。
- 有效应用su、sudo命令。su命令的作用的是对用户进行切换。当管理员登录到系统之后，使用su命令切换到超级用户角色来执行一些需要超级权限的命令。但是由于超级用户的权限过大，同时，需要管理人员知道超级用户密码，因此su命令具有很严重的管理风险。
- sudo命令允许系统赋予普通用户一些超级权限，并且不需普通用户切换到超级用户。因此，在管理上应当细化权限分配机制，使用sudo命令为每一位管理员服务其特定的管理权限。  

**远程访问及登陆认证安全**  
远程登录应用SSH登陆方式。telnet是一类存在安全隐患的登录认证服务，其在网络之上利用明文传输内容，黑客很容易通过截获telnet数据包，获得用户的登陆口令。并且telnet服务程序的安全验证方式存在较大的安全隐患，使其成为黑客攻击的目标。SSH服务则会将数据进行加密传输，能够防止DNS欺骗以及IP欺骗，并且传输的数据是经过压缩，在一定程度上保证了服务器远程连接的安全。  

**文件系统安全**  
- 加固系统重要文件。在Linux系统中，如果黑客取得超级权限，那么他在操作系统里面就不会再有任何的限制地做任何事情。在这种情况下，一个加固的文件系统将会是保护系统安全的最后一道防线。管理员可通过chattr命令锁定系统一些重要文件或目录。
- 文件权限检查与修改。如果操作系统当中的重要文件的权限设置不合理，则会对操作系统的安全性，产生最为直接的影响。所以，系统的运行维护人员需要及时的察觉到权限配置不合理的文件和目录，并及时修正，以防安全事件发生。
- 安全设定/tmp、/var/tmp、/dev/shm。在该操作系统当中，其用于存放临时文件的目录，主要有两个，分别为/tmp与/var/tmp。它们有个共同特点，就是所有的用户可读可写和执行，这样就对系统产生了安全隐患。针对这两个目录进行设置，不允许这两个目录下执行应用程序。
  
**系统软件安全**  
绝大多数的服务器遭受攻击是因为系统软件或者应用程序有重大漏洞。黑客通过这些漏洞，可以轻松地侵入服务器。管理员应定期检查并修复漏洞。最常见的做法是升级软件，将软件保持在最新版本状态。这样就可以在一定程度上降低系统被入侵的可能性。























