📅  最后修改于: 2023-12-03 14:43:57.161000             🧑  作者: Mango
Linux作为一种开源操作系统,拥有各种内部和外部命令,其命令行接口(CLI)是程序员的最爱。在本文中,我们将介绍Linux中的内部和外部命令以及它们之间的区别。
内部命令是直接嵌入到Linux shell(如Bash)中的命令。这些命令通常由shell解释器本身提供。执行内部命令时,shell进程先在其代码段中寻找该命令,如果找到则直接执行。
下面是几个常用的内部命令:
更改当前的工作目录,即进入一个新目录。例如,下面的命令将当前目录更改为 /home/user1:
cd /home/user1
打印指定的文本字符串。例如,下面的命令将在终端上输出文本“Hello World”:
echo "Hello World"
打印当前工作目录的绝对路径。例如,下面的命令将输出当前目录的路径:
pwd
显示已执行命令的历史记录。例如,下面的命令将显示之前执行的所有命令,每行一个:
history
设置或显示环境变量的值。例如,下面的命令将设置环境变量“JAVA_HOME”为“/usr/local/jdk”:
export JAVA_HOME=/usr/local/jdk
外部命令是不直接嵌入到shell解释器中的命令。这些命令以可执行二进制文件或脚本的形式存储在磁盘上或其他可访问的位置上。执行外部命令时,shell进程将在$PATH环境变量中列出的每个目录中查找该命令。
下面是一些常用的外部命令:
列出当前目录中的文件和子目录。例如,下面的命令将列出/home/user1目录中的所有文件和子目录:
ls /home/user1
在指定的文件或输入流中搜索指定的文本。例如,下面的命令将在文件“myFile.txt”中搜索包含文本“error”的所有行并将它们输出到终端:
grep "error" myFile.txt
更改指定文件或目录的权限。例如,下面的命令将将权限rwxr-xr-x授予文件“myFile.txt”:
chmod 755 myFile.txt
创建或提取tar存档文件。例如,下面的命令将创建名为“myArchive.tar”的tar存档文件,并包含目录“myDirectory”中的所有文件:
tar -cvf myArchive.tar myDirectory
从指定的URL下载文件或数据。例如,下面的命令将从“http://www.example.com/myFile.txt”下载一个文件并将其存储在名为“myFile.txt”的本地文件中:
curl -o myFile.txt http://www.example.com/myFile.txt
内部命令是直接嵌入到shell解释器中的命令,而外部命令则以可执行文件或脚本的形式存储在磁盘上或其他可访问的位置上。
由于内部命令是直接嵌入到shell解释器中的,因此它们的执行速度通常比外部命令更快。这是因为在执行内部命令时,操作系统不需要加载外部程序,并且可以直接从shell的代码段中执行命令。
相比之下,外部命令必须从磁盘上加载到内存中,才能被执行。因此,它们的执行速度通常比内部命令慢。
另一个区别是内部命令通常不需要环境变量或其他操作系统资源,而外部命令可能会需要这些资源。例如,执行curl命令需要使用网络连接和网络接口,并且需要处理HTTPS证书等网络安全问题。
总的来说,内部命令更快,更高效,更简单,外部命令则更灵活,更可扩展,更能满足各种不同的需要。程序员应该根据需要选择适合他们的命令。