1. PATH环境变量,记录了所有可以直接执行的二进制命令的原件或者链接

    1. harvey@ubuntu:/etc$ echo $PATH
    2. /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

    PATH这个作用域是可执行的二进制命令:which---搜索整个PATH路径,查找当前搜索的命令是否存在,或具体是那个路径下的文件(如find) ; type---有些命令虽然可以执行但是which搜索不到命令的位置,可以使用type查看是否是内置命令(如cd);whereis---可以搜索所有的包含的二进制文件的文件、文件夹和man手册,如果这里搜索不到man位置,那么肯定就不存在指定的man手册。

    1. harvey@ubuntu:/etc$ which find #用which所有PATH找到位置
    2. /usr/bin/find
    3. harvey@ubuntu:/etc$ which cd #内置命令没有返回结果
    4. harvey@ubuntu:/etc$ type cd #type发现是内嵌命令
    5. cd shell 内嵌
    6. harvey@ubuntu:/etc$ type find #type也有which的效果,但是关键还透露是被哈希
    7. find 已被哈希 (/usr/bin/find)
    8. harvey@ubuntu:/etc$ whereis cd #whereis没有找到cd的man压缩文件
    9. cd:
    10. harvey@ubuntu:/etc$ man cd #所以man手册提示没有页目
    11. 没有 cd 的手册页条目
    12. harvey@ubuntu:/etc$ man find
    13. harvey@ubuntu:/etc$ whereis find #找到find位置和man压缩文件
    14. find: /usr/bin/find /usr/bin/X11/find /usr/share/man/man1/find..gz
    15. harvey@ubuntu:/etc$ whereis init #找到所有有init二进制的文件 文件夹和man压缩文件
    16. init: /usr/src/linux-headers-3.11.-/init /usr/src/linux-headers-3.11.--generic/init /sbin/init /etc/init.d /etc/init /lib/init /usr/share/man/man8/init..gz /usr/share/man/man5/init..gz
  2. which type wheris都是和二进制的执行命令相关,还有两个全能的查找命令。find---查找磁盘 location,locate--所有/var/lib/locatedb数据库
  3. 在计算机一起可以运行的数据都是在进程中的,进程都是有进程号码的,怎么查看当前进程的号?
    1. #shell脚本的特殊变量
    2. #!/bin/bash
    3. #写脚本时候经常使用额变量研究
    4. #参考资料:百度空间
    5. #作者:骞文 QQ:
    6. echo "当前文件的文件名是$0";
    7. echo "当前shell脚本的第1个参数是$1";
    8. echo "当前shell脚本额所有参数为$*";
    9. echo "当前shell脚本的所有参数的个数是$#";
    10. echo "当前shell脚本的进程号码$$";
    11. echo "执行上一个指令的进程号$!";
    12. echo "执行的上衣个指令的返回值$? 返回值为0表示成功否则为失败";
    13. echo "可以用$$和$!比较上一个指令和当前指令是否在一个进程里!"

    直接在Terminal中使用:可以直接echo 当前用户的/bin/bash/PID

  4. exec命令的作用是以新的进程替换原来的进程,只是替换上下文并不替换PID
    1. harvey@ubuntu:/$ echo $$ #查看当前用户的PID
    2.  
    3. harvey@ubuntu:/$ content="This is the old Content"; #给3115一个上下文content
    4. harvey@ubuntu:/$ echo $content
    5. This is the old Content
    6. harvey@ubuntu:/$ echo $$
    7.  
    8. harvey@ubuntu:/$ bash #直接执行bash命令
    9. harvey@ubuntu:/$ echo $$ #发现PID变了说明换了新的子进程
    10.  
    11. harvey@ubuntu:/$ echo $content #新的进程没有3115的上下文
    12.  
    13. harvey@ubuntu:/$ content="This is the new content";#重新给3395一个上下文
    14. harvey@ubuntu:/$ echo $content
    15. This is the new content
    16. harvey@ubuntu:/$ echo $$
    17.  
    18. harvey@ubuntu:/$ exec bash #执行exec bash命令
    19. harvey@ubuntu:/$ echo $$ #发现这次pid没有变
    20.  
    21. harvey@ubuntu:/$ echo $content #但是新的上下文被清空了
    22.  
    23. harvey@ubuntu:/$
    24.  
    25. #结论:直接执行bash会产生新的进程(新的PID新的上下文)
    26. 执行exec bash产生新的上下文(旧的PID新的上下文)
  5. /proc/${PID}---当前进程的所有信息(包括进程权限,环境变量等)
    1. harvey@harvey-PC ~
    2. $ cd /proc/$$
    3. #切换到进程信息目录
    4. harvey@harvey-PC /proc/
    5. $ ll
    6. 总用量
    7. -r--r--r-- harvey None 三月 : cmdline
    8. -r--r--r-- harvey None 三月 : ctty
    9. lrwxrwxrwx harvey None 三月 : cwd -> /proc/
    10. lrwxrwxrwx harvey None 三月 : exe -> /usr/bin/bash
    11. -r--r--r-- harvey None 三月 : exename
    12. dr-xr-xr-x harvey None 三月 : fd
    13. -r--r--r-- harvey None 三月 : gid
    14. -r--r--r-- harvey None 三月 : maps
    15. -r--r--r-- harvey None 三月 : mountinfo
    16. -r--r--r-- harvey None 三月 : mounts
    17. -r--r--r-- harvey None 三月 : pgid
    18. -r--r--r-- harvey None 三月 : ppid
    19. lrwxrwxrwx harvey None 三月 : root -> /
    20. -r--r--r-- harvey None 三月 : sid
    21. -r--r--r-- harvey None 三月 : stat
    22. -r--r--r-- harvey None 三月 : statm
    23. -r--r--r-- harvey None 三月 : status
    24. -r--r--r-- harvey None 三月 : uid
    25. -r--r--r-- harvey None 三月 : winexename
    26. -r--r--r-- harvey None 三月 : winpid
    27. #查看进行信息文件
  6. /proc/self/fd/---文件描述符列表

    1. harvey@harvey-PC ~
    2. $ ll /proc/self/fd
    3. 总用量
    4. lrwxrwxrwx harvey None 三月 : -> /dev/pty0
    5. lrwxrwxrwx harvey None 三月 : -> /dev/pty0
    6. lrwxrwxrwx harvey None 三月 : -> /dev/pty0
    7. lrwxrwxrwx harvey None 三月 : -> /proc//fd
    8. #查看默认的全部文件操作符
    9. harvey@harvey-PC ~
    10. $ exec <~/test.log
    11. #为读取文件创造一个文件描述符
      #可以为截断模式写入文件创造一个文件描述符 5>~/test.log
      # 为追加模式写入文件创造一个文件描述符 6>>~/test.log
      #参考资料<LINUX SHELL脚本攻略>
    12. harvey@harvey-PC ~
    13. $ cat <&
    14. 这是一个测试文件
    15. #&4表示的是一个文件,,所以用cat命令
    16. harvey@harvey-PC ~
    17. $ ll /proc/self/fd
    18. 总用量
    19. lrwxrwxrwx harvey None 三月 : -> /dev/pty0
    20. lrwxrwxrwx harvey None 三月 : -> /dev/pty0
    21. lrwxrwxrwx harvey None 三月 : -> /dev/pty0
    22. lrwxrwxrwx harvey None 三月 : -> /proc//fd
    23. lrwxrwxrwx harvey None 三月 : -> /home/harvey/test.log
    24. #常看文件操作符列表
  7. shell脚本的执行方式
    1. .用sh命令执行
    2. sh ./shelltest.sh
    3.  
    4. .直接运行
    5. chmod u=rwx ./shelltest.sh#先给创建者运行权限
    6. ./shelltest.sh #运行
    7.  
    8. #第二种方式运行的时候一定要给x权限,否则会提示一下错误:-bash: ./foreach.sh: Permission denied

