从零入门激光SLAM(二)——Ubuntu基础

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激光SLAM,也方便想入门SLAM的同学和小白学习参考,相信看完会有一定的收获。如有不对的地方欢迎指出,欢迎各位大佬交流讨论,一起进步。
  1. 什么是Ubuntu

1.1 Ubuntu简介

我们一般学习激光SLAM都需要在Ubuntu上搭建工程,用ROS传输数据。ROS是基于Ubuntu操作系统的,因此在安装使用ROS之前,需要对Ubuntu系统进行一定的学习。我们从使用习惯的win一下子转到ubuntu系统是会有很大的不适应性,耐心学习Ubuntu系统将会在未来提高很多效率和少走很多弯路。

Linux是一种自由、开放、免费的系统软件,是一种多任务和多用户的网络操作系统。 它具有良好的可移植性,广泛运行于PC、服务器、工作站到大型机,以及包括嵌入式系统在内的各种硬件设备,适用平台非常广泛。它开放源代码、遵循GPL精神、遵守POSIX标准, 并且是与UNIX兼容的操作系统。从另一个角度来看.Linux是一套免费使用和自由传播 的类UNIX操作系统。它可以在基于Intel x86系列处理器以及Cyrix、AMD的兼容芯片的计算机上运行。

Ubuntu是一个以桌面应用为主的Linux操作系统。一个致力于创建自由操作系统的合作组织,创建了一款操作系统,名为Debian GNU/Linux,简称为Debian。Debian系统目前采用Linux内核,是为数极少的纯社区驱动的Linux发行版,而不是由商业公司或者政府机构所掌控。它有以下优势:

  1. 免费和开源:Ubuntu 是免费和开源的,任何人都可以自由使用、修改和分发它。

  1. 稳定性和安全性:Ubuntu 是一个非常稳定和安全的操作系统,它有一个强大的安全架构和一个活跃的社区,可以快速修复任何发现的漏洞。

  1. 易于使用:Ubuntu 具有直观的用户界面,易于使用和配置。它还包含了许多预安装的应用程序,如浏览器、媒体播放器、文档编辑器等。

  1. 软件中心:Ubuntu 的软件中心提供了一个集中的位置来查找和安装数千个应用程序和工具,包括许多免费和开源软件。

  1. 社区支持:Ubuntu 拥有一个庞大的社区,其中包括开发者、用户和志愿者,他们会提供支持和解决问题。这个社区还会提供大量的文档和教程,使得新手可以很容易地学习和使用 Ubuntu。

总的来说,Ubuntu 是一个强大、稳定、安全、易于使用和免费的操作系统,适用于个人用户、企业和开发者。在Ubuntu中,你可以当系统主人,随意的修改

1.2 Ubuntu系统架构

Ubuntu系统与Win系统的区别蛮大的,它不像win有好几个分区,Ubuntu只有一个根目录,所有的文件都将放在这里。系统的整体文件构架如下所示。我们刚开始只需要知道每一部分大概的作用是什么。

/ 根目录

├boot/ 启动文件。所有与系统启动有关的文件都保存在这里

│ └grub/ Grub引导器相关的文件

├dev/ 设备文件

├proc/ 内核与进程镜像

├mnt/ 临时挂载

├media/ 挂载媒体设备

├root/ root用户的$HOME目录

├home/

│ ├user/ 普通用户的$HOME目录

│ └.../

├bin/ 系统程序

├sbin/ 管理员系统程序

├lib/ 系统程序库文件

├etc/ 系统程序和大部分应用程序的全局配置文件

│ ├init.d/ SystemV风格的启动脚本

│ ├rcX.d/ 启动脚本的链接,定义运行级别

│ ├network/ 网络配置文件

│ ├X11/ 图形界面配置文件

├usr/ 系统默认安装文件

│ ├bin/ 应用程序

│ ├sbin/ 管理员应用程序

│ ├lib/ 应用程序库文件

│ ├share/ 应用程序资源文件

│ ├src/ 应用程序源代码

│ ├local/

│ │ ├soft/ 用户程序

│ │ └.../ 通常使用单独文件夹

│ ├X11R6/ 图形界面系统

├var/ 动态数据

├temp/ 临时文件

├lost+found/ 磁盘修复文件

1.3 Ubuntu的安装

Ubuntu怎么安装网上的教程有很多,这里就不再赘述了。安装完Ubuntu后小白一般操作起来会很懵逼,并且会出现各种各样的问题,这里可以参考我之前的博客,安装完Ubuntu需要做的事情。

