[oeasy]python0029_放入系统路径_PATH_chmod_程序路径_执行原理

简介: [oeasy]python0029_放入系统路径_PATH_chmod_程序路径_执行原理

 

放入路径

回忆上次内容

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

                            进行搜索

                            image.gif编辑

                            按图索骥

                            image.gif编辑

                            #显示当前路径

                            echo $PATH

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

                                  image.gif编辑

                                    • $PATH 里面有什么?
                                      • 这里面有很多路径
                                      • 路径之间用:分隔开
                                        • 这些路径下的命令都可以直接执行
                                          • 无需输入路径就能直接运行
                                            • 比如我们最熟悉的ls

                                            执行路径

                                              • 回忆一下无论我们在哪个目录下
                                                • 都能执行 ls 命令

                                                  ls

                                                  #ls 命令在哪

                                                  whereis ls

                                                  # 从路径直接执行ls

                                                  /usr/bin/ls

                                                  #ls 详细信息

                                                  ls -lh /usr/bin/ls

                                                    • ls 是 /usr/bin下面的一个可执行文件
                                                      • 大小为139K

                                                        image.gif编辑

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

                                                                      迷失路径

                                                                        • 将PATH清空
                                                                          • export PATH=

                                                                            image.gif编辑

                                                                              • 没有了$PATH
                                                                                • 真的连ls都找不到了😱😱😱
                                                                                • 什么都干不了了
                                                                                • 你说环境变量重要不重要?!🙆🏻‍♀️

                                                                                  重开终端

                                                                                    • 到桌面上重新打开一个新的xfce终端(terminal)
                                                                                      • 再echo 一下 $PATH
                                                                                      • 路径就恢复了
                                                                                        • 只要如果命令所在路径在 $PATH 路径下面
                                                                                          • 路径下的程序就可以直接执行

                                                                                            image.gif编辑

                                                                                              • 执行路径为什么有那么多呢?

                                                                                              执行路径作用

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

                                                                                                            image.gif编辑

                                                                                                            python3的位置

                                                                                                              • python3 就在/usr/bin/下面

                                                                                                              image.gif编辑

                                                                                                                • python3ls 都在 /usr/bin/下面
                                                                                                                • /usr/bin 的含义
                                                                                                                  • usr
                                                                                                                    • unix software resources unix软件资源
                                                                                                                      • bin
                                                                                                                        • binary 二进制可执行文件

                                                                                                                            分析路径

                                                                                                                              • 路径中包含 python3 所在的路径
                                                                                                                                • /usr/bin
                                                                                                                                • 见下图红框

                                                                                                                                  image.gif编辑

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

                                                                                                                                                        当前位置

                                                                                                                                                          • pwd
                                                                                                                                                            • present working directory
                                                                                                                                                            • 当前工作路径

                                                                                                                                                              image.gif编辑

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

                                                                                                                                                                    用户文件夹

                                                                                                                                                                    image.gif编辑

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

                                                                                                                                                                          image.gif编辑

                                                                                                                                                                          image.gif编辑

                                                                                                                                                                          放入路径

                                                                                                                                                                          #把文件拷贝过去

                                                                                                                                                                          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

                                                                                                                                                                          image.gif编辑

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

                                                                                                                                                                                ls的参数

                                                                                                                                                                                image.gif编辑

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

                                                                                                                                                                                      image.gif编辑

                                                                                                                                                                                        • python之外

                                                                                                                                                                                            分析

                                                                                                                                                                                              • sleep.py这个文件
                                                                                                                                                                                                • 拥有者(owner) 是root
                                                                                                                                                                                                • 用户组(group) 是 root

                                                                                                                                                                                                  image.gif编辑

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

                                                                                                                                                                                                        image.gif编辑

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

                                                                                                                                                                                                          所有者来源

                                                                                                                                                                                                            • 原来的所有者是shiyanlou啊

                                                                                                                                                                                                            image.gif编辑

                                                                                                                                                                                                              • 那为什么拷贝到/usr/bin下面之后
                                                                                                                                                                                                              • 所有者就从shiyanlou变成root了呢?

                                                                                                                                                                                                              回忆拷贝过程

                                                                                                                                                                                                                • 回忆一下拷贝的时候
                                                                                                                                                                                                                  • 直接拷贝失败了

                                                                                                                                                                                                                    image.gif编辑

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

                                                                                                                                                                                                                          image.gif编辑

                                                                                                                                                                                                                            • 此后sleep.py就进入了/usr/bin
                                                                                                                                                                                                                            • 但是只能被文件所有者root调用
                                                                                                                                                                                                                            • 我想让普通用户也能执行sleep.py
                                                                                                                                                                                                                            • 可以吗?

                                                                                                                                                                                                                            提权

                                                                                                                                                                                                                              • 尝试再提权

                                                                                                                                                                                                                              #使用管理员权限提权

                                                                                                                                                                                                                              sudo chmod a+x /usr/bin/sleep.py

                                                                                                                                                                                                                              #尝试执行

                                                                                                                                                                                                                              sleep.py

                                                                                                                                                                                                                                • a+x 意思是
                                                                                                                                                                                                                                  • all users 都增加
                                                                                                                                                                                                                                  • execute 的权限

                                                                                                                                                                                                                                    image.gif编辑

                                                                                                                                                                                                                                      • 不同位置的x含义不同
                                                                                                                                                                                                                                        • 蓝色对应 文件拥有者(owner) - (root)
                                                                                                                                                                                                                                        • 红色对应 文件拥有者用户组(group) - (root)
                                                                                                                                                                                                                                        • 黄色对应 所有用户 (all)
                                                                                                                                                                                                                                          • 目前所有用户都能执行sleep.py了

                                                                                                                                                                                                                                          问题

                                                                                                                                                                                                                                            • 可是什么都放到 /usr/bin下面

                                                                                                                                                                                                                                            image.gif编辑

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

                                                                                                                                                                                                                                              image.gif编辑

                                                                                                                                                                                                                                                • 目录之下非常杂乱

                                                                                                                                                                                                                                                调整

                                                                                                                                                                                                                                                  • /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

                                                                                                                                                                                                                                                        • 确认删除之后

                                                                                                                                                                                                                                                        image.gif编辑

                                                                                                                                                                                                                                                          • 我希望 sleep.py
                                                                                                                                                                                                                                                            • 还放在当前用户文件夹(~)
                                                                                                                                                                                                                                                            • 不动
                                                                                                                                                                                                                                                              • 最终还能在任意路径下执行
                                                                                                                                                                                                                                                              • 可能实现吗?🤔

                                                                                                                                                                                                                                                              总结

                                                                                                                                                                                                                                                                • 我们要在任意路径下直接执行 sleep.py
                                                                                                                                                                                                                                                                  • sleep.py 放在 /usr/bin/ 下面
                                                                                                                                                                                                                                                                  • 最终可以在任意位置执行程序sleep.py
                                                                                                                                                                                                                                                                    • 但是
                                                                                                                                                                                                                                                                      • /usr/bin 里面放的一般都是二进制命令文件
                                                                                                                                                                                                                                                                      • 命令实在是太多太乱
                                                                                                                                                                                                                                                                      • 最终还是删除了sleep.py
                                                                                                                                                                                                                                                                        • 我想
                                                                                                                                                                                                                                                                          • 把宿主目录添加到系统变量 $PATH

                                                                                                                                                                                                                                                                            image.gif编辑

                                                                                                                                                                                                                                                                              相关文章
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 IDE 数据挖掘
                                                                                                                                                                                                                                                                              如何系统地自学python?
                                                                                                                                                                                                                                                                              如何系统地自学python?
                                                                                                                                                                                                                                                                              16 1
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              Python代码扫描目录下的文件并获取路径
                                                                                                                                                                                                                                                                              【5月更文挑战第12天】Python代码扫描目录下的文件并获取路径
                                                                                                                                                                                                                                                                              13 1
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              【Python进阶(二)】——程序调试方法
                                                                                                                                                                                                                                                                              【Python进阶(二)】——程序调试方法
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
                                                                                                                                                                                                                                                                              【5月更文挑战第11天】Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
                                                                                                                                                                                                                                                                              104 2
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              前端开发 UED Python
                                                                                                                                                                                                                                                                              Wagtail-基于Python Django的内容管理系统CMS实现公网访问
                                                                                                                                                                                                                                                                              Wagtail-基于Python Django的内容管理系统CMS实现公网访问
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              消息中间件 程序员 调度
                                                                                                                                                                                                                                                                              Python并发编程:利用多线程提升程序性能
                                                                                                                                                                                                                                                                              本文探讨了Python中的并发编程技术,重点介绍了如何利用多线程提升程序性能。通过分析多线程的原理和实现方式,以及线程间的通信和同步方法,读者可以了解如何在Python中编写高效的并发程序,提升程序的执行效率和响应速度。
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              缓存 Shell 开发工具
                                                                                                                                                                                                                                                                              [oeasy]python0016_在vim中直接运行python程序
                                                                                                                                                                                                                                                                              在 Vim 编辑器中,可以通过`:!`命令来执行外部程序,例如`:!python3 oeasy.py`来运行Python程序。如果想在不退出Vim的情况下运行当前编辑的Python文件,可以使用`%`符号代表当前文件名,所以`:!python3 %`同样能运行程序。此外,可以使用`|`符号连续执行命令,例如`:w|!python3 %`会先保存文件(`w`)然后运行Python程序。这样,就可以在不离开Vim的情况下完成编辑、保存和运行Python程序的流程。
                                                                                                                                                                                                                                                                              19 0
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              存储 Python
                                                                                                                                                                                                                                                                              【Python 基础】解释reduce函数的工作原理
                                                                                                                                                                                                                                                                              【5月更文挑战第6天】【Python 基础】解释reduce函数的工作原理
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              【Python 基础】解释map函数的工作原理
                                                                                                                                                                                                                                                                              【5月更文挑战第6天】【Python 基础】解释map函数的工作原理
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              运维 监控 Ubuntu
                                                                                                                                                                                                                                                                              Python实现ubuntu系统进程内存监控
                                                                                                                                                                                                                                                                              Python实现ubuntu系统进程内存监控
                                                                                                                                                                                                                                                                              16 1