• linux下的./本质


    不知道从什么时候对于./的感觉就是这是一条运行命令,因为你要运行某个文件的时候就用./

    但是这个显然是错误的./表述的是当前目录 .就是表示当前目录的。至于为什么运行当前目录下的

    文件需要加上./原因如下。

      • linux系统在运行程序时,若不指定具体文件路径,则系统会在环境变量PATH所指定的搜索路径中搜索该程序,如果找到,则执行该程序,如果找不到会报告:command not found (命令未找到)

      • 因此,若想不加路径名运行当前目录下的程序,必须在PATH中进行搜索路径设置,如:

        export PATH=$PATH:.

        点(.)是指当前目录,点点(..)是指上一级目录

      • 如果,没有在PATH中指定当前目录,则运行程序,必须要加上路径名,如:

        ./myprog

        /tmp/test_prog

      • 说的直白点就是能不能直接敲文件名执行是看你的当前目录是否在环境变量中,像家目录就没有,所以你编译完a.out需要加./a.out 来运行,如果你拷贝到bin目录,那直接a.out就可以运行
      • 这是路径设置的问题。“./”所代表的是当前目录,如果要让当前目录下的文件不需添加“./”即可运行,只需将“./”加入路径参数PATH中即可,如下所示:

        export PATH=$PATH:./

        系统为什么不将“./”加入路径参数呢?这是基于安全性的考虑。若系统管理者所在的目录中有可运行文件,而该文件有问题时,被执行后会发生不可预测的问题。这个很有道理。

        例如:任何用户在/tmp之下都有可擦写的权限,若某用户在/tmp之下新增ls这文件,而文件内容如下:

        /usr/sbin/useradd -m adm0
        /bin/ls

        如果PATH的路径设为export PATH=./:$PATH:,当root进入/tmp并执行ls时,就会优先执行/tmp/ls,而非系统默认的/bin/ls,而不知不觉中新增了一个用户adm0。因此即使要将当前目录加入路径参数中,export PATH=$PATH:./的安全性也将优于export PATH=./:$PATH。
  • 相关阅读:
    DEBIAN下中文显示
    SpringMVC整合Quartz实现定时任务以及Tomcat服务执行初始化定时任务
    SpringMVC 配置定时执行任务
    Mybatis update In
    mybatis在xml文件中处理大于号小于号的方法
    解决Cannot change version of project facet Dynamic web module to 2.5
    android 圆角边框及图片
    Android MotionEvent事件响应机制
    android:configChanges属性
    Android之ScrollView嵌套ListView
  • 原文地址:https://www.cnblogs.com/zhangfeionline/p/5835553.html
Copyright © 2020-2023  润新知