Skip to content

Commit

Permalink
[fix]Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
Snailclimb committed Aug 7, 2020
1 parent 6a868df commit 00a20ca
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 40 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -390,8 +390,7 @@ SSO(Single Sign On)即单点登录说的是用户登陆多个子系统的其中
1. [Java学习路线和方法推荐](docs/questions/java-learning-path-and-methods.md)
2. [Java培训四个月能学会吗?](docs/questions/java-training-4-month.md)
3. [新手学习Java,有哪些Java相关的博客,专栏,和技术学习网站推荐?](docs/questions/java-learning-website-blog.md)
4. [Java 还是大数据,你需要了解这些东西!](docs/questions/java-big-data)
5. [Java 后台开发/大数据?你需要了解这些东西!](https://articles.zsxq.com/id_wto1iwd5g72o.html)(知识星球)
4. [Java 还是大数据,你需要了解这些东西!](docs/questions/java-big-data.md)

## 资源

Expand Down
74 changes: 42 additions & 32 deletions docs/operating-system/linux.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。

> 学习Linux之前,我们先来简单的认识一下操作系统。
今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令。

如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!

## 从认识操作系统开始

正式开始 Linux 之前,简单花一点点篇幅科普一下操作系统相关的内容。

### 操作系统简介

我通过以下四点介绍什么是操作系统:

1. **操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机系统的Linux与基石**
2. **操作系统本质上是运行在计算机上的软件程序**
1. **操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石**
2. **操作系统本质上是一个运行在计算机上的软件程序**
3. **操作系统为用户提供一个与系统交互的操作界面 ;**
4. **操作系统分Linux与外壳(我们可以把外壳理解成围绕着Linux的应用程序,而Linux就是能操作硬件的程序)。**
4. **操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。**

> Linux(Kernel)在后文会提到
> 内核(Kernel)在后文中会提到
![操作系统分Linux与外壳](images/操作系统Linux和外核.png)
![操作系统分Linux与外壳](images/操作系统内核和外核.png)

### 操作系统简单分类

Expand All @@ -27,38 +31,38 @@

#### Unix

最早的多用户、多任务操作系统 。按照操作系统的分类,属于分时操作系统。Unix 大多被用在服务器、工作站,现在也有用在个人计算机上。它在创建互联网、计算机网络或客户端/服务器模型方面发挥着非常重要的作用
最早的多用户、多任务操作系统 。后面崛起的 Linux 在很多方面都参考了 Unix

目前这款操作系统已经逐渐逐渐退出操作系统的舞台。

![Unix](images/操作系统简单分类.png)

#### Linux

**Linux是一套免费使用、开源的类Unix操作系统。** Linux存在着许多不同的Linux版本,但它们都使用了 **LinuxLinux**
**Linux是一套免费使用、开源的类Unix操作系统。** Linux存在着许多不同的发行版本,但它们都使用了 **Linux 内核**

严格来讲,Linux这个词本身只表示LinuxLinux,在 GNU/Linux 系统中,Linux 实际就是Linux组件,而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。单独的 Linux Linux并不能成为一个可以正常工作的操作系统

> 很多人更倾向使用 “GNU/Linux” 一词来表达人们通常所说的 “Linux”。
> 严格来讲,Linux这个词本身只表示Linux 内核,在 GNU/Linux 系统中,Linux实际就是Linux内核,而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。单独的 Linux 内核并不能成为一个可以正常工作的操作系统
>
> **很多人更倾向使用 “GNU/Linux” 一词来表达人们通常所说的 “Linux”。**
![Linux](images/Linux-Logo.png)

#### Mac OS

苹果自家的操作系统,编程体验和 Linux相当,但是界面、软件生态以及用户体验各方面都要比 Linux 操作系统更好。

### 操作系统的Linux(Kernel)
### 操作系统的内核(Kernel)

我们先来看看维基百科对于Linux的解释,我觉得总结的非常好!
我们先来看看维基百科对于内核的解释,我觉得总结的非常好!

> **Linux**(英语:Kernel,又称核心)在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及电脑中其他电子组件进行处理,是现代操作系统中最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由Linux决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的。所以Linux通常提供一种硬件抽象的方法,来完成这些操作。有了这个,通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及IO设备)。
> **内核**(英语:Kernel,又称核心)在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的电脑程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及电脑中其他电子组件进行处理,是现代操作系统中最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。 **直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。有了这个,通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及IO设备)。**
>
> 严格地说,Linux并不是计算机系统中必要的组成部分。有些程序可以直接地被调入计算机中执行;这样的设计,说明了设计者不希望提供任何硬件抽象和操作系统的支持;它常见于早期计算机系统的设计中。但随着电脑技术的发展,最终,一些辅助性程序,例如程序加载器和调试器,被设计到机器Linux当中,或者写入在只读记忆体里。这些变化发生时,操作系统Linux的概念就渐渐明晰起来了!
> 早期计算机系统的设计中,还没有操作系统的内核这个概念。随着计算机系统的发展,操作系统内核的概念才渐渐明晰起来了!
简单概括两点:

