从零开始入门 Linux。
入坑心意已决但不知道从何开始,可以跳到文末的关键词[1]找找灵感。
已经有基础,想了解 shell scripting 之类的同学,请科学地在互联网搜索关键词 ‘Lecture 1: Course Overview + The Shell (2020)’ 来一套。
接下来的内容 是列出了些认真玩电脑的基础。
- 你也许见过如下的电脑界面,现实中也好,电影画面上也好:满屏幕文字,没有熟悉的鼠标,没有 Windows 右上角,也没有 Mac OS 的左上角。
这是 命令行的界面(command-line interface,以下简称CLI),是为了与计算机系统高效交流而生的工具。它是由人通过键盘向计算机输入简短的命令来指示计算机行动的工具。
如果你一直生活在被图形界面包围的环境中(八成是这样,不然你就不是萌新了),CLI 多少是有点恐怖的,首先你不知道自己能做什么,然后你能隐约感到:在这里做错了什么后果恐怕会是很严重滴Σ( ° °|||)︴想到这儿,不禁两股战战几欲先走?留步!
Linux 操作系统到底是...
好奇宝宝搜索了 "linux" 这个词条……
可能会看到:
- Debian
- Fedora
- Ubuntu
- Manjaro
- Arch
- Raspbian
……
一堆名字。它们都叫做“发行版本”(distributions),换句话说,是由原版“Linux”改编而成的衍生作品。这些能很轻松找的发行版们相较真正的“原版”来说,应该是对用户很友好了(但是Arch似乎比较硬核)。正式一点的话,它们该被称为“GNU/Linux”,因为它们主要都是使用 Linux Kernel 作为操作系统内核跟 GNU 项目中的“自由软件”攒出来的。不同的“Linux发行版”也就是“不同口味的 Linux”。就好比同样是鸡肉,它可以是辣子鸡,咖喱鸡,炸鸡,烤鸡……做成什么味道,它的核心都还是鸡。
说到 Linux 就躲不开 CLI
作为提供人机交互功能的界面,CLI 和 GUI 各自有适用的场景,其实没有什么高下对错之分。比如 GUI 适合编辑照片,剪辑视频,编辑出版物,乃至设计 GUI。如果有意从事软件行业(比如建立网站和网页应用),嵌入式开发(比如让“智能”洗衣机表现得“智能”),服务器维护(比如安装、调试、维护 数据库的基础设施),请试着了解和使用 CLI 这种经典的人机交互方式。会觉得 “CLI 有什么用,日常生活用不到哇”,很有可能是因为你的日常生活中充满了被设计为 GUI 的交互方式,让你误认为 CLI 的世界早就过时或者消失了。事实上,在柔顺、精致的 GUI 背后,其实都有充满黑客浪漫的 CLI。当然,追溯源头,CLI 跟浪不浪没关系,只是因为人与计算机的交互方式自然从“把输出打印到纸上” 逐渐过渡到 “打印到屏幕上”;之后为了进一步降低计算机在某些应用场景下的使用难度,GUI 诞生并且逐渐发展到让人能 “直觉化操作”(用摸的)。
使用 CLI 的思路和使用图形界面(GUI)有所不同,但两种操作方式间并不存在鸿沟。CLI 就像是你和电脑之间的笔谈。如果你之前没有使用 CLI 的经验,现在兴趣使然或者工作需要地要接触 CLI 乃至 Linux,不用担心,从简单的需求开始入门就好。没有太多直观图画的 CLI 就要依靠人的语言能力来理解“自己能做什么”。所以你的确需要一个“基础”才能开始使用它们。这样你跟计算机在某些应用场景下的沟通就会很畅快(某些应用场景是指:在软件开发时进行测试,用自己的服务器建立网站时,诊断网络链接时,装逼时……)。
你或许不记得学习母语时的艰难,但是尝试学习母语之外的语言时有多大困难以及该如何克服你可能是有概念的。因此学习使用 CLI,Linux 之类的不很直观的玩意儿,最好建立在“需求”和“兴趣”之上你才有动力学完“基础”。从完成简单的功能做起,比如在 Linux 的 CLI 中了解一下“我是谁?”,“现在几点了?”,“我在哪(个文件夹里)?”。不要因为没了 “点一下” 的权利就立刻慌张地逃出来;因为~ o(*  ̄_ ̄ *)o真香定律,你学着学着就会喜欢 Linux 的,因为它是个令行禁止的家伙,特别可爱。CLI,terminal,Cmd Prompt 有着微妙的差别,但是入门而言,它们看起来都是只有字符的世界差别不大,所以这里暂时就不去管它 (统统使用这个描述性的名字:CLI )。如果你接下来继续探索,总会明白它们真正的意思。
文末附上鳥哥的 Linux 私房課链接,幫你由淺入深系統化地瞭解 Linux。
(偶然间参加了一次 DevRelCon,其中说到了鸟哥的私房课,打开一看惊为天人...)
不必要精通 CLI 才能用 Linux
虽说会使用 CLI 才能真的使用 Linux,但是对 CLI 的了解并不必要达到精通的地步。打下一定基础之后就可以边学边用。在互联网资源的帮助下学习 CLI 会很方便,用下搜索引擎没什么可耻的。
最好能用英文来学习关于 Linux 的知识
掌握一手讯息的好处大大滴有。看翻译或者转述你就需要花隐藏的时间成本并且承担译本信息不全的后果。
挑一个带有图形界面的 GNU/Linux 发行版安装来入门 Linux
推荐在 Fedora,Ubuntu,Manjaro 中选择。
选择困难请选大众情人 Ubuntu。
站在前沿请选测试平台 Fedora。
Bleeding Edge 请用 Manjaro。
它们都有基于 gnome 定制的操作系统 GUI,所以打开它们,图标,窗口,鼠标,一切 GUI 的习惯还在。入门友好。通过网上教程 自己安装些喜欢的 GUI主题,一阵游玩下来你可能就接触了不少使用 Linux 的 CLI 需要的基础知识。
怎么安装一个 Linux 操作系统
如果你还没玩过安装操作系统,自己查一查吧。找一台电脑,实践装个8次左右 你心里就对操作系统是什么有点数了。如果你和我一样只有一台电脑,那就学学怎么用 虚拟机。
Terminal
使用 CLI 时,请想象这样一个场景:
与计算机操作系统进行交流,需要开启一个通道。通道的一端时操作系统和硬件,另一端就是跟计算机交流的人,比如,你。在这个场景中,你处于一个“终端”,即“terminal”。
这样的场景源于计算机真正的使用方式,一台计算机同时开启多个通道来跟用户们交互,用户之间互不干扰,而且能同时分享计算机的运算能力。每个人面前都有一个“终端”硬件,用于显示计算机提供的 CLI,每人也都有自己的输入设备(比如键盘)来跟 CLI 交流。
在 Unix Like OS (Linux算是它的子集)中,用户实际上仍然在使用 terminal。拥有 GUI 的 Linux 发行版当然也在使用 terminal。Terminal 这个概念,连接起你和为你提供服务的计算机。计算机通过 terminal 与你交换信息,其中也包括了让你能使用 CLI 与计算机交流的信息。
开源软件,自由软件,Community
Free Software 并不是“免费的软件”,而是用户可以自由使用的意思。这两种意思有着微妙的差别。尤其在于“自由使用”并不一定意味着能免费获取软件使用权,free含义的重点是用户有浏览和编辑软件代码的自由。自由软件仍然可以商用。
GNU 是个非常著名的自由软件项目。它与 Linux 内核 (Linux Kernel) 的结合奠定了自由软件和开源软件的繁荣。GNU/Linux 的活力来自活跃的自由软件开发者、维护者。一个软件如果直接在互联网上公开了自己的源代码,它就是开源软件。理论上说,任何人都可以下载开源软件的代码来研究,改写,对它做(* /ω\*)任何想做的事。只不过,阅读源代码本身是一件壁垒和代价都很高的事情,所以自由软件开发的参与者们都值得软件使用者心怀感激。同时,因为非常多的自由软件也是免费的,所以在 Linux 的平台上使用免费的自由软件也早就是日常,GNU/Linux 也就给人一个“免费”的印象。但请记住,没有“应该免费”,也没有任何开发者“应该为你工作”,自由软件的开发和维护产生的消耗常常让开发者难以支撑也是一个事实。
软件包管理器
GNU/Linux 的软件世界更像是自治的社区 (Community) 而不是拥有核心权力的组织。让庞大数目的软件能运行在Linux中,需要的是开发者们遵守某些“共识”。软件多了,不可避免就要面对管理软件,方便地安装软件,方便地卸载软件。自由软件的开发者们根据某个开发软件的共识去开发,就形成了一系列标准统一、方便管理的软件。而管理这些软件的一类工具被开发出来,叫做 package manager。
GNU/Linux 发行版们有自己的 package manager 来管理“认证”过的软件。比如:
- Debian 的 apt
- Fedora 的 yum 和 dnf
- Manjaro 的 pamac
- Arch 的 pacman。
之所以强调“某个共识”,正是因为“开发软件的共识”不是统一的,而是开发者自律编纂、自觉遵守的。对不同的编程目的,比如应用场景是网页,桌面系统 GUI 应用程序,CLI 应用程序,手机应用程序等等,都有不同的程序编写框架要遵守,相应地也就有各自的软件包管理器。
移动设备的操作系统为例:AppStore,Google Play,以及国内各种“应用商店”都是基于“软件管理”这个目的被设计和实现出来的。
总结
安装一个 GNU/Linux 操作系统,尝试日常中就使用它,任何不懂直接搜索互联网。
这样时间久了,对 CLI 的世界会形成一个直观的印象。而且,游玩自己的 Linux 操作系统时,注意备份“绝对不想失去的文件”,比如照片、视频。以免命令输错导致文件系统炸裂的时候欲哭无泪。(自助使用软件数据恢复的手段是存在的,但是恢复的数据很可能是乱七八糟的,别问我是怎么知道的,也别问我什么是欲哭无泪)。
以无法为有法,自由自在地汲取所需是很舒畅滴;但是,总有些时候,如无头苍蝇般乱撞有可能撞得头晕脑胀而不得要领。还是得进行点“系统化的学习”。这早有前人帮忙:鸟哥的 Linux 私房菜双手推荐阅读。
2020年3月9日发现了这个视频好好解释了 Linux 的文件系统 (需要科学环境上网)。
这个不晓得要不要科学环境的 tryhackme.com 里有的内容你可能也想看看。
祝你好运~
更新
2019年1月3日:在中英文混合处添加空格以方便阅读时辨认。
2020年3月9日:文末添加了讲解 Linux 文件系统的视频链接。
2020年7月17日:添加 tryhackme 这个网站的链接。
2020年8月6日:开头添加关键词通往 MIT 的 Missing Semester。
2020年10月8日:原文被吃了,重发
-
CLI, Terminal, TTY, Unix Like OS, Virtual Machine (VM), BIOS, UEFI, Linux Distribution, GNU/Linux, Shell, bash, Gnome Shell, Free Software, Free beer and free speech, Opensource, Package Manager, .deb and .rpm, bin directory, Environment Variables, PATH ↩