首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
软件
运维软件
办公软件
书籍资源
技术陪跑营
重要信息
首页 运维教程Linux基础shell是如何运行程序的?

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程序,又没有备份,这时候你该怎么还原回去呢?

本文链接:http://www.geekyunwei.com/978.html

网友评论comments

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2021 极客运维 公众号《极客运维之家》
扫二维码
扫二维码
返回顶部