欢迎光临散文网 会员登陆 & 注册

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

2022-12-13 18:36 作者:oeasy  | 我要投稿

 

放入路径

回忆上次内容


  • 上次总算可以把 sleep.py 直接执行了


    • #!/usr/bin/python3

    • 用的是 python3 解释 sleep.py


    • sleep.py文件头部要声明好打开方式



    • 修改 sleep.py 文件 的执行权限


      • chmod u+x sleep.py


      • 给当前用户增加 执行execute 权限



    • 运行./sleep.py成功


      • 但我不想总带着当前路径./


    • 我想要直接输入sleep.py回车就自动运行


      • 这可能么?🤪

    进行搜索

    编辑

    按图索骥

    编辑

    #显示当前路径 echo $PATH


    • echo $PATH


      • echo : 显示

      • $ : 说明这是一个 环境变量

      • PATH : 能直接运行程序的路径

    编辑


    • $PATH 里面有什么?


      • 这里面有很多路径

      • 路径之间用:分隔开


    • 这些路径下的命令都可以直接执行


      • 无需输入路径就能直接运行

    • 比如我们最熟悉的ls

    执行路径


    • 回忆一下无论我们在哪个目录下


      • 都能执行 ls 命令

    ls #ls 命令在哪 whereis ls # 从路径直接执行ls /usr/bin/ls #ls 详细信息 ls -lh /usr/bin/ls


    • ls 是 /usr/bin下面的一个可执行文件


      • 大小为139K

    编辑


    • /usr/bin$PATH 的路径列表里


      • 所以 /usr/bin 下 的 ls 就能直接执行

      • 不需要在前面附加路径 /usr/bin/

      • 只用文件名 ls 就能直接执行


    • 而且不论当前路径在哪个路径下


      • ls 命令都能直接执行


    • 但是


      • 如果环境变量 $PATH 中没有/usr/bin

      • 就找不到 ls

      • 就连 ls 也不能执行了

    • 真的是这样吗?

    迷失路径


    • 将PATH清空


      • export PATH=

    编辑


    • 没有了$PATH


      • 真的连ls都找不到了😱😱😱

      • 什么都干不了了

      • 你说环境变量重要不重要?!🙆🏻‍♀️

    重开终端


    • 到桌面上重新打开一个新的xfce终端(terminal)


      • 再echo 一下 $PATH

      • 路径就恢复了


    • 只要如果命令所在路径在 $PATH 路径下面


      • 路径下的程序就可以直接执行

    编辑

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

    执行路径作用


    • 比如我有两个不同版本的mc服务器


      • 都在我的硬盘里

      • 我怎么知道需要用启动哪个版本呢?


    • 这两个启动的位置不同


      • 更明确说

      • 就是可执行文件的路径不同

      • $PATH中谁靠前就执行谁下面的命令


    • 类似的需求很多


      • 比如有两个不同版本的 tomcat

      • 或者两个不同版本的 java

      • 或者不同版本的python3

      • 都可以各自默认的执行目录

    • 我们用的这个 python3 到底在哪呢?

    编辑

    python3的位置

    • python3 就在/usr/bin/下面

    编辑

    • python3ls 都在 /usr/bin/下面


    • /usr/bin 的含义


      • binary 二进制可执行文件

      • unix software resources unix软件资源


      • usr



      • bin


      分析路径


      • 路径中包含 python3 所在的路径


        • /usr/bin

        • 见下图红框

      编辑


      • 无论当前路径在什么位置


        • 系统就去 $PATH 里面从前往后找


        • /usr/bin 当中找到了python3


        • 然后执行 /usr/bin 中找到的 python3

        • 就不往后找了


        • 只要输入 python3



        • 只要这个路径 /usr/bin$PATH


          • 系统在执行命令时

          • 就会去 /usr/bin 目录中搜索命令

        • 那我们把 sleep.py 拷贝到 /usr/bin 不就能被找到了么?


        • 首先得明确


          • 当前这个 sleep.py 在哪里呢?

        当前位置


        • pwd


          • present working directory

          • 当前工作路径

        编辑


        • 当前路径就在 ~


          • 就是/home/shiyanlou

          • 就是当前用户shiyanlou的用户文件夹

        • 什么是用户文件夹呢?

        用户文件夹

        编辑


        • 我们的系统都是多用户的


          • 多用户意味着可以有多个用户登录使用

          • 每个用户都有自己的桌面、文档、下载目录

        编辑

        编辑

        放入路径

        #把文件拷贝过去 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

        编辑

        • 最后 sleep.py 是可以执行的


        • 但前提还是


          • 需要在最前面打一个 sudo

          • 进行提权

          • 才能执行

        • 如果我想不用sudo就直接运行sleep.py呢

        ls的参数

        编辑


        • 如果不清楚ls参数作用的话


          • 可以查询一下帮助

        编辑


        • python之外


          • oeasy也有linux教程

          • 学完python之后可以去《oeasy教您玩转linux》

          • 看看一些shell命令的细节

        分析


        • sleep.py这个文件


          • 拥有者(owner) 是root

          • 用户组(group) 是 root

        编辑


        • 当前用户不能直接执行


          • 只有 root 才能执行

        编辑

        • root代表着最高的权限

        • 所以必须要加上sudo才可以

        • 那原来的sleep.py为什么可以直接运行呢?

        所有者来源

        • 原来的所有者是shiyanlou啊

        编辑

        • 那为什么拷贝到/usr/bin下面之后

        • 所有者就从shiyanlou变成root了呢?

        回忆拷贝过程


        • 回忆一下拷贝的时候


          • 直接拷贝失败了

        编辑


        • 只能提权进行拷贝


          • 这时候cp执行者就不是shiyanlou了

          • 而是root

        编辑

        • 此后sleep.py就进入了/usr/bin

        • 但是只能被文件所有者root调用

        • 我想让普通用户也能执行sleep.py

        • 可以吗?

        提权

        • 尝试再提权

        #使用管理员权限提权 sudo chmod a+x /usr/bin/sleep.py #尝试执行 sleep.py


        • a+x 意思是


          • all users 都增加

          • execute 的权限

        编辑


        • 不同位置的x含义不同


          • 蓝色对应 文件拥有者(owner) - (root)

          • 红色对应 文件拥有者用户组(group) - (root)

          • 黄色对应 所有用户 (all)

        • 目前所有用户都能执行sleep.py了

        问题

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

        编辑

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

        编辑

        • 目录之下非常杂乱

        调整


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

        • 确认删除之后

        编辑


        • 我希望 sleep.py


          • 还放在当前用户文件夹(~)

          • 不动

        • 最终还能在任意路径下执行

        • 可能实现吗?🤔

        总结


        • 我们要在任意路径下直接执行 sleep.py


          • sleep.py 放在 /usr/bin/ 下面

          • 最终可以在任意位置执行程序sleep.py


        • 但是


          • /usr/bin 里面放的一般都是二进制命令文件

          • 命令实在是太多太乱

          • 最终还是删除了sleep.py


        • 我想


          • 把宿主目录添加到系统变量 $PATH

        编辑

        • 这样有可能吗?🤔

        • 我们下次再说!*

        • 蓝桥->oeasy 教您玩转 python_Python - 蓝桥云课

        • github->https://github.com/overmind1980/oeasy-python-tutorial

        • gitee->oeasy教您玩转python教程: 面向零基础初学者的简明易懂的 Python3 入门课程,对没有编程经验的同学也非常友好。在vim下从浅入深,逐步学习。从基础入门学习到爬虫。

        • 视频->[oeasy]教您玩转python零基础学python入门教程(合集)_哔哩哔哩_bilibili 作者:oeasy


        [oeasy]python0029_放入系统路径_PATH_chmod_程序路径_执行原理的评论 (共 条)

        分享到微博请遵守国家法律