破译 Linux 的“黑话”(常用命令解释)

(命令持续更新中....)

mkdir (Make Directory - 创建目录)

  • 为什么叫这个:Make(制造/创建)+ Directory(目录/文件夹)。

  • 怎么用mkdir lab5 就是告诉系统:"嗨,帮我建一个叫 lab5 的文件夹" 。

cd (Change Directory - 切换目录)

  • 为什么叫这个:Change(改变)+ Directory(目录)。

  • 怎么用cd lab5 就是"走进 lab5 这个文件夹里" 。

nano (文本编辑器)

  • 为什么叫这个:它是一个极其轻量级的终端文本编辑器,"nano"在英文里有"纳米、微小"的意思,寓意它小巧好用。

  • 怎么用nano thread.c 就是打开(或创建)一个叫 thread.c 的文件开始写代码 。写完按 Ctrl+O 保存,Ctrl+X 退出 。

gcc (GNU Compiler Collection - GNU 编译器套件)

  • 为什么叫这个:写的 C 语言代码是人类看的,计算机 CPU 只认识 0 和 1。GCC 就是个"翻译官",把 C 语言翻译成机器码。

  • 怎么用gcc parent-child-fork.c -o parent-child-fork-o 的意思是 Output(输出),整句命令的意思是:"把 parent-child-fork.c 给我翻译一下,输出的执行文件命名为 parent-child-fork"。

在计算机的世界里,GNU 是一个非常有名的、甚至带点"极客幽默"的历史印记。让我们来通俗地扒一扒它的前世今生:

1. 俄罗斯套娃式的名字(递归缩写)

GNU 是一个非常有意思的英文缩写,它的全称是:"GNU's Not Unix!"(翻译过来就是:GNU 不是 Unix!)。

你可能发现了,它的全称里竟然又包含了它自己!这种命名方式在计算机领域被称为"递归缩写",是早期黑客和程序员们最喜欢玩的一种文字游戏。

2. 为什么非要强调"它不是 Unix"?(背景故事)

这就得回到操作系统的老黄历了。在 20 世纪 80 年代,有一种非常强大且流行的操作系统叫 Unix。但是,Unix 是纯粹的商业软件,卖得非常昂贵,而且底层源代码是严密封锁的,不允许别人随便研究和修改。

这时候,有一位名叫理查德·斯托曼(Richard Stallman)的"极客大神"觉得这很不合理。他认为软件应该是自由的、全人类共享的。于是,他在 1983 年发起了一个伟大的开源运动------GNU 计划

这个计划的终极目标是:从零开始,写出一个功能和 Unix 一样强大,但是完全免费、任何人都可以看源代码并修改的操作系统。 为了向世人宣告他们的反叛精神,以及与那个闭源收费系统的划清界限,他们特意给这个计划起名叫"GNU 不是 Unix"。

3. 它和我们用的 gcc 有什么关系?

造房子需要砖头和泥瓦匠。同样,你要写一个完整的操作系统,首先得有一个"翻译官"(编译器)把人类写的 C 语言代码翻译成机器能懂的 0 和 1 。

当时市面上的编译器也大都是商业收费的。所以,GNU 团队的大神们就决定自己动手,硬核地写了一个完全免费、性能极佳的编译器------这就是 GCC 。它最初叫 GNU C Compiler,后来因为它太好用了,支持了越来越多的编程语言,就改名叫了 GNU Compiler Collection(GNU 编译器套件)

💡 小彩蛋

因为 GNU 的英文发音和非洲的"角马"(Gnu,发音为 /nuː/)一样,所以 GNU 计划的官方吉祥物就是一个长着大胡子的牛羚/角马头。

可以说,没有当年的 GNU 计划,就没有今天繁荣的开源软件世界,我们甚至可能连免费的 Linux 操作系统都用不上。所以,当每次在终端里敲下 gcc 命令的时候,其实都在调用计算机先驱们为了"软件自由"而留下的宝贵遗产!

思考:GCC曾经有尝试编译过Java吗?

