放入路径
回忆上次内容
-  上次总算可以把 sleep.py直接执行了-  sleep.py文件头部要声明好打开方式 - #!/usr/bin/python3
- 用的是 python3解释sleep.py
 
 
-  
-  修改 sleep.py文件 的执行权限-  给当前用户增加 执行 execute权限- chmod u+x sleep.py
 
 
-  
-  运行 ./sleep.py成功- 但我不想总带着当前路径./
 
- 但我不想总带着当前路径
-  我想要直接输入 sleep.py回车就自动运行- 这可能么?🤪
 
进行搜索

按图索骥

#显示当前路径 echo $PATH
-  echo $PATH - echo : 显示
- $: 说明这是一个- 环境变量
- PATH: 能直接运行程序的- 路径
 

-  $PATH 里面有什么? - 这里面有很多路径
- 路径之间用:分隔开
 
- 这里面有很多
-  这些路径下的命令都可以直接执行 - 无需输入路径就能直接运行
 
- 比如我们最熟悉的ls
执行路径
-  回忆一下无论我们在哪个目录下 - 都能执行 ls 命令
 
ls #ls 命令在哪 whereis ls # 从路径直接执行ls /usr/bin/ls #ls 详细信息 ls -lh /usr/bin/ls
-  ls 是 /usr/bin下面的一个可执行文件 - 大小为139K
 

-  /usr/bin在$PATH的路径列表里- 所以 /usr/bin下 的ls就能直接执行
- 不需要在前面附加路径 /usr/bin/
- 只用文件名 ls就能直接执行
 
- 所以 
-  而且不论当前路径在哪个路径下 - ls命令都能直接执行
 
-  但是 - 如果环境变量 $PATH中没有/usr/bin
- 就找不到 ls了
- 就连 ls也不能执行了
 
- 如果环境变量 
- 真的是这样吗?
迷失路径
-  将PATH清空 - export PATH=
 

-  没有了$PATH - 真的连ls都找不到了😱😱😱
- 什么都干不了了
- 你说环境变量重要不重要?!🙆🏻♀️
 
重开终端
-  到桌面上重新打开一个新的xfce终端(terminal) - 再echo 一下 $PATH
- 路径就恢复了
 
-  只要如果命令所在路径在 $PATH路径下面- 路径下的程序就可以直接执行
 

- 执行路径为什么有那么多呢?
执行路径作用
-  比如我有两个不同版本的mc服务器 - 都在我的硬盘里
- 我怎么知道需要用启动哪个版本呢?
 
-  这两个启动的位置不同 - 更明确说
- 就是可执行文件的路径不同
- $PATH中谁靠前就执行谁下面的命令
 
-  类似的需求很多 - 比如有两个不同版本的 tomcat
- 或者两个不同版本的 java
- 或者不同版本的python3
- 都可以各自默认的执行目录
 
- 我们用的这个 python3 到底在哪呢?

python3的位置
- python3就在- /usr/bin/下面

- python3和- ls都在- /usr/bin/下面
-  /usr/bin的含义-  usr - unix software resources unix软件资源
 
-  bin - binary 二进制可执行文件
 
 
-  
分析路径
-  路径中包含 python3所在的路径- /usr/bin
- 见下图红框
 

-  无论当前路径在什么位置 -  只要输入 python3- 系统就去 $PATH里面从前往后找
-  在 /usr/bin当中找到了python3- 就不往后找了
 
- 然后执行 /usr/bin中找到的python3
 
- 系统就去 
 
-  
-  只要这个路径 /usr/bin在$PATH中- 系统在执行命令时
- 就会去 /usr/bin目录中搜索命令
 
- 那我们把 sleep.py拷贝到/usr/bin不就能被找到了么?
-  首先得明确 - 当前这个 sleep.py在哪里呢?
 
- 当前这个 
当前位置
-  pwd - present working directory
- 当前工作路径
 

-  当前路径就在 ~- 就是/home/shiyanlou
- 就是当前用户shiyanlou的用户文件夹
 
- 就是
- 什么是用户文件夹呢?
用户文件夹

