[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编辑

                                                                                                                                                                                                                                                                              相关文章
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              8天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              [oeasy]python086方法_method_函数_function_区别
                                                                                                                                                                                                                                                                              本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
                                                                                                                                                                                                                                                                              46 17
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 Python
                                                                                                                                                                                                                                                                              [oeasy]python088_列表_清空列表_clear
                                                                                                                                                                                                                                                                              本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
                                                                                                                                                                                                                                                                              21 5
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              12天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              前端开发 JavaScript 关系型数据库
                                                                                                                                                                                                                                                                              基于Python+Vue开发的美容预约管理系统源码+运行
                                                                                                                                                                                                                                                                              基于Python+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的美容诊所预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
                                                                                                                                                                                                                                                                              37 9
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              14天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 Python
                                                                                                                                                                                                                                                                              [oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
                                                                                                                                                                                                                                                                              本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
                                                                                                                                                                                                                                                                              40 11
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              9天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              JavaScript 前端开发 关系型数据库
                                                                                                                                                                                                                                                                              基于Python+Vue开发的体育场馆预约管理系统源码+运行
                                                                                                                                                                                                                                                                              本项目为大学生课程设计作业,采用Python和Vue技术构建了一个体育场馆预约管理系统(实现前后端分离)。系统的主要目标在于帮助学生理解和掌握Python编程知识,同时培养其项目规划和开发能力。参与该项目的学习过程,学生能够在实际操作中锻炼技能,为未来的职业发展奠定良好的基础。
                                                                                                                                                                                                                                                                              43 3
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              15天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              前端开发 JavaScript 关系型数据库
                                                                                                                                                                                                                                                                              基于Python+Vue开发的摄影网上预约管理系统源码+运行
                                                                                                                                                                                                                                                                              基于Python+Vue开发的摄影网上预约管理系统(前后端分离),影楼婚纱摄影,这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的在线摄影预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
                                                                                                                                                                                                                                                                              36 8
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              13天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              前端开发 JavaScript 关系型数据库
                                                                                                                                                                                                                                                                              基于Python+Vue开发的新闻管理系统源码+运行
                                                                                                                                                                                                                                                                              基于Python+Vue开发的新闻管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的新闻管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
                                                                                                                                                                                                                                                                              43 5
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              11天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              前端开发 JavaScript 关系型数据库
                                                                                                                                                                                                                                                                              基于Python+Vue开发的房产销售管理系统源码+运行
                                                                                                                                                                                                                                                                              基于Python+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
                                                                                                                                                                                                                                                                              32 2
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              16天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              前端开发 JavaScript 关系型数据库
                                                                                                                                                                                                                                                                              基于Python+Vue开发的民宿客房预订管理系统源码运行
                                                                                                                                                                                                                                                                              基于Python+Vue开发的民宿客房预订管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的民宿客房预订管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
                                                                                                                                                                                                                                                                              42 8
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              10月前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python Windows
                                                                                                                                                                                                                                                                              Python基础教程(第3版)中文版 第18章 程序打包 (笔记)
                                                                                                                                                                                                                                                                              Python基础教程(第3版)中文版 第18章 程序打包 (笔记)