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

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

 

放入路径

回忆上次内容

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

                            进行搜索

                            image.gif编辑

                            按图索骥

                            image.gif编辑

                            #显示当前路径

                            echo $PATH

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

                                  image.gif编辑

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

                                            执行路径

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

                                                  ls

                                                  #ls 命令在哪

                                                  whereis ls

                                                  # 从路径直接执行ls

                                                  /usr/bin/ls

                                                  #ls 详细信息

                                                  ls -lh /usr/bin/ls

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

                                                        image.gif编辑

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

                                                                      迷失路径

                                                                        • 将PATH清空
                                                                          • export PATH=

                                                                            image.gif编辑

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

                                                                                  重开终端

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

                                                                                            image.gif编辑

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

                                                                                              执行路径作用

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

                                                                                                            image.gif编辑

                                                                                                            python3的位置

                                                                                                              • python3 就在/usr/bin/下面

                                                                                                              image.gif编辑

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

                                                                                                                            分析路径

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

                                                                                                                                  image.gif编辑

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

                                                                                                                                                        当前位置

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

                                                                                                                                                              image.gif编辑

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

                                                                                                                                                                    用户文件夹

                                                                                                                                                                    image.gif编辑

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

                                                                                                                                                                          image.gif编辑

                                                                                                                                                                          image.gif编辑

                                                                                                                                                                          放入路径

                                                                                                                                                                          #把文件拷贝过去

                                                                                                                                                                          cp sleep.py /usr/bin

                                                                                                                                                                          #用管理员权限给考过去

                                                                                                                                                                          sudo cp ./sleep.py /usr/bin

                                                                                                                                                                          #尝试执行

                                                                                                                                                                          sleep.py

                                                                                                                                                                          #为当前用户增加可执行权限

                                                                                                                                                                          chmod u+x /usr/bin/sleep.py

                                                                                                                                                                          #使用管理员权限提权

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

                                                                                                                                                                          #尝试执行

                                                                                                                                                                          sleep.py

                                                                                                                                                                          #尝试用管理员执行

                                                                                                                                                                          sudo sleep.py

                                                                                                                                                                          image.gif编辑

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

                                                                                                                                                                                ls的参数

                                                                                                                                                                                image.gif编辑

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

                                                                                                                                                                                      image.gif编辑

                                                                                                                                                                                        • python之外

                                                                                                                                                                                            分析

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

                                                                                                                                                                                                  image.gif编辑

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

                                                                                                                                                                                                        image.gif编辑

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

                                                                                                                                                                                                          所有者来源

                                                                                                                                                                                                            • 原来的所有者是shiyanlou啊

                                                                                                                                                                                                            image.gif编辑

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

                                                                                                                                                                                                              回忆拷贝过程

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

                                                                                                                                                                                                                    image.gif编辑

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

                                                                                                                                                                                                                          image.gif编辑

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

                                                                                                                                                                                                                            提权

                                                                                                                                                                                                                              • 尝试再提权

                                                                                                                                                                                                                              #使用管理员权限提权

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

                                                                                                                                                                                                                              #尝试执行

                                                                                                                                                                                                                              sleep.py

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

                                                                                                                                                                                                                                    image.gif编辑

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

                                                                                                                                                                                                                                          问题

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

                                                                                                                                                                                                                                            image.gif编辑

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

                                                                                                                                                                                                                                              image.gif编辑

                                                                                                                                                                                                                                                • 目录之下非常杂乱

                                                                                                                                                                                                                                                调整

                                                                                                                                                                                                                                                  • /usr/bin下面文件
                                                                                                                                                                                                                                                    • 很多
                                                                                                                                                                                                                                                    • 很乱
                                                                                                                                                                                                                                                    • 很不安全
                                                                                                                                                                                                                                                      • 先把 sleep.py/usr/bin 中删除掉

                                                                                                                                                                                                                                                      #先把/usr/bin下面的sleep.py删掉

                                                                                                                                                                                                                                                      rm /usr/bin/sleep.py

                                                                                                                                                                                                                                                      #不让删就用管理员权限删

                                                                                                                                                                                                                                                      sudo rm /usr/bin/sleep.py

                                                                                                                                                                                                                                                      #确认删除

                                                                                                                                                                                                                                                      ls /usr/bin/sleep.py

                                                                                                                                                                                                                                                        • 确认删除之后

                                                                                                                                                                                                                                                        image.gif编辑

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

                                                                                                                                                                                                                                                              总结

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

                                                                                                                                                                                                                                                                            image.gif编辑

                                                                                                                                                                                                                                                                              相关文章
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1月前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 人工智能 算法
                                                                                                                                                                                                                                                                              基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
                                                                                                                                                                                                                                                                              眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
                                                                                                                                                                                                                                                                              130 5
                                                                                                                                                                                                                                                                              基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              26天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 Shell 开发工具
                                                                                                                                                                                                                                                                              [oeasy]python062_在python中完成输入和输出_input_print
                                                                                                                                                                                                                                                                              本文介绍了在Python中使用`input()`和`print()`函数完成输入和输出操作的基础知识。通过编写简单的程序,如问候用户和统计苹果数量,演示了如何添加提示信息、处理用户输入并输出结果。同时,回顾了上一次课程内容,包括`input`函数的参数和提示词的使用。文中还展示了如何在vim编辑器中编写和运行Python代码,并对vim和shell的基本操作进行了总结。最后提供了相关学习资源链接,方便读者进一步学习。
                                                                                                                                                                                                                                                                              115 66
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              5天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              机器学习/深度学习 人工智能 算法
                                                                                                                                                                                                                                                                              基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
                                                                                                                                                                                                                                                                              蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
                                                                                                                                                                                                                                                                              42 11
                                                                                                                                                                                                                                                                              基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              5天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 Shell 开发工具
                                                                                                                                                                                                                                                                              [oeasy]python065python报错怎么办_try_试着来_except_发现异常
                                                                                                                                                                                                                                                                              本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
                                                                                                                                                                                                                                                                              48 32
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              2天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              数据库 Python
                                                                                                                                                                                                                                                                              [oeasy]python066_如何捕获多个异常_try_否则_else_exception
                                                                                                                                                                                                                                                                              本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括: 1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。 2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。 3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理
                                                                                                                                                                                                                                                                              33 24
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              8天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              缓存 Shell 开发工具
                                                                                                                                                                                                                                                                              [oeasy]python064_命令行工作流的总结_vim_shell_python
                                                                                                                                                                                                                                                                              本文总结了命令行工作流中的关键工具和操作,包括vim、shell和Python。主要内容如下: 1. **上次回顾**:完成了输入输出的代码编写,并再次练习了vim的使用。 2. **shell基础**:介绍了shell环境及其基本命令,如`pwd`、`cd`、`ll -l`等。 3. **Python游乐场**:通过`python3`命令进入Python交互环境,可以进行简单计算和函数调用,常用函数有`help`、`ord`、`chr`等。 4. **vim编辑器**:详细讲解了vim的三种模式(正常模式、插入模式、底行命令模式)及其切换方法,以及常用的底行命令如`:w`、`:q`、`
                                                                                                                                                                                                                                                                              45 15
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              21天前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              存储 缓存 Java
                                                                                                                                                                                                                                                                              Python高性能编程:五种核心优化技术的原理与Python代码
                                                                                                                                                                                                                                                                              Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
                                                                                                                                                                                                                                                                              58 5
                                                                                                                                                                                                                                                                              Python高性能编程:五种核心优化技术的原理与Python代码
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1月前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              人工智能 Unix Java
                                                                                                                                                                                                                                                                              [oeasy]python059变量命名有什么规则_惯用法_蛇形命名法_name_convention_snake
                                                                                                                                                                                                                                                                              本文探讨了Python中变量命名的几种常见方式,包括汉语拼音变量名、蛇形命名法(snake_case)和驼峰命名法(CamelCase)。回顾上次内容,我们主要讨论了使用下划线替代空格以提高代码可读性。实际编程中,当变量名由多个单词组成时,合理的命名惯例变得尤为重要。
                                                                                                                                                                                                                                                                              84 9
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1月前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              C语言 Python
                                                                                                                                                                                                                                                                              [oeasy]python058_一句话让python崩了
                                                                                                                                                                                                                                                                              本文介绍了如何通过重新赋值`__builtins__`使Python环境崩溃,并探讨了下划线的来历及其在编程中的作用。文章回顾了上次内容,展示了覆盖内建模块导致系统崩溃的过程,解释了恢复方法,以及PEP 8规范中关于空格使用的建议。最后,文章总结了下划线在变量定义和提高代码可读性方面的重要性,并简述了其从打字机时代到计算机时代的演变。
                                                                                                                                                                                                                                                                              34 10
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              1月前
                                                                                                                                                                                                                                                                              |
                                                                                                                                                                                                                                                                              安全 数据挖掘 编译器
                                                                                                                                                                                                                                                                              【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
                                                                                                                                                                                                                                                                              【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
                                                                                                                                                                                                                                                                              66 6

                                                                                                                                                                                                                                                                              热门文章

                                                                                                                                                                                                                                                                              最新文章