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的内核
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文件里,首先是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/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文件写入内容 然后到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就是公钥放在服务器上,另一个是私钥放在终端上
具体步骤 在服务端生成一对密钥,然后把公钥复制给客户端
- 服务端