什么是linux命令

什么是linux命令?很多人看到这个问题,都会不以为意,认为这不算是一个问题。很多人都知道命令是什么,但是对于刚接触linux的朋友来说,还是对命令有很多困惑。我们在linux命令行下敲的命令,最终会被计算机执行,这中间发生了什么?背后的原理是什么?这是我在最开始学习linux的时候困扰最久的问题。当然这些问题不是一篇文章就可以解释的了的,这需要对计算机原理、linux内核有深入的了解,才能写出完美的答案。

linux企鹅

但是我们可以先了解一下基础的原理,这样在实践命令的时候才会有更好的效果。下面我讲解一下自己对命令的理解。

我们在命令行下敲命令的时候,其实是在跟一个叫shell的程序打交道,shell会根据用户敲的命令名字,在环境变量PATH指定的路径下寻找和命令名字匹配的一个可执行文件,找到后shell会创建一个子进程,在子进程中加载并执行该可执行文件。所以我们平时敲的大部分命令都是一个已经存在的可执行文件,那么这个可执行文件放在哪里呢,通过whereis就可以看到命令所对应的可执行文件的路径了,例如要看看ls这个命令在哪里,就执行

whereis

ls就可以看到ls的路径了。如果你把这个文件删掉,那么shell就会告诉你找不到这条命令。大部分命令都是一个可执行文件,但是我们在用whereis查看cd命令的可执行文件路径的时候,shell的输出是这个样子的:“cd:”,竟然没有路径名,这是什么鬼?

这是因为cd是shell的一个内置命令,不以可执行文件的形式存在。所以咱们平时敲的命令主要分为两种,一种是以可执行文件存在的外部命令,一种是没有可执行文件的内置命令。这里的外部和内置是从shell的角度说的。那么怎么判断一条命令是shell内置命令还是外部命令呢,用type查看就可以了,比如查看cd,在命令行下敲type

cd,shell的输出是cd is a shell builtin。那么cd就是一条shell内置命令。

说了这么多,好像还没有解释shell是什么东西,简单来讲,shell就是一个命令解释器,shell和咱们敲的这些命令都是一样的,都是运行在linux内核之上的应用程序,在内核的眼里都是内核要调度执行的进程。这些进程在运行之前,都是一个一个的可执行文件。只是shell是在linux启动之后就会由init进程自动加载执行的。他也对应着一个可执行文件。可以通过查看/etc/passwd文件中每条记录的最后一个字段查看每个用户在启动后执行的shell可执行文件路径,也可以通过SHELL环境变量查看当前启动的shell。echo

$SHELL

那么上面提到的环境变量又是什么东西呢?可执行文件是什么?他从哪里来?是怎么被加载到内核中变成一个可调度的进程的呢?shell是怎么创建子进程的呢?进程又是什么鬼?shell是被init进程启动,init(systemd)进程又是什么?linux的启动流程是怎么样的?进程是如何被内核调度的?说到这里,好像问题越来越多了,本来只是一个命令的问题,现在又引出这么多问题。技术就是这样,知道的越多,不知道的也就越多。欢迎关注本头条号,我会在后面的文章持续为大家解答这些问题。本人水平有限,欢迎批评指正。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,695评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,311评论 0 10
  • 第一章 1.Linux是一套免费使用和自由传播的类UNIX操作系统,它可以基于Intel x86系列处理器以及Cy...
    yansicing阅读 5,566评论 0 9
  • 1. 硬链接和软连接区别 硬连接-------指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区...
    杰伦哎呦哎呦阅读 2,504评论 0 2
  • 观其大纲 第1部分Linux的基础知识第1章Linux概述第2章Linux系统的安装KickStart开始自动安装...
    周少言阅读 1,655评论 1 10

友情链接更多精彩内容