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

                                                                                                                                                                                                                                                                              相关文章
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              11天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 人工智能 算法
                                                                                                                                                                                                                                                                              猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
                                                                                                                                                                                                                                                                              宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
                                                                                                                                                                                                                                                                              146 55
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              9天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Unix Linux 程序员
                                                                                                                                                                                                                                                                              [oeasy]python053_学编程为什么从hello_world_开始
                                                                                                                                                                                                                                                                              视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
                                                                                                                                                                                                                                                                              101 80
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              16天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 C语言 Python
                                                                                                                                                                                                                                                                              [oeasy]python051_什么样的变量名能用_标识符_identifier
                                                                                                                                                                                                                                                                              本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
                                                                                                                                                                                                                                                                              108 69
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              18天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Python
                                                                                                                                                                                                                                                                              [oeasy]python050_如何删除变量_del_delete_variable
                                                                                                                                                                                                                                                                              本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
                                                                                                                                                                                                                                                                              109 68
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              21天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 人工智能 算法
                                                                                                                                                                                                                                                                              【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
                                                                                                                                                                                                                                                                              宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
                                                                                                                                                                                                                                                                              114 29
                                                                                                                                                                                                                                                                              【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              2天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              存储 算法 Python
                                                                                                                                                                                                                                                                              文件管理系统中基于 Python 语言的二叉树查找算法探秘
                                                                                                                                                                                                                                                                              在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
                                                                                                                                                                                                                                                                              34 5
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              7天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              C语言 Python
                                                                                                                                                                                                                                                                              [oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
                                                                                                                                                                                                                                                                              本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
                                                                                                                                                                                                                                                                              24 9
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              9天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              安全 API C语言
                                                                                                                                                                                                                                                                              Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
                                                                                                                                                                                                                                                                              本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
                                                                                                                                                                                                                                                                              37 6
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              11天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              缓存 数据安全/隐私保护 Python
                                                                                                                                                                                                                                                                              python装饰器底层原理
                                                                                                                                                                                                                                                                              Python装饰器是一个强大的工具,可以在不修改原始函数代码的情况下,动态地增加功能。理解装饰器的底层原理,包括函数是对象、闭包和高阶函数,可以帮助我们更好地使用和编写装饰器。无论是用于日志记录、权限验证还是缓存,装饰器都可以显著提高代码的可维护性和复用性。
                                                                                                                                                                                                                                                                              24 5
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              15天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              Unix 编译器 C语言
                                                                                                                                                                                                                                                                              [oeasy]python052_[系统开发语言为什么默认是c语言
                                                                                                                                                                                                                                                                              本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
                                                                                                                                                                                                                                                                              24 5