执行可执行文件

执行文件就是具有可执行权限的文件,如果在文件所在目录上执行 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. 利用shell批量改名和linux中取随机数的方法

    先批量创建文件 #!/bin/sh if [ ! -d /tmp/chenyao ] then mkdir /tmp/chenyao -p fi cd /tmp/chenyao ..} do touc ...

  2. python之smtplib发邮件

    第一版: 认证发信,不支持附件 #!/usr/bin/env python # --------------------------------------- # author : Geng Jie ...

  3. 老李分享:jvm垃圾回收

    老李分享:jvm垃圾回收   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478 ...

  4. Asp.NetCore之组件写法

    本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...

  5. js随机模块颜色

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  6. spring+mybatis事务不起作用的原因

    一.场景再现 @Override @Transactional public void updateById(String userId,String username) throws Excepti ...

  7. 简单分析下用yii2的yii\helpers\Html类和yii.js实现的post请求

    yii2提供了很多帮助类,比如Html.Url.Json等,可以很方便的实现一些功能,下面简单说下这个Html.用yii2写view时时经常会用到它,今天在改写一个页面时又用到了它.它比较好用的地方就 ...

  8. WebGL 创建和初始化着色器过程

    1.编译GLSL ES代码,创建和初始化着色器供WebGL使用.这些过程一般分为7个步骤: 创建着色器对象(gl.createBuffer()); 向着色器对象中填充着色器程序的源代码(gl.shad ...

  9. mac jmeter 的使用

    1.下载 mac下载地址:http://jmeter.apache.org/download_jmeter.cgi,下载apache-jmeter-3.1.tgz 2.下载完毕后解压,得到安装包 3. ...

  10. Azure IoT 技术研究系列1-入门篇

    物联网技术已经火了很多年了,业界各大厂商都有各自成熟的解决方案.我们公司主要搞新能源汽车充电,充电桩就是我们物联网技术的最大应用,车联网.物联网. 互联网三网合一.作为Azure重要的Partner和 ...