[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回车就自动运行- 这可能么?
进行搜索
编辑
按图索骥
编辑
#显示当前路径
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/下面
编辑
python3和ls都在/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 都增加- e
xecute 的权限
编辑
不同位置的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_程序路径_执行原理的更多相关文章
- 【转】【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中
http://blog.csdn.net/wirelessqa/article/details/8624208 有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切 ...
- Centos-当前和过去登入系统用户信息-last
last 获取当前和过去登入系统的用户相关信息,执行last指令的时候会默认读取/var/log/wtmp文件 相关参数 -a 把客户端IP显示到最后一列 -R 不显示客户端IP地址或主机名 -n 显 ...
- java通过文件路径读取该路径下的所有文件并将其放入list中
java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...
- .Net中把图片等文件放入DLL中,并在程序中引用
原文:.Net中把图片等文件放入DLL中,并在程序中引用 [摘要] 有时我们需要隐藏程序中的一些资源,比如游戏,过关后才能看到图片,那么图片就必须隐藏起来,否则不用玩这个游戏就可以看到你的图片了,呵呵 ...
- 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合
package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...
- 有些其他程序设置为从 Outlook 下载并删除邮件。为防止发生此意外情况,我们将这些邮件放入一个特殊的 POP 文件夹中
最近使用FOXMAIL接收MSN邮件时,发现有一些邮件收取不到,进到WEB页面,页面下方提示“你的邮件位于 POP 文件夹中!有些其他程序设置为从 Outlook 下载并删除邮件.为防止发生此意外情况 ...
- 将root 当成arraylist放入数据sturts2 入门笔记
刚启动idea 就报出错误 [-- ::,] Artifact -sturts2:war exploded: Error during artifact deployment. See server ...
- windows系统调试MapReduce程序
如果使用windows开发mapreduce程序,是不能进行debug的,会报如下错误,但其实不影响最终运行结果 DEBUG o.a.h.u.Shell - Failed to detect a va ...
- 在Linux系统如何让程序开机时自动启动
在Linux系统如何让程序开机时自动启动 核心提示:系统的服务在开机时一般都可以自动启动,那在linux系统下如果想要程序在开机时自动启动怎么办?我们知道在 windows系统“开始”--& ...
- 在区块链上表白——使用C#将一句话放入比特币的区块链上
最近在看区块链和比特币的知识,顺便简单研究了一下BitCoin的脚本语言,发现OP_RETURN这个命令可以在后面放入自己想说的内容,很多侧链啊,公证之类就是利用了这个特性,可以把一句话,或者一个哈希 ...
随机推荐
- EDP .Net开发框架--WebApi
平台下载地址:https://gitee.com/alwaysinsist/edp 按分类管理EDP所提供的WebApi接口,以供其他应用调用.WebApi接口不仅可以进行访问控制管理,同时还提供了版 ...
- 一文了解npm install -g和npm install --save-dev的关系
本文分享自华为云社区<npm install -g 和 npm install --save-dev 的关系>,作者: SHQ5785. 一.npm install 本地安装 将安装包放在 ...
- 环境变量管理工具Modules的安装
一.软件依赖tcl软件 (1)tcl下载地址:http://www.tcl-lang.org/software/tcltk/(2)编译安装 cd unix/ ./configure --prefix= ...
- Android 13 - Media框架(3)- MediaPlayer生命周期
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节. 1.MediaPlayer ...
- 语义化结构标签 多媒体标签 H5新增表单内容
语义化结构标签: section 更偏向于一个区域类似div(块) article 更偏向于显示内容(块) aside 标签作为article呢绒的辅助板块(块) header 标签做为一个网页头部 ...
- Linux扩展篇-shell编程(五)-流程控制(四)-while语句
基本语法: while [ condition ] do statement done 或 while [ condition ]; do statement done 注意事项: 实践:
- linux系统下,配置多个tomcat服务
安装jdk时配置的环境变量 export JAVA_HOME=/usr/local/jdk1.8.0_311 export JRE_HOME=$JAVA_HOME/jre export PATH=$P ...
- 借助 DSL 来简化 Loadgen 配置
引言 在上篇文章中,我们介绍了如何用 Loadgen 来简化 HTTP API 的集成测试.在实际使用中会发现,编写测试时最令人"头疼"的部分是设计测试的输入和校验程序的输出,而针 ...
- 命运2 Cross Save
epic 上免费领的命运2,进不去,界面提示要扫码. 解决方法: 1.手机或电脑浏览器进入:https://www.bungie.net/. 2.使用epic 账号登录 ,然后设置一个邮箱,邮箱收到验 ...
- mybatis查询参数Set遍历查询
#sqlmapper <resultMap id="BaseResultMap" type="com.LogEntity" > <result ...