前言
此前,我们已经简单地讨论过**Linux和Window的区别**。我们现在就要开始玩Linux了!那么我们要做哪些准备工作呢?
我建议你掌握一些Linux基础,一方面是觉得作为另外一种操作系统,基于兴趣你可以了解一下,反正多学一些东西它不是坏事;另一方面呢,主要是因为Linux还可以很好地支持Docker。
虽然我们还没有正式地学习Docker,但是还是可以简单地聊一下。首先,Docker是跨平台的(至少表面上是这样)。类似于Conda一样,你甚至可以在Windows里安装Docker。除了Windows,很多Network attached storage(NAS)操作系统,比如群晖、Unraid、TrueNAS/FreeNAS都不同程度地支持Docker。OpenMediaVault就不说了,就是一个披了NAS外衣的Debian系统嘛(Ubuntu也可以算是Debian系Linux发行版)!
掌握了一些Linux基础后,可以无压力阅读我的Docker系列博文。虽然Docker的部署是比较傻瓜式的,但是有一些Linux的基础将会让你的Docker如鱼得水;对于一些比较复杂的目标,比如将chevereto图床的数据从宝塔面板迁移到docker容器,就需要进入到容器Shell
的内容控制mysql数据库;这时候Linux基础的功底将让你可以轻松地驾驭这些不寻常的操作。
尽管如此,在Linux下了解Docker还是有好处的。根据我的经验,Linux Docker的通用性比较强。我之前曾经在一个用Unraid的小伙伴那里,通过Shell使用Docker,毫无违和感。这也许是因为Docker与Linux内核的交互性比较强吧,所以它的拓展性也很强。不管怎样,如果你以前没有怎么接触过Docker或者是NAS,那么你一定会被Docker的可玩性深深折服!
本博客也是通过WordPress的Docker镜像布署的。是不是很帅呐! 当然啦,如果你跟着我的节奏学习,可能要比较晚才接触到相关的知识。这里不得不提一句,WordPress个人博客也是个深坑,里面讲究的东西多着呢!
Markdown
无论学习什么编程语言,包括学习Linux,我个人强烈建议你先了解markdown
。实际上,对于任何一个进行与文本处理有关工作或者学习的人,markdown
都是一个非常不错的工具。
对于我来说,markdown
在我的工作体系中是非常基础和低层的,大量的文本都是基于markdown
。本博客的所有文章基本上都是用markdown
来编写的。
markdown
主要是用于快速而有条理地进行文本记录。如果你只追求文本的层次感而不特别在意文本的特效,markdown
就是你的菜了 。
它有以下优点:
- 本身是免费的。某些编辑器可能会收费。如果你介意,完全可以找到免费的替代器。
- 在程序员群体中被广泛使用:Github仓库的READNE文档的默认格式也是markdown。Reddit、Github或者是很多社区论坛、个人博客都支持markdown语法。简书也支持markdown写作。
- 优秀的代码展示:本博客的代码高亮等效果都依赖于markdown的渲染。这应该也是Github、众多平台/论坛和个人博客都支持markdown语法的主要原因之一吧!
- 与html良好交互:markdown生成的网页一点违和感都没有,看本博客可一窥其效果。你在某些网页复制下来的内容甚至可以直接粘贴成markdown格式。
- 丰富的表情包。这算不算优点呀(~ ̄▽ ̄)~ 。
- 其它:百度Google了解吧。
总之,markdown
对于学习编程来说是个必备神器,学习Linux也是同样的。它与LaTex
、Jupyter Notebook
等重要工具也有密切的联系。学R语言的人如果用过RMarkdown
的话,也一定会被它的简单高效所震惊。
所以,你应该花1个小时左右学习一下markdown的语法和相关的快捷键,非常简单。这甚至可能是你人生最美好的1小时!至于进阶的使用,比如mermaid
之类的,以后自然慢慢就会了解了。我平时的写作,一般也只需要用到最基本的语法。
在电脑端推荐使用**Typora编辑器
**进行markdown的写作,三大电脑操作系统(Windows/Mac/Linux)的版本都有。用过的人都说好喔!最近正式版收费了,但也不用很贵,估计也有破解版。不过为了支持开源社区,我已经买了正式版了,89元有一个可以使用3次的激活码。如果在意它不是免费的,选其它编辑器也行!估计选择只能用“多如牛毛”来形容了!
不过,markdown要搭配在线图床使用才有最佳效果。至于在线图床的搭建可见本博客的相关教程,在此不再赘述。在刚刚开始使用时,你可以将图片托管到本地电脑的一个固定目录,以后搭建好图床可以一键上传;或者你可以先了解一下如何利用Github或者Gitee搭建免费的个人图床。
Virtual Private Server (VPS)
Virtual Private Server (VPS, 虚拟专用服务器)主要是基于操作系统级的虚拟技术而开发出来的一种服务。一般就叫VPS,也有人叫“小鸡”之类的,因为个人买的VPS配置往往是比较差的。在个人层面上讨论的“阿里云”、“腾讯云”狭义上就是VPS。
那么玩Linux为什么需要VPS呢?我觉得有以下几个理由:
- 很多互联网公司都提供VPS服务,比如阿里云,腾讯云。国外也有很多。
- 资费便宜。一般一年50-100远左右的VPS就可以玩很多东西了。
- VPS有一个独立的管理后台,可以随时关闭、销毁和重装系统,适合新手折腾。
- VPS通常有一个固定的公网ip(类似于
118.69.33.74
这样的),并且开放443端口,这在家用宽带里通常是不可用的。固定的公网ip和开放的443端口对于新手入门一些互联网服务(基于https)更加容易。家用宽带就算是特别去申请,也只能用一个动态的公网ip,需要运用动态域名解析(DDNS)的相关操作可以稳定使用互联网服务,对新手来说不是很友好。 - 不用像物理主机那样花时间去布署系统和交电费。
注册个帐号,交几十块钱,马上就有一个完整的系统给你玩。还要什么自行车啊?
**VPS那么好,为什么还有人要在家里搭NAS呢?**首先,VPS的网络资源往往是有所限制的,主机的配置也比较差。对于家庭影音之类的对带宽要求较高的应用场景是不合适布署在VPS上的。而且呢,如果你买的VPS如果和一般的NAS一样配置,价格可能要贵上十几二十倍呢。家用NAS,或者是某些公司的NAS,多数是在局域网中运行,与VPS相比对于网络安全的管理要求更低一些(如果有互联网服务,那么也要考虑网络安全的问题)。
有些人可能不放心自己的数据托管在VPS中,就会选择自建NAS托管个人数据。毕竟VPS是一个公司的服务,你的个人数据可能会被他们利用,也有可能泄露给其它人。像Facebook这样的大公司也曾经出现过严重的数据泄露。不过新手应该暂时不用考虑这种问题,毕竟网络和数据安全可是一个很大的话题呢,相关的讨论可以看本博客的相关文章。
更重要的是,家用NAS的容量基本上是吊打VPS的。家用NAS的容量往往是以TB为计量单位,有一些工作室的NAS容量甚至达到PB级。它们往往通过一种叫做磁盘阵列
的技术,将多块硬盘的容量融合到一起(暂时可以这么理解,哈哈)。ZFS文件系统
是个有趣的东西,以后有机会我会单独地讨论它的使用。在存储上,新手用VPS暂时只需要考虑容量问题。
总之,对于新手来说,VPS是入门Linux的一个不错的选择。你也可以选择在个人电脑上搭建一个VM虚拟机来爽一把,不过我觉得体验上VPS要好一些。而且在VM虚拟机上很难进行互联网服务的测试,因为它会受限于你的个人宽带,而家用宽带会存在前面所提及的一些限制。
新手在选择VPS的时候最好选择海外的机房。因为国内的机器要玩互联网服务的时候需要备案,这通常会花费一个月的时间;而国外的VPS就没有这种限制。而且我自己的经验,国外的VPS的稳定性也不错,甚至可以当作一台正式的主机来部署服务。有一些品牌的海外NAS应该是可以支付宝和微信支付的,自己可以了解一下。
另外,如果你是一个成熟的社会人的话,可以去办一个Visa信用卡,这样购买海外的服务会比较简单。不用担心过度消费的问题,毕竟过度消费是个人观念问题,不要甩锅给你的信用卡啦
VPS容量
玩Docker的话,推荐ssd至少20G以上,内存1G或以上,CPU差一点都没关系。
如果你没的买过VPS的话,可看Racknerd-199这款VPS!它的属性大致如下:
Labor Day Promo - 3GB KVM
Limited Quantity: 200
3x vCPU Core
45 GB SSD Cached RAID-10 Storage
3 GB RAM
6500GB Monthly Premium Bandwidth
1Gbps Public Network Port
Full Root Admin Access
1 Dedicated IPv4 Address
KVM / SolusVM Control Panel - Reboot, Reinstall, Manage rDNS, & much more
LOCATION: Los Angeles
JUST $24.28/YEAR or $47.06/2 YEARS
可以用支付宝付款。
我之前用的是一个小Racknerd VPS,是10G固态硬盘空间。布署了几个docker应用后,有一天我发现我的网站登陆后显示“连接数据库错误”(是英文的,具体是什么当时没截图)。其实在前一两天我就发现一些奇怪的事情,那就是当我部署一个docker container的时候,另外一个docker container出现数据库连接错误,我当时无法理解这个事,因为我一直以为docker提供了进程级隔离,不应该出现这种状况。不过当我看了mysql的错误日志后,它提示空间不足时,我就意识到可能有一些暗藏的巨大文件(夹)。
我直接在根目录运行ncdu
命令,发现了一个docker相关的大文件夹overlay2
:如图所示:
而我只是装了这一点应用:
在互联网上,docker的overlay2占用巨额磁盘资源
是一个被频繁提问的问题。截止本文成书之时,我暂未有十分妥善的解决方案。这里我做了一个小检测:
# 查看文件夹内所有子文件,并展示容量排名前10位的文件
du -Sh /var/lib/docker/overlay2 | sort -nr | head -n10
输出结果如下:
1012K /var/lib/docker/overlay2/dec91c65475c0a5838d3a23d1e830eb46cf2c27037a21b9fe5a02a73b8ac5a0f/diff/var/cache/debconf
1008K /var/lib/docker/overlay2/ba3a7e92a61f5c76c3e25fa37c750cbac947c4a0e8fceb80088c19e2a5828602/merged/opt/certbot/lib/python3.7/site-packages/setuptools
1008K /var/lib/docker/overlay2/8ffeb14c1d8b77e15b21d2489090d9169990e78c575e7579cf4f178ec27386bd/diff/opt/certbot/lib/python3.7/site-packages/setuptools
1008K /var/lib/docker/overlay2/85b27ebc3c8bb3ea1e124ef9ab07ac68fe35f01f0f6fa94d2ccf72881174aee7/diff/tmp/openresty/build/nginx-1.19.9/objs/src/event
1008K /var/lib/docker/overlay2/4c9beda74ed14a677330556b35731aeb0e17c406ebfc878369f4ab062ce77b8d/diff/usr/local/lib/python3.7/dist-packages/setuptools
1000K /var/lib/docker/overlay2/cea540335b98a07364735f6cc32d5f7c23c191280be74d695ead72e311e4625b/merged/usr/lib/apt/methods
1000K /var/lib/docker/overlay2/c3f4b9167b48a31ee19c64620330ade3297da0d7d466bd6675a2f38b22ba3b53/merged/usr/lib/apt/methods
1000K /var/lib/docker/overlay2/8903b219f07ee7806e4e0d731fb8d090ef1a6972a30156ac181f6dc3b4783bec/merged/usr/lib/apt/methods
1000K /var/lib/docker/overlay2/20839a224f7d55cc6fa5f69d4dcc133876f4ed190862356801360d134e859d15/merged/usr/lib/x86_64-linux-gnu/security
1000K /var/lib/docker/overlay2/155e139374af71f0f3fe0edf3b1acfcaecdbd309226908034bbabae1abe19430/diff/usr/lib/apt/methods
可见并没有容量十分集中的文件。
所以docker的overlay2占用巨额磁盘资源
是一个复杂的问题,背后有很多可能的成因,并不像网络上的答案那样那么容易解决。在我这个例子中,也许docker本身就不是一个轻量级的应用,它需要足够的容量去支持;或许我尝试应该做好备份,然后清空一波image和contrainer,重新再上线docker应用。不过目前打算先观察一下,毕竟在删除一些文件后它还是可以被使用。
家用NAS用户应该不会发现这个问题。因为家用NAS的容量都是以T来计算的。这丁点容量连一部蓝光电影都比不上。提问者大概率是VPS用户,因为VPS的容量往往很小(一般只有几十G)。但是你如果使用VPS,容量管理就会变得非常重要。
最后提醒大家的是,互联网不是法外之地,大家不要利用VPS来做违法犯罪的勾当喔!
Domain(域名)
如果你想用VPS搭建一些互联网服务(个人图床、个人博客),那么你还需要一个域名
,类似baidu.com
、google.com
这样的。一般.com
结尾的域名会贵一些(一年几十块这样),新手可以选一些冷门的,比如.top
啥的,一年几块钱就行了。
国内一般是选阿里云
、腾讯云
托管域名,而国外的话可以选择cloudflare
。其它的服务商我也没有用过,但都是大同小异的,哪个有名哪个常用就选哪个就是了。
值得一提的是,好的域名服务商会有很多高级服务的,对于安全性或者企业级环境可能是很重要的,不过这方面我了解也比较有限。
总之就是花一点小钱买个域名嘛,一般是按年收费的。好处多多的 。你买了域名后短时间内暂时还用不上的,等以后需要布署互联网服务的时候才用得上。你也可以等那个时侯再买域名。
至于域名购买、公网ip解析这些基本操作我就不一一说明了,每个服务商都大同小异,网上教程太多了,自己百度Google一下。如果你还没有什么个人选择,建议你和我一样,在Cloudflare上托管你的境外域名。这样,你就可以在个人博客建设和VPS网络安全里得到我的相关建议了!
Shell客户端
假设你已经有了一个VPS,有一个公网ip/帐户/密码,你要怎么远程地访问它呢?
我们可以在windows系统上装xShell、FinalShell、Putty、MobaXterm之类的软件。它们工作时大致长这样:
对,主界面就是一个黑乎乎的东西,这就是所谓的Shell
了。在上面执行命令来控制Linux系统。
我接到的几个软件都用过,目前用的是一个叫MobaXterm
的软件。它的全功能版应该是要付费的,我是在淘宝花几块钱买了个破解版,用360查一下没问题就开始用了(对安全要求严格的人不要学我,哈哈)
我选择它的理由是:
- 通过1个主密码来管理所有的服务器密码
- ssh和sftp服务耦合在一起。在某些shell软件中是分开的,个人觉得不太方便。
- 自动监测系统环境
- 跟踪终端文件夹
- 自动复制:当你用鼠标选择Shell里的某一段文本时,不需要通过
Ctrl+Shift+C
进行复制。
其实新手可以随便选一个用一下,以后熟悉了再比较多个,然后选择其中一个就行了。
这里就不过多地介绍了。师傅带进门,修行靠搜索引擎!
小结
关于Linux学习前的准备工作大概就是这些,是不是特别简单?其实Linux入门从来不是一件很难的事喔!
虽然好像要花点小钱,但这也是表示自己认真对待的一种象征吧!教学费又不是第一次了。况且不是还有苯苯在保驾护航嘛!
基于Linux的知识体系既广且深,回味无穷。相信你如果步入正轨的话,就会有一种相见恨晚的感觉,就好像初恋一样!