-  我们的系统都是多用户的 - 多用户意味着可以有多个用户登录使用
- 每个用户都有自己的桌面、文档、下载目录
 


放入路径
#把文件拷贝过去 cp sleep.py /usr/bin #用管理员权限给考过去 sudo cp ./sleep.py /usr/bin #尝试执行 sleep.py #为当前用户增加可执行权限 chmod u+x /usr/bin/sleep.py #使用管理员权限提权 sudo chmod u+x /usr/bin/sleep.py #尝试执行 sleep.py #尝试用管理员执行 sudo sleep.py

- 最后 sleep.py 是可以执行的
-  但前提还是 - 需要在最前面打一个 sudo
- 进行提权
- 才能执行
 
- 如果我想不用sudo就直接运行sleep.py呢
ls的参数

-  如果不清楚ls参数作用的话 - 可以查询一下帮助
 

-  python之外 - oeasy也有linux教程
- 学完python之后可以去《oeasy教您玩转linux》
- 看看一些shell命令的细节
 
分析
-  sleep.py这个文件 - 拥有者(owner) 是root
- 用户组(group) 是 root
 

-  当前用户不能直接执行 - 只有 root 才能执行
 

- root代表着最高的权限
- 所以必须要加上sudo才可以
- 那原来的sleep.py为什么可以直接运行呢?
所有者来源
- 原来的所有者是shiyanlou啊

- 那为什么拷贝到/usr/bin下面之后
- 所有者就从shiyanlou变成root了呢?
回忆拷贝过程
-  回忆一下拷贝的时候 - 直接拷贝失败了
 

-  只能提权进行拷贝 - 这时候cp执行者就不是shiyanlou了
- 而是root
 

- 此后sleep.py就进入了/usr/bin
- 但是只能被文件所有者root调用
- 我想让普通用户也能执行sleep.py
- 可以吗?
提权
- 尝试再提权
#使用管理员权限提权 sudo chmod a+x /usr/bin/sleep.py #尝试执行 sleep.py
-  a+x 意思是 - all users 都增加
- execute 的权限
 

-  不同位置的x含义不同 - 蓝色对应 文件拥有者(owner) - (root)
- 红色对应 文件拥有者用户组(group) - (root)
- 黄色对应 所有用户 (all)
 
- 目前所有用户都能执行sleep.py了
问题
- 可是什么都放到 /usr/bin下面

- 就像鸡蛋都放在同一个篮子里

- 目录之下非常杂乱
调整
-  /usr/bin下面文件- 很多
- 很乱
- 很不安全
 
- 先把 sleep.py从/usr/bin中删除掉
#先把/usr/bin下面的sleep.py删掉 rm /usr/bin/sleep.py #不让删就用管理员权限删 sudo rm /usr/bin/sleep.py #确认删除 ls /usr/bin/sleep.py
- 确认删除之后

-  我希望 sleep.py- 还放在当前用户文件夹(~)
- 不动
 
- 最终还能在任意路径下执行
- 可能实现吗?🤔
总结
-  我们要在任意路径下直接执行 sleep.py- 把 sleep.py放在/usr/bin/下面
- 最终可以在任意位置执行程序sleep.py
 
- 把 
-  但是 - /usr/bin里面放的一般都是二进制命令文件
- 命令实在是太多太乱
- 最终还是删除了sleep.py
 
-  我想 - 把宿主目录添加到系统变量 $PATH中
 
- 把宿主目录添加到系统变量 

- 这样有可能吗?🤔
- 我们下次再说!👋
- 蓝桥->oeasy 教您玩转 python_Python - 蓝桥云课
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->oeasy教您玩转python教程: 面向零基础初学者的简明易懂的 Python3 入门课程,对没有编程经验的同学也非常友好。在vim下从浅入深,逐步学习。从基础入门学习到爬虫。
- 视频->[oeasy]教您玩转python零基础学python入门教程(合集)_哔哩哔哩_bilibili 作者:oeasy
![[附源码]Python计算机毕业设计SSM基于web的网上订餐系统(程序+LW)](https://img-blog.csdnimg.cn/a2dc531c92e4409089f4251bbbbe4cba.png)


















