因为我自己的电脑之前就已经直接安装过双系统了,VMWare我之前也装过,并不困难,如果没有像用ROS这种有时候需要显卡加速的情况,装一个虚拟机就可以学习了。
这里我就不把安装的教程搬下来了,我直接对着文档开始从Ubuntu入门开始做学习笔记。
图的话我都是截的正点原子的开源文档,因为我自己的电脑现在一直是放在家远程,进Ubuntu没法远程,而且大多数文档也是在Windows,搬来搬去太烦了……
以上两个都是一些最基础的,修改设置啊什么的,还有类似输入法切换,就不赘述了,没啥太大意思。这里记一下打开命令行:
可以通过鼠标右击,然后点击“打开终端”,然后就会出来一个终端,就可以敲命令行了(也可以直接Ctrl+ Shift + T快捷键打开)。
输入命令,比如输入命令“ ls”,命令 ls”是打印出当前所在目录中所有文件和文件夹,如图:
严格意义上来讲, Shell是一个应用程序,它负责接收用户输入的命令,然后根据命令做出相应的动作, Shell负责将应用层或者用户输入的命令传递给系统内核,由操作系统内核来完成相应的工作,然后将结果反馈给应用层或者用户。
通俗来说,Shell就是在命令行里面敲命令,完成你想要的工作。
Shell命令的格式如下:
command -options [argument] |
command: Shell命令名称;
options:选项,同一种命令可能有不同的选项,不同的选项其实现的功能不同;
argument Shell命令是可以带参数的,也可以不带参数运行。
例如:
“ ls”命令用来打印出当前目录下的所有文件和文件夹,而 “ls -l”同样是打印出当前目录下的所有文件和文件夹,但是此命令会列出所有文件和文件夹的详细信息,比如文件大小、拥有者、创建日期等等。最有一个**“ ls /usr”是用来打印出目录 “/usr”下的所有文件和文件夹**。
可以在打出几个字母之后,按下Tab来自动补全完整命令。
ls [选项] [路径] |
ls命令主要用于显示指定目录下的内容,列出指定目录下包含的所有的文件以及子目录,它的主要参数有:
需要注意的是,Shell命令里面的参数是可以组合在一起用的,比如组合“ “-al”就是显示所有文件的详细信息,包括以“ “.”开头的隐 藏文件,如下图所示:
在 Shell中切换到其它的目录,使用的命令是 cd,命令格式如下:
cd [路径 ] |
路径就是我们要进入的目录路径,比如下面所示操作:
pwd命令用来显示当前工作目录的绝对路径,不需要任何的参数。
要查看当前系统信息,可以使用命令 uname,命令格式如下:
uname [选项 ] |
可选的选项参数如下:
clear命令用于清除终端上的所有内容,只留下一行提示符。
Ubuntu(Linux)是一个允许多用户的操作系统,其中权限最大的就是超级用户 root,有时候我们执行一些操作的时候是需要用 root用户身份才能执行,比如安装软件。通过 sudo命令可以使我们暂时将身份切换到 root用户。当使用 sudo命令的时候是需要输入密码的,这里要注意输入密码的时候是没有任何提示的!命令格式如下:
sudo [选项 ] [命令 ] |
选项主要参数如下:
此命令需要 root身份去运行。命令格式如下:
adduser [参数 ] [用户名 ] |
常用的参数如下:
前面讲了添加用户的命令,那肯定也有删除用户的命令,删除用户使用命令“ deluser”,同样的,也要使用 “sudo”来以 root用户运行,命令参数如下:
deluser [参数 ] [用户名 ] |
主要参数有:
“sudo”是以 root用户身份执行一个命令**,并没有更改当前的用户身份**,所有需要 root身份执行的命令都必须在前面加上“ sudo”。命令 su”可以直接将当前用户切换为 root用户,切换到 root用户以后就可以尽情的进行任何操作了!”su”命令格式如下:
su [选项 ] [用户名 ] |
常用选项参数如下:
例如切换到root:
先使用命令“ sudo su”切换到 root用户, su命令不写明用户名的话默认切换到 root用户。然后输入密码,密码正确的话就会切换到 root用户,可以看到切换到 root用户以后提示符的““@”符号前面的用户名变成了 root”,表示当前的用户是 root用户。并且以“#“结束。
注意!!由于 root用户权限太大,稍微不注意就可能删除掉系统文件,导致系统奔溃,因此强烈建议大家,不要以 root用户运行 Ubuntu。
当要用到 root身份执行某些命令的时候使用“ sudo”命令即可。要切换回原来的用户,使用命令“ sudo su 用户名”即可。
查看文件内容是最常见的操作了,在 windows下可以直接使用记事本查看一个文本文件内容, linux下也有类似记事本的软件,叫做 gedit,找到一个文本文件,双击打开,默认使用的就是 gedit。
Shell下就是命令“ cat”,命令格式如下:
cat [选项 ] [文件 ] |
ifconfig是一个跟网络属性配置和显示密切相关的命令,通过此命令我们可以查看当前网络属性,也可以通过此命令配置网络属性,比如设置网络 IP地址等等,此命令格式如下:
ifconfig interface options | address |
主要参数如下:
有两个网卡: ens33和 lo ens33是我的电脑实际使用的网卡, lo是回测网卡。可以看出网卡 ens33的 IP地址为 192.168.31.235,我们使用命令 ifconfig”将网卡 ens33的IP地址改为 192.168.31.20,操作如图所示:
Ubuntu提供了一个命令来帮助用户完成查询命令的功能(类似参考手册),那就是“ man”命令,通过 man”命令可以查看其它命令的语法格式、主要功能、主要参数说明等,格式如下:
man [命令名 ] |
使用 Shell命令“ reboot”来重启系统,直接输入命令 reboot”然后点击回车键即可。
使用命令 poweroff”就可以关闭系统,在终端中输入命令“ poweroff”然后按下回车键即可关闭 Ubuntu系统。
Ubuntu下很多软件是需要先自行下载源码,下载源码以后自行编译,编译完成以后使用命令“intsall”来安装。命令“ install“格式如下:
install [选项 ]... [-T] 源文件 目标文件 或: install [选项 ]... 源文件 ... 目录 或: install [选项 ]... -t 目录 源文件 ... 或: install [选项 ]... -d 目录 ... |
“install”命令是将文件 (通常是编译后的文件 )复制到目的位置,在前三种形式中,将源文件复制到目标文件或将多个源文件复制到一个已存在的目录中同时设置其所有权和权限模式。在第四种形式会创建指定的目录。命令“ install”通常和命令 apt-get”组合在一起使用的。(比如我之前装C++的OpenCV以及ROS都是apt-get install)。
这里的记录主要就是想更熟悉一些基础的Ubuntu命令,其实用到的话都可以直接搜,但是系统学习嘛,就仔仔细细记笔记过一遍。
APT下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。 APT下载工具和我们前面讲解的“ install”命令结合在一起构成了 Ubuntu下最常用的下载和安装软件方法。它解决了 Linux平台下安装软件的一个缺陷,即软件之间相互依赖。
APT采用的 C/S模式,也就是客户端 /服务器模式,我们的 PC机作为客户端,当需要下载软件的时候就向服务器请求,因此我们需要知道服务器的地址,也叫做安装源或者更新源。点击 Ubuntu主界面左上角的“活动”,然后在搜索栏搜索“软件和更新”,如图所示:
工具的安装源,因为我们是在中国,所以需要选择中国的服务器,否则的话可能会导致下载失败!(也就是需要更新源!)
如果想查看本地哪些软件可以更新的话可以使用如下命令:
sudo apt-get update |
这个命令会访问源地址,并且获取软件列表并保存在本电脑上,过程如图:
有时候本地某些软件可能存在依赖关系,所谓依赖关系就是 A软件依赖于 B软件。通过如下命令可以查看依赖关系,如果存在依赖关系的话 APT会提出解决方案:
sudo apt-get check |
上述命令的执行结果如下图所示:
安装软件,使用如下命令:
sudo apt-get install package-name |
可以看出上述命令是由“ apt-get”和 install”组合在一起的 “package-name”就是要安装的软件名字,“ apt-get”负责下载软件 install”负责安装软件。例如安装串口工具“ minicom”,我们就可以使用如下命令:
sudo apt-get install minicom |
安装完成以后我们直接在终端输入如下命令打开 minicom这个串口软件:
minicom -s |
打开以后的 minicom软件如图所示:
更新软件的话使用命令:
sudo apt-get upgrade package-name |
如果要卸载某个软件的话使用如下命令:
sudo apt-get remove package-name |
其中 package-name是要卸载的软件。
最重要的是要记住,所有的软件相关操作都一定要“sudo”先提升权限,然后apt-get,具体的都可以直接csdn或者知乎找到相关的教程。
进行文本编辑是最常用的操作, Windows下我们会使用记事本来完成,或者其它一些优秀的文本编辑器,比如 Ubuntu下有一个自带的文本编辑器,那就是 Gedit。 Gedit是一个窗口式的编辑器,很方便可以打开一些文本。
我的使用经验是都通过gedit,打开操作文件,或者就cd进去然后自己双击(一般系统文件都得gedit,因为双击是没有权限的,一定要sudo提升权限才能gedit)
如果要在终端模式下进行文本编辑或者修改文件就可以使用 VI/VIM编辑器, Ubuntu自带了VI编辑器,但是并不方便。VIM编辑器是 VI编辑器升级版本, VI/VIM编辑器都是一种基于指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作。
我们需要先安装 VIM编辑器,命令如下:
sudo apt-get install vim |
安装完成以后就可以使用 VIM编辑器了, VIM编辑器有3种工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能。打开终端,输入命令:
vim test.txt |
会创建一个test的txt文件。VIM默认是以只读模式打开的文档,因此我们要切换到输入模式,切换到输入模式的命令如下:
最常用的就是 “a”,按下键盘上的“ a”键,这时候终端左下角会提示“插入”字样,表示我们进入到了输入模式,如图:
可以如下图一样,插入文本:
保存文本不能用Ctrl+S,因为在Ubuntu中默认是暂停终端!(可通过Ctrl+Q来重新打开终端。)
保存文本需要从 VIM现在的输入模式切换到指令模式,方式就是按下键盘的 ESC键 ,按下 ESC键以后终端坐下角的“插入”字样就会消失,此时你就不能在输入任何文本了,如果想再次输入文本的话就按下“ a”键重新进入到输入模式。指令模式顾名思义就是输入指令的模式,这些指令是控制文本的指令,我们将这些指令进行分类,如下所示:
移动光标指令:
h(或左方向键 ) :光标左移一个字符;
l(或右方向键 ) :光标右移一个字符;
j(或下方向键 ) :光标下移一行;
k(或上方向键 ) :光标上移一行;
nG :光标移动到第 n行首;
n+ :光标下移 n行;
n- :光标上移 n行;
屏幕翻滚指令:
复制、删除和粘贴指令:
保存文档的命令是在底行模式中,我们要先进入到指令模式,进入底行模式的方式是先进入指令模式下,然后在指令模式下输入“:”进入底行模式,如图:
当进入底行模式以后会在终端的左下角就会出现符号“:”,我们可以在“:”后面输入命令,常用的命令如下:
如需退出并保存文本的话需要在“:”底行模式下输入“wq”,如图所示:
退出以后我们可以使用命令“ cat”来查看刚刚新建的 test.txt文档的内容。
之前展示的是在指令模式下输入“:”的方法,还可以在指令模式下输入“ “/”进入底行模式,输入 “/”以后还可以在文本中搜索指定的内容,结果如下图所示:
一般用gedit就够了,写代码的话,无论是VMWare还是双系统,都可以直接VSCode解决一切,配好对应的环境就可以了!(Python的话可以直接anaconda,就是注意安装顺序,我用ROS的时候就是现装了anaconda再装的ROS还是什么就出问题了,最后卸载anaconda重新装的!如果是C++就麻烦一点,不过如果Windows也配过MinGW的g++或者gcc,在Ubuntu里就是gdb而已,具体配置也是跟着教程就好了)。
在 Linux下一切皆为文件!!!
操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,人类肯定不能直接看懂这些二进制数据,要有一个翻译器,将这些二进制的数据还原为人类能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是 实现数据的查询和存储,由于使用场合、使用环境的不同, Linux有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U盘、 SD卡、 NAND FLASH、 NOR FLASH、网络存储设备等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理 NAND FLASH的话使用 YAFFS文件系统,管理硬盘、 SD卡的话就是 ext文件系统等等。
Linux下与Windows一样,也支持磁盘分割, Linux下常用的磁盘分割工具为: fdisk。当然,在磁盘分割之前,还需要先进行格式化处理。在 Linux下创建一个分区并且格式化好以后我们要将其**“挂载”到一个目录下才能访问这个分区**。 Windows的文件系统挂载过程是其内部完成的,用户是看不到的, Linux下我们使用 mount命令来挂载磁盘。挂载磁盘的时候是需要确定挂载点的,也就是你的这个磁盘要挂载到哪个目录下。
在 Windows下有 FAT、 NTFS和 exFAT这样的文件系统;而Linux下的文件系统主要有 ext2、 ext3、 ext4等文件系统。 Linux还支持其他的 UNIX文件系统,比如 XFS、 JFS、 UFS等,也支持 Windows的 FAT文件系统和网络文件系统 NFS等。
可通过以下命令来查看文件系统的类型:
df -T -h |
可以看到,红框就是安装系统的磁盘分区,他的类型就是ext4,挂载点在"/",也就是根目录。
Linux只有一个根目录,根目录就是““/”。但是Ubuntu中默认打开的不是根目录,而是用户根目录,因为Linux是多用户操作系统,每个用户都有一个用户根目录。同时,打开终端后默认进入的也是用户根目录。
根目录下,有以下重要文件夹:
touch不仅仅可以用用来创建文本文档,其它类型的文档也可以创建,命令格式如下:
touch [参数 ] [文件名 ] |
使用 touch创建文件的时候,如果 [文件名 ]的文件不存在,那就直接创建一个以 [文件名 ]命名的文件,如果 [文件名 ]文件存在的话就仅仅修改一下此文件的最后修改日期,常用的命令如下:
命令格式如下:
mkdir [参数 ] [文件夹名目录名 ] |
主要参数:
要删除一个文件或者文件夹可以使用命令“ rm”,此命令可以完成删除一个文件或者多个文件及文件夹,它可以实现递归删除。对于链接文件(相当于快捷方式),只删除链接,原文件保持不变。命令格式如下:
rm [参数 ] [目的文件或文件夹目录名 ] |
命令主要参数如下:
直接使用命令“ rm”是无法删除文件夹 (目录)的,需要加上参数“-rf”,也就是强制递归删除文件夹 (目录)。
Linux提供了直接删除文件夹 (目录)的命令 rmdir,它可以不加任何参数的删除掉指定的文件夹 (目录),命令格式如下:
rmdir [参数 ] [文件夹 (目录 )] |
命令主要参数如下:
Linux下的复制命令为“ cp”,命令格式如下:
cp [参数 ] [源地址 ] [目的地址 ] |
命令格式如下:
mv [参数 ] [源地址 ] [目的地址 ] |
这个与Windows类似,没啥学的必要。
命令行下进行压缩和解压缩常用的命令有三个:zip、unzip和 tar。
zip命令是针对 .zip文件的,用于将一个或者多个文件压缩成一个 .zip结尾的文件,命令格式如下:
zip [参数 ] [压缩文件名 .zip] [被压缩的文件 ] |
主要参数函数如下:
unzip命令用于对 .zip格式的压缩包进行解压,命令格式如下:
unzip [参数 ] [压缩文件名 .zip] |
主要参数如下:
命令tar,可以用来压缩和解压缩Linux下最常用的 .bz2和 .gz这两种压缩格式;其对压缩和解压缩,只要使用不同的参数即可,命令格式如下:
tar [参数 ] [压缩文件名 ] [被压缩文件名 ] |
常用参数如下:
命令用于在目录结构中查找文件,其命令格式如下:
find [路径 ] [参数 ] [关键字 ] |
路径是要查找的目录路径,如果不写的话表示在当前目录下查找,关键字是文件名的一部分,主要参数如下:
grep命令用于查找包含指定关键字的文件,如果发现某个文件的内容包含所指定的关键字, grep命令就会把包含指定关键字的这一行标记出来, grep命令格式如下:
grep [参数 ] 关键字 文件列表 |
grep命令一次只能查一个关键字,主要参数如下:
这些字符表示的文件类型如下:
Ubuntu是一个多用户操作系统,装系统的时候创建的用户其权限比后面创建的用户大一点,但是没有 root用户权限大,Ubuntu下用户类型分为以下 3类:
初次创建的用户,此用户可以完成比普通用户更多的功能;
root用户,系统管理员,权限最高;
普通用户,安装完操作系统以后被创建的用户。
以上三种用户,每个用户都有一个 ID号,称为 UID,操作系统通过 UID来识别是哪个用户,用户相关信息可以在文件 /etc/passwd中查看 到,如图:
每个用户名后面都有两个数字,第一个数字是用户的 ID,另一个是用户的 GID,也就是用户组 ID。 Ubuntu里面每个用户都属于一个用户组里面,用户组就是一组有相同属性的用户集合。
对于一个文件通常有三种权限:读 ®、写 (w)和执行 (x),使用命令 “ls -l”可以查看某个目录下所有文件的权限信息。
后面的都是用户的一些信息,前面的内容是本节关注的,表示文件权限与用户和用户组之间的关系,第一位表示文件类型,剩下的9位以 3位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。
对于文件,可读权限表示可以打开查看文件内容,可写权限表示可以对文件进行修改,可执行权限就是可以运行此文件 (如果是软件的话)。对于文件夹,拥有可读权限才可以使用命令 ls查看文件夹中的内容,拥有可执行权限才能进入到文件夹内部。
文件的权限也可以使用二进制数表示,三种权限就可以使用3位二进制数来表示,一种权限对应一个二进制位,如果该位为1就表示具备此权限,如果该位为0就表示没不具备此权限,如下图所示:
将三种权限r、 w和 x进行不同的组合,即可得到不同的二进制数和八进制数, 3位权限可以组出 8种不同的权限组,如下图所示:
也可以使用 a、 u、 g和 o表示文件的归属关系,用 =、 +和 -表示文件权限的变化,如下图所示:
可以使用 Shell来操作文件的权限管理,主要用到“ chmod”和 chown”这两个命令。
命令“ chmod”用于修改文件或者文件夹的权限,权限可以使用前面讲的数字表示也可以使用字母表示,命令格式如下:
chmod [参数 ] [文件名 /目录名 ] |
主要参数如下:
可以通过数字来修改权限,如下图所示:
命令 chown用来修改某个文件或者目录的归属者用户或者用户组,命令格式如下:
chown [参数 ] [用户名 .<组名 >] [文件名 /目录 ] |
其中 [用户名 .<组名 >]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下:
Linux的磁盘管理体系和 Windows有很大的区别,在 Windows下经常会遇到“分区”这个概念,在Linux中一般不叫“分区”而叫“挂载点”。 “挂载点”就是将一个硬盘的一部分做成文件夹的形式,这个文件夹的名字就是“挂载点”。
文件 /etc/fstab详细的记录了 Ubuntu中硬盘分区的情况,如图所示:
有一行“ “/ was on /dev/sda1 during installation”,意思是根目录 “/”是在“/dev/sda1”上的,其中“/”是挂载点 ,“/dev/sda1”就是我们装 Ubuntu系统的硬盘。由于我们的系统是安装在虚拟机中的,因此图 没有出现实际的硬盘。可以通过如下命令查看当前系统中的磁盘:
ls /dev/sd* |
上述命令就是打印出所有以”/dev/sd“开头的设备文件。
要对某个磁盘进行分区,可以使用命令 fdisk,命令格如下:
fdisk [参数 ] |
千万不要对自己装 Ubuntu系统进行分区!!!
对U盘进行分类,可以使用如下命令:
sudo fdisk /dev/sdb |
结果如图所示:
输入“m”就会有如下界面:
使用命令 fdisk创建好一个分区以后,我们需要对其格式化,也就是在这个分区上创建一个文件系统, Linux下的格式化命令为 mkfs,命令格式如下:
mkfs [参数 ] [-t 文件系统类型 ] [分区名称 ] |
主要参数如下:
需要将 /dev/sdb1这个分区挂载到一个文件夹中,然后通过这个文件访问 U盘,磁盘挂载命令为 mount,命令格式如下:
mount [参数 ] -t [类型 ] [设备名称 ] [目的文件夹 ] |
命令主要参数有:
不在需要访问已经挂载的 U盘,可以通过 umount将其从卸载点卸除,命令格式如下:
umount [参数 ] -t [文件系统类型 ] [设备名称 ] |
[外链图片转存中…(img-Roj7xCwL-1694519540797)]
使用命令 fdisk创建好一个分区以后,我们需要对其格式化,也就是在这个分区上创建一个文件系统, Linux下的格式化命令为 mkfs,命令格式如下:
mkfs [参数 ] [-t 文件系统类型 ] [分区名称 ] |
主要参数如下:
需要将 /dev/sdb1这个分区挂载到一个文件夹中,然后通过这个文件访问 U盘,磁盘挂载命令为 mount,命令格式如下:
mount [参数 ] -t [类型 ] [设备名称 ] [目的文件夹 ] |
命令主要参数有:
不在需要访问已经挂载的 U盘,可以通过 umount将其从卸载点卸除,命令格式如下:
umount [参数 ] -t [文件系统类型 ] [设备名称 ] |