博客大纲
指令的本质
在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*
可以看到,ls
,pwd
以及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
重命名为ls
。ls
中的color选项,可以用于规定输出后的文件名的颜色,当--color=auto
,就是输出后的文件名有颜色,--color=none
就是没有颜色。而此处的重命名,也就是说,当用户使用ls
这个指令时,默认同时执行--color=auto
选项。
博客制作不易,还请留下一个免费的赞!
有问题欢迎指出,博主非常喜欢讨论问题!