GNU 项目是一个自由软件组织,它创造了开源这个术语,今天它被许多公司广泛使用。

GNU 是 GNU, is Not Unix 的缩写,这意味着:

Unix© 的命令非常成功,许多程序员和公司都想“复制它们”。而且大多数公司的名称本身就包含了 Unix© 这个名字,例如:HP Unix, Berkeley Unix,等等。

但是,Unix©及其名称的版权所有者AT&T已经禁止将 Unix© 名称用于类似的项目。

所以GNU想出了一个用这个名字做讽刺的主意,但说它不是Unix©。😛

另一件事是 Unix© 程序的源代码不可用,即便如此,当用于学习目的时,加州大学伯克利分校(后来创办BSD)也有限制性许可证。

因此,GNU 创造了替代方案,也就是说,除了拥有一个许可(由他们创建的 GPL )甚至允许重新发布的许可之外,这些程序做了同样的事情,并且有可用的源代码。

根据GNU 通用公共许可证 (GNU GPL) 的条款,分发由 GNU 项目创建的软件的组织是自由软件基金会。

GNU 软件最大的区别之一是它使用 POSIX 标准,这使得它可以移植到任何操作系统。

在 GNU 命令中的进步就是在拥有终端灵活性方面的进步。现在,让我们来了解 7 个必备的 GNU 工具吧。

1. GCC

GCC代表G NU C ompiler C ollection,是各种编程语言的编译器和优化器的集合,其中包括:C、C++、Java、Go、Fortran、Ada、D、Objective-C、Objective-C++ 等。

GCC 拥有近2000 万行代码,是世界上最大的免费程序之一。

它拥有最广泛架构支持,包括:

AArch64, Alpha, ARM, AVR, Blackfin, eBPF, Epiphany (GCC 4.8), H8/300, HC12, IA-32 (x86), IA-64 (Intel Itanium), MIPS, Motorola 68000, MSP430, Nvidia GPU, Nvidia PTX、PA-RISC、PDP-11、PowerPC、R8C/M16C/M32C、RISC-V、SPARC、SuperH、System/390/zSeries、VAX、x86-64、68HC11、A29K、C6x、CR16、D30V、DSP16xx、 ETRAX CRIS、FR-30、FR-V、IBM ROMP、IP2000、M32R、MCORE、MIL-STD-1750A、MMIX、MN10200、MN10300、摩托罗拉 88000、NS32K、RL78、Stormy16、V850、Xtensa、Cortus APS3 、ARC、AVR32、C166 和 C167、D10V、EISC、eSi-RISC、Hexagon[73]、LatticeMico32、LatticeMico8、MeP、MicroBlaze、MRISC32、MSP430、Nios II 和 Nios、OpenRISC , PDP-10, PIC24/dsPIC, PIC32, Propeller, Saturn (HP48XGCC), System/370, TIGCC (m68k variant), TMS9900, TriCore, Z8000 等等。

GCC 有一个超过500 名贡献者的列表,所有的名字都可以在这里访问。

几家公司在许多自由软件项目中使用 GCC,其中最著名的有:NASA、Google、IBM等。

GCC 最大的竞争对手是 Clang/LLVM,它也是一个很棒的编译器,尽管它是从头开始编写的,但根据它自己的创建者Chris Lattner在一些采访中说,他最大的参考是 GCC,所以 Clang 拥有所有使用的参数GCC,也是出于兼容性原因。

要安装 GCC,您可以使用系统的包管理器或在此处下载 GCC 。

相关教程:如何在 Ubuntu 20.04/22.04 上安装 GCC 编译器  https://www.linuxmi.com/ubuntu-20-04-22-04-gcc.html

使用示例

编译用C语言编写的程序:

gcc main.c
./a.out # 运行的二进制 

用C++编译程序:

g++ main.cpp
./a.out # 运行的二进制

用Java编译程序:

gcj -C Hello.java # 编译成 Hello.class
gij Hello # 运行 Hello.class

gcc是目前参数最丰富的程序之一。要了解所有参数,请使用手册:

man gcc

欲了解更多信息,请访问官方 GCC 页面

2.GNU Sed

GNU Sed是一个命令行文本流编辑器,它使用一种简单而紧凑的编程语言来解析和转换文本。

Sed 有几个版本,GNU Sed 就是其中之一。例如,在使用 GNU Sed 和macOS中的 Sed 时,您可能会遇到两者之间的许多差异,并注意到 GNU Sed 的可用性更优越并且具有更多参数。

