Linux command not found 问题解释
执行可执行文件
执行文件就是具有可执行权限的文件,如果在文件所在目录上执行 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 问题解释的更多相关文章
- Linux下top订购具体解释
Linux下top订购具体解释 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvempmMjgwNDQxNTg5/font/5a6L5L2T/fontsize ...
- Linux command stty
Linux command stty reference: https://blog.csdn.net/lqxandroid2012/article/details/78929506 [Purpose ...
- linux command lynx
[Purpose] Learning linux command lynx [Eevironment] Ubuntu 16.04 terminal apt-get ...
- 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令
Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...
- 《The Linux Command Line》 读书笔记02 关于命令的命令
<The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- Linux Command Line Basics
Most of this note comes from the Beginning the Linux Command Line, Second Edition by Sander van Vugt ...
- Linux Command Line 解析
Linux Command Line 解析 0 处理模型 Linux kernel的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line进行配置的.在进行后续分析之前,先 ...
- 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 ...
随机推荐
- 用C语言写的万年历---亲手写的。好累哦
#include <stdio.h>#include <stdlib.h>#include <string.h>#define str " SUN ...
- Zkui安装
是一个允许在zookeeper上进行增删查改操作的图形管理工具,与zkdash类似. 1.拉取代码 #git clone https://github.com/DeemOpen/zkui.git 2. ...
- python+request+robot framework接口自动化测试
python+requests实现接口的请求前篇已经介绍,还有不懂或者疑问的可以访问 python+request接口自动化框架 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的 ...
- 第2章Zabbix基础进阶
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- 老李分享:loadrunner 的86401错误
老李分享:loadrunner 的86401错误 系统和软件配置: os:windows 2003loadruner版本:LoadRunner11loadrunner:协议:SMTP协议并发数:2 ...
- 容易忽略的z-index失效问题
前些天写一个模仿虎牙网站幻灯片的插件,期间遇到我一直都没注意到的问题,就是z-idnex会失效的问题. 我是将幻灯片的左右按设置为float浮动的,然后在调试点击的时候发现无论怎么调高z-index都 ...
- 在多个Activity中回传值(startActivityForResult())
业务逻辑: MainActivity打开A,A打开B,B把值传回MainActivity.适用在多个Activity中回传值. 实例:微信中选择国家-->省份-->城市的实现 实现方式分析 ...
- This Handler class should be static or leaks might occur Android
首先解释下这句话This Handler class should be static or leaks might occur,大致意思就是说:Handler类应该定义成静态类,否则可能导致内存泄露 ...
- 对quartz定时任务的初步认识
已经好久没有写技术博文了,今天就谈一谈我前两天自学的quartz定时任务吧,我对quartz定时任务的理解,就是可以设定一个时间,然后呢,在这个时间到的时候,去执行业务逻辑,这是我的简单理解,接下来看 ...
- Mysql Innodb体系结构
Innodb体系结构 Innodb存储引擎主要包括内存池以及后台线程. 内存池:多个内存块组成一个内存池,主要维护进程/线程的内部数据.缓存磁盘数据,修改文件前先修改内存.redo log 后台线程: ...