参考资料:Linux的五个查找命令:find,locate,whereis,which,type

linux shell 特殊变量----轻松获取系统信息

shell中exec解析

  1. 参考图书:LINUX SHELL脚本攻略

linux知识点小结的更多相关文章

  1. 常用Linux命令小结

    常用Linux命令小结 Linux下有很多常用的很有用的命令,这种命令用的多了就熟了,对于我来说,如果长时间没有用的话,就容易忘记.当然,可以到时候用man命令查看帮助,但是,到时候查找的话未免有些临 ...

  2. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  3. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  4. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  5. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  6. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  7. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. shell知识点小结

    目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...

  9. promise知识点小结

    断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结. 为什么使用promise 谈到Promise,我们知道,这是社区较理想的异步编程解决方案.想要掌握promise,我们首先要知道其提 ...

随机推荐

  1. Apache Spark 2.2.0 中文文档

    Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...

  2. 【情人节礼物】纯js脚本打造精美3D玫瑰

    情人节就要来临了,这是用代码做出的玫瑰花,这才是程序员送给女友的最好情人节礼物...(提示:在不同浏览器下观看效果.速度会有很大的不同) 代码如下: <!doctype html> < ...

  3. node express 登录拦截器 request接口请求

    1.拦截器 拦截器可以根据需要 做权限拦截 登录只是权限的一种, 思路是req.session.user判断用户session是否存在,是否是需要拦截的地址, 如果是就跳转登录页,或其他页, 如果非需 ...

  4. Mac 电脑鼠标和触摸板滚动方向不一致的问题【已解决】

    当我们使用鼠标连接到 MacBook 时,会发现无论怎么设置,鼠标和触摸板的滚动方向都是相反的,导致不能同时使用鼠标和触摸板 解决方法: 我安装了下面的程序,它只允许您反转鼠标的滚动行为: Scrol ...

  5. pom中的resources设置

    Maven项目中一般都会把配置文件放到src/main/resources目录下,有时为了满足多个环境打包发布,可能会创建一些自定义目录来放置各环境的配置文件,如:src/main/profile/d ...

  6. 以太访solidity常用的函数有哪些

    以太坊:什么是ERC20标准? 不以规矩,不能成方圆 许多人应该都听过 代码即法律(Code Is Law),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰.在多人协作的过程中 ...

  7. HDU 1556 Color the ball (树状数组区间更新)

    水题,练习一下树状数组实现区间更新. 对于每个区间,区间左端点+1,右端点的后一位-1,查询每个位置的覆盖次数 #include <cstdio> #include <cstring ...

  8. HDU 3775 Chain Code pick定理

    pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积. 思路:http://blog.csdn.net ...

  9. JSP/Servlet Web 学习笔记 DayFour

    Servlet概述 Servelt是使用Java Servlet应用程序接口及相关类和方法的Java程序. Servlet是用Java编写的Server端程序,它与协议和平台无关.Servlet运行于 ...

  10. HttpClient实现POST参数提交

    HttpClient client = new HttpClient(); //使用FormUrlEncodedContent做HttpContent var content = new FormUr ...