基本使用示例

在文本文件中用单词LinuxMi替换和修改所有出现的单词Title:linuxmi.txt

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                   
⚡ sed -i 's/Title/LinuxMi/' linuxmi.txt

欲了解更多信息,请访问官方 GNU Sed 页面

相关:

Linux中的Grep,Awk,Sed命令 https://www.linuxmi.com/linux-grep-awk-sed.html

3.GNU awk

GNU awk 是特定领域的语言变体之一:AWK。与 GNU Sed 一样,它的主要区别在于它具有我们在介绍中提到的 POSIX 标准。

它还广泛用于通过命令行进行文本编辑和数据过滤。最基本的用法示例是:

仅列出命令生成的文本文件的第一列ls -l > linuxmi.txt

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                   
⚡ ls -l > linuxmi.txt

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                   
⚡ awk '{print $1}' linuxmi.txt

欲了解更多信息,请访问GNU Awk 官方页面

相关:

为什么说每个 Linux 极客都需要了解 Sed 和 Awk https://www.linuxmi.com/linux-sed-awk.html


4. GNU Make


GNU Make是一个构建自动化工具,它通过读取名为Makefiles的文件自动从源代码创建可执行程序和库,该文件指定如何派生目标程序。

尽管集成开发环境和特定语言的编译器功能也可用于管理构建过程,但 GNU Make 仍然被广泛使用。

某些版本的 make命令是GNU Make使用的命令,但是,在许多系统上,它只是原始命令所在的GNU Make的别名,其中原始命令是gmake,这个符号链接可以通过将另外两个GNU工具(GNU Coreutils)与以下命令结合使用来发现:

ls -l $ (which make)

当你有一个正确创建的 Makefile,编译它只需运行命令:

make

该命令可根据 Makefile 文件自定义参数。

欲了解更多信息,请访问GNU Make 官方页面


5. GNU findutils


GNU findutils是一个包含以下命令的软件包:findlocate和.updatedbxargs

其中,日常生活中使用最广泛的当然是find. GNUfind命令比 Unix© 命令对用户更友好。例如:

要使用GNU findutils查找主目录中的所有.txt文件,只需运行以下命令:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                                   
⚡ find ${HOME} -name *.txt

在 Unix©find中,您需要将搜索目标显式地括在引号中,而在 GNU 中find,带或不带引号的工作方式相同。以及许多其他差异。

我们有一篇文章,其中包含多个使用该find命令的示例,可以通过以下链接访问:https://www.linuxmi.com/linux-find-mingling-shiyong.html

欲了解更多信息,请访问GNU findutils 官方页面

相关:

如何在Linux中使用find根据时间戳查找文件 https://www.linuxmi.com/linux-find-files-timestamp.html


6.GNU grep

GNU grep是一个命令行实用程序,用于在纯文本数据集中搜索与正则表达式匹配的模式。

该命令有多种变体,grep例如:egrepfgrep. 这些命令的许多可用性是特定于GNU grep的。

GNU grep与RegEx结合使用变得非常强大。

一个基本的使用示例是,例如,使用以下命令列出您的用户所属的系统组:

linuxmi@linuxmi /home/linuxmi                                                   
⚡ grep "$USER" /etc/group | egrep -o '^[a-z]+'

欲了解更多信息,请访问官方 GNU grep 页面


7. GNU Bash

GNU Bash是对 Unix© Sh的改进。GNU Bash使得在Shell中自动化命令变得更加简单和容易,因为它相对于它的选项也很稳定。

它是世界上采用最多的,并具有许多使其与众不同的现代功能。它是由程序员Brian J. Fox创建的。

它有几个命令,例如:if[[ ]]forwhile,… 可以直接在Shell中使用,也可以作为脚本语言组合在任何扩展名的文件中,但最常用的扩展名是.sh.bash

有关更多信息,请访问GNU Bash 官方页面,这是我读过的最好的软件文档之一。

相关文章:


结论

事实上,GNU 项目还有其他几种解决方案,例如GNU Glibc,它是 Linux 内核运行的接口,并允许杂项:程序、图形界面、窗口管理器和桌面环境以出色的性能工作,以及大多数如果没有GNU Glibc,它们中的一些就无法工作。

更多信息请访问https://gnu.org

发表评论