https://blog.csdn.net/HUASHUDEYANJING/article/details/122572315

需要注意的是,我们在刚开始安装系统时候,需要手动去分区,很多小伙伴也不知道分多少G合适,导致没用多久就系统内存不够,下面给出必须设定的几个分区。

  1. EFI引导区

作用:该分区用于efi引导,从而使得电脑能够找到ubuntu分区(Bios中需要打开uefi启动)

类型:逻辑分区

大小:只是引导分区而非系统分区,不需要很大,设置为500M

  1. SWAP虚拟内存区

作用:与CPU进行数据交换的虚拟存储器,用于临时数据的存储

类型:主分区

大小:通常设置为与电脑内存的两倍,我电脑为8G,因此设置为16*1024M

  1. 挂载点:/ 根目录

作用:用来存放ubuntu系统文件,相当于win的C盘

类型:逻辑分区

大小:视实际空间大小而定。一般分配60-100GB

  1. 挂载点:/home

作用:存放用户的所有文件

类型:逻辑分区

大小:尽可能大。目录结构图中,/home是属于根目录/的,但再单独设置分区内存的时候,他们是分开考虑的,可以看作/home有自己的内存空间,并不占用/的。可以看到/只有42.9GB的剩余空间而/home还有95.2G

利用baobab可视化空间,可以看到/home和/也是分开来计算的。

2、Ubuntu重要概念

2.1 空间分布

  • Baobab可视化空间分布

端输入baobab,没有的话安装一下,sudo apt-get install baobab

  • df指令查看空间分布

df-h 以GB形式展示所有分区

df-h /home** 查看特定分区

  • free指令查看内存

free -h 查看内存

free -ht 查看总体内存

free -h -s 1 每间隔1s打印一次信息

2.2 权限介绍

在Ubuntu中,权限的概念显得尤为重要,在搞命令时候和搞工程时候都会用到权限。我这里暂且根据用到的场景分为命令权限、文件权限和串口权限。

  • 命令权限

Ubuntu系统输入命令的时候很多时候需要加sudo,也就是管理员权限,相当于win的以管理员身份启动。root账户即为超级管理员账户,对系统具有超级的管理能力,可以访问所有资源,当然包括删除等不可恢复的操作,因此,必须慎重使用,一般在备份恢复系统时候使用。进入root模式sudo su,退出输入exit。

  • 文件权限

在Ubuntu中,每个文件和目录都有一个所有者和一个所属组。Ubuntu中的权限分类如下:

读取权限(r):允许用户读取文件或目录的内容。

写入权限(w):允许用户修改文件或目录的内容。

执行权限(x):允许用户执行文件或进入目录。

这些权限可以针对用户、组或其他用户进行控制。例如,可以允许某个用户读取文件,但不允许修改它,或者允许某个用户执行某个文件,但不允许其他用户执行它。

在Ubuntu中,权限可以使用命令行工具chmod和chown进行更改。chmod用于更改文件或目录的权限,而chown用于更改文件或目录的所有者或所属组。这些命令需要使用超级用户权限(即root用户)才能进行更改。下面给出样例

将文件 myfile.txt 的所有者的读取权限设置为只读:

chmod u=r myfile.txt

将文件 myfile.txt 的所有者和所在组的读取和写入权限设置为读写:

chmod ug=rw myfile.txt

将文件 myfile.txt 的所有用户的执行权限设置为允许执行:

chmod a+x myfile.txt

其他命令:

sudo chmod 600 ××× (只有所有者有读和写的权限)
sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)
sudo chmod 666 ××× (每个人都有读和写的权限)
sudo chmod 777 ××× (每个人都有读和写以及执行的权限)
  • 设备权限

在Ubuntu中,设备权限是指对设备文件或目录的访问权限。这些权限确定了哪些用户可以访问设备文件或目录,以及可以执行哪些操作,如读取、写入和执行等。设备权限的主要用途如下:

  1. 安全性:设备权限可以限制用户的访问权限,防止非授权用户访问和更改设备文件或目录,从而保护系统的安全性。

  1. 权限控制:设备权限可以确定哪些用户可以访问设备文件或目录,并授予不同的用户不同的权限,从而确保用户只能执行他们被授权的操作。

  1. 设备管理:设备权限可以使系统管理员对设备进行更好的管理,例如在使用USB设备时,可以限制哪些用户可以访问USB设备,从而防止非法访问和恶意软件的攻击。

