zoukankan      html  css  js  c++  java
  • 命令的执行、PATH变量、别名命令

    which(查看工具):查找某个(外部)命令(执行文件)的绝对路径(在环境变量$PATH设置的目录中查找)

    which -a:将所有由PATH目录中可以找到的命令均列出

       

    type(类型):判断给出的命令是内置命令还是外部命令。格式:type [参数] [name]

    type -t:"file":外部命令;"alias":别名命令;"builtin":内置命令

    type -a:由PATH变量定义的路径中,按顺序列出所有包含name的命令,包含alias

       

    命令执行的步骤(可通过type -a命令来查询):

    • 以绝对/相对路径执行命令,例如"/bin/ls"或"./ls"(跳过以下步骤,在目录中查询执行命令);

      (内置命令无法通过路径来执行,如echo;但在RHEL7系统中部分内置命令存在路径(可通过路径执行),如pwd(pwd既是内部命令也是外部命令))

    • 由alias别名找到该命令来执行,再交由步骤③处理判断内置、外部命令;

      (直接输入命令名称时,如直接输入ls,实际执行ls --color=auto命令)

    • 由bash内置的(builtin)命令(内部命令写在bash源码中)来执行,而绝大部分都是外部命令(交由步骤④处理);
    • 通过$PATH变量的顺序(每个路径值之间用冒号:间隔)找到的第一个命令来执行(对PATH变量的修改将会直接影响到bash解释器搜索linux命令的位置)

       

    • 外部命令(文件系统命令):存在于bash shell之外的程序,并不是shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中。

         

      如ps是一个外部命令(通过type命令查看)

      执行外部命令ps,系统会创建出一个子进程,PID为25204(这种操作被称为衍生)。通过ps -f命令显示出父进程(PPID为23796,对应bash shell)以及自己所对应的衍生子进程。

      (进程间通过发送信号(signaling)来通信)

    • 内置命令:和shell编译成一体,作为shell工具的组成部分存在,不需要借助外部程序文件(子进程)来执行。

         

      如cd和exit命令都内置于bash shell中

       

       

    PATH变量(一个环境变量)是由多个目录所组成的,每个目录中间用冒号:隔开,每个目录是有"顺序之分"的。

    • 当我们执行一个(外部)命令,如ls命令的时候,系统会依照PATH的设置去每个PATH定义的目录下查询文件名为ls的可执行文件;
    • 若在PATH定义的目录中含有多个文件名为ls的可执行文件,那么会先查询到的同名命令先被执行;
    • 正是因为有了PATH这个变量,所以我们运行某个命令时不再去输入全局路径,直接输入命令名即可。

    不同身份用户默认的$PATH不同,所以默认能够让用户随意执行的命令也不同(若某些特殊命令无法执行(command not found),可以通过修改/增加PATH路径或使用绝对路径来执行(添加路径:PATH=${PATH}:目录;删除路径:对PATH变量重新赋值))

    对PATH变量的修改

    不同用户的默认PATH变量不同

       

    例题:

    • 将ls命令文件由/bin/ls移动到/root/ls(通过"mv /bin/ls /root"命令实现),

      /root(~)目录下直接输入ls执行命令,会提示查询不到ls这个命令。

      可使用绝对路径/root/ls或相对路径./ls(当前目录是在/root目录下)来执行ls命令,

      或将/root加入PATH变量中,可使root用户在任何位置均可直接执行/root目录下ls命令(注意:执行的是"别名命令"ls --color=auto)(最后请把ls放回/bin目录下)。

         

    • 通过不同方式执行"ls"命令

       

    不要在$PATHPATH查询的目录)中加入当前目录(.)(PATH="$PATH":.

    • 如果在&PATH中加入当前目录(.)后,可以在一些情况下让用户免去输入命令所在路径的麻烦(能够在命令所在目录进行命令的执行);
    • 但由于工作目录并非固定(经常会使用cd命令来切换不同的目录),因此能够执行的命令会有所变动(因为每个目录下的可执行文件都不相同),这对用户来说并非好事;
    • 另外,如果黑客在比较常用的公共目录,如/tmp目录(每个用户均具有w写入权限)中存放了一个名为"ls""cd"的同名木马文件,那么用户就极有可能错误的执行了。

       

    alias(别名):设置命令的别名。格式:alias 命令别名=具体命令

    查看目前存在的命令别名:alias

    alias lm='ls -l | more'

       

    unalias(取消别名):取消命令的别名。格式:unalias 命令别名

       

    命令别名与变量的比较:

    • 命令别名是相当于新创一个命令,可以直接执行该命令;
    • 变量需要通过类似"echo"命令才可调用变量的内容。
    • 命令别名、自定义的变量在注销bash后都会失效

       

       

  • 相关阅读:
    数据库的架构和优化
    描述一个高性能高可靠的网站架构——如何设计一个秒杀系统
    PHP手册-函数参考-加密扩展
    系统性能指标总结
    PHP实现负载均衡的加权轮询
    PHP生成二维码
    高性能网站架构
    PHP实现Redis的数据结构和LFU/LRU
    缓存的设计及PHP实现LFU
    网络开发库从libuv说到epoll
  • 原文地址:https://www.cnblogs.com/dayoyan/p/8651982.html
Copyright © 2011-2022 走看看