当前位置: 首页>>技术教程>>正文


内部与外部Linux Shell命令

, ,

介绍

我们坚信,尽管Linux在台式机和平板电脑方面都有进步,但应该从命令行开始学习。这是因为它是一个从Unix(TM)大量借用的操作系统,一开始只不过是文本接口而已。研究表明,如果适用,在命令行上比使用图形用户界面(GUI)更有效。 “If applicable”表示我们不是在进行照片/视频编辑或其他需要图形环境的任务。这意味着当存在可以通过命令行界面(CLI)或GUI进行解决的任务时,CLI方式会更加高效。要考虑的另一件事是Linux世界的碎片化。例如,OpenSUSE的YasT在任何其他发行版中均不可用,因此它是特定的软件。在CLI领域中也可以看到这种碎片,特别是涉及各种文件的位置时,但是如果是这种情况,我们会让您知道。如果您还不确定,请记住您不了解Linux或任何其他类似的操作系统,直到您了解绕过CLI的方式为止。 Linux的强大之处就在于此,如果您想以此为职业,那么请继续:这是一个有趣而有趣的旅程。

内部与外部Linux Shell命令

您可能会因为合理的选择而对这种选择感到困惑。但这是您经常会遇到的术语,在指代内部命令时可能会遇到术语“(shell)内置”,而对于外部命令则可能会遇到”the rest”。但是,在我们走那么远之前,请确保我们位于同一页面上。我们要使用的 shell 是重击,因为它是Linux发行版上使用最多的。并不是说这是最好的,但这还是一个主观的术语。我不知道任何流行且仍在维护的Linux发行版都使用4.xx之前的任何版本的bash,因此我们也将使用它。关于ever-controversial发行版支持,LPI似乎主要集中在Red Hat和Debian或派生发行版(例如Fedora或Ubuntu)上,因此我们也将提供支持。但是,至少在此级别上,分发不太重要:重要的是up-to-date shell和分发。

请确保您已经在纯控制台环境或GUI中准备好了 shell 程序,因为我们的网页在编写时考虑到了text-only的友好性。确保您的 shell 是bash,然后开始吧!您可以通过键入以下内容检查 shell

 $ echo $SHELL

除非您的发行版将其 shell 隐藏在特殊位置下,否则上述命令应返回/bin/bash。关于版本,这是您如何检查Red Hat或Debian plus衍生产品的方法:

 $ rpm -q bash #on RH
 $ dpkg -l bash #on Debian



(adsbygoogle = window.adsbygoogle || [])。push({});


现在确定运行的版本正确,让我们看看内部和外部命令是什么。内部命令(数量少,尤其是与其他命令相比)是内置你的壳。这就是为什么我们认为检查 shell 程序和版本很重要的原因,因为其他 shell 程序可能具有不同的内置s或根本没有。您将经常使用的命令,例如光盘-更改目录-是 shell 内置s。具有讽刺意味的是,有一个 shell 内置告诉我们命令是否为内置。是的,我知道,听起来有点疯狂,但这是事实。该命令是类型通常不带任何选项使用,只是您想知道的名称。观察:

 $ type cd
cd is a shell builtin
 $ type bash
bash is /usr/bin/bash
 $ type type
type is a shell builtin

现在,如果您想查看所有内置s bash的报价,则可以查看shell文档中有关in-depth的解释,这些解释超出了本文档的范围,或者您可以继续阅读并获得其中一些的简短说明,如下:

alias
该命令允许您定义以下命令

您自己的,或替换现有的。例如,“ alias rm = rm -i”将使rm具有交互性,因此您不会误删除任何文件。

break
主要用于shell脚本中以破坏

循环执行

cd
更改目录。例如,’cd /usr’将

将当前目录设置为/usr。另请参见pwd。

continue
主要用于shell脚本中以继续执行循环
echo 
列出变量的值

environment-specific或user-declared,但也可以显示一个简单的字符串。

export
允许用户导出特定环境

变量,以便将其值用于所有后续命令

fg
恢复执行中的暂停作业

前景。另请参见bg。

history
不带参数的情况下,给出编号列表

先前发出的命令。带有参数,跳到所述列表中的某个数字。

kill
默认情况下发送终止信号,或者

进程ID的信号是可选的。

pwd
打印工作目录
read
主要用于脚本中,用于获取

来自用户或其他程序的输入

test 
与表达式作为参数一起使用时,它

返回0或1,具体取决于所述表达式的求值

times
打印累计的用户和系统时间

用于 shell 程序以及从 shell 程序运行的进程。返回状态为0。

type
指示是哪种命令

争论。

unalias
查看别名
wait
通常给定一个进程ID,它一直等到

所述过程终止并返回其状态。



(adsbygoogle = window.adsbygoogle || [])。push({});


如果您认为您将无法学习所有内部命令,请不用担心。更多文章将涉及bash,不可避免地,我们将不得不处理更多的内置命令。无论如何,强烈建议您阅读bash手册页,并尝试尽可能多的练习,尤其是因为本文结尾处的某些练习将处理一些有意排除的简单内部命令。

让我们看看什么是外部命令。它们是系统提供的命令,完全是shell-independent,通常可以在任何Linux发行版中找到。它们主要位于/bin和/usr /bin中,并且这些位置必须是$ PATH变量的一部分才能使用。主要由超级用户/sysadmins使用的命令位于/sbin和/usr /sbin中,并且通常需要root特权才能运行。因此,/sbin和/usr /sbin位于root的$ PATH中,而不位于”normal”用户的。简而言之,这是一个环境变量,按顺序保存用户可用的外部命令的位置。这意味着,如果我在$ PATH中包含/bin,则可以键入ls它可以工作,而不用键入外部命令的完整地址,即/bin /ls。

练习题

1.找出您的$ PATH,然后将其与根用户的$ PATH进行比较。你为什么这么认为呢?说明。

2.找出(是的,这是一个点)内部命令会执行该命令,它为什么很有用。

3.有几个内置s与外部命令同名。您将如何找到它们?

4.回声可以具有什么返回状态?说明。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11252.html,未经允许,请勿转载。