在Linux系统中,设备文件通常以 /dev 目录下的特殊文件的形式出现,这些特殊文件可以代表硬件设备(如串口、USB设备、声卡等)或软件设备(如终端设备)。通过设置设备文件的权限,可以控制用户对这些设备的访问权限,从而实现系统的安全性和稳定性。

sudo chmod 777 /dev/ttyACM0
/dev/ttyACM0 是一个代表 USB 串行设备的特殊文件路径。
chmod 命令用于更改文件或目录的权限。
777 将三个位都设置为 7 的意思是将读、写和执行权限都授予了所有用户,包括所有者、所属组和其他用户。

其他的特殊文件路径如下:

/dev/ttyS 代表标准串行接口(RS232)设备
/dev/ttyUSB 则代表USB串口设备
/dev/ttyACM:代表通过CDC(Communications Device Class)通信协议连接的设备,如Arduino开发板等。
/dev/ttyAMA:代表树莓派GPIO串口设备。
/dev/ttyHSL:代表海思芯片上的串口设备。
/dev/ttyTHS:代表Tegra处理器上的串口设备。
/dev/ttyLP:代表打印机串口设备。

2.3 bashrc与终端

首先我们在使用ubuntu的时候都逃避不了一个小黑框,它叫终端,利用ctrl+alt+t可以快速启动。.bashrc 文件是一个存在于 ubuntu 系统内,普通用户目录( / h o m e / d o n g ) 或 r oo t rootroot 用户目录( / r o o t ) (/root)(/root)下的隐藏文件。Linux 系统中很多shell,包括 b as h ,sh,zsh,dash和korn 等,不管哪种shell都会有一个.bashrc 的隐藏文件,它就相当于 shell 的配置文件。.bashrc 文件在每次打开新的终端时,都要被读取。简单的ls命令不会显示该文件,需要使用指令ls -al进行查看。这个文件主要保存一些终端配置和环境变量,例如:别名 alias、路径path等。

# 打开bashrc文件,在终端输入,没有gedit的安装一下sudo apt-get install gedit
sudo  gedit ~/.bashrc
# 更新bashrc,在终端输入
source ~/.bashrc

我们在使用阶段用到最多的bashrc的作用是3个,加环境路径,自定义命令,自启动命令。

1、加环境路径

一般安装第三方库文件的默认路径是/usr/local/lib,当你的安装路径与默认的不相同,需要在bashrc文件中添加路径,例如我自定义了opencv的安装路径。

sudo~/.bashrc
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/cxl/opencv-3.2.0/installed/lib/pkgconfig
exportPATH=$PATH:/home/cxl/opencv-3.2.0/installed/bin
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/cxl/opencv-3.2.0/installed/lib
source~/.bashrc

2、自定义命令

有时候输入很多重复且很长的命令是很烦人的,这时我们可以给命令起代号,之后输入代号就可以了,在bashrc文件中添加alias,即将 source/devel/setup.bash命令代号为sds

aliassds='source /devel/setup.bash'

3、自启动命令

有时我们在启动时需要首先输入一些命令,例如进入conda环境,每次都输入condaactivate yolo 是很麻烦的,这时我们在bashrc中直接添加你想要执行的命令,它将会在启动终端时候自动执行。

2.4 软连接

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间,只生成目标文件的一个镜像。ln命令会保持你每一处连接文件的同步性,不论更改源文件还是目标文件,另一处文件也会有相 同的改动。

ln -s file1 lnk1   #创建一个指向文件或目录的软链接,不占用空间
ln file1 lnk1   #创建一个指向文件或目录的硬链接,移动删除源文,硬链接不会被破坏。与软连接不同的是,硬链接会在你选定的位置上生成一个与原来文件大小相同的文件。无论是软连接还是硬链接都具有文件的同步性。
rm -rf  lnk1  #删除软连接

3、Ubuntu常用命令

3.1 文件路径

  • 路径目录指令pwb与cd

打开终端默认是在家路径下也就是/home/name

pwd——显示当前路径
cd /home——到/home路径
cd——回到初始路径也就是家路径
cd .. ——返回上一级路径
cd / ——到根目录
  • tree与ls

ls ——列出当前目录文件(不包括隐含文件)
ls -a—— 列出当前目录文件(包括隐含文件)
ll ——列出当前目录下文件的详细信息
tree——列出该目录的文件结构
tree -d—— 只列出文件,不显示文件
  • grep与locate查找文件的路径

