Linux学习-环境变量和可执行属性

Linux学习-环境变量和可执行属性

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

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 <<END >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
fiif [ -f ~/.bash_aliases ]; then. ~/.bash_aliases
fiexport 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命令了。

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

P10 Linux下环境变量理解和可执行权限

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

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

相关文章

MySQL中数据库、表的操作

文章目录 一、管理数据库1.1、连接数据库1.2、创建库1.3、选择数据库1.4、修改数据库名称1.5、查看数据库信息1.6、删除库 二、定义数据表字段2.1、数据表字段的数据类型2.2、数据表字段属性2.3、约束讲解2.3.1、约束的定义1&#xff09;为什么需要约束2&#xff09;什么是约束…

Matplotlib实现数据可视化

Matplotlib是Python中应用较为广泛的绘图工具之一&#xff0c;首次发布于2007年。它在函数设计上参考了MATLAB&#xff0c;因此名字以"Mat"开头&#xff0c;中间的"plot"代表绘图功能&#xff0c;结尾的"lib"表示它是一个集合。Matplotlib支持众…

Unity多线程简单示例

using UnityEngine; using System.Threading;public class texxxst : MonoBehaviour {Thread thread;void Start(){// 创建一个新的线程&#xff0c;并传入要执行的方法thread new Thread(new ThreadStart(DoWork));// 启动线程thread.Start();}void DoWork(){for (int i 0; …

Go 之缓冲通道限制协程并发数目

并发执行的协程太多可能会对系统资源的消耗特别大&#xff0c;从而导致其它进程服务受到影响&#xff0c;因此协程执行时应该设计一种机制&#xff0c;来限制并发执行的协程数目。 其中 WaitGroup 主要用作协程同步&#xff0c;当所有协程都执行完毕以后&#xff0c;才会结束主…

高颜值高性能的开源免费自托管照片和视频备份方案:Immich

Immich&#xff1a;安全存储您的珍贵记忆&#xff0c;高颜值且高性能的自托管照片与视频备份解决方案&#xff0c;让您随时随地无忧回顾美好时光。- 精选真开源&#xff0c;释放新价值。 概览 在数字化时代&#xff0c;我们的照片和视频越来越多&#xff0c;如何安全、有效地备…

【IC前端虚拟项目】SDC文件编写与DC综合环境组织

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 好的终于来到了综合的环节,在此我们假设已经通过vcs和spyglass把lint问题清理干净了,那么dc综合也不会出现太大的波折。综合阶段我们可以分为三个小的过程: 1.综合前——sdc编写; 2.综合中——dc综…

函数参数的类型

在Python中&#xff0c;函数参数的类型可以是以下几种&#xff1a; 位置参数&#xff08;Positional Arguments&#xff09;&#xff1a; 位置参数是最常见的函数参数类型&#xff0c;它们按照函数定义时参数的顺序来传递。当你调用一个函数时&#xff0c;你需要按照函数参数列…

solidworks镜像实体怎么用

在SolidWorks中&#xff0c;镜像实体功能用于复制并反转实体或特征&#xff0c;使其沿着指定的基准面对称。以下是使用SolidWorks镜像实体的基本步骤&#xff1a; 1. 打开模型&#xff1a;首先打开SolidWorks软件&#xff0c;并加载您想要镜像的三维实体模型。 2. 找到镜像命…

Linux服务器额外安装Python3环境

服务器配置 服务器&#xff1a;CentOS Linux 版本: 7 已安装python: 2.x 新建文件夹 另外新建文件夹&#xff0c;作为单独环境 这里在默认根目录新建文件夹&#xff0c;python3 下载PYTHON 可以手动下载对应版本&#xff0c;之后上传服务器中对应的文件夹。 或者使用网址下…

揭秘操作系统:核心功能与Linux系统解析

1.引言 在先前探讨中&#xff0c;我们了解到计算机主机内部的硬件资源需要一种高效管控手段&#xff0c;由此催生了操作系统的诞生。操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;&#xff0c;是计算机生态系统中不可或缺的核心组件&#xff0c;以其复杂…

TypeScript常用知识点整理

介绍 TypeScript 是 JavaScript 的一个超集&#xff0c;添加了静态类型支持和更多现代编程特性&#xff0c;提高了代码的可靠性和可维护性。最终会被编译成标准的 JavaScript 代码运行。 使用npm install -g typescript进行全局安装 将编写好的ts代码进行运行&#xff0c;第…

Linux文件查找命令详解——以CentOS为例

Linux文件查找命令详解——以CentOS为例 在Linux系统中&#xff0c;文件查找是一项非常重要的任务。无论是系统管理员还是普通用户&#xff0c;都需要掌握一些基本的文件查找命令。本文将详细介绍Linux中常用的文件查找命令&#xff0c;并以CentOS为例&#xff0c;展示如何使用…

深入IPCWeb-Backend:构建高效的工业过程控制Web后端系统

引言 在工业过程控制&#xff08;Industrial Process Control, IPC&#xff09;系统中&#xff0c;实时数据的监控、处理和分析至关重要。随着物联网&#xff08;IoT&#xff09;技术和云计算的发展&#xff0c;工业过程控制系统也日益依赖于Web技术来提升其连接性和可访问性。…

加密软件如何给文件加密

加密软件如何给文件加密 市面上有很多给文件加密的软件&#xff0c;它是如何给文件加密的呢&#xff1f;加密过程是否安全&#xff0c;效果是否理想呢&#xff1f;下面以安企神软件为例给大家介绍 给文件加密的关键步骤和技术。 1、选择加密算法 安企神软件可能会采用国际公…

如何彻底删除node和npm

如何彻底删除node和npm 前言&#xff1a; 最近做个项目把本地的node更新了&#xff0c;之前是v10.14.2更新至v16.14.0 &#xff0c;想着把之前的项目起来下&#xff0c;执行npm install 结果启动不了&#xff0c;一直报npm版本不匹配需要更新本地库异常… 找了几天发现是npm 和…

AI大模型探索之路-基础篇3:构建Chat Completions驱动的多轮对话机器人

文章目录 前言一、初步测试二、读取本地知识库三、问答测试四、实现多轮对话总结 前言 在上一篇《AI大模型应用开发篇之Chat Completions API》中熟悉了 Chat Completions API相关特点和各种场景的使用样例&#xff1b; 本章主要记录如何基于Chat Completions API实现简单的多…

fastjson list转json

1&#xff0c;内容是字符串 String json JSON. toJSONString(list); 结果:["111" ,“222”] 2,内容是时间 SerializeConfig config new SerializeConfig(); config. put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); Strin…

【数据结构与算法】:快速排序和归并排序的非递归实现

1. 递归实现的缺陷 在以前的文章中我们把快速排序和归并排序的递归实现方式进行了介绍&#xff0c;但是在校招面试和在企业的日常开发过程中&#xff0c;仅掌握递归方法是不够的&#xff0c;因为递归也有它的缺陷。 我们知道在函数调用过程中会在内存中建立栈帧&#xff0c;栈…

solidity(3)

地址类型 pragma solidity ^0.8.0;contract AddressExample {// 地址address public _address 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;address payable public _address1 payable(_address); // payable address&#xff0c;可以转账、查余额// 地址类型的成员uint256…

C语言流程控制

程序三大结构&#xff1a;顺序&#xff0c;选择&#xff0c;循环 NS图&#xff0c;流程图&#xff0c;工具Dia 简单结构与复杂结构&#xff1a;自然流程 goto跳转 无条件跳转&#xff0c;可以跳转代码到指定的位置&#xff08;慎用&#xff0c;无条件跳转&#xff0c;不能…