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

                                                                                                                                                                                                                                                                              相关文章
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              16天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 Python
                                                                                                                                                                                                                                                                              堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
                                                                                                                                                                                                                                                                              本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
                                                                                                                                                                                                                                                                              33 3
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              16天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 算法 数据挖掘
                                                                                                                                                                                                                                                                              线性回归模型的原理、实现及应用,特别是在 Python 中的实践
                                                                                                                                                                                                                                                                              本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
                                                                                                                                                                                                                                                                              36 3
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              2天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 C语言 Python
                                                                                                                                                                                                                                                                              [oeasy]python051_什么样的变量名能用_标识符_identifier
                                                                                                                                                                                                                                                                              本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
                                                                                                                                                                                                                                                                              94 69
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              4天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              [oeasy]python050_如何删除变量_del_delete_variable
                                                                                                                                                                                                                                                                              本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
                                                                                                                                                                                                                                                                              97 68
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              7天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 人工智能 算法
                                                                                                                                                                                                                                                                              【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
                                                                                                                                                                                                                                                                              宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
                                                                                                                                                                                                                                                                              63 29
                                                                                                                                                                                                                                                                              【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              8天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 算法 前端开发
                                                                                                                                                                                                                                                                              基于Python深度学习的果蔬识别系统实现
                                                                                                                                                                                                                                                                              果蔬识别系统,主要开发语言为Python,基于TensorFlow搭建ResNet卷积神经网络算法模型,通过对12种常见的果蔬('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜')图像数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django框架搭建Web网页端可视化操作界面,以下为项目实现介绍。
                                                                                                                                                                                                                                                                              19 4
                                                                                                                                                                                                                                                                              基于Python深度学习的果蔬识别系统实现
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              6天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Shell Python
                                                                                                                                                                                                                                                                              [oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
                                                                                                                                                                                                                                                                              本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
                                                                                                                                                                                                                                                                              26 9
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              8天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              IDE 程序员 开发工具
                                                                                                                                                                                                                                                                              Python编程入门:打造你的第一个程序
                                                                                                                                                                                                                                                                              迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              9天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python 容器
                                                                                                                                                                                                                                                                              [oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
                                                                                                                                                                                                                                                                              本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
                                                                                                                                                                                                                                                                              19 5
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              9天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              缓存 开发者 Python
                                                                                                                                                                                                                                                                              深入探索Python中的装饰器:原理、应用与最佳实践####
                                                                                                                                                                                                                                                                              本文作为技术性深度解析文章,旨在揭开Python装饰器背后的神秘面纱,通过剖析其工作原理、多样化的应用场景及实践中的最佳策略,为中高级Python开发者提供一份详尽的指南。不同于常规摘要的概括性介绍,本文摘要将直接以一段精炼的代码示例开篇,随后简要阐述文章的核心价值与读者预期收获,引领读者快速进入装饰器的世界。 ```python # 示例:一个简单的日志记录装饰器 def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {a
                                                                                                                                                                                                                                                                              26 2