破译 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 出于安全考虑,不会随便运行程序,你必须明确指路。

相关推荐
云动课堂2 小时前
【运维实战】企业级VSFTPD 文件服务 · 一键自动化部署方案 (适配银河麒麟 V10 /openEuler /CentOS)
运维·centos·自动化
charlie1145141912 小时前
嵌入式Linux驱动开发(3)——内核模块机制 - Linux 的插件系统
linux·运维·开发语言·驱动开发·嵌入式硬件·学习
Elastic 中国社区官方博客2 小时前
使用 Remote Write 将 Prometheus 指标发送到 Elasticsearch
大数据·运维·elasticsearch·搜索引擎·全文检索·prometheus
杨云龙UP2 小时前
2000—CentOS Linux 7上部署Oracle 19c(19.3) RAC(RedHat/CentOS 7/8)
linux·运维·服务器·数据库·oracle·centos
江湖有缘2 小时前
可视化Docker资源清理方案:PruneMate容器化部署实战
运维·docker·容器
java_logo2 小时前
Docker 部署 Hermes Agent 完整指南(Windows / Linux 通用)
linux·windows·docker·hermes-agent部署·docker部署hermes·hermes-agent教程·hermes-agent文档
applebomb2 小时前
最新的OPENWRT与FRPC不兼容问题
运维·服务器
牛十二2 小时前
nacos2.4连接出错源码分析
java·linux·开发语言
dovens2 小时前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx