wlt嵌入式课程
零基础玩转Linux+Ubuntu
1-1 课程简介及Linux学习路线介绍
linux有很多发行版本,ubuntu,centos,redhat…
1-2 Linux和Ubuntu的关系
- LInux简介
生日:1991年10月5日
类Unix操作系统
遵循POSIX标准(可移动操作系统接口)
信仰:一切皆文件 - Linux与Unix的关系
Unix操作进化史
诞生于美国贝尔实验室,接着在全世界演化,最出名的是BSD,然后接着演化,到Minix,Linux,到Android…Unix演化到FreeBSD然后到ios(苹果系统)
Linux其实只是一个内核,是没有桌面系统的,后来很多在linux的内核上开发出了桌面的系统
Linux->Redhat->Fedora
Linux->Redhat->Centos
Linux->Debian->Ubuntu
Linux->Debian->Ubuntu->优麒麟
Linux->Debian->Ubuntu->雨林木风
Linux->Debian->Ubuntu->Deepin
1-3Ubuntu16.04安装及新增特性介绍
- 网卡模式:
桥接模式:相当于虚拟机和pc是在同一个局域网下的两台不同的电脑,可以让虚拟机与外网练级
NAT:共享网络模式和pc共用一个网络,pc有网他就有网,
Ctrl+Alt+t:打开终端
lsb_release -a :查看Ubuntu版本 LTS(代表长期支持的版本)
uname -a:查看Ubuntu的内核
- Ubuntu16.04新特性
默认禁止dash在线搜索
使用GNOME Software 代替Ubuntu软件中心- 自定义Unity所处位置
gsettings set com.canonial.Unitv.Launcher launcher-position Bottom
- apt 命令升级
- 只需要 这一句就可以安装
sudo apt install ..
- 支持ZFS文件系统
- 软件更新
Linux4.4LTS、LiberOffice5.1、Python
- 软件更新
开始安装Ubuntu
-
第一步:到官网下载Ubuntu的镜像文件,然后保存到一个固定的,没有中文的路径。
官网:
路径:
-
第二步打开VMware - 新建虚拟机 - 安装程序光盘映像文件(iso)选择刚才保存的镜像文件
下一步之后设置系统全名,用户名,密码
下一步给虚拟机命名,并设置系统文件保存路径
下一步设置磁盘内存大小,这里的20g并不是一下从真实磁盘分离出来,而是慢慢蚕食磁盘,而且将磁盘存储为一个文件,多个文件都无所谓,一个更方便
选择Ubuntu的硬件配置,声卡,网络
点击完成,VMware自动开机这个Ubuntu电脑
1-4 1.4 X-window和桌面环境KDE、GNOME
Linux 发行版与内核的关系
shell
Unix/Linux默认图形界面系统
桌面环境
GNOME:以GTK为基础
KDE:以QT为基础
窗口管理器
一个控制窗口外表、位置的程序
提供用户操作这些窗口的方法
桌面环境
- KDE
以QT为基础开发
使用KDE的发行版本- Fefora
- Arch
- Centos
- Gentoo
-GNOME
以GTK+为基础开发
使用GNOME的发行版本 - Debian
- Redhat
- Ubuntu(早期版本)
插入bilibili的Ubuntu22.04的课程
2-1Linux基本命令使用
-
Shell是什么?
- Shell是操作系统的用户界面,提供了用户和内核进行交互得操作的一种接口。
- Shell实际上就是一个命令解释器,它接受、解释用户输入的命令并把它送到内核执行
- 第一种Shell作为命令语言,能交互地解释和执行用户输入的命令
- 第二种Shell作为程序设计语言,定义各种变量和参数,提供循环、分支等控制结构类似于c语言
- 对Shell的使用熟练程度直接地反应出你对Linux使用的熟练程度
-
操作系统只是内核,对内核的操作只有两种一种是Shell命令接口,一种是视窗接口。
-
工作模式
- 交互式:一条一条地解释执行用户的命令
- 批处理:一次性执行脚本里的命令
-
集中常见的Shell
- bash:LInux默认使用的Shell
- sh :Steve bourne开发,最初的Unix Shell
- ash :由Kenneth Almquist编写,只有24个命令
- csh :以William Joy为代表47位作者编写
- ksh :Korn shell的缩写
whereis ls //这一句查看ls这个命令所在的文件路径
which ls //这一句查看ls这个命令的文件
安装软件在root模式下安装
sudo su
基础命令
cd //切换目录
ls //显示当前目录下的文件,想显示的详细一点就加一个-a
ls -a //可以显示一些隐藏文件
ls -l //可以以列表的形式显示文件,可以把日期,权限等
ls -al //以列表的形式显示所有文件
ls --help //可以显示更多ls的命令介绍,
pwd //查看当前目录
mkdir //创建文件夹
cd .. //两个点返回上级目录
cd . //一个点是当前目录
touch main.c //创建一个文件
echo "#include <stdio.h>" >main.c//可以使用echo这个命令往文件里写入东西,注意写入的内容要加“”,标明文件是:'>文件名'
cat main.c //然后查看文件内容
gedit main.c//也可以用gedit来打开main.c,打开后会像一个windows下的文本文档一样可以输入内容,并按Crtl+c保存
head -3 main.c //head 只显示这个文件的前三行
tail -1 main.c //tail 只看文件的后一行
cp main.c hello.c //cp 两个参数,第一个参数是复制源文件,第二个参数是复制的结果粘贴到的文件,复制main.c文件生成hello.c
mv hello.c test.c//移动或者重名,有两个参数,第一个参数是所要移或重命名的文件的源文件,第二个参数可以是路径,也可以是文件名,文件名的话就是对源文件重命名,路径的话就是对源文件移动到的路径
mv test.c .. //这句命令mv的第二个参数是.. 说明是吧test.c这个文件移动到上一级目录里
cd .. /;ls //如果想要两个命令一起连续使用,就用分号(;)隔开,
rm test.c //删除一个文件,很多时候在普通用户里不能随意删除文件
sudo rm test.c //使用sudo 使用超级权限进行删除
ln main.c main_ln //建立一个链接文件,相当于给main.c建立一个快捷图标 这个快捷图标可以操作,操作后也改变了main.c,属于硬链接,是整整的两个文件
ln -s main.c soft //软链接的方式,生成的是一个纯纯的快捷方式,像是一个指针,指向main.c,使用的时候都差不多
wc main.c //统计这个文件有多少行多少字符多少个单词
wc -l main,c//查看有多少行
wc -c main.c//查看有多少个字符
wc -w main.c//查看有多少个单词
//解压和压缩
gzip * //压缩当前目录的所有文件成一个压缩包
gzip main.c //压缩这个文件
gzip -d main.c // 解压这个文件
gzip -r //压缩当前目录下的所有文件,每个文件压缩成一个包
gzip -rd //解压当前目录下的所有文件
tar xvf test.tar -C Desktop/ //压缩到指定目录,tar xvf 是这个shell命令,然后第一个参数是要解压的文件名,然后是 -C 这个杠大c说明是下边要输入解压的到的路径了,然后Desktop/是第三个参数就是要解压到的路径
tar cvf shell.tar shell/ //压缩这个包到shell/这个路径
time tar cvf sheell.tar shell/ // 第一个命令是time 这个命令计算这一行运行所需要的时间,也就是压缩这个文件所需要的时间
date //查看当前的系统时间
uname //查看内核
uname -a //详细查看系统内核
uname -r //
lsb_release //查看Ubuntu的版本
apt search lsb_release //在apt 搜索lsb_release这个包
apt update //更新apt 的资源包
du //查看当前路径的文件所占用内存的空间
dmeasg //查看内核的信息,内核的启动信息
uptime //显示时间,用户负载,链接数,哪个用户登录的
w /who //root下的查看登录用户
whomi
hostname
cal //日历
bc //计算器
quit //退出
free //查看内存和交换空间
ping //检测网络连接
ifconfig //配置网络
ifconfig ens33 192.168.21.158 netmask 255.255.255.0//配置一下网卡 ens33网卡
netstat //
service network start
2-2Linux高级命令简单使用
- Shell高级命令
查找
管道
重定向
//1.查找命令
find . -name test.c // 第一个是find,是命令入口,这个命令的第一个参数是路径,一个‘.’,代表在当前目录里查询,然后第二个参数是‘-name’,这个参数说明是精准查找与所要求的文件名相同的文件,这个参数可以替换为“-iname”,这样会忽略文件名的大小写第三个参数是 要查找的文件名,之后系统就会在当前目录下查找
find Desktop/ -name test.c //这是在指定目录下查找文件
grep "test" -r //通过关键字进行查找,-r是全部搜索,
grep "test" -r -c //找到关键词以后只显示关键字所在行
grep "usb" -c -r /drivers/usb //指定路径搜索
cscpoe -Rk
//2.管道
ps //查看当前的所有进程
ps -a //查看所有的进程
ps -A |grep usb //ps -A,把所有的进程文件放到一个缓冲区,但是不打印不输出,然后通过一个管道,与grep 建立连接,然后执行grep usb这命名,然后结果是grep在通过管道在ps -A的内容中搜索usb这个关键词
//例子
cat file | grep hello //cat test.c打开这个文件但是不看他然后通过管道,在这个文件里搜索hello这个关键字
cat file | ls > file2 //
cat file | file2
//3.重定向
> //输出到重定向到一个文件或设备
>!//输出重定向到一个文件或设备,强制覆盖原来的文件
>> //输出重定向到一个文件或设备,追加原来的文件
< //输出重定向到一个程序
注释
cscpoe -Rk
cscope是一个搜索工具,打开以后有对各类文件的搜索,关键字的搜素,搜索出来以后在上方显示,按空格键向下查看,按回车键打开这个文件,然后按q退出这个文件打开,然后按tab键把光标切到可以在下方的选择栏
- 重定向
重定向的概念就是,在终端正常一个命令敲下去,命令的结果会立刻显示在终端中,然后如果重定向的话,就是把这个命令输出的结果不在终端显示了,显示到你重定向的文件中,重定向也就是更改一下命令结果输出的位置
2-3 Shell命令入门
- 工作模式
交互式:一条一条的地解释执行用户的命令
批处理:一次性执行脚本里的命令
几种常见的Shell
bash :Linux 默认使用的shell
sh :Steve bourne 开发,最初的Unix shell
ash :由Kenneth Almquist 编写,只有24个命令
csh :以William Joy 为代表47位作者编写
ksh :Korn shell 的编写
//写好一个程序文件,需要用解释器编译,这时候就可以使用这几种解释器去解释文件了
echo $SHELL //这一句可以查看$SHELL这个环境变量所安装的解释器,也就是bash解释器,不同的解释器语法命令可能有所不同
//知道预装的bash解释器之后,
bash hello //在这之前把程序文件写入到hello这个文件中,在这时,bash解释器就把hello这个文件用bash解释器的语法解释以后在终端中输出结果
//一般来说不这么使用脚本文件,首先是在脚本文件中开头加入解释器的路径:#!/bin/bash,这样的话这个文件会自动使用该路径的解释器,然后保存文件之后在给文件加上可以执行的权限
chmod +x hello.c //这句命令就是给这个hello.c的文件加上x也就是可执行的权限,到这里用ls查看这个文件,这时就会看到这个文件有高亮显示,然后直接在命令行中执行这个文件
./hello.c //这句话就是在这个文件的当前目录下执行执行这个文件,就会输出这个结果,这个结果和刚才直接bash hello 的效果都一样
在Vim中编写程序文件
#!/bin/bash //这一句话说明
echo hello shell //echo 就是打印这句话
echo Now time is:$(date) //echo打印Now time is:然后想要打印出当前时间,需要date这个shell命令,但是命令不能直接使用,必须再前边加一个$美元符号,在加一个括号,才能正常打印date命令的结果,否则打印的是Now time is:date
TIME=$(date) // 这是把date这个命令的结果给TIME,算是定义一个变量TIME接收date的值 ,注意这种赋值的时候=等于号前后不能有空格,这是vim编辑器的特殊地方,空格不能随便用
echo new time is:$TIME // 这时候打印这一句和刚才打印那一句是一样的效果
使用音乐播放器播放音乐
apt install mplayer //安装音乐播放器mplayer
mplayer files //使用myplayer打开这个files文件
mplayer -vo caca files //使用mplayer,以-vo caca格式打开files,也就是以ASCII码的方式打开
//在编辑器中 # 是注释的一行
for i in 1 2 3 4 5
do
echo $i
done
for i in {1..10}
do
echo $i
done
2-4 Vi及Vim入门
gedit 文本文件打开
-
vim 和 vi
vim是vi的升级版本,兼容vi的所有指令
支持多级撤销,而vi按u只能撤销上次命令
vi只能运行与类Unix,vim多种OS运行毫无压力
语法加亮
可视化操作
可通过vimrc文件配置更加高级功能 -
vim有各种模式
首先打开的是命令模式
- 命令模式下可以上下左右移动光标,可以敲击命令
- 命令模式下敲 i 可切换到编写模式
编写完程序,就’shift+:‘,这个时候可以敲击命令,然后按‘wq’,w是保存,q是退出,wq是保存并退出,q! 是不保存退出
命令模式下:
按 ‘o’:在光标该行的下一行插入一个空白行并进入编辑模式,然后光标停在插入这行的开头
按 ‘ctrl + : ‘:弹出命令行,然后输入set nu 会显示行号,暂时性的显示
按 ‘ctrl’+‘J’:底部显示文件当前的状态
按’ctrl + b’ :一次向下翻页一行
按‘ctrl’+‘U’ :一次向上滚动半页
按’ctrl’+‘D’ :一次向下滚动半页e
按’shift +j’ :到最后一行
按’1000’然后’shift +j’ :跳到1000行
按’H’:当前屏幕的第一行
按’L’:当前屏幕的最后一行
按’X’:剪切一个字符
按’P’:粘贴字符
按’5’ 然后按’X’:向后剪切5个字符
按’D’ :删除当前光标到这一行结尾所有内容
按’D’+‘W’ :删除(剪切)光标所在的单词
按’5’ +‘D’+‘W’ :删除(剪切)光标往后5个单词
按’DD’ :删除(剪切)光标所在一行
按’5’+‘DD’:删除(剪切)光标所在行开始向下共5行
按’YY’ :赋值当前光标所在行
按’5’+‘YY’: 复制当前光标所在行开始向下共五行
按’U’ :多级撤销,无限次的撤销
修改vim配置文件
vimrc
2-5 Make工程管理
当我们需要在linux下开发一个软件工程与多个文件,这个时候就是使用make管理了,在window下开发软件工程,就是vc++6.0,等,这里只需要使用IDE不需要理解底层是怎样的
但是在linux环境下,默认安装的有一个gcc,访问c语言和c++的语言编译器,
gcc -o hello test.c //gcc 是第一个参数,代表着使用gcc编译器编译,-o是第二个参数,hello是第三参数,代表着可执行文件的名字,test.c是第四个参数,代表着是所要编译的源文件,但是这样每次编译都是这么写会很麻烦
//编写一个Makefile文件,进行编译文件,想要使用Makefile编译文件,首先是在工程文件目录下新建一个名为:Makefile的文件,然后vim Makefile 用vim打开这个文件
//然后写入
hello:main.o //第一行是生成的应用程序或者目标文件叫hello 这个文件是main.o生成的,然后如果有很多.o文件,都要写出来
cc -o hello main.o//第二行是规则 ,cc是gcc编译器,然后是-o hello main.o ,main.o也就是hello的依赖文件 ,到这里编译命令就生成了
main.o:mian.c
cc -c main.c
clean:
rm hello main.o //然后第三行是一个清除命令
//到这里一个简单的编译文件就洗完了,然后保存退出
- 在Makefile文件写完以后,在这工程目录下
make //make 这个命令,会直接在当前工程目录下直接寻找Makefile文件 ,根据Makefile的编译规则和依赖关系进行编译文件
make clean //就调用了Makefile文件里的clean,然后删除了Makefile生成的文件
再新建一个hello.c
然后在文件中简单写个函数
#include <stdio.h>
void hello(void)
{
printf("hello hello");
}
然后在touch一个文件叫hello.h
然后写入
void main(void);
然后回到hello.c
把刚才新建的hello.h头文件,加到上边
#include <stdio.h>
#include "hello.h"
int main()
{
printf("hello world");
hello();
}
然后到Makefile文件中,重新修改编译链
hello:main.o hello.o //hello又依赖了hello.o
cc -o hello main.o hello.o //然后gcc编译并链接hello.o
main.o:main.c
cc -c main.c
hello.o:hello.c //
cc -c hello.c
clean:
rm hello main.o
然后保存,并make一下
make
//结果是
cc -c hello.c
cc -o hello main.o hello.o
此时ls一下显示的文件
hello.c hello.h hello.o main.c main.o Makefile
此时可以运行一下hello文件
./hello //运行这个文件
形成编译链之后再修改文件也不需要重新删除可执行文件,直接修改文件内容,然后运行就是运行的修改后的内容
实操结果
- 首先我在Desktop目录下新建code目录,用于存放此次make工程管理的整体文件
- 然后我在code目录下新建 app目录 driver目录 然后是main.c 文件和 makefile 文件
- 然后我在app目录下新建 hello.c文件和hello.h文件
- 在driver目录下新建oled.c文件和oled,h文件
(大概意思很明确app目录模拟存放软件方面的文件,driver目录模拟存放硬件驱动方面文件)
- 然后我在code目录下新建 app目录 driver目录 然后是main.c 文件和 makefile 文件
- 所需要用的文件都已经新建完毕
下边开始写每个文件的内容
首先是是从hello.c和hello.h开始 - hello.c
- 首先程序写的是c语言标准,以C语言为例,第一句包含stdio头文件,然后是hello.h头文件的地路径,注意用的是“” 引号,然后路径为当前路径下的hello.h,这个当前文件是hello.c来说的,因为这程序是写在了hello.c文件中和hello.h文件在同一目录下 , 第二句可以不用写,注意函数定义的是void和void,头文件也这么写
- hello.h
- hello.h文件就很简单了,就是声明一下函数,注意是void,和void
- 然后是oled.c和oled.h
- oled.c
- 这里的说明就和hello.c文件类似了
- oled.h
- 然后最重要的main.c
- main.c
- main.c中首先要说明使用函数的文件都是啥,这里的引用标准库可以直接用大于号小于号,但是下边引用头文件,是用引号,然后还是绝对路径必须是绝对路径,然后就没啥了
-
- 然后是最最最重要的makefile文件
- 然后是最最最重要的makefile文件
- Makefile文件里,首先是test是这个makefile文件生成的可执行文件的名称叫test,随便起个啥名字都行,然后是生成文件所依赖的文件,还要是点o文件,也就是说这个main.c文件所需要用到的文件生成的点o文件都要写在这里,然后下一行是这个文件的编译链,cc -o 是用gcc编译然后是-o是编译点o文件,然后test是编译生成的最终文件,然后是生成这个文件所需要的所有点o文件,
- 下面是每个文件的点o文件的依赖文件,也就是说每个点o文件都是对应的点c文件生成的,所以要在这里生成点o文件就必须要编译对应的点c文件,也就是cc -c 意思是用gcc ,-c意思是编译c文件,然后后变就是对应的c文件的,除了main.c其他的都要说明点c文件的路径,
- 最后是每个Makefile文件都有的clean,也就是清除文件,用于清除Makefile运行生成的文件比如点o文件和可执行文件test,都要写在在这里,使用的时候就是,make一下生成了可执行文件还有很多点o文件,然后你使用完之后,就不用这些点o文件和可执行文件,不清理又会占用很多内存,所以说,用完之后就,make clean 一下,就把生成的文件清除掉。
注意
每个类型的文件都有很多坑(截完图才想起来可以复制粘贴写成代码块。。。。。。)
到此,vim,makefile,都大致有个了解了。。。
3-1什么是环境变量
前面学习脚本的时候可以定义变量,比如
PH=7.0 //终端输入这个,就定义了这个PH变量,值为7.0
echo $PH //echo这个变量,前边加上$美元符号,就可以打印这个变量值
PH-7.1 //再次修改这个变量
echo $PH //修改后再次打印这个变量,就直接打印修改后的值
windows下也有很多环境变量,在高级系统设置里就有path,环境变量
echo $PATH //打印系统下的环境变量路径
echo $HOME //在root用户操作时,HOME是/root,打印出来的是/root
echo $LOGNAME //在root用户操作时,LOGNAME是root,打印结果是root
su jyl //切换到jyl,也就是普通用户登录的时候
echo $HOME //打印HOME是/home/jyl
echo $LOGNAME //打印LOGNAME,结果是jyl
-
Shell下的环境变量
环境变量一般为大写字母,通过echo查看
环境变量何时生成的?
Ubuntu启东时,初始化或启动脚本会创建大量环境变量并对其赋值
每次用户启动一个新程序,新程序会继承启动程序的环境变量
shell启动过程中,不同登录用户会启动不同的脚本,生成一些环境变量,
环境变量根据用户不同会发生变化(eg:USER/HOME)
提示符
一般用户为:$
root用户为: # -
Shell启动过程
内核镜像(如/boot/vmlinux)加载内存启动
内核启动完毕后,开启第一个init进程
进程init扫描/etc/inittab,找出可用的终端及其属性,一旦找到活动的终端,mingetty将会启动login提示符合口令,提示用户输入用户名和口令
将用户和口令传递给login,验证是否匹配,若匹配,login将会自动转到其他$HOME
将控制权移交给所启动的任务,如在/etc/passwd文件中用户的shell为、bin/bash -
Shell启动过程(2)
Shell将会读取文件etc、profile和/.profile 中系统和用户定义的环境变量,给出提示符:“$”或“#”
其他一些用户登录时会启动一些额外的脚本
/etc/profile.d
有的系统会提供/etc/bashrc脚本(Fedora),系统中任何用户每次启动bash shell时都会执行;系统登录用户时也会执行
每个用户的home目录都包含一个.bashrc脚本,用户登录或者在当前用户下启动shell时都会执行
脚本启动大致流程
./etc/profile->/.profile->/etc/bashrc->-/.bashrc
有些环境变量,你需要考虑是全局还是当前用户独享… -
如何声明一个变量
- 修改/etc/bashrc或/etc/profile
- 注意修改profile脚本需要重新启动一下,切换用户也要重新启动一下,如果在etc文件目录下source profile,就可以了
- 在不同文件设置的变量,作用域都不一样
-
添加想运行的可执行文件,作为环境变量,然后就可以在各种地方使用这个可执行文件
环境变量还不是很理解
3-2 文件系统管理
- 文件系统的基本概念
虚拟文件系统,不同类型文件的操作接口给 - 文件类型分类
- Linux目录介绍
文件系统把内存分块,然后给分的每一块进行标号 - 文件系统的分类
- 一切皆文件
- 普通文件
- 目录
- 链接文件 :就像windows的快捷方式
- 设备文件 :
- 套接字
- 管道
这一节也迷迷糊糊,懂了又好像没懂
用户账户管理
linux作为多用户多任务的操作系统,允许多个用户登录的,
- 用户
管理员root:具有系统所有权限,uid为0
系统用户:保障系统运行的用户,uid为1-499
普通用户:部分权限受限,uid范围:500-60000
-
用户组
普通用户组:可以加入多个用户
系统组:一般加入一些系统用户
私有组:创建用户时,若没指明所属组,则会定义一个私有组,名称与用户名相同- 当把其他用户加入到私有组,私有组就变成了普通用户组
-
用户常用的配置文件
- /etc/passwd
格式:account :password:UID:GID:GECOS:dirstory:shell
account:用户名或账号
password:用户密码占位符
UID:用户的ID号
GID:用户所在组的ID号
GECOS:用户的详细信息,(如姓名,年龄,电话等)
diretory:用户的家目录
shell:用户所在编程环境 - /etc/passwd
-
/etc/shadow
格式:account :password:最近更改密码的日期;密码不可的天数;密码需要重新更改的天数;密码更改的警告期限;密码过期的宽限时间;账号失效日期;保留 -
用户组配置文件
/etc/group
格式:group name:password:GID:user list
group name 组名
password 组密码
GID :组的ID号
user list :以group name 为附加组的用户列表
/etc /gshadow -
用户组设置
添加用户
添加用户的时候可以给他分配一个组
usermod -g testtrem wukong //
usermod -u 2000 wukong //
userdel -f wukong //强制删除用户,但是目录没有删掉
userdel -
useradd -g jyl -c "Jiang_double" -m hu
userdel -r hu
useradd -g testterm -c "seng.sga" -m seng
用户管理的那几个配置文件,也能理解,就是没记住,回头在看一遍这一节
文件访问权限
- 文件访问权限
每个文件都有一个所有者
每个文件或目录都有一个指派给他们的组
Linux根据文件的所有者和所属组来确定谁可以访问 - 文件的3种权限
读:- r
写:w
执行:x
rwx-xr-r
u-所有者;g-组;o-其他用户;a-所有用户
crw-r--r-- ....//c代表字符文件
drw-r--r-- ....//d带包是一个目录,也就是一个文件夹
brw-r--r-- ....//b代表是一个doc文件
lrwxrwxrwx ....//l代表是一个链接文件
更改文件组的属性
groupadd testteam //groupadd这个命令新建一个组,这个组的组名是testteam
chown jyl:testteam hh // 然后chown更改文件的组,jyl是原来的组,然后:冒号,然后是想要更改好的组名,testteam,这个组名,然后是想要更改的文件名,也就是hh这个文件
- 修改用户和用户组的权限
改变文件所属关系
chown user:group file
给其它用户添加写权限
chmod a+x file
chmod 666 file
权限共有----------
10位标志
除去最左边这一位,右边共9位,这9位可以按照二进制来进行权限赋值
比如-rwx–xr–,三位为一个二进制转换为十进制,分别是代表714 所以想要文件权限为这个形式可以使用这一句chmod 714 file
除去左边第一位开始,前三位为所有者的权限,然后中间三位是用户组的权限,后三位是其他用户的权限
给用户组添加写权限
删除用户的执行权限
chmod u+x hh
chmod g=rw hh
chmod o+x hh //加一个执行权限
chmod o+w hh //加一个写权限
chmod o-w hh //去掉写权限
chmod o=rwx hh //加上读写执行权限
chmod a-w hh //去掉所有文件的写权限
进程管理
- 进程是什么
- 进程的基本概念
进程是运行起来的程序,使用唯一的PID来标示
操作系统基本的任务管理单元
进程状态:运行态、睡眠态、停止态、僵死态
进程的优先级 - 守护进程
在linux中,系统服务通常是以后台运行的进程存在,系统启动时会自动运行这种后台守护进程
一旦前台有指令或请求,守护进程即可做出相应,提供相关服务
cpu抢占
- 进程的基本概念
ps //查看当前的进程
进程一般都在
/etc/init.d
查看当前全部进程 ps -A 这里有一个守护进程,检测端口是否插拔的进程
ps -A | grep udev
详细查看
ps u
ps aux
ps -A
ps -A | grep udev
杀进程
kill 285 //这个285是进程的PID
有的进程杀掉脚本重启的时候回重新出现,有的进程只启动一次,杀掉之后就没了
使用proc查看进程信息
使用top查看CPU使用率
top -d 2 -p 123 -p 321
top -d 2 //每两秒刷新一下
top -d 1 -p 123 -p 321 -p 345 //每一秒刷新一次123和321和345这三个进程,这三个数字是这对应的进程的PID
top //这个命令查看当前系统cpu的利用率
在top内容中敲击f 进入交互模式,更改cpu的刷新率
3-6 软件的编译、安装及卸载
linux下的软件编译安装卸载,apt的软件源更新较慢,可以到软件的官网进行安装包下载,
AUTOMAKE\AUTOCONF
Makefile的作用:自动编译和链接
使用Automake和Autoconf工具生成
Makefile
生成符合GNU规范的makefile
可以使用./configure;make;make install 安装
默认安装目录
/usr/local/bin
当然我们也可以自己制定安装目录,但是PATH要自己设置
Makefile
安装步骤
下载源代码包
生成脚本文件:AUTOCONF
配置
./configure
安装
make install
添加环境变量
PATH
清理临时文件
make clean
卸载
make uninstall
复制源代码包到文件路径
然后解压
然后打开原码包
找config文件
找不着的话就 autoconf 这个命令生成config文件
然后就会有这个configure这个脚本 ,configure这个文件是高亮的可执行文件
然后./configure 这一句命令运行一下这个config文件
就生成了Makefile文件
然后make 一下 make -j4 可以加速编译
然后这一句话 make install 就是安装这个软件了
安装完还要添加环境变量
vim ~/.bashrc //这一句可以直接打开环境变量的文件,然后到最后面进行添加环境变量
添加环境变量:
export PATH=/opt/git/bin:$PATH //这句话添加到bashrc文件的末尾处,export不能少,然后PATH紧接着等于号,不能有空格,然后是新版本的安装路径,/opt/git/bin然后是冒号:然后是$PATH这个的意思是新版本的路径依赖于$PATH这个环境变量,然而这个环境变量是啥呢,其实就是老版本的路径
到这个时候软件就安装成功了
- 卸载
使用apt安装软件
-
使用deb包不方便的地方
作为底层工具,不能处理依赖关系
apt是上层工具,可以解决复杂依赖关系,自动安装 -
APT包管理器(Advanced Packaging Tool)
自动下载、配置、安装二进制或源码包
工作在客服端/服务器模式
服务器:保存最新的Linux软件包,在Ubuntu中称为源,APT分析每个软件包头信息并存放在下载列表中/etc/apt/sources.list 这个文件中存储的是服务器的源地址
也就是说,当你使用apt install 下载软件的时候,然后Ubuntu就会打开这个文件,然后找到对应的下载地址,进行下载,这个文件的内容都是一些软件的下载路径客户端:本机软件与下载列表对比,确定哪些软件(及其依赖包)需要下载、那些需要升级。若要安装的软件在源中没有对应版本,就需要自己添加源或者手动下载了
- 制作deb软件包
步骤
安装工具:apt install checkinstall dh-make
./configure --prefix=/home/tools
make
checkinstall
安装:dpkg -i xxx.deb
- 制作deb软件包
-
APT的命令
检查依赖性:apt check
安装 ;apt install
更新本地数据库: apt update
软件升级 :apt upgrade
卸载 :apt remove/autoremove
清除本地已经下载并安装的包:apt clean
还可以添加国内的服务器提供的源,阿里云源,搜狐源,163源,等,速度会比较快,就是把这些服务器的源地址,复制粘贴到/etc/apt/sources.list这个文件下,然后更新一下apt的源
3-9 使用wine安装Windows软件
有些软件只发行了Windows版本,但没有发行Linux版本,那这个时候想在Ubuntu系统中使用这个软件只能通过wine,相当于一个模拟器一样
-
wine
能够在多种可移动操作系统接口上运行Windows应用的兼容层,
wine is not an emulator
运用API转换技术LinuxAPI<-WindowsAPI -
安装
apt install wine
大概三百多兆,需要的时间比较久
安装界面和Windows下差不多,但是会有一些bug卡顿之类的
- Cygwin
可以在Windows下运行Linux软件,也是一种模拟环境
4-1NFS服务器配置及使用
网络服务的配置及使用
- NFS服务器配置及应用
网络服务系统,可以通过网络访问系统,和本地访问系统很相似,
安装
apt install nfs-kernel-server
设置共享目录
vim /etc/exports //打开这个配置文件
home/nfs *(rw,sync,no_subtree_check,no_root_squash) //把这一行写在最末尾处,记得在nfs后边空一格,然后加星号在往下写,星号代表通配符后边是权限,然后退出保存
/nfs*(rw,sync,no_root_squash) //这一句和上一句一个意思,加上边这个就不写这个了
启动NFS服务器
service protmap restart //服务器启动 这句标记为1
etc/init.d/protmap restart //和上句一样 这句标记为1'
service nfs-kernel-server restart //服务器连接nfs这句标记为2
etc/init.d/nfs-kernel-server restart //这句标记为2'
//可以1完了2,和1'完了2'一样,如果不行,那就121'2'两套全打一遍就好了
//然后nfs网络配置就通了
ps -A | grep nfs //就可以看到这个nfs的
- 客户端挂载
想要使用这个nfs共享,另一台电脑也要进行以上操作,然后还要多一步挂载,
挂载
mount -t nfs 192.168.21.153:/nfs /mnt
嵌入式开发板挂载
mount -t nfs 192.168.21.153:/nfs /mut -o nolock
显示共享出来的目录
showmount
查看挂载情况
df
卸载
umount /mnt
客服端步骤
首先在nfs原来的服务器查看服务器ip
ifconfig //这一句可以查看
然后下边在客户端操作
进入root目录
mount -t nfs 192.168.21.153:/home/nfs/mnt //这里的ip地址就是nfs主机的ip地址也就是刚才在设置nfs的时候ifconfig查看到的ip
cd mut/ //进入到这个文件夹里,这里的内容就是通过nfs和主机共享的文件,随意编写文件,都会在主机的/nfs目录和从机的mut/之间共享文件
4-2 Samba服务器配置及应用
- 安装
apt install samba //安装samba
apt install smbfs //安装smbfs
- 创建共享目录
cd opt/ // 到opt目录下
mkdir share // 新建一个目录
chmod 777 /opt/share //执行权限
- 修改samba配置文件
vim /etc/samba/smb.conf //打开这个config文件,添加共享的选项,然后到最后边写入
[share]
path = /opt/share
available = yes
browseable = yes
public = yes
writable = yes
- 创建samba账户
touch /etc/samba/smbpasswd
smbpasswd -a wit
启用这个服务
/etc/init.d/samba restart //启动samba服务
/etc/init.d/smbd restart //上边这一句不行话,那就是这一句,也可以自己跳到init.d文件下看一下
查看这进程
ps -A | grep sm //通过管道查看这个进程
这个进程正常运行的话,就是可以直接在Windows下在计算机的地址栏填写samba的ip地址进入到由samba服务的共享文件夹,和nfs一样可以直接进行文件实时共享
在计算机地址栏中输入
\192.168.56.128 就可以看到这个share文件
-
在Ubuntu中opt目录下share目录中新建一个main.c文件写入内容
然后到Windows下查看这个share文件夹中也会有一个main.c文件内容同样是和Ubuntu中的Share文件夹中的main.c内容一样
-
在Windows下还可以将这个文件目录映射成盘符,下次打开就不需要输入地址了,直接就会显示盘符,点击轻松访问,有一个映射成网络驱动器就可以了
就是这样:
-
也可以在另一个Linux系统挂载使用
打开另一个Linux
mount -t smbs -o username=jyl,passwd=777777 //192.168.158/share /mut //这行命令的意思是mount 挂载 username 的参数是开启这个samba的服务用户名,然后是passwd密码,然后是双斜杠// 下边输入开启samba服务的主机的地址,然后是一个斜杠/然后share是主机的共享目录名称,然后是空格 ,然后/mut说明的是挂载到从机的哪个目录上
在另一台Linux系统测试samba失败提示mount point does not exist
这个Linux是一台ros小车的操作系统,刚测试的时候apt进程被占用,删了好几次进程,好了之后下载就正常了,然后使用apt下载samba然后输入那个客户端配置命令,就是不行
4-3 远程SSH登录
远程登录,很多时候使用的时候是都是不直接打开使用,而是远程登录操作
-
什么是SSH
Secure Shell 的缩写
建立在应用层和传输层基础上的安全协议
防止网络传输过程中的信息泄露 -
为什么他能做到?
传输数据进行加密
登录采用两种级别的安全验证 -
- 基于口令的安全验证
-
- 基于密匙的安全验证
-
SSH服务配置使用
- 安装
apt install openssh-server
- 开启
service ssh restart
开启之后可以看一下管道
ps -A | grep ssh
- 登录
ssh serverip //这个sreverip是要远程登录的服务器的ip,然后就直接登陆成功了
登录之后的效果,就是直接操作登录上的这太电脑一样
-
还可以在Windows下登录这个服务器,使用putty
-
或者vmware都可以远程登录
-
密匙的安全验证
使用一对密匙(公匙、私匙进行验证)
id_raspub <————>id_ras
public就是公钥放在服务器上,另一个是私钥放在终端上
具体步骤
在服务端生成一对密钥,然后把公钥复制给客户端
- 服务端操作
cd ~ //在普通用户下就可以进入到这个目录里,然后一定是 ls -al 才能看到 .ssh文件
ls -al
cd .ssh/
ssh-keygen //生成密钥,然后三个确认键,然后中断就会弹出 :下边这个四行
Generating public/private rsa key pair. //
Enter file in which to save the key (/home/jyl/.ssh/id_rsa): //这里有个目录就是密钥的保存路径
Enter passphrase (empty for no passphrase): //
Enter same passphrase again: //
ls //然后还在这个目录下 ls一下,就出来了两个文件:
id_rsa id_rsa.pub //这就是两个文件,pub是公钥,没有pub的是私钥 私钥比较长,公钥比较短
cat id_rsa //cat一下就可以看出来了
cat id_rsa.pub //这里边就是私钥,然后复制下来到客户端
- 客户端操作
cd / //切换到根目录,然后新建一个.ssh 目录
mkdir .ssh //新建一个.ssh目录
cd .ssh/ //切换到这个.ssh目录下
touch authorized_keys //新建一个文件,用于存放公钥
vim authorized_keys //编辑这个文件,把公钥的内容复制进来
chmod 600 authorized_keys //给文件加权限,必须是600 因为别的用户不能有任何权限
这个测试也失败了,同样是在ros小车的linux系统中,给anthorize_keys加权限加不上去
4-4 FTP服务器使用
-
FTP协议
File Transfer Protocol
两台计算机传送文件的协议
客户端可以通过FTP命令从服务器下载、上传文件、修改目录 -
FTP服务器安装及配置
-
安装
apt install vsftpd //安装这软件,这个软件会在后台守护进程
- 配置
创建账户和密码
useradd -d /home/userftp -s /bin/bash -m userftp //ftp需要账号登录的,所以需要用这一行创建账户,这句运行以后右上角账户设置会出现一个名叫userftp的账户
passwd userftp //给这个账户设置密码,会重复确认密码
- FTP用户配置
vim /etc/vsftpd.conf //打开这个文件,打开以后
vim /etc/allowed users //打开以后在里边填写你想让登录的用户首先是就是userftp root 还有其他用户也可以
vim /etc/ftpusers //这里边是黑名单,不允许登录的用户
- 权限配置
vim /etc/vsftpd.conf //还是打开这个文件,修改下边这两个参数使能
write enable=YES //允许上传 ,可以根据实际需求是否允许别人上传文件
local enable=YES //允许登录
- 开启FTP服务
service vsftpd restart //开启这个服务了
ps -e |grep ftp //查看一个进程,可以看到有一个守护进程
- Window客户端
Windows下可以使用WinSCP这个软件进行使用,主机名称为服务端的ip地址,端口号是21,用户名是userftp 密码是userftp的密码登录查看 - Linux客户端
linux下登录,登录后的使用方式,是通过命令操作的
ftp //直接敲击ftp 入口会变成ftp>
oepn 192.168.56.158. //这一句就是打开连接远程服务器,然后会让输入用户名userftp,然后让输入密码,会显示启动成功,使用二进制传输文件
常用的FTP命令:
open : 连接远程服务器
close :断开远程服务器
ls :列出服务器当前目录
cd :在服务器上改变工作目录
lcd :在本地改变工作目录
get :从服务器传送指定文件到本地
put :从本地上传指定文件到服务器
? :显示本地帮助信息
! :转到shell中 :转到shell在转回来需要重新连接