shell是如何运行程序的?

之前一个小伙伴提出疑问: 为什么在linux操作系统中,执行命令可以直接使用命令本身。

比如 mv
mv gaosh geekyunwei

而写的脚本或者程序,却需要使用./来执行

比如我写了一个 geekyunwei.sh
执行的时候是: ./geekyunwei.sh

shell如何运行程序的

首先要知道的是,执行一条命令诸如mv,cp,本质上也是运行一个程序,那么我们在shsell中输入一条命令,在系统里究竟是怎样的一个执行过程?

1) 执行路径查找

当你带上绝对路径(以/开头) 和相对路径(./)时,如果在该路径能找到就执行该程序

2) alias中查找

alias命令可以用来设置命令别名,而单独输入alias可以查看已设置的别名:

[root@VM-0-14-centos ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@VM-0-14-centos ~]# 

如果这里没有找到你要的命令,那么接下去会查找,如果找到了就会执行

3) 内置命令中查找

如果上面一步没有查找到,那就会到内置命令中查找。
不同的shell包含一些不同的内置命令,通常不需要shell到磁盘中去搜索。通过help命令可以看到有哪些内置命令:

#help

通过echo可以查看命令类型:

[root@VM-0-14-centos ~]# type exec exec is a shell builtin

如果是内置命令,则会直接执行,否则继续查找。

4) PATH中查找

以ls为例,在shell输入ls时,首先它会从PATH环境变量中查找,PATH内容是什么呢,我们看看

[root@VM-0-14-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

所以它会在这些路径下去寻找ls程序,按照路径找到的第一个ls程序就会被执行。使用whereis也能确定ls的位置:

[root@VM-0-14-centos ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

可以看到ls 在/usr/bin/ls 的位置, 如果我们把ls 从bin目录下移走会发生什么?

移走之后系统就无法找到命令,我们有时候需要提防黑客修改我们的命令

[root@ecs-c13b ~]# echo "echo 大家好,欢迎光临极客运维" > /usr/bin/ls
[root@ecs-c13b ~]# ls
大家好,欢迎光临极客运维
[root@ecs-c13b ~]# 

这么修改后,你在执行命令就变成了定制版的ls了,不过劝你提前做好备份,要不你的ls就真的没法使用了哦

所以到这里你就明白在安装jdk或者python的时候要设置环境变量了吧

查找到这一步,我们就需要置顶路径了,要么是绝对路径,要么是相对路径。

我们想像执行linux命令一样执行脚本,只需要放在/usr/bin/目录下即可。

当然要注意给权限
[root@VM-0-14-centos ~]# ll /usr/bin/ls
-rwxr-xr-x 1 root root 117608 Aug 20 2019 /usr/bin/ls

问题: 如果你按照我的步骤,把ls改成了helloworld程序,又没有备份,这时候你该怎么还原回去呢?

本文转自 ID: 互联网老辛 更多内容关注公众号《极客运维之家》,扫码添加:

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值