文件的可执行属性和环境变量

Linux下文件有一个特殊的属性即可执行属性,用来指示这个文件是一个可执行的脚本或可以运行的二进制文件。前面所提到的这些命令,都具有可执行属性。

which: 表示查看命令的路径。一般用于当我们想知道使用的命令来源于什么地方时,比如安装了多个R或多个python,但又分不清用的是哪个时,which一下,立即明了。在这儿我们用which获取的是可执行的命令所在的路径,进而查看其属性。

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which cd`"

#rwx: 文件所有者可读、可写、可执行

#r-x: 文件所有者所在组其它成员可读、可执行,不可修改

#r-x: 其它人可读、可执行,不可修改

-rwxr-xr-x 1 root root 26 12月  7 2016 /usr/bin/cd

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which mkdir`"

-rwxr-xr-x. 1 root root 79768 11月  6 2016 /usr/bin/mkdir

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which python`"

#l: 代表软连接

#软连接自身是所有人可读可写,但具体的权限依赖于其链接的文件

lrwxrwxrwx. 1 root root 7 3月  22 15:04 /usr/bin/python -> python2

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which python2`"

#第二层链接

lrwxrwxrwx. 1 root root 9 3月  22 15:04 /usr/bin/python2 -> python2.7

#链接的原始文件

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which python2.7`"

-rwxr-xr-x. 1 root root 7136 11月  6 2016 /usr/bin/python2.7

文件属性rwx中r表示read (数字表示为4)、w表示write (数字表示为2)、x表示执行 (数字表示为1)。三个未一组,连续出现三次(如下面命令行中所示), 第一组表示文件的所有者拥有的权限,第二组为文件所有者所在的用户组所拥有的权限,组内所有成员都具有的权限,第三组为其它用户的权限。

chmod a+x file: 表示给文件增加所有人(a)可执行权限 (+x)

chmod u+x file: 表示给文件增加所有者(u,user,)可执行权限 (+x)

chmod g+x, chmod o+X: 表示给文件增加组内人或其它人可执行权限

chmod 755 file: 表示拥有者有可读写执行权限,其它人有可读执行权限。(7=4+2+1; 5=4+1)

具体使用man chmod查看其它参数使用。

# 新建个文件

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ cat <run.sh

> echo " I am a script created by ehbio."

> END

# 查看其权限值

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh

-rw-rw-r-- 1 ct ct 39 6月  14 23:12 run.sh

# 更改权限值

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod 755 run.sh

# 查看其权限值

# 注意多了3个x

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh

-rwxr-xr-x 1 ct ct 39 6月  14 23:12 run.sh

# 去除其它用户的可执行权限

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod o-x run.sh

# 注意看少了个x

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh

-rwxr-xr-- 1 ct ct 39 6月  14 23:12 run.sh

# 去除同组的可执行权限

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod g-x run.sh

# 注意看又少了个x

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh

-rwxr--r-- 1 ct ct 39 6月  14 23:12 run.sh

# 去除所有人的可执行权限

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod a-x run.sh

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh

-rw-r--r-- 1 ct ct 39 6月  14 23:12 run.sh

# 给所有人增加可执行权限

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod a+x run.sh

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh

-rwxr-xr-x 1 ct ct 39 6月  14 23:12 run.sh

如果一个文件有了可执行权限,是不是就可以执行了,我们来检测下。

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ run.sh

-bash: run.sh: 未找到命令

事实上并非如此,输入命令,回车后,提示命令未找打,这是为什么呢?

这就涉及到环境变量的概念,通俗的讲,环境变量就是告诉电脑 (实际是操作系统)几个目录。这几个目录下存储又可执行文件,如前面显示的/usr/bin目录,大部分的系统命令都在这个目录下。

当我们输入命令mkdir时,系统就会在环境变量所代表的几个目录从前都厚去查找,哪个里面有mkdir文件,然后去执行mkdir命令。

系统中环境变量的名字是PATH,其内容可通过下面的命令显示 (根据操作系统不同和配置不同,略有差别,但格式是统一的,:分割的一堆路径):

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ echo $PATH

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

所以如果我们想让自己的命令能被系统找到,就需要把命令所在的目录加到环境变量里面,怎么操作呢?

加到环境变量的路径必须是全路径,全路径指以/开头或已~开头的路径。

# 加到环境变量的路径必须是全路径,全路径指以/开头或已~开头的路径

# 注意第一个PATH不含$, 第二个PATH有$符号

# 我们后面会讲什么时候用$, 什么时候不用$

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ export PATH=$PATH:/home/ct

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ echo $PATH

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ct

这时,我们在执行那个命令试试,成功运行了。

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ run.sh

I am a script created by ehbio.

所以在以后安装了新的软件,或者写了新的脚本后,都把软件的可执行程序和可执行的脚本所在的目录,加到环境变量里面就可以了。

但是,在命令行中执行export,对环境变量所做的修改,只对当前终端有效,退出后就无效了。为了使得这一操作,长期有效,我们需要把这句话写入一个文件中,一个登陆服务器就会被自动读取的文件中。

对于普通用户,在远程登录终端时,家目录下的~/.bash_profile (不是~/.bashrc)会自动被读取,所以我们需要把export语句加入到这个文件中。

# 这是我的~/.bash_profile中的内容,主要是最好一行。可以连续的加入多个路径。

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

if [ -f ~/.bash_aliases ]; then

. ~/.bash_aliases

fi

export PATH=$PATH:/home/ct:/home/bin:/home/soft/bowtie2/bin

前面提到,系统查找命令的顺序是从环境变量的第一个目录到最后一个目录,在第一次碰到查询的命令后,就调用执行。假如系统存在一个python命令,我们自己又安装了一个python (假如在/home/ct/anaconda/bin目录下),如果我们想执行自己的python程序,就需要把/home/ct/anaconda/bin写在$PATH前面,如下

# 注意$PATH的顺序

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ export PATH=/home/ct/anaconda/bin:$PATH

至此,我们可以熟练使用环境变量来简化命令的输入过程了,因为如果没有环境变量,我们就得需要运行/home/ct/anaconda/bin/python来运行python命令了。

环境变量这块,自己多操作下,就会慢慢理解熟练了。

linux xampp 环境变量,XAMPP相关:Linux学习-环境变量和可执行属性相关推荐

  1. Win环境下配置PyTorch深度学习环境

    目录 0.查看Nvidia驱动 1.下载torch和torchvision 2.安装torch和torchvison 3.YOLOv5环境配置 相较于tensorflow环境配置,PyTorch的配置 ...

  2. linux tcp keepalive,Linux下TCP的Keepalive相关参数学习

    一 基本原理 TCP的Keepalive可以简单理解成为keep tcp alive,用来检测TCP sockets的连接是否正常或是已经断开. Keeplived的原理很简单,当建立一个TCP连接时 ...

  3. python常量变量和对象_Python学习笔记——变量和常量

    一.变量 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型. 在Python中,不需要事先声明变量名和类型,直接赋值即可创建各种类型的对象变量 ...

  4. 在笔记本上搭建高性价比的 Linux 学习环境:基础篇

    本篇文章会尽可能详细的介绍如何在相对廉价的笔记本上搭建高性价比的 Linux 学习环境,让学习和工作都轻松和高效一些.尤其是针对国内网络环境下,如何快速的完成系统的安装和基础配置. 使用 Linux ...

  5. linux系统下深度学习环境搭建和使用

    作为一个AI工程师,对Linux的一些技能的掌握也能从一定层面反应工程师的资深水平. 要求1:基于SSH的远程访问(本篇文章) 能用一台笔记本电脑,远程登陆一台linux服务器 能随时使用笔记本电脑启 ...

  6. PyTorch强化学习实战(1)——强化学习环境配置与PyTorch基础

    PyTorch强化学习实战(1)--强化学习环境配置与PyTorch基础 0. 前言 1. 搭建 PyTorch 环境 2. OpenAI Gym简介与安装 3. 模拟 Atari 环境 4. 模拟 ...

  7. 打造一个投资组合管理的金融强化学习环境

    原创文章第120篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 今天继续金融强化学习环境. 网上的金融学习环境不少,但都太过于"业余",或者离 ...

  8. 智慧学习环境中的认知负荷问题

    [摘要] 如何合理使用媒体资源和技术工具,设计有效的教学策略,促进学习者的认知加工和学习效果,已成为智慧学习环境研究的重要问题.本文从认知负荷理论的视角出发,对智慧学习环境与学习者认知负荷有关的一系列 ...

  9. LabView学习笔记(八):属性节点

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  10. amos调节变量怎么画_amos怎么把变量颜色

    1. 如何运用spss及AMOS进行中介效应与调 三 调节变量可以是定性的,也可以是定量的.在做调节效应分析时,通常要将自变量和调节变量做中心化变换.简要模型:Y = aX + bM + cXM + ...

最新文章

  1. Linux下的下载工具 axel
  2. 如何修改物料主数据的利润中心
  3. Linux fork() 和 vfork()
  4. 记录一下pom文件scope各种配置所作的行为
  5. 深入理解lua的协程coroutine
  6. python依照概率抽样_R语言之随机数与抽样模拟篇
  7. avr计数_使用8位LCD创建计数器| AVR
  8. 拓端tecdat|R语言分析股市相关结构:用回归估计股票尾部相关性(相依性、依赖性)
  9. 计算机找不到970pro,缝缝补补又三年,老机器更新---三星970 pro SSD简测
  10. pmp 第六版 模拟卷1疑难问题
  11. 基于SSM企业人事管理系统.doc
  12. word2007使用笔记 - 标题的分级编号
  13. 索爱最强大java手机_这几款索爱的手机哪款好啊?
  14. Linux 下常见的四款chm查看器比较
  15. 抑郁症自测量表测试软件,抑郁自评量表
  16. 一年级上册计算机教学计划,一年级信息技术上册教学计划一年级信息技术教学计划...
  17. 有奖调研 | 让虚拟照入现实的完美AR开发平台长什么样?
  18. Android 圆形头像 带阴影 带边界 完整代码
  19. 普顿外汇告诉大家如何在外汇市场保持良好的心态?
  20. 串口设备短信模块开发笔记

热门文章

  1. Java 类和对象详述
  2. java后台之极光推送开发案例(jpush)
  3. Ubuntu引导修复(Boot Repair)
  4. 盘点海外 AIGC 独角兽创始人,中国何时迎来自己的高光时刻?
  5. OHEM(Online Hard Example Mining)在线难例挖掘(在线困难样例挖掘) HNM (目标检测)
  6. 2018杭州云栖大会 - 容器区块链分享预告
  7. Kooboo CMS技术文档之三:切换数据存储方式
  8. C++面试题 (31-40)
  9. 狗屁 Impala 。小问题无穷无尽。兼容性一坨屎
  10. win11登录Microsoft账户显示发生了错误win10