机器人系列文章目录
第一章 ubuntu16.04系统及相关软件安装
第二章 Linux操作系统入门笔记
第三章 ROS系统架构及程序编写过程
第四章 《probabilistic robotics》学习笔记
本章目录
操作系统 Linux(Ubuntu)
一、Linux系统安装
进行 Linux 开发需要安装一个 linux 系统环境,我们选择安装Ubuntu16.04 系统进行开发。具体安装过程可以参考第一章 ubuntu16.04系统及相关软件安装
二、Linux文件系统概览
Linux 系统中有一个重要的概念**:一切都是文件**
Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
图 1 图1 图1
常见目录说明:
/bin :存放用户一般使用程序,即二进制可执行文件(ls,mv,rm,cat,mkdir等),常用命令一般都在这里;
/etc :存放系统管理时要用到的各种配置文件和子目录。如系统开机后会自动执行其中的/etc/rc.local;
/home :存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;如果建立一个用户,用户名是“zhl”,那么在/home目录下就有一个对应的/home/zhl路径,用来存放用户的主目录;包含隐藏文件;
/lib :存放着和系统运行相关的库文件,几乎所有的应用程序都会用到这个目录下的动态连接共享库;
/boot :在这个目录下存放的都是系统启动时要用到的程序。在使用grub或lilo引导linux的时候,会用到这里的一些信息;/dev:dev 是设备(device)的英文缩写,在这个目录中包含了所有linux系统中使用的外部设备(但是这里并不是放的外部设备的驱动程序),如tty;
/proc :可以在这个目录下获取系统信息,这些信息是在内存中,由系统自己产生的
/usr :这是linux系统中占用硬盘空间最大的目录,相当于windows下的program files目录
/var:系统中的可变文档的存放位置,例如日志文件,未读邮件等
/mnt :这个目录在一般情况下也是空的,可以临时将别的文件系统挂在这个目录下
三、Linux一些常用指令
1.文件目录管理命令
(1)查看帮助命令
–help
也可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp
(2)ls(英文全拼:list files): 列出目录及文件名
语法:
$ ls [选项] 目录名称
选项:
- -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用);
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用);
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
(3)cd(英文全拼:change directory):切换目录
语法:
$ cd [相对路径或绝对路径]
文件路径:
绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法。
(4)pwd(英文全拼:print work directory):显示目前的目录
(5)mkdir:创建空白目录
语法:
$ mkdir [选项] 文件
选项详见–help
(6)cp(英文全拼:copy file): 复制文件或目录
语法:
$ cp [选项] 来源(source) 目标(destination)
选项:
- **-f:**为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
- **-i:**若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用);
- **-p:**连同文件的属性一起复制过去,而非使用默认属性(备份常用);
- **-r:**递归持续复制,用於目录的复制行为(常用)
(7)mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
语法:
$ mv [选项] source destination
选项:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
(8)rm(英文全拼:remove): 删除文件或目录
语法:
$ rm [选项] 文件或目录
选项:
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作;
- -r :递归删除。最常用在目录的删除,这是非常危险的选项
(9)touch:创建空白文件
语法:
$ touch [选项] [文件]
2.测试网络能否联通
ping用于确定本地主机是否能与另一台主机成功交换数据包,判断网络是否通畅。
$ ping [-c 包的个数] ip地址或域名
3.sudo命令
sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
4.使环境变量生效的命令
编辑命令:
$ gedit ~/.bashrc
编辑之后使环境变量生效的命令:
$ source ~/.bashrc
每次修改.bashrc后,使用source ~/.bashrc(或者 . ~/.bashrc)就可以立刻加载修改后的设置,使之生效。
示例:
在每次打开终端时,让系统自动刷新工作空间ws环境。在这个工作空间ws下的所有package都可以编译后就可以直接运行了,不用再source
终端输入:
gedit ~/.bashrc
打开bashrc文件,最下面的位置输入
source ~/ws/devel/setup.bash
或者直接使用
echo “source ~/ws/devel/setup.bash” >> ~/.bashrc
5.查看文件内容
(1)cat一次显示整个文件的内容
$ cat 文件名
选项与参数:
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同
(2)tail用于显示文本文件的最后几行
语法:
$ tail [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
$ tail -f 文件
选项与参数:
- -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
可以动态显示后台服务程序的日志,用于调试和跟踪程序的运行。
6.打包压缩与搜索命令
(1)tar(英文全拼:tape archive ):对文件进行打包压缩或解压,常用于备份文件。
示例:
压缩文件 非打包
$ touch a.c
$ tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
a.c
列出压缩文件内容
$ tar -tzvf test.tar.gz
-rw-r--r-- root/root 0 2010-05-24 16:51:59 a.c
解压文件
$ tar -xzvf test.tar.gz
a.c
选项与参数:
-
-c或–create 建立新的备份文件(压缩);
-
-z或–gzip或–ungzip 通过gzip指令处理备份文件;
-
-v或–verbose 显示压缩或解压过程;
-
-f<备份文件>或–file=<备份文件> 指定备份文件;
-
-t或–list 列出备份文件的内容;
-
-x或–extract或–get 从备份文件中还原文件(解压)。
(2)zip
sudo apt install zip unzip
unzip 包.zip
7.查找搜索
(1)快速搜索已经输入的命令
1、history
2、ctrl+r:反向搜索 (reverse-i-search )
(2)grep:文本中执行关键词搜索,并显示匹配结果
实例:
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
$ grep test *file
2、以递归的方式查找符合条件的文件。
$ grep -rn "hello,world!" *
** : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
$ grep -r update /etc/acpi
3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
$ grep -v test *test*
4、管道命令符|。
$ ll或ls |grep 关键词
找包含odom的话题名称,使用的命令为:
$ rostopic list |grep odom
(3)find:按指定条件来查找文件
实例:
1、将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
$ find . -name "*.c"
2、将当前目录及其子目录中的所有文件列出:
$ find . -type f
8. 修改用户的权限
chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
图2
语法:
$ chmod [-cfvR] [--help] [--version] mode file...
参数说明:
mode : 权限设定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取:4,w 表示可写入:2,x 表示可执行:1,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
示例:
将文件 file1.txt 设为所有人拥有所有权限 :
$ chmod 777 file1.txt
将文件 file1.txt 设为所有人皆可读取 :
$ chmod a+r file1.txt
9.安装
1.deb安装包
安装
sudo dpkg -i 包名.deb
卸载
sudo dpkg -r 包名.deb
注:opt下要sudo
2.apt-get install等
编译器报错未安装库
有时候不需要安装。可能是cmakelist少加东西。
如编译器报错yaml库问题,cmakellists中加:
find_package(PkgConfig REQUIRED)
pkg_check_modules(YAMLCPP yaml-cpp REQUIRED)
注意安装时有无update,有时update某库之后,代码里的接口不能用了,要重新再装一般老版本。
10.看cpu占用
htop
fn+f4过滤
11.看端口占用
lsop
四、常用工具
1.vim文本编辑器
(a)vim的安装
$ sudo apt-get install vim
(b)vim的使用
vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
vim 使用示例:
(1)使用 vim 进入命令模式
用 vim来建立或打开一个文件:
$ vim [文件名]
请注意,记得 vim 后面一定要加文件名,不管该文件存在与否。
(2)按下 i 进入输入模式,开始编辑文字
在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
(3)按下 ESC 按钮回到一般模式
按下 Esc 按钮,画面左下角的 – INSERT – 消失。
(4)在命令模式中按下 :wq 储存后退出 vim
输入**:q**,不保存,直接退出;
注意确认保存,.swp文件的恢复:
输入**:q!**,曾经修改但不保存,强制离开;
输入**:wq!**,强制保存退出
(5)在命令模式中按下**:set number**显示行号
(6)恢复:u
(7)查找:?
查找结果切换:N
(c)vim 键盘图:
2.远程登录、传入文件/文件夹
(1)ssh( secure shell 的缩写):使用密钥认证机制进行远程登录
安装:
$ sudo apt-get install openssh-server
示例:
$ ssh remote_username@remote_ip
(2)scp(secure copy 的缩写):基于ssh远程传输文件/文件夹
示例:
1、传输本地test.txt单独文件,到远程用户home目录下。
$ scp test.txt remote_username@remote_ip:~
2、传输本地test文件夹,到远程用户home目录下。
$ scp -r test remote_username@remote_ip:~
五、脚本
1.crontab执行定时删日志脚本
脚本参考
https://blog.csdn.net/weixin_39795268/article/details/117494674
#!/bin/bash
echo "delete log..."
find /home/?/ -mtime +7 -name "*.log" -exec rm -rf {} \;
...
echo y +要执行的内容
参考:https://zhuanlan.zhihu.com/p/498501715
echo y | cp /root/5.txt /root/5.txtbak | echo -e “\n”
释义:
echo y 自动输入y
echo -e “\n” 自动回车