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是一个包含以下命令的软件包:find、locate和.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例如:egrep和fgrep. 这些命令的许多可用性是特定于GNU grep的。
GNU grep与RegEx结合使用变得非常强大。
一个基本的使用示例是,例如,使用以下命令列出您的用户所属的系统组:
grep "$USER" /etc/group | egrep -o '^[a-z]+'
欲了解更多信息,请访问官方 GNU grep 页面。
7. GNU Bash
GNU Bash是对 Unix© Sh的改进。GNU Bash使得在Shell中自动化命令变得更加简单和容易,因为它相对于它的选项也很稳定。
它是世界上采用最多的,并具有许多使其与众不同的现代功能。它是由程序员Brian J. Fox创建的。
它有几个命令,例如:if, [[ ]], for, while,... 可以直接在Shell中使用,也可以作为脚本语言组合在任何扩展名的文件中,但最常用的扩展名是.sh和.bash。
有关更多信息,请访问GNU Bash 官方页面,这是我读过的最好的软件文档之一。
相关文章:
- GNU/Bash 5.1 发布,带来新的增强型随机数生成器 https://www.linuxmi.com/gnu-bash-5-1.html
- 如何在 Bash 脚本中使用 Linux test 命令 https://www.linuxmi.com/bash-linux-test-command.html
- Linux Bash 终端命令键盘快捷键备忘 https://www.linuxmi.com/linux-bash-terminal-shortcuts.html
- 将 bash/shell 脚本编译为二进制文件 https://www.linuxmi.com/shc-bash-shell.html
结论
事实上,GNU 项目还有其他几种解决方案,例如GNU Glibc,它是 Linux 内核运行的接口,并允许杂项:程序、图形界面、窗口管理器和桌面环境以出色的性能工作,以及大多数如果没有GNU Glibc,它们中的一些就无法工作。