文章目录
开篇语
这是Linux学习的第一篇。其实在Ubuntu上跑ROS,编译运行C++程序,解决兼容性问题,安装依赖库,在这段时间里,对Linux的许多命令都已经有了大概的了解。之所以,还要特地抽时间来专门学习一下,是因为我觉得仅凭借博客和Google上的碎片式的讲解虽然可以解燃眉之急,但不是长远之计。
本系列参考的书本为人民邮电出版社出版的图灵程序设计丛书中的《Linux命令行与shell脚本编程大全(第三版)》。
由于是自我学习笔记,所以定然不是对全书的按部就班的学习,而是只记录对我而言重要的内容。
1. 环境变量与局部变量
1.1 环境变量
Linux系统在开始bash会话时,就已经设置了一些全局环境变量,可以使用env
或者printenv
来显示,由于全局变量是十分繁多的,可以考虑用|grep
来做查找,或者像printenv HOME
那样,显示特定的环境变量。
当要使用环境变量时,应在前面加上$
,下面命令用echo来显示了HOME的值:
echo $HOME
/home/host
题外话:波浪号~
与$HOME
是一样的。
1.2 局部用户定义变量
设置方法很简单,直接像编程那样用=
赋值即可,也无需声明,但=
前后不可以有空格,否则会视为是几个不同的命令(与C++编程规范不太一样)。如:
my_variable=Hello
my_variable="Hello World"
需要注意的是,自己定义的一定要全小写,否则一旦不小心改了环境变量,会造成不可预料的后果。
局部变量仅限当前shell使用,若要设置自定义的全局环境变量,可以用export
实现,变量名前无需$:
export my_variable
需要注意的是,在父shell定义赋值的全局环境变量,在子shell是无法修改的(无论用=
还是export
),子shell的局部变量与父shell中的全局环境变量可以重名,此时的处理与C++中的处理逻辑一致。
1.3 删除变量
用unset
命令即可,注意无需$
:
unset my_variable
需要注意的是,在子shell中删除变量不会影响定义在父shell中的全局环境变量。
2 PATH环境变量
PATH环境变量规定了shell命令行中输入一个命令,shell要去搜索的目录,以找到相应的程序。在Ubuntu里,PATH环境变量内容如下:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
2.1 暂时修改PATH
只需引用原来的PATH,然后给字符串添加新目录即可,注意目录与目录之间是用:
隔开的:
PATH=$PATH:/home/xyw/Scripts
更常用的是用单点符直接把当前路径导入到PATH:
PATH=$PATH:.
2.2 PATH的持久化
在交互式的shell进程中(即不是登录系统时自动启动的),bash并不会访问/etc/profile,而是检查用户目录中的.bashrc
文件,实际上像ROS里常用到的source
命令,就可以写在这里面,这样就不用每次都手动键入。
所以答案也很清楚了,就是修改~/.bashrc
就可以实现持久化。
tips
涉及环境变量时,何时加$,何时不加?
答:要使用到变量就加$
,要操作变量就不加,相当于$
是一个解引符(变量可以视为C++中的指针,$可以视为*)。
结尾
令人尴尬的事情发生了,我发现好像其他的内容好像都不需要记住。比如df du这类维护硬盘的操作,或者ps kill等与进程相关的操作,或者vim编辑器的使用,或者cat more less的使用,或者tar相关的命令。这些都属于多且杂,但使用频率不高的命令,遇到的时候翻一翻就可以了。
而这本书剩下的基本都和shell脚本编程有关,虽然很炫酷,但用python写脚本不是更简单吗。。
所以这个系列可能刚开始,就要完结了。