1. 操作系统的Linux(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
2. 操作系统的Linux是连接应用程序和硬件的桥梁,决定着操作系统的性能和稳定性。
1. 操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
2. 操作系统的内核是连接应用程序和硬件的桥梁,决定着操作系统的性能和稳定性。

### 中央处理器(CPU,Central Processing Unit)

Expand All @@ -68,10 +72,12 @@
2. CPU 主要包括两个部分,即控制器、运算器。
3. CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。

很多人容易无法区分操作系统的Linux(Kernel)和中央处理器(CPU),你可以简单从下面两点来区别:
很多人容易无法区分操作系统的内核(Kernel)和中央处理器(CPU),你可以简单从下面两点来区别:

1. 操作系统的Linux(Kernel)属于操作系统层面,而CPU属于硬件。
2. CPU 主要提供运算,处理各种指令的能力。Linux(Kernel)主要负责系统管理比如内存管理,它屏蔽了对硬件的操作。
1. 操作系统的内核(Kernel)属于操作系统层面,而CPU属于硬件。
2. CPU 主要提供运算,处理各种指令的能力。内核(Kernel)主要负责系统管理比如内存管理,它屏蔽了对硬件的操作。

下图清晰说明了应用程序、内核、CPU这三者的关系。

<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-8/1200px-Kernel_Layout.svg.png" alt="Kernel (operating system) - Wikipedia" style="zoom:50%;" />

Expand All @@ -84,46 +90,50 @@
1. **用户态(user mode)** : 用户态运行的进程或可以直接读取用户程序的数据。
2. **系统态(kernel mode)**: 可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。

说了用户态和系统态之后,那么什么是系统调用呢?
**说了用户态和系统态之后,那么什么是系统调用呢?**

我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能咋办呢?那就需要系统调用了!

也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。

这些系统调用按功能大致可分为如下几类:

- 设备管理。完成设备的请求或释放,以及设备启动等功能。
- 文件管理。完成文件的读、写、创建及删除等功能。
- 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
- 进程通信。完成进程之间的消息传递或信号传递等功能。
- 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
- **设备管理** :完成设备的请求或释放,以及设备启动等功能。
- **文件管理** :完成文件的读、写、创建及删除等功能。
- **进程控制** :完成进程的创建、撤销、阻塞及唤醒等功能。
- **进程通信** :完成进程之间的消息传递或信号传递等功能。
- **内存管理** :完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

我在网上找了一个图,通过这个图可以很清晰的说明用户程序、系统调用、内核和硬件之间的关系。(*太难了~木有自己画*

![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-8/L181kk2Eou-compress.jpg)

## 初探Linux

### Linux简介

我们上面已经介绍到了Linux,我们这里只强调三点。
- **类Unix系统** : Linux是一种自由、开放源码的类似Unix的操作系统
- **Linux 本质是指 Linux Linux** : 严格来讲,Linux这个词本身只表示LinuxLinux,在 GNU/Linux 系统中,Linux 实际就是Linux组件,而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。单独的 Linux Linux并不能成为一个可以正常工作的操作系统
- **Linux之父** : 一个编程领域的传奇式人物,真大佬!我辈崇拜敬仰之楷模。他是 **LinuxLinux** 的最早作者,随后发起了这个开源项目,担任LinuxLinux的首要架构师与项目协调者。他还发起了Git这个开源项目,并为主要的开发者。
- **Linux 本质是指 Linux 内核** : 严格来讲,Linux这个词本身只表示Linux内核,单独的 Linux 内核并不能成为一个可以正常工作的操作系统。所以,就有了各种Linux发行版
- **Linux之父** : 一个编程领域的传奇式人物,真大佬!我辈崇拜敬仰之楷模。他是 **Linux内核** 的最早作者,随后发起了这个开源项目,担任Linux内核的首要架构师与项目协调者。他还发起了Git这个开源项目,并为主要的开发者。

![Linux](images/Linux之父.png)

### Linux诞生

1989年,Linus Torvalds进入芬兰陆军新地区旅,服11个月的国家义务兵役,军衔为少尉,主要服务于计算机部门,任务是弹道计算。服役期间,购买了安德鲁·斯图尔特·塔能鲍姆所著的教科书及minix源代码,开始研究操作系统。1990年,他退伍后回到大学,开始接触Unix。

> **Minix** 是一个迷你版本的类Unix操作系统,由塔能鲍姆教授为了教学之用而创作,采用微核心设计。它启发了LinuxLinux的创作
> **Minix** 是一个迷你版本的类Unix操作系统,由塔能鲍姆教授为了教学之用而创作,采用微核心设计。它启发了Linux内核的创作
1991年,Linus Torvalds 开源了Linux Linux。Linux以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。
1991年,Linus Torvalds 开源了Linux 内核。Linux以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。

![OPINION: Make the switch to a Linux operating system | Opinion ...](images/Linux-Logo.png)

### 常见Linux发行版本有哪些?

Linus Torvalds 开源的只是 Linux Linux,我们上面也提到了操作系统Linux的作用。一些组织或厂商将 Linux Linux与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。
Linus Torvalds 开源的只是 Linux 内核,我们上面也提到了操作系统内核的作用。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。

> Linux主要负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
> 内核主要负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
Linux 的发行版本可以大体分为两类:

Expand Down
6 changes: 0 additions & 6 deletions docs/questions/java-big-data.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
写这篇文章主要是为了回答球友的一个提问,提问如下:

<img src="https://images.zsxq.com/FnQni8YSJnmf0pggEU2v97la8asf?imageMogr2/auto-orient/thumbnail/800x/format/jpg/blur/1x0/quality/75&amp;e=1585670399&amp;token=kIxbL07-8jAj8w1n4s9zv64FuZZNEATmlU_Vm6zD:eWVfRnoHs3OVvuAjN8Ysv29oues=" style="zoom:50%;" />

刚好自己对这方面有一丁点的见解,所以回答一下这位老哥的问题,如果能够解决他的问题,我也会很高兴。下面仅仅代表个人一件,环境大家批评指正与完善!

先说一下自己的经历,大学的时候我从大二开始学习 Java ,然后学了大半年多的安卓。之后就开始学习 Java 后台,学习完 Java 后台一些常用的知识比如 Java基础、Spring、MyBatis等等之后。因为感觉大数据领域发展也挺不错的,所以就接触了一些大数据方面的知识比如当时大数据领域的霸主 Hadoop 。

> 我当时学习了很多比较古老的技术比如现在基本不会用的 JSP、Struts2等等。另外,我
Expand Down

0 comments on commit 00a20ca

Please sign in to comment.