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

news2024/11/27 4:37:59

放入路径

回忆上次内容

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

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

      • #!/usr/bin/python3
      • 用的是 python3 解释 sleep.py
  • 修改 sleep.py 文件 的执行权限

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

      • chmod u+x sleep.py
  • 运行./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 的含义

    • usr

      • unix software resources unix软件资源
    • bin

      • binary 二进制可执行文件

分析路径

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

    • /usr/bin
    • 见下图红框

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

    • 只要输入 python3

      • 系统就去 $PATH 里面从前往后找
      • /usr/bin 当中找到了python3

        • 就不往后找了
      • 然后执行 /usr/bin 中找到的 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM基于web的网上订餐系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Ubuntu18.04安装Carla 记录

官方文档:CARLA Simulator 方式一:简单快速安装,该方式有缺陷。需要使用虚幻引擎编辑器的高级定制和开发选项不可用。 Advanced customization and development options that require use of the Unreal Engine editor are not available b…

【编译原理】第三章部分课后题答案

第 三 章 课 后 习 题 T 3.1 考虑文法 S→(L)∣aL→L,S∣SS \rightarrow (L)\space | \space a\\ L\rightarrow L, S \space | \space S S→(L) ∣ aL→L,S ∣ S (a) 建立句子 (a,(a,a))(a,(a,a))(a,(a,a)) 和 (a,(a,a),(a,a))(a,(a,a),(a,a))(a,(a,a),(a,a)) 的分析树。 见…

SpringMVC学习:三、SpringMVC的请求与响应

4. SpringMVC的请求与响应 4.1 RequestMapping ​ 使用RequestMapping注解可以定义不同的处理器映射规则。 1. URL路径映射: RequestMapping(value“/queryAll”)或RequestMapping("/queryAll”) value的值是数组,可以将多个url映射到同一个方法…

计算机研究生就业方向之互联网安全

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么,如果你只是转码,那么你不一定要考研,至少以下几个职位研究生是没有啥优势的: 1,软件测试工程师(培训一下就行) 2,前…

CSS 居中总结

文章目录CSS 居中总结水平居中文字水平居中块元素水平居中行内元素和行内块元素水平居中垂直居中文字垂直居中单行文字多行文字块元素居中块元素居中(方法二)块元素居中(方法三)行内元素、行内块元素居中flex居中CSS 居中总结 水…

web前端期末大作业实例 (1500套) 集合

文章目录📚web前端期末大作业 (1500套) 集合一、网页介绍二、网页集合💌表白网页 125套 (集合)💙Echarts大屏数据展示 150套 (集合)一、基于HTMLEcharts技术制作二、基于VUEEcharts技术制作🎁更多源码📚web前端期末大作…

去中心化的互联网环境,有一种神奇的商业模式,无产品也可以创业

现在的电商行业做分销的平台越来越多,竞争力也越渐增大,不得不使用一些电商商业模式来让用户进来并留下来。 ​ 但是在经济环境和疫情环境的双重影响下,每个人或多或少都被影响到了。虽然有很多行业低落,但是也有一些行业兴起&…

Spring事务及Spring整合MyBatis

SM整合的步骤 1,建库建表 2,新建maven模块 3,修改maven目录 4,修改pom.xml文件,添加依赖 5,添加MyBaits模板(SqlMapperConfig.xml和XXXMapper.xml文件) 6,添加Appli…

小程序中的轮播图

目录 小程序的宿主环境 - 组件 1.scroll-view 组件的基本使用2.swiper 和 swiper-item 组件的基本使用3.text 组件的基本使用4.rich-text 组件的基本使用附:微信小程序轮播图单独添加图片、修改轮播图图片、单独修改某张图片总结 小程序的宿主环境 - 组件 1.scrol…

北京智和信通:交换机策略查询与自动化配置

在网络中交换机占据重要位置,一旦交换机被攻击或破坏,都将使整个网络处于危险之中。在网络的日常配置管理中,交换机的配置也是核心工作,但在交换机的配置过程复杂,而且根据品牌及型号的不同,配置方式也不相…

利用2阶分数阶微分掩模的边缘检测(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

java计算机毕业设计基于安卓Android的装维助手APP

项目介绍 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于装维助手APP当然也不能排除在外,随着网络技术的不断成熟,带动了装维助手APP,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性…

服务器负载过高实例分析

一、问题现象 top 命令查看显示服务器负载情况,服务器负载1.31,而且长时间没降下去,CPU使用率99.9%也异常飚高 load average :系统平均负载均值,三列分别代表 1分钟、5分钟、15分钟。理论上,值越小越好。负…

C4D中使用python脚本1

学习视频链接 关于C4D与Python那些事_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1et411172W/ 目录 一、简单用法 二、C4D包 2.1 vector 矢量 2.2 矩阵 2.3 用脚本创建对象 2.4 几何体结构 三、制作效果 3.1 洗牌 3.2 后面的项目单独开文章 一、简单用法 …

java小技能:对list集合根据条件进行分组、过滤和字段筛选

文章目录 引言I 对list根据条件进行分组1.1 费率信息实体1.2 dto1.3 查询数据II 对list根据条件进行过滤和字段筛选1.1 代理商配置角色权限步骤1.2 实体1.3 穿透删除所有下级代理商相对应的权限值引言 需求背景:查询机构下的代理商费率信息,查询结果对分润和返利进行分组。 …

【云计算与大数据技术】Spark的解析(图文解释 超详细必看)

一、Spark RDD Spark是一个高性能的内存分布式计算框架,具备可扩展性,任务容错等特性,每个Spark应用都是由一个driver program 构成,该程序运行用户的 main函数 。 Spark提供的一个主要抽象就是 RDD(Resilient Distributed Data…

Java搭建宝塔部署实战SSM智能养生平台管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的SSM智能养生平台管理系统源码。 技术架构 技术框架:ssm layui jsp mybatis bootstrap jquery mysql5.7运行环境:jdk8 nginx1.20 tomcat9 IntelliJ …

与电装DENSO建立EDI连接需要掌握哪些信息?

项目背景 株式会社电装DENSO CORPORATION是世界汽车零部件及系统的顶级供应商,在2013年《财富》周刊公布的世界500强企业排名中,位列第242名。作为世界顶级汽车技术、系统以及零部件的全球性供应商,电装在环境保护、发动机管理、车身电子产品…

DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(下)

接上篇~~ 三、处理文档、控制工作流程 顺畅的信息流是每个生产过程的基础。自动化任何基于文档的任务(从有效的重新提交文档到复杂的审批工作流程),让您的团队在跨组织和跨部门的工作中畅通无阻。 具有列表的任务管理 通过自动汇总当前信…