Linux入门到进阶路线
  https://www.zhihu.com/question/451255512
说来也是很搞笑😅....
我自己的的经历就是从来没真正系统的学过Linux。
记得第一次安装虚拟机的时候,电脑装的是Ubuntu系统,第一次发现与那里还有这种系统,还有命令行;
第二次再操作,发现这又是个Centos的系统,我还在寻思着怎么没有界面呢?(当然这也是后知后觉了~)
我没有完整地看过任何Linux相关的书籍,那我是怎么熬过来的呢?
答案就是 边用边学。
我的建议是 边用边学 ,而不是边学边用,后者容易忘记。
我仅列出作为一名Java程序员,在求职、工作的时候,需要掌握哪些Linux学习路线。
# 1、入门
为什么要学习Linux呢?
因为Linux系统具有天然的优势,Linux 对比 Windows:
- 稳定且有效率;
 - 免费(或少许费用);
 - 漏洞少且快速修补;
 - 多任务多用户;
 - 更加安全的用户与文件权限策略;
 - 适合小内核程序的嵌入系统;
 
使得大部分的服务都部署在linux系统。
Linux发行套件系统是我们常说的Linux操作系统,也即是由Linux内核与各种常用软件的集合产品。
# 1.1、操作系统概念
和Linux打交道是因为操作系统这门课程,可以说相辅相成,可以在学操作系统的时候把Linux的知识点也掌握了。
如果你已经学了操作系统,那么再学习Linux就会事半功倍。
你需要简单的知道一些概念:
- 进程、线程
 - 端口、防火墙、网卡
 - 公网、局域网
 
# 1.2、操作系统的分类
常见的Linux系统版本:
| 版本名称 | 网 址 | 特 点 | 软件包管理器 | 
|---|---|---|---|
| Debian Linux | www.debian.org (opens new window) | 开放的开发模式,且易于进行软件包升级 | apt | 
| Fedora Core | www.redhat.com (opens new window) | 优秀带桌面环境的系统,拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新 | up2date(rpm),yum (rpm) | 
| CentOS | www.centos.org (opens new window) | CentOS 是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统 RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞 | rpm | 
| SUSE Linux | www.suse.com (opens new window) | 专业的操作系统,易用的 YaST 软件包管理系统 | YaST(rpm),第三方 apt (rpm)软件库(repository) | 
| Ubuntu | www.ubuntu.com (opens new window) | 优秀带桌面环境的系统,基于 Debian 构建,对新款硬件具有极强的兼容能力。 | apt | 
目前市面上用的比较多的是CentOS,个人如果要学习用,建议用Ubuntu,因为是可视化的桌面,操作方便。
推荐个B站的Centos入门教程:基于CentOS7的Linux操作系统的入门与服务器的配置 (opens new window)
# 1.3、Shell
# shell是什么
不同的系统命令有所差异,但是不会很大,取决于它们用的是什么Shell。
Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
简单的说,shell是一个程序,提供一个环境,这个环境只有一个黑框,用户从键盘输入命令,又称为命令行环境(
command line interface,简写为CLI)
Shell收到命令后,发送给操作系统执行,并把结果返回。同时
Shell也提供了很多小工具,比如 vim、top、ll 等等
# shell的分类
Shell 有很多种,不同的系统使用不同的Shell
主要的 Shell 有下面这些:
- Bourne Shell(sh)
 - Debian Almquist Shell (dash);Debian、Ubuntu 默认使用
 - Bourne Again shell(bash);Centos、Fedora 默认使用
 - C Shell(csh)
 - TENEX C Shell(tcsh)
 - Korn shell(ksh)
 - Z Shell(zsh)
 - Friendly Interactive Shell(fish)
 
可以查看一下自己的Linux上支持哪些 shell:
[root@VM-8-8-centos ~]# echo $SHELL
/bin/bash
[root@VM-8-8-centos ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
查看用的哪一种 shell:
root@VM-8-8-centos ~]# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug  7  2020 /bin/sh -> bash
不同的shell区别不会很大,只是个别语法区别,在于写shell脚本。
所以在编写 .sh  的shell 脚本的时候,必须在头部告知Linux使用哪一种 shell 脚本执行:
#!/bin/bash
echo "------Hello,Coder--------"
# 1.4、准备一台服务器
在学习Linux前,你需要准备一台Linux服务器,这里有两种方式:
- 使用vmware这种软件安装虚拟机
 - 购买云服务器,比如阿里云、腾讯云
 
使用虚拟机的方式对电脑要求颇高,新手安装颇为复杂,安装可以参考:http://c.biancheng.net/view/714.html (opens new window)
我推荐第二种方式,学生或者新用户一个月只需要几块钱,就能拥有一台自己的服务器了,后续还可以搭建自己的个人网站。
推荐一些云服务器:
| 云厂商 | 学生优惠 | 新人优惠 | 
|---|---|---|
| 腾讯云 | 学生特惠,1核2G5M宽带,仅需9元/1个月 (opens new window) | 轻量应用服务器,2核2G 62元/年 (opens new window)(我目前用的首单白嫖版) | 
| Lighthouse轻量级服务器,1核2G首年99元 (opens new window)(我目前用的续费版) | ||
| 阿里云 | 学生免费领 (opens new window) | 轻量级云服务器2核2G 99元/年 (opens new window)(和腾讯云有点像) | 
| 百度云 | 1核2G 学生身份 9 元/1个月 (opens new window) | |
| 华为云 | 精选云服务器2折起 (opens new window) | |
| 七牛云 | 对象存储服务每月10GB免费空间 (opens new window) (用做云存储) | |
| 青云 | https://www.qingcloud.com (opens new window) | 
# 1.5、准备一个ssh工具
我们可以通过一些 ssh终端工具连接我们的Linux系统,这类工具具有较多功能,可以很方便的操作 Linux,比如 Xshell、SecureCRT、FinalShell等等。
# 2、基础
需要掌握一些基本的Linux命令。
作为一个程序员,必须要掌握一些基本的Linux命令。

教程推荐:菜鸟教程-linux教程 (opens new window)
如果你是学生,时间充裕,我建议看一下《鸟哥的私房菜》:

这本书还是很经典的,介绍十分详细,由于内容太多,但完全可以根据自己的方向挑选进行学习。
# 3、搭建服务
这部分是每个开发者必须要掌握的,常见如:
- Java环境
 - Nginx
 - Apache
 - MySQL
 - Redis
 
搭建服务意味着你可以独立服务,作为一个Java开发工程师,开发、测试 环境一般都是自己搭建服务。
会搭建并不是最重要的,重要的是使用和配置,比如Nginx的配置、MySQL的配置等等。
# 4、进阶
- 会熟练使用 三剑客:awk、grep、sed
 - shell语法,如 for、if、switch,进而编写shell脚本
 - 看得懂 top 、vmstart 等结果,知道 磁盘、内存、CPU情况,知道Java程序出了问题如何定位、排查
 - 熟练使用 vim,快捷键
 - 常见的第三方工具使用,比如阿里的 arthas、网卡监测 nload
 - 挂载、软硬链接、防火墙、网卡
 - Linux内核参数了解、调优
 
# 5、其他
初学者在学习Linux的时候容易忘记Linux命令,只要多使用,总会熟能生巧。
在遇到比较复杂的命令时,可以记录到自己的笔记,方便查看。
醋酸菌本人就是通过 有道云笔记 记录一些零碎的知识点:

云笔记会自动同步,在查找的时候也很方便,熟能生巧。