2021年10月随笔

目录

一、查看路径内容

1、PATH

2、LIBRARY_PATH和LD_LIBRARY_PATH

二、shared and static libraries

三、source指令功能

四、Bash/Shell/Shell脚本的关系

1、Shell是什么

2、Shell分类

3、Shell脚本

4、脚本语言和高级语言的比较

5、bash内容详解

五、.sh文件

六、目录文件全称


一、查看路径内容

1、PATH

可执行文件路径,各种/bin

printenv PATH

或者

echo $PATH

2、LIBRARY_PATH和LD_LIBRARY_PATH

LIBRARY_PATH is used by gcc before compliation to search directories containing static and shared libraries that need to be linked to your program.

LD_LIBRARY_PATH is used by your program to search directories containing shared libraries after it has been successfuly compiled and linked.

EDIT: As pointed below,  your libraries can be static or shared. If it is static then the code is copied over into your program and you don't need to search for the library after your program is compiled and linked. If your library is shared then it needs to be dynamically linked to your program and that's when LD_LIBRARY_PATH comes into play.

二、shared and static libraries

Shared libraries are .so files. Static libraries are .a files.

A static library is like a bookstore, and a shared library is like... a library. With the former, you get your own copy of the book/function to take home; with the latter you and everyone else go to the library to use the same book/function. So anyone who wants to use the (shared) library needs to know where it is, because you have to "go get" the book/function. With a static library, the book/function is yours to own, and you keep it within your home/program, and once you have it you don't care where or when you got it.

三、source指令功能

source命令功能:使Shell读入指定的程序文件并依次执行文件中的所有语句。
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

四、Bash/Shell/Shell脚本的关系

1、Shell是什么

          Shell俗称壳,是指“为使用者提供操作界面”的软件命令解析器)。Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序。

      (用户<—>Shell<—>内核)
         Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

2、Shell分类

常见的 Shell 有 sh、bash、csh、tcsh、ash 等。
其中bash shell 是 Linux 的默认 shell。
BASH是shell的一种

