(命令持续更新中....)
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 出于安全考虑,不会随便运行程序,你必须明确指路。