locate *** ——查找包含***的所有文件路径
grep -rn **——查找文件内容包含**字样的路径

3.2 系统管理

  • 查看设备信息

uname -a ——查看内核版本
uname -m——显示机器的处理架构
sudo lshw -c video 显示显卡的信息;
cat /proc/cpuinfo ——查看cpu信息
lshw ——查看当前硬件信息
sudo fdisk -l ——查看磁盘信息
df -h ——查看硬盘剩余空间
free -m ——查看当前的内存使用情况
ps -A ——查看当前有哪些进程
kill ——进程号(就是ps -A中的第一列的数字)或者 killall 进程名( 杀死一个进程)
kill -9 ——进程号 强制杀死一个进程
sudo lshw -short 显示简略的所有硬件设备的信息。
lspci | grep -i nvidia——查看GPU版本
cat /etc/issue ——查看ubuntu版本
lsusb ——查看usb设备
  • 查看网络信息

sudo ethtool eth0—— 查看网卡状态
ifconfig ——查看ip与网络配置
ifconfig eth0 显示一个以太网卡的配置 
ifup eth0 启用一个 'eth0' 网络设备 
ifdown eth0 禁用一个 'eth0' 网络设备 
sudo service network-manager stop——关闭网络服务
sudo service network-manager start——启动网络服务
lshw -c network 查看网卡驱动
  • 关机重启

reboot——重启
shutdown -r now ——立刻重启
shutdown -r 10 ——过10分钟自动重启
shutdown -r 22:00 ——在时间为22:00时候重启

3.3 文件管理

  • 文件夹

mkdir a——建立a文件夹
rmdir 空目录名——删除一个空目录
rm 文件名 文件名——删除一个文件或多个文件
rm -rf 非空目录名——删除一个非空目录下的一切
touch b.cpp——创建一个b.cpp文件
rm -r  b.cpp   文件名——删除一个b.cpp文件
mv 文件  路径——移动一个文件到
cp -r 文件  路径——拷贝一个文件到
  • deb包命令

sudo dpkg -i “xxx.deb”——安装
sudo dpkg -r “xxx.deb” ——移除
sudo dpkg -info “xxx.deb” ——获取包相关信息
  • 压缩包命令

tar -cvf a.tar ./usb-cam——把usb-cam文件夹打包压缩包tar
tar -xvf a.tar——解压tar压缩包
tar -jxvf linux-source-5.4.0.tar.bz2——解压 tar.bz2
unzip a.zip -d a——把a.zip解压到a文件夹下
zip -r a.zip ./a——把a文件夹下的文件压缩成a.zip
unrar e a.rar—— # 解压rar压缩包到当前文件夹
rar -a filename.rar filename——压缩file成rar压缩文件

3.4 软件包管理

  • 软件包安装、删除

sudo apt-get install package ——安装包
apt-get install <<package name>>=<<version>>——安装制定版本
apt-cache madison <<package name>>——列出能够选择的版本
sudo apt-get install package ——reinstall 重新安装包
sudo apt-get -f install package——修复安装”-f = –fix-missing”
sudo apt-get remove package ——删除包
sudo apt-get remove package - - purge—— 删除包,包括删除配置文件等
sudo apt-get update ——更新源
sudo apt-get upgrade ——更新已安装的包
sudo apt-get dist-upgrade ——升级系统
sudo apt-get dselect-upgrade ——使用 dselect 升级
sudo apt-get build-dep package ——安装相关的编译环境
apt-cache search package ——搜索包
apt-cache show package ——获取包的相关信息,如说明、大小、版本等
apt-cache depends package ——了解使用依赖
apt-cache rdepends package ——是查看该包被哪些包依赖
sudo apt-get clean && sudo apt-get autoclean ——清理无用的包
sudo apt-get check ——检查是否有损坏的依赖
sudo apt-get clean ——清理所有软件缓存
sudo aptitude install  package——安装包及依赖
aptitude remove pkgname    ——删除包
aptitude purge pkgname——删除包及其配置文件

到这里你已经知道什么是Ubuntu和基本会使用Ubuntu了,下节内容将带你学习ROS

感谢各位小伙伴能读到这里,如有不清楚或不对的地方欢迎评论区讨论,博主也是初学者,按自己理解区解释,恳请各位理解,下一篇将很快到来~
如果喜欢就关注一下吧!

猜你喜欢

转载自blog.csdn.net/HUASHUDEYANJING/article/details/129708256