执行可执行文件

执行文件就是具有可执行权限的文件,如果在文件所在目录上执行 ll 或 ls -l命令时,可能看到如下结果:
-rwxr-xr-- 1 usr users 289 Jul 29 09:15 cronmonth
其中的x就表示文件的属主对文件具有可执行权限。

假设nginx的安装目录在 /usr/share/nginx/ ,它的可执行文件就是 /usr/share/nginx/sbin/nginx,有两种简单的方式可以启动nginx。

绝对路径方式

也就是从根目录 / 开始一直到可执行文件的完整路径: /usr/share/nginx/sbin/nginx

相对路径方式

先用 cd 跳转到可执行文件所在的目录,也就是先执行 cd /usr/share/nginx/sbin,再以相对当前位置的相对路径执行: ./nginx
同理,如果当前工作路径是在 /usr/share/nginx/conf,那么仍然可以用相对路径:../sbin/nginx

用相对路径而不是绝对路径的好处就是不用敲那么多字,但有些场合下还是用绝对路径好,比如cron脚本里调用其他脚本时,最好用绝对路径指定被调用脚本。

执行shell脚本

有可执行权限的shell脚本

这种情况跟执行可执行文件一样,都可以用绝对路径/相对路径的方式来执行。

没有可执行权限的shell脚本

有时候并不需要给shell脚本可执行权限,却仍然可以执行这些脚本,方法就是调用shell脚本解释器来解释执行脚本。

调用shell解释器有几种方式:

  • sh /path/to/script:用sh命令调用。
  • bash /path/to/script:如果系统安装有bash的话。
  • source /path/to/script
  • . /path/to/script:注意句点与脚本路径之间至少有一个空格。

PATH环境变量

假如当前目录下具有一个可执行的文件 abc,在shell命令行直接输入 abc,然后回车,得到的是大概是“Command not found”的提示;
而直接输入 ls,然后回车,却可以列出当前目录下的文件和子目录。很奇怪?当前目录下明明有 abc这个可执行文件却说命令找不到,当前目录下根本就没有文件的文件名里有ls这两个字符的命令却可以正确执行!

这是 PATH 环境变量的功劳。

当输入的命令不带有路径信息时,系统默认会从PATH环境变量所指定的目录下查找,所以在bin目录下而有没有配置path的时候,要使用./command方式执行。

这是我的VPS里的 PATH 环境变量的值:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:

在linux下,PATH 所指定的各个路径之间的分隔符是冒号:,系统查找命令的文件时,会把命令与 PATH指定的每个路径拼接起来,看得到的路径是否存在,如果都不存在则提示命令找不到;如果找到一个存在的,检查用户是否有执行的权限,如果有则执行命令,否则提示“Permission denied”。

对于前面提到的 ls命令,先与 PATH 指定的第一路径拼接得到 /usr/local/sbin/ls,该文件不存在,则继续下一个路径/usr/local/bin,得到/usr/local/bin/ls,也不存在,继续下一个,直到 /bin 目录下找到且有执行权限,则执行命令。

对于 abc,虽然当前目录下有名为 abc的可执行文件,但当前目录不在 PATH 所指定的目录,所以系统没法找到,从而提示命令找不到。

好处

有了 PATH 环境变量,我们就不用敲入命令的完整路径或先调整到命令所在的目录,而是直接敲入命令名称即可,方便很多。

就行我们在系统安装Java的时候,除了配置一个JAVA_HOME环境变量外,还会把 $JAVA_HOME/bin 加入PATH 变量,就是这个原因,为了方便!

Windows下的命令执行方式

windows也有 PATH 环境变量,不过它的分隔符是分号;

不过windows下,系统查找命令时除了在 PATH 环境变量下查找外,还会在当前目录下查找,也就是,如果当前目录下有 abc.bat 这么一个批处理文件,即使没把当前目录加入到 PATH 环境变量,只要把dos路径调整到当前目录,直接输入 abc.bat ,也可以执行这个脚本。

文章引自:http://coderbee.net/index.php/linux/20130730/338

Linux command not found 问题解释的更多相关文章

  1. Linux下top订购具体解释

    Linux下top订购具体解释 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvempmMjgwNDQxNTg5/font/5a6L5L2T/fontsize ...

  2. Linux command stty

    Linux command stty reference: https://blog.csdn.net/lqxandroid2012/article/details/78929506 [Purpose ...

  3. linux command lynx

    [Purpose]        Learning linux command  lynx   [Eevironment]        Ubuntu 16.04 terminal   apt-get ...

  4. 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令

    Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...

  5. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

  6. 《The Linux Command Line》 读书笔记01 基本命令介绍

    <The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...

  7. Linux Command Line Basics

    Most of this note comes from the Beginning the Linux Command Line, Second Edition by Sander van Vugt ...

  8. Linux Command Line 解析

    Linux Command Line 解析 0 处理模型 Linux kernel的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line进行配置的.在进行后续分析之前,先 ...

  9. 15 Examples To Master Linux Command Line History

    When you are using Linux command line frequently, using the history effectively can be a major produ ...

随机推荐

  1. JS 数组及函数

    数组    定义        Array(1,3.14,"aa")            给数据        Array(5)            给长度        [1 ...

  2. 微服务--webapi实现,脱离iis,脱离tomcat

    前言 微服务,顾名思义就是微小的单一的服务程序,单一流程,单一发布,开发和部署都可独立: 这是我的理解: 但基于web的服务,不管是webservice还是webapi等类似的服务都需要基于iis或者 ...

  3. ConversionService接口

    spring已经为我们提供了一个既可以使用GenericConversionService,又可以注入Converter的类,那就是ConversionServiceFactoryBean.该类为我们 ...

  4. javascript的闭包与一次重构的感受

    有没有这么一个场景,你的一个动作需要在所有异步方法执行完毕后,再进行操作?然而你对异步方法何时执行完毕感到困扰,只能在每个方法中写回调,在回调中重复劳动? 偶然的,想起了之前经理讲过的闭包的概念,偶然 ...

  5. Struts2的类型转换(下)

    Struts2提供的类型转换: Struts2提供的是一个名叫StrutsTypeConverter的抽象类,这个类实际上是DefaultTypeConverter的子类.当我们继承自该抽象类 时,要 ...

  6. 老李推荐:第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 3

    首先它通过查找JVM中的System Property来找到"com.android.monkeyrunner.bindir"这个属性的值,记得前面小节运行环境初始化的时候在mon ...

  7. Android 学习笔记之实时保存数据-现场保护onSaveInstanceState()

    数据保存:在软件开发中我们希望保存下各个Activity数据,以实现客户数据的时时保存,达到较好的用户体验. 那么我们需要解决如下问题: 1.什么时候保存? 2.保存哪些数据?     我想保存应用产 ...

  8. linux从入门到精通学习-NFS

    NFS网络文件系统 功能 nfs[network file system] 网络文件系统 是FreBSD系统支持的一种系统,允许在网络 上与其它人共享使用文件或文件夹 采用C/S模式 端口号 在vim ...

  9. 用Xamarin + VS 编写Android程序体验及其与Android Studio的比较

    昨天看了微软2016Build大会,Xamarin免费了.恩,5亿美刀的家伙,哈哈,我也要体验一下..... 1. 首先在Xamarin官网下载安向导:https://www.xamarin.com/ ...

  10. JSP自定义不带属性和标签体的简单标签

    1. 新建HelloTag类 2. 添加额外的Jar包 (1). 右键项目 -> Build Path -> Configure Build Path -> Libraries -& ...