Linux系统:指令的本质

本文解释了Linux中指令的本质,即它们实际上是可执行的程序,存储在/usr/bin目录下。通过例子展示了ls,pwd,man等指令的执行原理,以及which命令用于查找指令对应文件路径的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux系统:指令的本质


指令的本质

在Linux中,用户可以使用不同的指令来进行各种操作,比如使用ls来查看文件,用mkdir来创建目录。
可是这些指令时如何执行的呢?
其实指令的本质就是一个可执行的程序,再本质一点,指令就是一个文件。
所有的指令都存储在/usr/bin这个目录中,我们尝试使用ls -F指令(显示文件的类型)来观察这个目录:

[root@iZf8zdrs09p97o9xxgii5hZ ~]# ls -F /usr/bin
[*                                   gpic@                   nl-cls-list*               sha224sum*
2to3-3@                              gprof*                  nl-fib-lookup*             sha256sum*
2to3-3.6*                            grep*                   nl-link-enslave*           sha384sum*
a2p*                                 groff*                  nl-link-ifindex2name*      sha512sum*
addr2line*                           grops*                  nl-link-list*              show-changed-rco*
alias*                               grotty*                 nl-link-name2ifindex*      showconsolefont*
applydeltarpm*                       groups*                 nl-link-release*           show-installed*
apropos@                             growpart*               nl-link-set*               showkey*
ar*                                  grub2-editenv*          nl-link-stats*             shred*
arch*                                grub2-file*             nl-list-caches*            shuf*
as*                                  grub2-fstest*           nl-list-sockets*           signver*
......
......
......
gpg2*                                nl*                     setpriv*                   zipinfo*
gpg-agent*                           nl-addr-add*            setsid*                    zipnote*
gpgconf*                             nl-addr-delete*         setterm*                   zipsplit*
gpg-connect-agent*                   nl-addr-list*           setup-nsssysinit@          zless*
gpg-error*                           nl-class-add*           setup-nsssysinit.sh*       zmore*
gpgparsemail*                        nl-class-delete*        setvtrgb*                  znew*
gpgsplit*                            nl-classid-lookup*      sftp*                      zsoelim@
gpgv@                                nl-class-list*          sg@
gpgv2*                               nl-cls-add*             sh@
gpg-zip*                             nl-cls-delete*          sha1sum*

由于其内容实在太多了,我们将中间部分省略掉了。但是从代码片中展示的内容可以看出,大部分文件都被表示了*,这个符号表示该文件是一个可执行的程序。也就是说:指令的本质是一个可执行的程序
我们再单独查阅几个常用的指令:

[root@iZf8zdrs09p97o9xxgii5hZ ~]# ls -F /usr/bin/ls
/usr/bin/ls*
[root@iZf8zdrs09p97o9xxgii5hZ ~]# ls -F /usr/bin/pwd
/usr/bin/pwd*
[root@iZf8zdrs09p97o9xxgii5hZ ~]# ls -F /usr/bin/man
/usr/bin/man*

可以看到,lspwd以及man这三个指令都是可执行的程序。
而当用户使用指令,其实就是在使用这个程序。
而可执行程序本质也是一个文件,我们通过路径的方式去访问这个文件试试:

[root@iZf8zdrs09p97o9xxgii5hZ ~]# /usr/bin/pwd
/root
[root@iZf8zdrs09p97o9xxgii5hZ ~]# /usr/bin/ls
111  csdn  csdn2

我们居然用访问文件的方式来实现了指令的功能。
指令对应的文件是可以删除的,而删除这个文件后,对应的指令就不能跑了。比如git相关的指令,gcc相关的指令,在某些Linux系统上,是需要额外下载的,因为操作系统中没有对应的文件,所以也就无法跑程序,执行这个指令。


which指令

这个指令可以输出一个指令对应的文件所处的绝对路径。
比如我们用which查阅一下pwd指令的路径:

[root@iZf8zdrs09p97o9xxgii5hZ ~]# which pwd
/usr/bin/pwd

此时操作系统就会输出对应的路径。
我们再用which查阅一下ls的路径:

[root@iZf8zdrs09p97o9xxgii5hZ ~]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls

此时,操作系统不仅输出了ls的路径,还输出了一串alias ls='ls --color=auto',这是什么呢?
这个语句的作用是重命名,当用户认为某个指令太长了,就可以使用重命名,在输入重命名后的指令后,就会执行对应的指令。
比如此处就是将ls --color=auto重命名为lsls中的color选项,可以用于规定输出后的文件名的颜色,当--color=auto,就是输出后的文件名有颜色,--color=none就是没有颜色。而此处的重命名,也就是说,当用户使用ls这个指令时,默认同时执行--color=auto选项。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒马盒马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值