补充
由于原文档记录在typora,文字能直接复制过来,图片不能,后续慢慢补充图片
3Ubuntu系统介绍
问题1:什么是ubuntu?和Linux的关系是什么?
Ubuntu是linux的发行版之
问题2:Linux的发行版有哪些呢?
Ubuntu radhat centos debian openwrt
问题3:常见的ubuntu分为哪些?
Ubuntu分为:有界面的Ubuntu和没有界面的Ubuntu
没有界面的Ubuntu:Ubuntu-core
有界面的Ubuntu:Ubuntu-desktop
Ubuntu的组成:
-
Ubuntu-core+第三方桌面。
-
Ubuntu-core+gnome=Ubuntu。
-
Ubuntu-core+kde=kubunty。
-
Ubuntu-core+lxde=lubuntu
4 Ubuntu启用root用户
1 命令行的组成:
topeet:当前操作用户
Ubuntu:代表主机名
~:当前目录名:
$:代表不是 root 用户
#:代表 root 用户权限
2 为什么要启用 root 用户?
我们使用 Ubuntu 系统主要用来做嵌入式开发,不是 linux 运维,没有必要对 root 用户过于敏感。
系统的权限都要为我们嵌入式开发人员打开
3 启用 root 用户步骤
步骤1:
-
使用 sudo passwd
-
然后输入密码
步骤二:
-
su root
-
输入 root 密码
如果启动成功,"则显示当前的用户为 root 而不是 nowcoder
注意:这里为了方便,把sudo passwd也设置成了11。
4 退出 root 用户
使用 exit 命令。
5Ubuntu使用apt-get下载
使用 apt-get 命令之前的检查 1.Ubuntu 必须可以上网 打开浏览器 2.设置下载源 系统设置里面设置 3.更新下载源 apt-get update 4.安装 vim 软件 apt-get install vim 5.更新软件 apt-get upgrade vim 6.卸载软件 apt-get remove vim
6vim编辑器的使用
1.什么是 vim?
vim 是一个文本编辑器,类似于 win 上的 wps。
2.为什么要学习 vim?
因为几乎每一个发行版都有 vim/vi 编辑器,嵌入式 Linxu 上通常也会集成 vim。
3.vi 和 vim 的关系?
vim 是 vi 的加强版。
4.怎么打开 vi 编辑器?
直接在控制台输入命令:vi filename 如果当前路径没有我们要打开的文件,vi 会帮我创建一个,如果当前路径有这个文件,则直接打开这个文件
5.vi 编辑器三种模式?
1、一般模式。2、编辑(插入)模式。3、命令行模式。
一般模式,如下图
编辑模式,如下图所示,可以按键盘上的 i/a/o从一般模式切换到编辑模式
从编辑模式退回到一般模式,按键盘上的 esc 按键。
命令行模式,按键盘上的:可以切换到命令行模式
举例,在命令行模式输入命令“set number”即可显示行号 ,如下图
6.vim 编辑器移动光标(一般模式下)
-
可以使用键盘上的上下左右按键
-
K JHL 也可以来移动光标
-
K:向上移动
-
J:向下移动
-
H:向左移动
-
L:向右移动
7.vim 编辑器快速定位(一般模式下)
-
gg:将光标定位到第一行
-
G:将光标定位到最后一行
-
ngg:将光标定位到底 n 行
8.vim 编辑器的复制(一般模式下)
先将光标放在我们要复制内容的行首,按按键盘的上V,使用上下左右按键来选择字,选择好之后按键盘的上 Y,把光标移动到我们要复制的地方,然后按键盘上的 P。
9.使用快捷键来复制
先将光标放在我们要复制内容的行首,双击“yy”,然后把光标移动到我们要复制的地方,接着按键盘上的 p。
-
yy:复制当前行
-
nyy :复制当前行下的 N 行。
10.vim 编辑器的删除命令
方法一:直接进到编辑模式,使用 delete 来删除
方法二:使用 dd 命令。
-
dd:删除光标所在行。
-
ndd:删除 n 行
-
n1,n2d:删除指定范围的行。需要在命令行模式下操作。
11.vim 的撤销
在一般模式下直接按键盘上的“u”,注意,关闭过的文本文件不能再撤销如果不清楚自己现在在哪个模式,可以使用 esc 按键来回到一般模式 反撤销:ctrl+r
12.vim 的查找
-
(向下查找)使用/进到命令行模式,然后输入我们要查找的字符,查找下一个使用的是“n”
-
(向上查找)使用?进到命令行模式,然后我们输入我们要找到的字符,查找下一个使用的是“n”
13.vim 的替换
:%s /old/new/g
14.vim 的保存
:q! 强行退出,不保存 :wq 保存退出 :q 退出没有编辑过的文本
15 vim 的文件对比
命令行输入:vimdiff file1 file2 file3
7Linux常用命令第一部分
1.ls 命令:
功能:查看文件信息 Ubuntu 里面以“.”开头的文件为隐藏文件 -a 显示所有文件 -l 显示文件的所有信息
-
ls - l(ll) —— 显示当前目录中文件及其详细信息
-
ls - a —— 显示当前目录中所有文件,包含隐藏文件
-
ls - i —— 显示文件的i节点号,相当于文件的身份id
第一列参数代表的含义:代表文件类型
-
d : 表示目录文件
-
- : 表示普通文件
-
P : 管理文件
-
l : 链接文件
-
b :块设备文件
-
C :字符设备文件
-
S :套接字文件
文件权限:
-
r :表示读权限
-
W :表示写权限
-
X :可执行权限
-
-:没有权限
. :当前目录 .. :上一级目录
第2列数字含义:
-
-后面:普通文件的链接数,相当于Windows的快捷方式
-
d后面:目录文件 第一级子目录的目录数(子目录:该目录下的目录)
第三列及以后 :
用户名 组名 文件大小(以字节为单位)最后的修改时间
2 cd 命令
使用 cd 命令改变工作目录 cd .. 作用:返回上一级目录
3 pwd 命令
查看当前所处的路径
8Linux相对路径和绝对路径
什么是绝对路径? 概念:目标位置的完整路径。 绝对路径都是从根目录开始,Linux 的根目录是/ 举例: 北京海淀区 /地球/中国/北京市/海淀区/复兴路/100 号
什么是相对路径? 概念:目标路径是相对于你当前所在位置为基准的路径 相对路径一般都是以./开头的 举例: 我现在在北京 相对路径表示:./海淀区/复兴路/100 号
9Linux家目录和根目录概念
什么是根目录? 根目录是 Linux 中最底层的目录,用“/”表示
什么是家目录? 当前用户所在路径 用“~”表示。 root 用户的家目录与普通用户的家目录不一样,普通用户的家目录实在/home 路径下,root 用户的家目录实在/root 路径下
10Linux常用命令第二部分
1.mkdir 命令
功能:创建一个新的文件夹 mkdir test 创建一个名为 test 的文件夹
-
注意:linux 下是区分大小写的
-
同一级目录下不能创建文件夹名字一样的文件
使用-p 参数 可以创建多级目录
2.rmdir
功能:删除一个非空目录
-
注意:这个命令只能删除非空目录
3.rm 命令
功能:删除文件或者目录
rm -r -f -i
rm -r test 递归删除这个目录下所有的子目录
注意 删除目录一定要加上-r 参数
-f, --force 忽略不存在的文件,从不给出提示。
-i, --interactive 进行交互式删。
4.touch 命令
功能:创建一个文件
touch test.c 创建一个 c 文件 rm test.c
5.clear 命令
功能:刷新屏幕,但是会保留历史记录
6.rest 命令
功能:重新初始化屏幕。历史记录也会清除
7.cp 命令
功能:复制文件或者复制目录 命令格式:cp 源文件 目标文件 cp test1.c test2.c 复制一个和 test1.c 一模一样的 test2.c 文件
使用-r 参数 递归复制
把文件复制到我们想要复制的目录 我们使用 cp test1.c .. 就可以了
格式:cp 源文件 路径 sudo 使用管理员权限来运行
8.mv 命令
功能:修改文件名 修改目录的命令 移动文件
修改文件名:mv 源文件名 想改成的文件名
修改目录名:mv 源目录 想改成目录名
移动文件: mv 想要移动的文件的路径 要移动到哪里
移动多个文件我们的可以通配符 “” .”” 表示任意
9 tar 压缩和解压命令
功能:对文件和目录进行打包
格式:tar [参数] 压缩文件名 要压缩的目录或者文件的名字
-
-c :创建一个新的打包文件
-
-x : 对打包文件进行解压缩
-
-z : gzip 格式进行压缩或者解压,如果 c 结合,就是压缩,如果与 x 结合,就是解压缩。后缀 tar.gz
-
-j :以 bzip2 的格式进行压缩或者解压,如果 c 结合,就是压缩,如果与 x 结合。就是解压缩。后缀 tar.bz2
-
-f :表示要操作的文件,一般放在所有参数最后面
-
-v :显示正在处理的文件
-
-C :格式 -C 路径 ,表示将压缩文件解压到指定路径
10 ifconfig
功能:查看和配置网络状态
设置 IP 地址 格式:ifconfig 网卡 IP
ifconfig 网卡名称 down 功能:关闭网卡
ifconfig 网卡名称 up 功能:打开网卡
11 cat 命令
功能:查看文件的内容 -b 对输出的行进行一个行编号
12 reboot 命令
功能:重启系统
13 poweroff 命令
功能:关闭系统
14 ipconfig 命令
功能:查看 win 电脑的 IP
15 ping 命令
功能:可以测试本机与目标机器的网络是否联通 速度如何 稳定性如何。 -c ping 指定次数后停止。 目标机器可以是 IP 也可是域名,如果是域名,要保证 dns 是正确的
11Linux帮助手册
1.Linux 帮助手册 使用 man命令打开,使用手册一共有九页。
:man man 看到所有目录
1.可执行的程序或者 shell 命令 2.系统调用 3.库调用 4.设备和特殊文件的帮助,通常在/dev 下面 5.配置文件的帮助,如 /etc/passwd 6.游戏的帮助 7.杂项的帮助 8.超级用户可以执行的系统命令的帮助 9.内核相关的。
2.使用 man 手册之前我们需要先安装下依赖。
使用命令 apt-get install manpages-posix-dev
3.如果我们不知道我们要查找的命令在第几页,我们可以使用-f 参数,这个参数可以查看命令拥有哪个级别的帮助
12Linux权限管理
1.为什么要管理 Linux 权限?
很好管理每个用户。控制每个用户对系统权限的访问 初次创建的用户要比普通用户有更多的权限。 Ubuntu 的用户分为 3 类: 1:root(超级用户) 2:系统初次创建的用户,比如 topeet 3:安装完系统之后创建的用户(普通用户)。日常开发时基本用不到
用户的信息全部被保存在/etc/passwd 文件里面
-
注意:用cat指令查看
2.Ubuntu 的文件权限:
9 个英文字符划分为三组,每三个字母为一组。
第一组:rw- 文件拥有者的权限 toppet 用户对 myfile 有 rw 权限,没有执行权限。
第二组:rw- 文件拥有者所在用户组的权限 与 topeet 文件拥有者所在 topeet 组的用户可以读写,但是不能执行。
第三组:r-- 其他用户的权限 不予文件拥有者在同一个组的用户权限是只能读,不能写和执行 。
第三列:topeet 代表文件拥有者
第四列:topeet 文件拥有者所在的组
文件的权限不仅可以使用字母来表示,也可以使用二进制来表示:
-
r: 100 4
-
w:010 2
-
x:001 1
-
第一种组合:--- 000 0
-
第二种组合:--x 001 1
-
第三种组合:r-- 100 4
-
第四种组合:-w- 010 2
-
第五种组合:-wx 011 3
-
第六种组合:r-x 101 5
-
第七种组合:rw- 110 6
-
第八种组合:rwx 111 7
664 为 myfile 文件的权限
3 chmod 命令
功能:修改文件或者文件夹的权限 chmod 参数 权限 文件名 给 myfile 文件一个 777 的权限, chmod 777 myfile.c
13Linux连接档概念
1.Linux 下的连接档种类
一个是类似于 win 电脑的快捷方式,我们称为软连接,一种是通过文件系统inode 连接来产生的,类似于 win 电脑的复制,但是不产生新的文件,我们称为硬连接。
2.什么是 inode?
inode 是用来存放文件信息的,每个文件都会占用一个 inode,并且这个 inode 号是唯一的,文件的内容都是 inode 来指定的,而不是文件名,当系统要访问文件时,inode 就会被复制到内存,从而实现文件的快速访问,使用 ls -i 命令则可以看到 inode 号 -i 参数为打印文件的 inode 号
3.什么是硬连接
硬连接只是一个新的链接到某个 inode 号码的记录而已。这个链接指向 inode,系统并不给他重新分配 inode。可以用 ln 命令来建立硬连接。
格式:ln 源文件 目标文件 常用参数 -f 无论目标文件是否存在都要创建连接。
在例子中我们可以发现 test1.c 和 test2.c 他们的 inode 号码都是 44564692。因为 inode 号一样,所有这个俩个文件的权限和属性也是一模一样的,也是 test1.c 和 test2.c 是俩个完全一样的文件。
连接数也由 1 变成了 2,这个代表的是有多少个档名链接到了这个 inode 号。
我们在创建一个硬连接。使用 ln test1.c tset3.c 命令后,则会发现我们这个连接数从2 变成了 3
4.使用硬连接的优缺点是什么?
-
优点:
第一个方便,虽然类似于 win 的复制,但是通常并不占用实际空间。而且不管我们是修改 test1.c 或者是修改 test2.c 还是 test3.c,只要修改一个,我们的文件就会被同时修改,因为他们的 inode 号都是相同的。 、
举例:
第二是安全,防止误删除,我们删除 test1.c 或者是 test2.c 或 test3.c 任意一个,我们还是可以通过剩下的连接来访问文件。除非都删掉。 举例 :
我们删掉 test1.c。但是 test2.c 或 test3.c 还是可以访问到“nihao”这个内容
-
缺点:
只能在同一个文件系统才可以创建硬连接(因为不同的文件系统管理方式不同),并且目录之间不能创建硬连接。(太复杂,现在还不支持)
5.什么是软连接
这个就比较好理解了,类似 win 上的快捷方式。 可以用 ln 命令来建立软连接。 格式:ln -s 源文件 目标文件 (必须加上-s 参数,使用 ln 如果不加任何参数的话,那么就是 Hard Link,而且源文件要用绝对路径)-s 为创建一个软连接
上图中我们可以发现 test1.c 和 test2.c 的 inode 号是不一样的,所以这个俩个文件是完全独立的,总之软连接就是创立了一个新的文件,当访问这个连接文件的时候,系统就会发现他是一个连接文件,然后读取连接文件找到真正要访问的文件。 因为类似于 win 的快捷方式,我们删掉源文件 test2.c ,test1 就不能打开了,如下图所示:红色背景代表无效。
软连接虽然没有硬链接安全,但是限制少,所以使用范围还是很广泛的
延申内容:
ubuntu 系统中各个文件的颜色含义:
-
蓝 色:文件夹 ,ls -l 或 ll 时可以看到权限部分的第 1 个字母是 d
-
红色:压缩文件
-
绿色:可执行文件
-
白色:文本文件
-
红色闪烁:错误的符号链接
-
淡蓝色:符号链接
-
黄色:设备文件
-
灰色:其它文件
14Linux目录结构
bin 里面都是二进制文件
1.Linux 目录结构
Linux 整个文件系统是从/目录开始
2.Linux 文件层次标准
为了解决不同的开发人员之间不统一的问题,文件层次标准简称 FHS,全称 filesystemhierarch standard。
FHS 定义了俩层规范:/目录下面应该要放什么文件,比如/etc 下面就应该放配置文件。第二层规范是针对 Linux 下/usr 和/var 这俩个目录的子目录来定义的。比如/usr/share 下面就应该放共享数据文件。
3 Linux 根目录下各个文件的规定
-
bin:系统启动时需要的可执行命令,大部分普通用户只有可执行权限,没有读写权限,只有root 用户有读写权限
-
boot:用来存放 BootLoader 相关文件,千万不要乱动,否则无法进入系统
-
cdrom:光盘目录
-
dev:设备驱动文件夹
-
etc:系统配置文件夹,这个文件夹的权限很高,只有 root 用户才可以修改这个文件夹
-
home:家目录,普通用户都有一个以自己名字命名的文件夹存放在这个目录里面
-
lib:各种程序所需要的库文件和系统可以正常运行的支持文件都放在这个文件夹里面
-
lib64: 64 位支持库
-
media:用来存放媒体信息的文件
-
mnt:可以把设备挂载在这个文件夹下,比如 U 盘
-
opt:用来存放第三方文件
-
proc:存放系统信息和进程信息
-
root:root 用户的家目录
-
run:保存了系统从最开始到现在的系统信息
-
sbin:存放系统管理员的可执行命令,里面也是二进制文件
-
snap:snap 应用程序框架的程序文件
-
srv:用来存放系统存储服务相关数据
-
sys:系统的设备和文件层次信息。
-
temp:存放临时文件
-
usr:存放和用户有关的文件
-
var:存放一直在变化的文件
15Linux文件系统概念
1.什么是文件系统?
操作系统中负责管理和存储文件系统的软件称为文件系统
2.Linux 为什么需要文件系统?
Linxu 系统必须要挂载一个文件系统(面试重点),如果系统不能从指定的设备挂载,系统就会出错。
3.Linux 常见文件系统的类型都有哪些?
ext3,ext4,proc 文件系统,sysfs 文件系统。ext3 ext4 4从3发展而来,并且兼容3
4.Ubuntu 的文件系统的类型是什么?
可以用 df 命令查看 功能:df 命令可以显示磁盘分区上的可以使用的磁盘空间 使用 df -T 可以显示文件系统的类型
-T --print-type
从第一列开始:
文件系统所在分区 类型 空间单位 已用空间 剩余空间 磁盘使用率 磁盘挂载目录
-
/dev/sda1是Ubuntu的
-
ext4/ext3 是日志型文件系统,比传统文件系统安全
df -Th ,以人们更容易读的方式显示
或者不想看文件系统类型,直接df -h
16Linux第一个程序Hello world
1.什么是 gcc?
gcc 全称(gun compiler collection)既编译套件,gcc 可以支持多种计算机体系结 构,比如 X86,MIPI,ARM。Ubuntu 默认自带 gcc 可以使用 gcc -v 命令来查看 Ubuntu 的 gcc
2.gcc 基本用法 gcc 选项 文件名 举例:gcc hello.c -o hello -o 参数为指定生成文件的名字
输入./hello 运行 hello 文件,./的意思为在当前目录找我们的 hello 文件并执行。
如果我们不使用-o 参数指定我们生成文件的名称,直接输入 gcc hello.c 编译完会得 到一个 a.out 文件,执行这个 a.out 的结构和执行 hello 是一样的。
file 命令: 功能:查看文件类型 格式:file 文件名
用 gcc 编译器编译出来的可执行文件是 X86 的,不能再 arm 开发板上运行。可以使用 file 命令来查看文件类型。
3.了解编译细节 初学阶段只需要了解这个流程,不用过多的研究 从 hello.c 编译得到 hello 或者 a.out 要经历四个步骤,预处理,编译,汇编,链接。 hello.i 预处理得到的 C 语言代码 hello.s 汇编语言文件 Hello.o 目标文件。
特点:生成的程序下,但是需要依赖库
静态链接:使用-static 参数就是静态链接,因为程序里面包含了需要的库,所以体积比较大。
动态链接生成的程序小
静态链接生成的大
17Linux环境系统变量
1.什么是环境变量?
概念:环境变量是系统预设置的参数。Linux 是一个多用户的操作系统,所以每一个用户也都有自己的环境变量 举例:比如之前学习的命令不管在哪个路径下输入,都是可以执行成功的,因为系统已经把命令的搜索路径提前设置好了
2.常用变量 PATH 这个变量决定了要去那个路径下去寻找我们的程序或者命令,而且在以后的开发过程中,我们要经常修改这个变量 echo 命令 功能:在标准输出上显示一段文字。 echo $PATH $表示引用
3.怎么修改 Ubuntu 的环境变量?
最常用的俩种方法。 举例:把/home/topeet/test 路径加到 PATH 变量里面去
18Linux编写自己的命令
1.什么是命令?
命令就是可执行程序。 比如 ls -al 命令 ls 就是程序的名字 al 就是参数 ps 命令: 功能:显示进程的动态。
UNIX和类UNIX操作系统(如Linux)通常使用bash、sh、zsh等作为默认的shell,而Windows系统使用的是cmd.exe或者PowerShell。
shell接收到命令后,根据命令的字符到环境变量和默认路径里去找,有没有和输入命令名字相同的程序。
实验例子:
-
法一:直接将文件拷贝到bin文件夹中
-
法二:将要执行的文件路径加到PATH中。
19Linux工具 make工具和makefile文件
20Makefile基本语法上
一.设置 vim 首行缩进
vi /etc/vim/vimrc (rc 结尾的一般为配置文件) 输入 set tabstop=4,保存后退出即可。便发现 vim 打开后的缩进变成 4 个空格了
二.Makefile 基本语法
语法格式: 目标:依赖 (tab)命令
目标:all 依赖:空 命令: gcc hello.c -o hello
这样就执行成功了
执行的之后不加all,也能执行。因为:不加任何执行目标。就默认执行第一个目标规则。
上面的例子也可以写成:
目标:all 和 hello.o 依赖:hello.o 和 hello.c 命令: gcc hello.c -o hello 和 gcc -c hello.c
因为 all 依赖 hello.o 文件,所以要先执行 gcc -c hello.c 得到 hello.o 文件,然后才可以执行 gcc hello.c -o hello。所以输入 make 命令后执行顺序如下
在编译的时候,我们可以使用 make 目标来编译,如果我们不指定目标的话,默认执行的是第一个目标所对应的规则。也就是说 make 和 make all 是一样的。如上面的例子。
三.Makefile 变量和变量赋值
四.自动化变量
这里介绍三个最常用的自动化变量:
-
$@:表示所有目标
-
$<:表示第一个依赖文件,如果依赖模式是%,那么它就表示一系列文件。
(%为通配符,类似 linux 上的*)
-
$^:表示所有依赖。
21Makefile基本语法下
1wildcard 函数
格式:$(wildcard PATTENR) 功能:展开指定的目录
2.notdir 函数
格式:$(notdir $(var)) 功能:去掉路径。 举例: 我们在上面的 makefile 中加上以下代码,因为上面的例子我们得到结果是./a.c 和./test/b.c 是有路径的,我们可以直接使用这个变量。
3.dir 函数
格式:$(dir <names...>) 功能:取出目录,这里的目录指的是最后一个反斜杠/之前的部分,如果没有反斜杠/就返回 当前。
4.patsubst 函数
格式:$(patsubst 原文件,目标文件,文件列表 ) 功能:替换文件后缀 举例 我们在上面的例子中加入以下代码,如下图所示:
5.foreach 函数
格式:$(foreach <var>,<list>,<text>) 功能:把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行 <text>所包含的表达式。每一次<text>会返回一个字符串
5foreach得到的结果和第一个实验得到的结果是一样的