历史上曾经可以,但现在的主流开发中已经不这么做了。

1. 曾经的尝试:GCJ (GNU Compiler for Java)

正如我们前面提到的,GCC 后来因为太好用,支持了越来越多的编程语言,从而升级成了"GNU 编译器套件" 。在早期,GCC 家族里确实有一位专门负责 Java 的成员,叫做 GCJ

传统思路:GCJ 的思路很"硬核",它试图把 Java 当作 C 语言一样对待,将 Java 源代码直接翻译成底层硬件能看懂的机器码(0 和 1),从而生成一个独立的、不依赖虚拟机的可执行文件 。

2. 为什么现在被淘汰了?

随着 Java 语言本身的飞速进化,GCJ 逐渐力不从心,并最终在 2017 年(GCC 7.0 版本)被正式从 GCC 代码库中移除。主要原因有:

  • 更新严重滞后:Java 后续推出了大量重量级的新特性(比如泛型、Lambda 表达式等),但 GCJ 是由开源社区的志愿者维护的,精力有限,导致它根本无法兼容和编译现代的 Java 代码。

  • 违背了 Java 的初衷:Java 最大的卖点就是跨平台,而 GCJ 把它编译成本地机器码后,就丧失了这种灵活性。

3. 现代 Java 是如何工作的?(与 C/C++ 的本质区别)

在我们的操作系统实验中,你用 GCC 编译的 C 语言程序,是被翻译成了特定机器的本地代码(Linux 机器码) 。而现在的 Java 走的是一条完全不同的路线------"一次编写,到处运行"(Write Once, Run Anywhere)

  • 专属编译器 (javac) :Java 使用自己专门的编译器 javac,而不是 GCC。它不会把代码直接翻译成底层的机器码,而是翻译成一种中间形态------字节码(Bytecode) (也就是你在文件夹里见到的 .class 文件)。

  • 随身携带的翻译官 (JVM) :这种字节码,电脑的 CPU 是看不懂的。它必须运行在一个叫做 JVM(Java 虚拟机) 的软件上。只要你的电脑(无论是 Windows、Mac 还是 Linux)安装了 JVM,JVM 就会在运行的瞬间,把字节码"同声传译"成当前电脑能听懂的机器码。

总结一下 :虽然 GCC 作为一个强大的"编译器套件",曾经试图把 Java 也纳入自己的版图 ,但 Java 最终凭借独特的"虚拟机"机制证明了自己。所以现在,提到编译 Java,大家默认使用的都是官方的 JDK 工具(如 javac),GCC 则主要继续在 C、C++ 和操作系统底层开发领域发光发热。

./ (运行当前目录下的程序)

  • 为什么叫这个. 代表"当前你所在的文件夹",/ 是路径分隔符。

  • 怎么用./thread 就是告诉系统:"执行我当前脚下这个文件夹里的 thread 程序" 。Linux 出于安全考虑,不会随便运行程序,你必须明确指路。

相关推荐
DianSan_ERP13 小时前
如何通过抖店订单接口实现订单状态管理与履约自动化?
运维·自动化
b***251113 小时前
18650电池点焊机:电阻焊技术如何决定电池组的成败|深圳比斯特自动化
运维·自动化
原来是猿13 小时前
网络计算器:理解序列化与反序列化(中)
linux·运维·服务器·网络·tcp/ip
前端老曹14 小时前
Docker 从入门到放弃:完整指南
运维·docker·容器
AOwhisky14 小时前
虚拟化技术学习笔记
linux·运维·笔记·学习·虚拟化技术
rabbit_pro15 小时前
Docker compose部署Ollama使用模型
linux·运维·docker
笑洋仟17 小时前
docker的overlay2目录占用磁盘空间很大,清理办法
运维·docker·容器
m0_7381207217 小时前
ctfshow靶场SSRF部分——基础绕过到协议攻击解题思路与技巧(一)
服务器·前端·网络·安全·php
木雷坞17 小时前
2026 年 5 月国内可用 Docker 镜像源列表与配置方法
运维·docker·容器