七個 GNU 工具,命令行的強大功能與終端親密接觸的必備工具
GNU 項目是一個自由軟件組織,它創(chuàng)造了開源這個術(shù)語,今天它被許多公司廣泛使用。
GNU 是 GNU, is Not Unix 的縮寫,這意味著:
Unix? 的命令非常成功,許多程序員和公司都想“復制它們”。而且大多數(shù)公司的名稱本身就包含了 Unix? 這個名字,例如:HP Unix, Berkeley Unix,等等。
但是,Unix?及其名稱的版權(quán)所有者AT&T已經(jīng)禁止將 Unix? 名稱用于類似的項目。
所以GNU想出了一個用這個名字做諷刺的主意,但說它不是Unix?。??
另一件事是 Unix? 程序的源代碼不可用,即便如此,當用于學習目的時,加州大學伯克利分校(后來創(chuàng)辦BSD)也有限制性許可證。
因此,GNU 創(chuàng)造了替代方案,也就是說,除了擁有一個許可(由他們創(chuàng)建的 GPL )甚至允許重新發(fā)布的許可之外,這些程序做了同樣的事情,并且有可用的源代碼。
根據(jù)GNU 通用公共許可證 (GNU GPL) 的條款,分發(fā)由 GNU 項目創(chuàng)建的軟件的組織是自由軟件基金會。
GNU 軟件最大的區(qū)別之一是它使用 POSIX 標準,這使得它可以移植到任何操作系統(tǒng)。
在 GNU 命令中的進步就是在擁有終端靈活性方面的進步。現(xiàn)在,讓我們來了解 7 個必備的 GNU 工具吧。
1. GCC
GCC代表G NU C ompiler C ollection,是各種編程語言的編譯器和優(yōu)化器的集合,其中包括:C、C++、Java、Go、Fortran、Ada、D、Objective-C、Objective-C++ 等。
GCC 擁有近2000 萬行代碼,是世界上最大的免費程序之一。
它擁有最廣泛的架構(gòu)支持,包括:
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,它也是一個很棒的編譯器,盡管它是從頭開始編寫的,但根據(jù)它自己的創(chuàng)建者Chris Lattner在一些采訪中說,他最大的參考是 GCC,所以 Clang 擁有所有使用的參數(shù)GCC,也是出于兼容性原因。
要安裝 GCC,您可以使用系統(tǒng)的包管理器或在此處下載 GCC 。
相關(guān)教程:如何在 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是目前參數(shù)最豐富的程序之一。要了解所有參數(shù),請使用手冊:
man gcc
欲了解更多信息,請訪問官方 GCC 頁面。
2.GNU Sed
GNU Sed是一個命令行文本流編輯器,它使用一種簡單而緊湊的編程語言來解析和轉(zhuǎn)換文本。
Sed 有幾個版本,GNU Sed 就是其中之一。例如,在使用 GNU Sed 和macOS中的 Sed 時,您可能會遇到兩者之間的許多差異,并注意到 GNU Sed 的可用性更優(yōu)越并且具有更多參數(shù)。
基本使用示例
在文本文件中用單詞LinuxMi替換和修改所有出現(xiàn)的單詞Title:linuxmi.txt
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
? sed -i 's/Title/LinuxMi/' linuxmi.txt
欲了解更多信息,請訪問官方 GNU Sed 頁面。
相關(guān):
Linux中的Grep,Awk,Sed命令 https://www.linuxmi.com/linux-grep-awk-sed.html
3.GNU awk
GNU awk 是特定領(lǐng)域的語言變體之一:AWK。與 GNU Sed 一樣,它的主要區(qū)別在于它具有我們在介紹中提到的 POSIX 標準。
它還廣泛用于通過命令行進行文本編輯和數(shù)據(jù)過濾。最基本的用法示例是:
僅列出命令生成的文本文件的第一列l(wèi)s -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 官方頁面。
相關(guān):
為什么說每個 Linux 極客都需要了解 Sed 和 Awk https://www.linuxmi.com/linux-sed-awk.html
4. GNU Make
GNU Make是一個構(gòu)建自動化工具,它通過讀取名為Makefiles的文件自動從源代碼創(chuàng)建可執(zhí)行程序和庫,該文件指定如何派生目標程序。
盡管集成開發(fā)環(huán)境和特定語言的編譯器功能也可用于管理構(gòu)建過程,但 GNU Make 仍然被廣泛使用。
某些版本的 make命令是GNU Make使用的命令,但是,在許多系統(tǒng)上,它只是原始命令所在的GNU Make的別名,其中原始命令是gmake,這個符號鏈接可以通過將另外兩個GNU工具(GNU Coreutils)與以下命令結(jié)合使用來發(fā)現(xiàn):
ls -l $ (which make) 。
當你有一個正確創(chuàng)建的 Makefile,編譯它只需運行命令:
make
該命令可根據(jù) Makefile 文件自定義參數(shù)。
欲了解更多信息,請訪問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 官方頁面。
相關(guān):
如何在Linux中使用find根據(jù)時間戳查找文件 https://www.linuxmi.com/linux-find-files-timestamp.html
6.GNU grep
GNU grep是一個命令行實用程序,用于在純文本數(shù)據(jù)集中搜索與正則表達式匹配的模式。
該命令有多種變體,grep例如:egrep和fgrep. 這些命令的許多可用性是特定于GNU grep的。
GNU grep與RegEx結(jié)合使用變得非常強大。
一個基本的使用示例是,例如,使用以下命令列出您的用戶所屬的系統(tǒng)組:
grep "$USER" /etc/group | egrep -o '^[a-z]+'
欲了解更多信息,請訪問官方 GNU grep 頁面。
7. GNU Bash
GNU Bash是對 Unix? Sh的改進。GNU Bash使得在Shell中自動化命令變得更加簡單和容易,因為它相對于它的選項也很穩(wěn)定。
它是世界上采用最多的,并具有許多使其與眾不同的現(xiàn)代功能。它是由程序員Brian J. Fox創(chuàng)建的。
它有幾個命令,例如:if, [[ ]], for, while,... 可以直接在Shell中使用,也可以作為腳本語言組合在任何擴展名的文件中,但最常用的擴展名是.sh和.bash。
有關(guān)更多信息,請訪問GNU Bash 官方頁面,這是我讀過的最好的軟件文檔之一。
相關(guān)文章:
- GNU/Bash 5.1 發(fā)布,帶來新的增強型隨機數(shù)生成器 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
結(jié)論
事實上,GNU 項目還有其他幾種解決方案,例如GNU Glibc,它是 Linux 內(nèi)核運行的接口,并允許雜項:程序、圖形界面、窗口管理器和桌面環(huán)境以出色的性能工作,以及大多數(shù)如果沒有GNU Glibc,它們中的一些就無法工作。