Linux+Ubuntu

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的镜像文件,然后保存到一个固定的,没有中文的路径。
    官网:
    Linux+Ubuntu_第1张图片
    路径:
    Linux+Ubuntu_第2张图片

  • 第二步打开VMware - 新建虚拟机 - 安装程序光盘映像文件(iso)选择刚才保存的镜像文件
    Linux+Ubuntu_第3张图片
    下一步之后设置系统全名,用户名,密码
    Linux+Ubuntu_第4张图片
    下一步给虚拟机命名,并设置系统文件保存路径
    Linux+Ubuntu_第5张图片
    下一步设置磁盘内存大小,这里的20g并不是一下从真实磁盘分离出来,而是慢慢蚕食磁盘,而且将磁盘存储为一个文件,多个文件都无所谓,一个更方便Linux+Ubuntu_第6张图片
    选择Ubuntu的硬件配置,声卡,网络
    Linux+Ubuntu_第7张图片
    点击完成,VMware自动开机这个Ubuntu电脑
    Linux+Ubuntu_第8张图片

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的课程

Linux+Ubuntu_第9张图片

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 " >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
Linux+Ubuntu_第10张图片
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 
void hello(void)
{
	printf("hello hello");
}

然后在touch一个文件叫hello.h
然后写入

void main(void);

然后回到hello.c
把刚才新建的hello.h头文件,加到上边

#include 
#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目录模拟存放硬件驱动方面文件)
  • 所需要用的文件都已经新建完毕
    下边开始写每个文件的内容
    首先是是从hello.c和hello.h开始
  • hello.c
    Linux+Ubuntu_第11张图片
    • 首先程序写的是c语言标准,以C语言为例,第一句包含stdio头文件,然后是hello.h头文件的地路径,注意用的是“” 引号,然后路径为当前路径下的hello.h,这个当前文件是hello.c来说的,因为这程序是写在了hello.c文件中和hello.h文件在同一目录下 , 第二句可以不用写,注意函数定义的是void和void,头文件也这么写
  • hello.h
    Linux+Ubuntu_第12张图片
    • hello.h文件就很简单了,就是声明一下函数,注意是void,和void
  • 然后是oled.c和oled.h
  • oled.c
    Linux+Ubuntu_第13张图片
  • 这里的说明就和hello.c文件类似了
  • oled.h
    Linux+Ubuntu_第14张图片
  • 然后最重要的main.c
  • main.c
    Linux+Ubuntu_第15张图片
  • main.c中首先要说明使用函数的文件都是啥,这里的引用标准库可以直接用大于号小于号,但是下边引用头文件,是用引号,然后还是绝对路径必须是绝对路径,然后就没啥了
    • 然后是最最最重要的makefile文件
      Linux+Ubuntu_第16张图片
  • 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+Ubuntu_第17张图片
    虚拟文件系统,不同类型文件的操作接口给
  • 文件类型分类
  • 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/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
  • 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文件写入内容
    Linux+Ubuntu_第18张图片
    然后到Windows下查看这个share文件夹中也会有一个main.c文件内容同样是和Ubuntu中的Share文件夹中的main.c内容一样
    Linux+Ubuntu_第19张图片

  • 在Windows下还可以将这个文件目录映射成盘符,下次打开就不需要输入地址了,直接就会显示盘符,点击轻松访问,有一个映射成网络驱动器就可以了
    Linux+Ubuntu_第20张图片
    就是这样:
    Linux+Ubuntu_第21张图片

  • 也可以在另一个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加权限加不上去

Linux+Ubuntu_第22张图片

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在转回来需要重新连接

你可能感兴趣的:(linux,ubuntu,开发语言,嵌入式硬件)