3、Shell脚本

         Shell既是一种命令语言,又是一种程序设计语言(就是所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
         在系统的终端中输入一条命令,可以立马看到一条或者几条系统回复的信息,其实就是shell在帮我们回复,所以shell可以称之为命令解释器。这种从键盘一输入命令,就可以立马得到相应的回复信息,叫作交互的方式
         如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell脚本。Shell脚本里面通常内置了多条命令,有的还包含控制语句,比如if和else的条件控制语句,for和select的循环控制语句等。这些内置在一个shell脚本中的命令通常是一次性执行完成,不会不停的返回信息给用户,这种通过文件执行脚本的方式称之为非交互方式。

4、脚本语言和高级语言的比较

         解释型语言是相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。 解释型语言:程序不需要编译,省了道工序,程序在运行时才翻译成机器语言,但每执行一次都要翻译一次。因此效率比较低。(在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨平台性好.)
         编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(比如exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。

5、bash内容详解

(1)bash变量

         bash中变量有两种,分别是环境变量自定义变量,可以理解为全局变量局部变量,在理解他们的区别前,需要知道父程序子程序,举个例子,当前的bash我们称之为父程序,而在这个bash下执行的任何程序,都称之为子程序。那全局变量和局部变量的区别就是,全局变量在子程序中仍然有效,局部变量只在当前程序中生效。(注意,一旦退出父程序这个bash的话,无论是全局变量还是局部变量都失效了,再次打开bash时,该变量是不存在的)

(2)变量的设定

    变量的设定规则,这里列举如下:

    设定变量通过=来链接,例如name=sujinzhou,两边不能有空格,如果有空格的话,需要用引号
    变量名只能是英文名和数字,只能是英文开头
    如果变量内容被引号扩起来的话,双引号和单引号是有区别的
    双引号里面的特殊字符,会保持原有的特性。
    单引号里面的特殊字符,只会是字符
    使用\将特殊字符转换为一般字符
    使用``这个符号扩起来的命令会先计算这个命令里面的内容,这个指令等价于$()
    给原有的变量添加值时,使用 变 量 , " {变量}," 变量,"变量"再加具体的内容

(3)变量的查看

         查看单个命令的内容,可以使用echo命令,使用echo $变量名就可以查看变量内容,另外如果要查看所有变量有3个命令,分别是如下几个命令,每个命令又有区别。

    echo $变量名:用于显示制定变量
    env:用来查询环境变量,
    set:显示shell变量,包括私有变量与用户变量,不同的shell有不同的私有变量,在shell中设置变量之后,可以通过set查到
    export:显示当前导出成用户变量的shell变量,也是用来查询环境变量的,shell的私有变量不会出现

(4)bash shell的工作环境

         在shell中设置的变量,无论是环境变量还是自定义变量,在bash中注销登录之后,就失效了。下次登录时,是没有这些变量的,如果想要这些变量永久生效,是需要下如配置文件的,bash在启动时,会读取这个配置文件,来设置当前shell的各种变量。shell分为两种,分别是login shell和nonlogin shell,这里先说login shell;login shell是需要输入用户名和密码的,一般情况下,login shell在登录之后,会去读取两个文件,来设置当前shell的环境变量,分别是

          /etc/profile:这个配置文件是默认配置文件,是系统整体的设置
          /.bash_profile或者/.bash_login或者~/.profile:这个是用户的自定义设置文件

         shell在读取/etc/profile中的文件之后,会去读取用户自定义的设置文件,按照顺序读取上文中所说的自定义设置文件,只要找到其中任何一个,就不再继续。在用户自定义的配置文件中,都会调用~/.bashrc这个文件,来配置当前的这个shell

          /etc/profile或者~/.bash_profile都是在登录的时候才去读取,如果将自己的一些设置到这些文件之后,一般都需要重新登录一次shell才会生效,也可以使用source这个命令,来读取配置文件的内容到当前的这个shell
 

五、.sh文件

1、什么是脚本 

       linux中“.sh”文件是脚本文件,一般都是bash脚本,我们可以使用sh命令运行“sh xxx.sh”,并且由于在linux中sh是链接到bash上的,所以sh与bash在功能上是没有区别的。

         计算机编程就是计算机按照脚本写的执行的,脚本就是文本,由英文字母,数字,特殊符号组成一串具有特殊意义的文本,可以一行一行的输入运行,可以写成一个文件.

         脚本可以用很多语言写,javeScript, nodejs(本质还是js),VB,bash,C,php..., 每种语言有每种语言的写法(语法),不管是那种语言都可以实现相同的功能,只是用法(语法)上不同,或者说那种语言更适合,最后都是计算机照着执行的,比如 js 虽然是运行在浏览器之上,而浏览器运行在操作系统上(计算机操作系统),很多方面,高级编程语言与脚本语言没有明显的界限。

2、一个简单的脚本

  • 新建并进入目录local: mkdir  ~/local; cd ~/local

  • 新建脚本文件demo:     touch demo.txt

  • 打开demo.txt : start demo.txt ,并写入内容:

mkdir mydemo
cd mydemo
mkdir css js
touch index.html  css/style.css   js/main.js
exit
  • 任意位置(不是 ~/local)执行: sh ~/local/demo.txt ,
  • 你会看到当前目录下 多出 mydemo 文件夹,mydemo 里面有 /css /js index.html
  • ok, demo.txt 就是一个脚本,包括几行命令文本,以下为拓展
  • 如果需要目录名可变,在步骤3 将mydemo 改为 $1 执行 demo.txt  asd , 则会新建名为asd 的目录,$1类似于占位符,1表示第1个参数
  • 如果.txt 后缀麻烦, 执行 mv ~/local/demo.txt ~/local/demo ,执行 demo asd 即可
  • 文件后缀只是方便区分,命名一个 A.png  的文件就一定是一个图片吗?
  • 判断目录是否已经存在,将步骤3的修改如下
        if [ -d $1 ]; then
          echo 'error: dir exists'
          exit
        else
          mkdir $1
          cd $1
          mkdir css js
          touch index.html css/style.css js/main.js
          exit
        fi

    六、目录文件全称

bin(binary) :常见linux命令、系统所有用户命令目录文件
dev(device) : 设备驱动存储目录文件
media: 多媒体及挂载目录
proc (process):进程信息文件
sbin(superuser binary) : root用户命令文件
var (variable): 变量文件
boot: 引导程序文件
etc (etcetera): 所有程序所需要的配置文件
lib (library): 系统默认库路径文件
mnt (mount): 挂载目录
root : root根目录
tmp (temporary): 临时文件目录
home: 家目录(用户目录)
opt (option): 可选目录(可以选择安装应用程序的目录)
usr (unix system resource)

七、URL定义

url:Uniform Resource Locator,统一资源定位符,它是WWW的统一资源定位标志,就是指网络地址。

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
也可认为由4部分组成:协议、主机、端口、路径。很多时候端口都是隐藏的。

举一个例子
http://mail.163.com/index.html

  •     http://:这个是协议,也就是HTTP超文本传输协议,也就是网页在网上传输的协议。
  •     mail:这个是服务器名,代表着是一个邮箱服务器,所以是mail.
  •     163.com:这个是域名,是用来定位网站的独一无二的名字。
  •     mail.163.com:这个是网站名,由服务器名+域名组成。
  •     /:这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录。
  •     index.html:这个是根目录下的默认网页。
  •     http://mail.163.com/index.html:这个叫做URL,统一资源定位符,全球性地址,用于定位网上的资源。

八、添加环境变量方法

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda9.0/lib64

从而在已有$LD_LIBRARY_PATH基础上添加/usr/local/cuda9.0/lib64内容

九、param,rosparam以及arg的区别

param、rosparam以及arg都是对launch文件中的参数进行设置。

paramrosparam两个参数调用差不多,都是把launch文件中的一些参数直接设置到rosmaster(ros中的节点管理器)里面以便于各个节点的使用,主要不同在于param只对一个参数进行操作,使用方式如下:

<param name="name"   value="ture"/>

rosparam可以对多个参数进行操作,前提时把这些参数放到.yaml文件中,使用方式如下:

<rosparam file="param.yaml" command="load"/>

arg是把参数用在launch文件内部来使用,把launch文件看作是脚本的话,arg类似这个脚本里面设置变量的语法、语句,使用方式如下:

<arg name="name"  default="value" />

这只是基本的使用方式,里面还可以添加其它的,比如ns(命名空间),也可以将arg嵌套param当中。

十、GUI

GUI:Graphical User Interface,是提供给用户,超级用户或管理员的界面,以便以简单的方式与系统进行交互。 GUI通常由单击或单击组件组成,例如按钮,文本框,滑块,图片等。

十一、强化学习里Environment和Agent的理解

Environment指的是外部环境,在游戏中就是游戏的环境。Agent指的是智能体,在游戏中就是玩家,智能体通过一套策略输出一个行为(Action)作用到环境,环境则反馈状态值,也就是Observation,和奖励值Reward到智能体,同时环境会转移到下一个状态。如此不断循环,最终找到一个最优的策略,使得智能体可以尽可能多的获得来自环境的奖励。整

个过程如下图所示:

十一、on-policy和off-policy对比

        On-policy methods attempt to evaluate or improve the policy that is used to make decisions, whereas  off-policy methods evaluate or improve a policy different from that used to generate the data.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pi_kaqiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值