因工作学习 需求,在虚拟机软件VirtualBox安装了Ubuntu 20.04系统,本章节中主要介绍一些环境的安装以及Liunx中常用的一些命令。

1、软件和系统的安装

1.1 VirtualBox

VirtualBox是一款开源虚拟机软件,在软件中可以虚拟各种操作系统,下载相应版本的操作系统iso镜像文件,便可以在VirtualBox中安装并运行该操作系统。

官方下载网站:https://www.virtualbox.org/

百度云链接:https://pan.baidu.com/s/1rY0NYMwI_zukFJ9rKaauvQ 提取码: s3h4

按照步骤依次执行便可以安装成功。

1.2 Ubuntu 20.04

Ubuntu是一款以桌面应用为主的Liunx操作系统,是基于Debian的分支。

官方下载网站:https://cn.ubuntu.com/download

百度云链接:https://pan.baidu.com/s/1H0FcsJs0UYQ-PohlN7GiGA 提取码: 8klp

2、Liunx常用命令

2.1 基本指令

2.1.1 软件包相关

查找软件包
sudo apt-cache search xxx

安装软件包
sudo apt install xxx

安装.deb软件包
chmod +x xxx.debsudo dpkg -i xxx.deb

查看已安装的程序
dpkg --list

卸载程序,同时删除相关配置
sudo apt-get --purge remove xxx

只卸载程序
sudo apt-get remove xxxsudo apt-get autoremove xxx

查找头文件所在的包(需要安装apt-file)
sudo apt-file search xxx.h

2.1.2 系统相关

获取root权限
sudo su

退出root权限
exit or "Ctrl+D"

进程监控(随时间动态变化显示)
top -c

进程一次性查看
ps aux

读入指定的shell程序文件并依次执行文件中的所有语句
source filename
. filename

设置或显示环境变量

export [-fnp] [变量名]=[变量赋值]
    -f 	#[变量名]为函数名称
    -n 	#删除指定变量,不会输出到后续指令的执行环境中
    -p	#显示所有shell赋予程序的环境变量
2.1.3 文件相关

文件定位
locate xxx

文件夹创建
mkdir dir_name

文件创建
touch filename

文件/文件夹复制

cp filename target_dir      #复制文件filename至文件夹target_dir下
    cp -r source_dir target_dir #复制文件夹source_dir及其所有内容至target_dir

文件/文件夹删除

rm filename
    rm -r source_dir
    mv source_dir target_dir    #移动文件夹source_dir至target_dir

文件系统的浏览

cd path	#进入到指定的路径下
    ls		#列出当前目录下的文件信息
    ll		#查看当前目录下的文件及详细信息

文件的压缩和解压

tar --exclude=file/xxx -zcvf file.tar file	#对文件夹file进行压缩时排除文件xxx ,压缩后的文件命名为file.tar
    tar -zxvf file.tar		                    #对压缩文件进行解压
    zip -q -r file.zip /hom/abc	                #将文件夹abc压缩为文件file.zip
    unzip file.zip		                        #对压缩文件进行解压

文件数据同步

rsync -r fileDir1 fileDir2 		        #复制文件夹fileDir1 及其所有内容至文件夹fileDir2中
    rsync -a fileDir1 fileDir2		        #复制文件夹fileDir1 至文件夹fileDir2中,并同步元信息(更为常用)
    rsync -anv fileDir1 fileDir2		    #模拟-a指令的执行结果(未执行),-n模拟结果,-v输出文件结构
    rsync -av --delete fileDir1 fileDir2	#完全同步fileDir1 至fileDir2中,fileDir2中的多余文件被删除
    rsync -av --exclude={‘filename’, ‘dir1/’} fileDir1 fileDir2	#排除指定文件后同步
    rsync -av --include=”*.txt” --exclude=”*” fileDir1 fileDir2	#只将fileDir1 下的所有”.txt”文件同步至下fileDir2
    
    rsync -av src/ username@ip:dest	        #远程同步,使用ssh协议
    rsync -av username@ip:src/ des          #远程同步,将远程内容同步到本地
   
    scp file username@ip:/path/	            #将本地文件file拷贝至远程设备的path路径下
    scp -r dir username@ip:/path/	        #将本地文件夹dir拷贝至远程设备的path路径下
    
    scp username@ip:/path1/file /path2		#将远程设备的文件夹path1目录下的文件file拷贝至本地目录path2下
    scp -r username@ip:/path1	/path2		#将远程设备的文件夹path1拷贝至本地目录path2下
    
    ssh username@ip	                        #username为客户端用户名,ip为服务器地址,默认端口是22
    exit 或 ‘Ctrl+D’ 	                    #退出远程登录

2.2 文本编辑器的使用

