### 本篇博客主要记录我在学习过程中用到的比较好的工具以及遇到的一些问题及解决办法。 ###
目录
一、常用Shell命令及快捷键
## shell命令
- ls: 查看文件夹
- cd: 进入文件夹 (cd ../ : 返回上一级目录)
- cp: 复制文件
- tar: 解压文件
- apt-get install: 安装软件
- sudo: 最高权限执行
- sudo chmod 777 : 给予文件夹执行权限
- ./: 执行目标文件
- mkdir: 创建文件夹
- rmdir 删除空文件夹
- rm -r 文件夹名称 删除非空文件夹及内容(-rf 强制删除)
- vi/vim: 创建/编辑文件(默认没有该文件则先创建文件,再进行编辑)
- gedit + 文件名 编辑文件
- code + 文件名 用vscode打开文件
- gcc + c语言文件名.c 编译c文件(下面有详细介绍)
关于安装虚拟机VMware的教程有很多,这里不在赘述。可以参考下面这篇博客:
VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客
## ROS相关命令
rostopic list 查看当前话题
rostopic echo [话题名] 查看话题发布的数据
## 文件操作快捷键
- Ctrl + N:新建窗口。
- Ctrl + W:关闭窗口。
- Ctrl + Shift + T:新建终端标签页。
- Ctrl + Tab:在标签页之间切换。
- -c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
- -o:<输出文件名>用来指定编译结束以后的输出文件名。
- -g:添加调试信息,如果要使用调试工具(如GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
- -O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
- -O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
二、VIM编辑器
VIM 编辑器有 3 种工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能。
a | 进入输入模式 |
ctrl+s | 暂停终端 |
ESC | 切换到指令模式 |
: | 切换到底行模式(指令模式基础上) |
/ | 底行模式搜索指定内容 |
而要想进入底行模式,我们要先进入到指令模式,然后在指令模式下输入“:”进入底行模式。我们可以在“:” 后面 输入命令,常用的命令如下:
- x 保存当前文档并且退出。
- q 退出。
- w 保存文档。
- q! 退出 VI/VIM,不保存文档。
- wq 退出并保存。
演示事例:
VIM默认是以只读模式打开,该模式下无法进行输入此时按下“a”键进入输入模式,该模式下我们可以正常输入文本。
切换到底行模式
“/”底行模式,执行后,光标会移动到查找的位置。
三、gedit缩进修改
由于我一个人不是很喜欢(习惯)用vim来编辑代码,我一般使用gedit(或vscode)来进行编辑,这里介绍一下如何修改gedit缩进。
终端输入gedit
打开首选项
在制表符里面直接修改即可
四、linux中Makefile使用
我的理解是Makefile能够把一个项目中的所有文件放在一起编译,提高了工程管理的效率,方便快捷。
首先我这里写了一个加法的小工程,就以这个工程为例,利用Makefile编译该工程。
首先在该工程目录下创建一个Makefile文件,文件名不能更改且严格大小写。输入以下代码,这个代码格式也应严格控制。
此时使用make即可编译文件,编译完成以后就会在当前工程目录下生成各种.o 和可执行 文件,说明我们编译成功了。
Makefile基本操作:
赋值符“:=”和“?=”的区别。前者不会使用后面定义的变量,只能使用前面已经定义好的。后者与之相反。
五、Open VM Tools安装
由于Open VM Tools适用于 Linux 系统,是 VMware Tools 的开源版本且与大多数现代 Linux 发行版深度集成,直接通过包管理器安装。另外桌面版Open VM Tools 相比基础版本,专为图形化用户界面(GUI)环境优化,提供了一些特定的功能支持,主要用于提升桌面虚拟机的用户体验。这里推荐安装。
(1)更新软件包列表
在安装之前,先更新系统软件包列表:
sudo apt update
(2)安装 open-vm-tools-desktop
sudo apt install open-vm-tools-desktop
(3)安装必要的依赖项
桌面版本通常需要一些额外的图形驱动或工具包。如果你使用的是基于 X11 的桌面环境,可以安装以下软件包:
sudo apt install xserver-xorg-video-vmware
sudo apt install fuse # 用于挂载共享文件夹
(4)启动相关服务
确保 Open VM Tools 的服务已经启动并自动运行:
sudo systemctl start vmtoolsd
sudo systemctl enable vmtoolsd
如果使用共享文件夹功能,还可以启动挂载服务:
sudo systemctl start vmhgfs-fuse
sudo systemctl enable vmhgfs-fuse
安装完成后,建议重启虚拟机,以确保所有功能(如动态分辨率调整、共享剪贴板等)正常运行。
(5)验证安装
vmtoolsd -v
出现上面界面就说明Open VM Tools安装成功啦!!!
你的虚拟机应该有以下功能:
- 动态分辨率调整:尝试调整虚拟机窗口大小,屏幕分辨率能够自动适应。
- 剪贴板共享:能够复制文本或文件,粘贴到虚拟机或主机上。
- 文件拖放:从主机拖动文件到虚拟机,或从虚拟机拖动文件到主机。
- 共享文件夹:共享文件夹在
/mnt/hgfs
挂载。
六、Terminator
一款非常好用且广泛使用的终端,可以在一个窗口中同时打开多个面板,支持分屏,适合需要同时监控多个任务的用户。
sudo apt install terminator
七、常见问题
(1)根目录与主目录
在linux系统中根目录(/
)和 主目录(/home/用户名
)是两个不同的概念,它们有不同的作用和位置。
点击“DVD”磁盘,然后点“其他位置”,点击“计算机”。事实上,这个目录才是根目录,当然我这个是Ubuntu20.04版本,其他版本的Ubuntu根目录位置可能不太一样。
进入根目录下的home文件夹,其中这个里面的文件夹就是主目录(名字与用户名相同),也就是你看到的桌面上的那个文件夹。
根目录和主目录的概念容易弄混,这里要区分开
(2)Ubuntu安装过程中无法完全显示界面
在安装Ubuntu的安装过程中遇到无法完全显示安装界面的底部按钮,就是不能看到“继续”按钮。如下图所示:
我的解决方法是,在虚拟机内,按下 Ctrl + Alt + T
打开终端,输入以下命令调整分辨率(例如设置为 1024x768):
xrandr --output Virtual1 --mode 1024x768
调整到合适的分辨率,问题就能得到解决。
也可以使用win + 鼠标拖拽,问题解决
(3)虚拟机不能访问共享文件夹
zwzh@zwzh-virtual-machine:/mnt$ cd /mnt/hgfs
bash: cd: /mnt/hgfs: 没有那个文件或目录
zwzh@zwzh-virtual-machine:/mnt$
如果在本机配置好共享文件夹后,在虚拟机中查看共享文件夹,出现以上报错,可能是虚拟机上还没有创建该路径,需要手动创建并挂载。
- 创建挂载点
sudo mkdir -p /mnt/hgfs
- 尝试重新挂载
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
- 检查共享文件夹是否挂载成功
ls /mnt/hgfs
如果能看到共享的文件夹,就成功了。
在补充一点:
为了方便使用,将共享文件夹软连接到home目录下
ln -s /mnt/hgfs/share/ ~/share
此时,home目录下的share文件夹就是共享文件夹
(4)烧录文件到设备上时,运行会报错
我最近在做实验的时候遇到了这种问题,我在虚拟机上编译文件后能正常运行,而拷贝到设备上运行会报错,后面发现问题解决后,这里记录一下。
是因为编译的问题。
由于我之前在虚拟机上是用gcc直接编译的pthread.c文件
gcc pthread.c -o pthreaad -lpthread
这会生成一个针对你当前系统(通常是 x86 或 x86_64 架构)的可执行文件,而不是针对 ARM 架构的二进制文件。这可能导致以下问题:
- 架构不匹配:这是因为生成的二进制文件是为 x86 或 x86_64 架构设计的,而 ARM 设备无法运行。
- 无法交叉编译:默认的 gcc 编译器生成的文件是为当前主机架构(Host)设计的,无法用于目标架构(Target)。
- 库的不兼容性:默认的 gcc 链接的是主机系统的标准库和线程库,例如 /lib/x86_64-linux-gnu/libpthread.so。这些库不适用于 ARM 设备,目标设备上需要的是 ARM 架构的动态库(例如 /lib/arm-linux-gnueabihf/libpthread.so)。
而如果使用针对ARM的交叉编译器进行编译,在虚拟机上运行就会报错。
arm-linux-gnueabihf-gcc pthread.c -o pthreaad -lpthread
如果编译文件要再设备上运行,要利用上述针对ARM的交叉编译器进行编译,方可成功。
持续更新........