我来自 Windows 背景。我想知道我的终端中所有像exit
,这样的命令来自哪里?clear
它们是脚本吗?它们是用什么语言编写的?
答案1
这取决于:-) 有些是你的 shell 的内部命令,有些是脚本,有些是编译的程序。
您可以使用以下命令了解更多信息type
:例如:type type
gives(在我的 cygwin bash 中!)type is a shell builtin
。
如果你输入type bash
,你的答案将会类似于bash is /usr/bin/bash
。
现在您可以检查 /usr/bin/bash 的文件类型:file /usr/bin/bash
类似于... executable ...
,所以这将是一个编译文件,大概是用 C、FORTRAN 或其他语言编写的。如果答案类似于,... script...
您可以使用 gedit、vim 或任何您喜欢的普通文本编辑器检查此文件。
答案2
最重要的是,我可以说几乎所有命令都来自 UNIX,它是 LINUX 的前身和基本机制。
大多数实用程序,例如mv- move
,cp- copy
都是 Linux 中的实用程序,因为它们用于执行基本的管理功能。这对于其他所有此类实用程序都适用,我宁愿说实用程序提供功能来集成并使其成为基于整个原理操作的操作系统类型的实体。
现在回到主题,这些命令或实用程序大多是由GNU称为核心 GNU 实用程序。
您将在核心实用程序描述中找到大多数基本命令页,表示,Linux只是一个名称核心, 然而Ubuntu是此类实用程序的完整高级集成操作系统。
命令大多用 C 语言编写,Shell 是内核和命令之间的解释器。Bash 是其中最好的。
关于脚本,并不完全是,出于脚本目的,使用 Python 和 Perl,可以在 bash 中访问。
笔记:在 Ubuntu 中你会发现核心工具已安装。
这个软件包包含每个操作系统上都应存在的基本文件、shell 和文本操作实用程序。
具体来说,该软件包包括: arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes
对于内置清除您可以使用 Bash shell 中的命令功能Ctrl+L
答案3
它们通常用 C 编写,但也可能是 ba/sh、python、perl 等脚本(例如adduser
perl 包装器)。您可以通过查看脚本本身的第一行或以 开头的行(例如:)useradd
来判断它们是用哪种脚本语言编写的。这当然不适用于编译的 C 命令。#!
#!/usr/bin/perl
它们主要位于 /bin /sbin /usr/bin /usr/sbin 中,您可以从任何地方访问它们(给您留下它们是较低级别命令的印象),因为它们在您的 PATH 环境变量中。
答案4
其中一些是您正在使用的解释器功能的一部分(我假设您正在使用bash
),但可以使用非内置的解释器覆盖(如果存在这样的可执行文件)env
commmand
。其余重要命令都在/bin
或中/sbin
,它们位于您的路径上,可几乎无缝地快速访问这些命令。