2.2.1 vim
  • 安装vim
    sudo apt install vim
  • 创建或打开指定文件
    vim filename
  • vim的普通模式,打开一个文件后即为普通模式,普通模式中可输入以下命令调节光标位置

命令

作用

命令

作用

h

光标左移一个字符

G

光标移至缓冲区最后一行

l

光标右移一个字符

num G

光标移至缓冲区第num行

j

光标下移一行

gg

光标移至缓冲区第一行

k

光标上移一行

  • 普通模式下输入以下命令对文件进行保存、查找和替换等操作

命令

作用

命令

作用

:q

退出

: s/old/new

用new替换文本中第一次出现的old

:q!

强制退出,不保存修改

: s/old/new/g

用new替换文本中第一行所有的old

:wq

保存修改并退出

:n,ms/old/new/g

用new替换n行到m行之间所有的old

:w filename1

当前文件另存为filename1

:%s/old/new/g

用new替换文件中所有的old

/test

查找test在文件中出现的位置,使用norN实现跳转至上一个或下一个匹配的对象

:%s/old/new/gc

用new替换文件中所有的old,每次替换前进行提示

  • 普通模式下对缓冲区的数据进行编辑

命令

作用

命令

作用

x

删除光标所在位置的字符

dd

删除光标所在行

dw

删除光标所在位置的单词

d$

删除光标位置至行尾的内容

J

删除光标所在行行尾换行符

u

撤销上一次的操作

a

光标后追加数据

A

光标所在行尾追加数据

r+char

用char替换当前光标位置的单个字符

R+text

用text覆盖当前光标位置的数据,直到按下ESC

  • 复制和粘贴
    在普通模式下,输入v进入可视模式然后移动光标选择需要复制的内容,输入y进行复制;然后移动光标只需要的位置,输入p完成粘贴操作
  • 普通模式下输入i进入插入模式后即可直接对缓冲区数据进行编辑,输入ESC返回到普通模式
  • 使用vim时,也可对.vimrc文件进行配置
  • 更多的vim的命令操作以及使用教程,可以参考 https://vimjc.com/
2.2.2 nano
nano filename       #打开或创建文件
nano -w filename    #在文件内编辑时禁止自动换行
nano -m filename    #在文件内编辑时开启鼠标支持

启动nano编辑器后,下方会有常用的命令提示,输入ctrl加上相应的命令便可进行操作

2.2.3 gedit
gedit filename      #打开或创建文件

类似于windows环境下的记事本,打开后右下方可选择文件保存的类型

2.3 程序自启动服务配置

2.3.1 通过etc/rc.local的方式
  1. 修改rc-local.service脚本内容
sudo gedit /lib/systemd/system/rc-local.service

在脚本末尾添加上 [Install] 字段

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
Alias=rc-local.service
  1. 将启动脚本写入rc.local文件中
sudo gedit /etc/rc.local

可以写入以下测试脚本,执行的命令需要写在exit 0之前

#!/bin/sh
echo "测试脚本自启动服务!" > /usr/local/test.log
exit 0
  1. 对rc.local文件添加执行权限,并创建链接
sudo chmod +x /etc/rc.local
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/     #在文件路径/etc/systemd/system下创建/lib/systemd/system/rc-local.service的同步链接
  1. 重启ubuntu,查看log文件判断自启动是否成功
reboot
cat /usr/local/test.log     #如果启动成功会看到步骤2中echo的文本内容
2.3.2 通过编写shell脚本的方式

将编写好的脚本 (.sh) 文件移动至 /etc/profile.d/文件夹下,系统启动后就会自动执行该目录下的所有shell脚本。

3、Ubuntu 20.04安装相关开发工具

整理和总结开发过程中各种库和软件的安装,不定时更新…

3.1 工具安装

  1. GNU编辑器集合(gcc, g++, make)
sudo apt-get install build-essential
 # 验证
 g++ --version
 gcc --version
 make --version
  1. CMake
sudo apt-get install cmake

3.2 库安装

  1. eigen库
# 命令安装
sudo apt-get install libeigen3-dev
# 编译源码安装,下载源码后进入目录
mkdir build && cd build
cmake ..
sudo make install
# 验证,查看安装路径
ls /usr/include/eigen3/
  1. osqp、osqp-eigen库
# clone OSQP库
 git clone --recursive https://github.com/oxfordcontrol/osqp
 cd osqp
 mkdir build && cd build
 cmake .. -DBUILE_SHARED_LIBS=ON
 make -j6
 sudo make install
 # 验证,查看安装路径
 ls /usr/local/include/
 # clone OSQP-Eigen
 git clone https://github.com/robotology/osqp-eigen.git
 cd osqp-eigen
 mkdir build && cd build
 cmake ..
 make 
 sudo make install
 # 验证,查看安装路径
 ls /usr/local/include/