Linux新手快速入门(万字超详细)

Posted 杰仔正在努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux新手快速入门(万字超详细)相关的知识,希望对你有一定的参考价值。

Linux系统新手入门


文章目录


前言

Linux是一套免费使用和自由传播的类Unix操作系统,是一个POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统

一、Linux的文件和目录结构

1.1 Linux的文件

1.2 Linux的目录结构

目录数据
/root/根用户(超级用户)的主目录
/lib/系统开机所需要最基本的动态连接共享库
/bin/存放着最经常使用的命令
/sbin/存放的是系统管理员使用的系统管理程序
/home/存放普通用户主目录
/mnt/该目录中通常包括系统引导后被挂载的文件系统的挂载点
/boot/包括内核和其它系统启动期间使用的文件
/etc/所有的系统管理所需要的配置文件和子目录
/usr/用户的很多应用程序和文件都放在这个目录下
/proc/一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
/srv/该目录存放一些服务启动之后需要提起的数据
/tmp/存放临时文件

二、 VIM编译器

2.1 了解VIM编译器

vim 是一个功能强大的多模式编辑器, 是 Linux/UNIX 上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件。Vim 没有菜单,只有命令

2.2 一般模式

在一般模式中我们可以进行复制、粘贴、删除等动作,但是不可以进行编辑文件内容,需要进入编辑模式才可以进行文本编辑

语法功能描述
yy复制光标当前行
y 数字 y复制一段(从第几行到第几行)
p箭头移动到目的行粘贴
u撤销上一步
dd删除光标当前行
d 数字 d删除光标(含)后多少行
x剪切一个字母,相当于 del
X剪切一个字母,相当于 Backspace
yw复制一个词
dw删除一个词
shift+6 (^)移动到行头
shift+4 ($)移动到行尾
1+shift+g移动到页头,数字
shift+g移动到页尾
数字+shift+g移动到目标行

2.3 编辑模式

当我们要退出这个编辑模式的时候我们要按下[ESC]按键才可以退出

按键功能
a当前光标后
A光标所在行最后
i当前光标前
I光标所在行最前
o当前光标行的下一行
O当前光标行的上一行

2.4 指令模式

命令功能
:w保存
:q退出
:!强制退出
:wq!保存修改并退出

三、网络配置

3.1 配置网络ip地址

查看当前网络ip

ifconfig

测试网络之间的连通性

ping www.baidu.com

修改ip地址
1)、查看IP配置文件

vim /etc/sysconfig/network-scripts/ifcfg-ens(XX)

2)、修改以下值

#确保ONBOOT=yes
#确保BOOTPROTO="static"
#以下字段没有的话要直接添加
#IP 地址
IPADDR=192.168.xxx.xxx (添加自己想要的ip地址)
#网关
GATEWAY=192.168.1.2
#域名解析器
DNS1=192.168.1.2

3)、编辑结束之后,按下esc,输入:wq就可以保存退出了

4)、执行以下命令重启网络

service network restart

5)、然后再次输入ip a再次查看修改成功与否

3.2 配置主机名

1)查看当前服务器主机名称

hostname

2)编辑hostname文件

vi /etc/hostname

四、系统管理

4.2 systemctl

基本语法

systemctl  start | stop | restart | status        服务名

案例

systemctl start firewalld  (启动防火墙服务)
systemctl stop firewalld   (停止防火墙服务)

4.3 设置后台服务的自启配置

基本语法

systemctl list-unit-files           (功能描述:查看服务开机启动状态)
systemctl disable service_name    (功能描述:关掉指定服务的自动启动)
systemctl enable service_name     (功能描述:开启指定服务的自动启动)

案例

systemctl enable firewalld.service   (开启防火墙服务的自动启动)
systemctl disable firewalld.service  (关闭防火墙服务的自动启动)

4.4 关机重启命令

选项功能
sync将数据由内存同步到硬盘中
halt停机,关闭系统,但不断电
poweroff关机,断电
reboot重启
shutdown [选项] 时间now/时间

五、帮助命令

5.1 获取帮助信息

1)基本语法

man[命令或配置文件] 

案例

man ls

2)基本语法

help命令 获取shell内置命令的帮助信息

案例

help cd

3)常用快捷键

常用快捷键功能
ctrl + c停止进程
ctrl+l清屏,等同于 clear;彻底清屏是:reset
tab 键提示(更重要的是可以防止敲错)
上下键查找执行过的命令

5.2 文件目录类

5.2.1 pwd 显示当前工作目录的绝对路径

基本语法:
pwd (功能描述:显示当前工作目录的绝对路径)

案例

pwd /root

5.2.2 ls 列出目录的内容

基本语法:
ls [选项] [目录或是文件]

选项功能
-a全部的文件,连同隐藏档
-l长数据串列出,包含文件的属性与权限等等数据

5.2.3 cd 切换目录

基本语法:
cd[参数]

参数功能
cd 绝对路径切换路径
cd相对路径切换路径
cd~ 或者 cd回到自己的家目录
cd-回到上一次目录
cd…回到当前目录的上一级目录
cd -P跳转到实际物理路径,而非快捷方式路径

5.2.4 mkdir 创建一个新的目录

基本语法:
mkdir [选项] 要创建的目录

选项功能
-p创建多层目录

案例

mkdir book (创建一个目录)
mkdir -p book/story/xiyangyang (创建一个多级目录)

5.2.5 rmdir 删除一个空的目录

基本语法:
rmdir 要删除的空目录

案例

rmdir book/story/xiyangyang

5.2.6 touch 创建空文件

基本语法:
touch 文件名称

案例

touch book/story/xiyangyang.txt

5.2.7 cp复制文件或目录

基本语法:
cp[选项] XXX YYY (复制XXX文件到YYY)

选项功能
-r递归复制整个文件夹

案例

cp book/story/xiyangyang.txt book/huitailang   (复制文件)
cp -r book/huitailang/ ./    (递归复制整个文件夹)

5.2.8 rm 删除文件或目录

基本语法
rm [选项] deleteFile (功能描述:递归删除目录中所有内容)

选项功能
-r递归删除目录中所有内容
-f强制执行删除操作,而不提示用于进行确认
v显示指令的详细执行过程

案例

rm -rf xiyangyang/

5.2.9 mv 移动文件与目录或重命名

基本语法:
mv oldNameFile newNameFile (功能描述:重命名)
mv /temp/movefile /targetFolder (功能描述:移动文件)

案例

mv book/story/xiyangyang.txt book/story/langyangyang.txt   (重命名) 

5.2.10 cat 查看文件内容

基本语法
cat [选项] 要查看的文件

选项功能描述
-n显示所有行的行号,包括空行

5.2.11 more 文件内容分屏查看器

基本语法:
more 要查看的文件

操作功能说明
空白键代表向下翻一页
enter代表向下翻一行
q代表立刻离开 more ,不再显示该文件内容
Ctrl+F向下滚动一屏
Ctrl+B返回上一屏
-输出当前行的行号
:f输出文件名和当前行的行号

案例

more smartd.conf

5.2.12 less 分屏显示文件内容

基本语法
less 要查看的文件

操作功能说明
空白键向下翻动一页
[pagedown]向下翻动一页
[pageup]向上翻动一页
/字串向下搜寻『字串』的功能;n :向下查找;N :向上查找
?字串向上搜寻『字串』的功能;n :向上查找;N :向下查找;
q离开 less 这个程序

案例

less smartd.conf

5.2.13 echo

基本语法:
echo [选项] [输出内容]

选项功能说明
-e支持反斜线控制的字符转换
控制字符作用
\\输出\\本身
\\n换行符
\\t制表符

案例

echo -e “hello\\tworld”

5.2.14 head 显示文件头部内容

基本语法
head 文件 (功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)

选项功能
-n<行数>指定显示头部内容的行数

案例

head -n 2 smartd.conf

5.2.15 tail 输出文件尾部内容

基本语法:
tail 文件 (功能描述:查看文件尾部10行内容)
tail -n 5 文件 (功能描述:查看文件尾部5行内容,5可以是任意行数)
tail -f 文件 (功能描述:实时追踪该文档的所有更新)

选项功能
-n<行数>输出文件尾部 n 行内容
-f显示文件最新追加的内容,监视文件变化

案例

tail -n 1 smartd.conf (查看文件尾 1 行内容)
tail -f houge.txt (实时追踪该档的所有更新)

5.2.16 > 输出重定向和 >> 追加

语法功能
ls -l > 文件列表的内容写入文件 a.txt 中(覆盖写)
ls -al >> 文件列表的内容追加到文件 aa.txt 的末尾
cat 文件 1 > 文件 2将文件 1 的内容覆盖到文件 2
echo “内容” >> 文件采用 echo 将 内容“”追加到文件中

5.2.17 ln 软链接

基本语法:
ln -s [原文件或目录] [软链接名]

删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名/
如果使用 rm -rf 软链接名/ 删除,会把软链接对应的真实目录下内容删掉
查询:通过 ll 就可以查看,列表属性第 1 位是l ,尾部会有位置指向

5.2.18 history 查看已经执行过历史命令

基本语法:
history (功能描述:查看已经执行过历史命令)

案例:

history

5.3 时间日期类

基本语法:
date [OPTION]… [+FORMAT]

选项功能
-d<时间字符串>显示指定的“时间字符串”表示的时间,而非当前时间
-s<日期时间>设置系统日期时间

5.3.1 date显示当前时间

基本语法

选项功能描述
date显示当前时间
date +%Y显示当前年份
date +%m显示当前月份
date +%d显示当前是哪一天
date “+%Y-%m-%d %H:%M:%S”显示年月日时分秒

案例

#显示当前时间年月日
date +%Y%m%d
#显示当前时间年月日时分秒
date "+%Y-%m-%d %H:%M:%S"

5.3.2 date 显示非当前时间

基本语法

选项功能描述
date -d ‘1 days ago’显示前一天时间
date -d ‘- 1 days ago’显示明天时间

案例

#显示前一天
date -d '1 days ago '
#显示明天时间
date -d '-1 days ago '

5.3.3 date 设置系统时间

基本语法:
date -s 字符串时间

案例

#设置系统当前时间
date -s "2017-06-19 20:52:18"

5.3.4 cal 查看日历

基本语法:
cal [选项] (功能描述:不加选项,显示本月日历)

选项功能
具体某一年显示这一年的日历

案例

#查看2022年的日历
cal 2022

5.4 用户管理命令

5.4.1 useradd 添加新用户

基本语法
useradd 用户名 (功能描述:添加新用户)
useradd -g 组名 用户名 (功能描述:添加新用户到某个组)

案例

#添加一个新用户
useradd xiyangyang

5.4.2 passwd 设置用户密码

基本语法:
passwd 用户名 (功能描述:设置用户密码)

案例

#设置用户的密码
passwd 123456789

5.4.3 id 查看用户是否存在

基本语法:
id 用户名

案例

#查看用户名是否存在
id xiyangyang

5.4.4 cat /etc/passwd 查看创建了哪些用户

cat /etc/passwd

5.4.5 su 切换用户

基本语法:
su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)

5.4.6 userdel 删除用户

基本语法:
userdel 用户名 (功能描述:删除用户但保存用户主目录)
userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
-r (功能:删除用户的同时,删除与用户相关的所有文件)

案例

#删除用户但保存用户主目录
userdel xiyangyang
#删除用户和用户主目录,都删除
useradd huitailang

5.4.7 who 查看登录用户信息

基本信息:
whoami (功能描述:显示自身用户名称)
who am i (功能描述:显示登录用户的用户名以及登陆时间)

5.4.8 sudo 设置普通用户具有 root 权限

5.4.9 usermod 修改用户

基本语法:
usermod -g 用户组 用户名
-g (功能描述:修改用户的初始登录组,给定的组必须存在。默认组 id 是 1)

案例

#将用户加入到用户组
usermod -g root zhubajie

5.5 用户组管理命令

5.5.1 groupadd 新增组

基本语法
groupadd 组名

案例

#添加一个feiyangyang组
groupadd feiyangyang

5.5.2 groupdel 删除组

基本语法
groupdel 组名

案例

#删除feiyangyang组
groupdel feiyangyang

5.5.3 groupmod 修改组

基本语法
groupmod -n 新组名 旧组名
-n 指定工作组的新组名

案例

#修改manyangyang组名为nuanyangyang
groupmod -n nuanyangyang manyangyang

5.5.4 cat /etc/group 查看创建了哪些组

基本操作
cat /etc/group

5.6 文件权限类

5.6.1 文件属性

如果没有权限,就会出现减号[ - ]而已。从左至右用0-9这些数字来表示

权限说明

符号面向群体说明
第一段rwx该文件的拥有者该拥有者对这个文件具有读,写,执行的权限
第二段r-x该文件的拥有者该拥有者对这个文件只具有读和执行的权限
第三段r-x除了拥有者和拥有组之外的用户和组其他人对这个文件有读和执行的权限

5.6.2 chmod 改变权限

访问权限分为读(read)、写(write)、执行(execute)三种
分为文件所有者(user)、文件所属组(group)、其他人(other)三个主体

属性介绍

文字法

选项对应单位
u(用户)文件所有者:创建文件的人
g(同组用户)文件所属组:与文件属主有相同组ID的所有用户
o(其他用户)其它人:与文件无关的人
a所有用户
选项功能
+添加某个权限
-取消某个权限
=赋予给定权限并取消其他所有权限
选项权限
r可读
w可写
x可执行

数字法

选项权限
4可读
2可写
1可执行
0没有权限

数字法可相加执行:
7=4+2+1 表示可读可写可执行
6=4+2 表示可读可写
5=4+1 表示可读可执行
3=2+1 表示可写可执行

案例实操

#修改文件使其所属组用户具有执行权限
chmod g+x tom.txt
#设置文件所有者、所属组、其他用户都具有可读可写可执行权限
chmod 777 tom.txt

5.6.3 chown 改变所有者

基本语法:
chown [选项] [账号名称] [文件或目录] (功能描述:改变文件或者目录的所有者)

选项功能
-R进行递归的持续变更,亦即连同次目录下的所有档案都变更

案例操作

#修改文件所有者
chown xiaoming tom.txt
#递归改变文件所有者和所有组
chown xiaoming:xiaoming test

5.6.4 chgrp 改变所属组

基本语法:
chgrp [组名] [文件或目录] (功能描述:改变文件或者目录的所属组)

案例

#修改文件的所属组
chgrp root monky.txt

5.7 搜索查找类

5.7.1 find 查找文件或者目录

find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端

基本语法
find [搜索范围] [选项]

选项功能
-name<查询方式>按照指定的文件名查找模式查找文件
-user<用户名>查找属于指定用户名所有文件
-size<文件大小>按照指定的文件大小查找文件,单位为:
b —— 块(512 字节)
c —— 字节
w —— 字(2 字节)
k —— 千字节
M —— 兆字节
G —— 吉字节

案例

#根据名称查找/目录下的filename.txt文件
find test/ -name "*.txt"
#在/home 目录下查找大于200m的文件(+n 大于 -n小于 n等于)
find /home -size +204800

5.7.2 locate 快速定位文件路径

基本语法
locate 搜索文件

由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库

案例

#查询文件
updatedb
locate tmp

5.7.3 grep 过滤查找及“|”管道符

基本语法
grep 选项 查找内容 源文件

选项功能
-n显示匹配行及行号

案例

#查找某文件在第几行
ls | grep -n test

5.8 压缩和解压类

5.8.1 gzip/gunzip 压缩

基本语法:
gzip文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)

1、只能压缩文件不能压缩目录
2、不保留原来的文件
3、同时多个文件会 产生多个压缩包

案例

gzip home.txt

5.8.2 zip/unzip 压缩

基本语法:
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)

zip选项功能
-r压缩目录
unzip功能
-d<目录>指定解压后文件的存放目录

5.8.3 tar 打包

基本语法:
tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

选项功能
-c产生.tar 打包文件
v显示详细信息
-f指定压缩后的文件名
z打包同时压缩
x解包.tar 文件
-C解压到指定目录
#压缩多个文件
tar -zcvf home.tar.gz cat.txt mourse.txt

5.9 磁盘查看和分区类

5.9.1 du 查看文件和目录占用的磁盘空间

基本语法:
du 目录/文件 (功能描述:显示目录下每个子目录的磁盘使用情况)

选项功能
-h以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
-a不仅查看子目录大小,还要包括文件
-c显示所有的文件和子目录大小后,显示总和
-s只显示总和
–max-depth=n指定统计子目录的深度为第 n 层

案例

#查看当前用户主目录占用的磁盘空间大小
du -sh

5.9.2 df 查看磁盘空间使用情况

基本语法:
df选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)

选项功能
-h以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;

5.9.3 lsblk 查看设备挂载情况

基本语法:
lsblk (功能描述:查看设备挂载情况)

选项功能
-f查看详细的设备挂载情况,显示文件系统信息

5.9.4 mount/umount 挂载/卸载

挂载(必须要有光盘或者已经连接好的的镜像文件)

#命令格式:
mount [-t vfstype] [-o options] device dir

参数介绍

参数功能
-t vfstype指定文件系统的类型,通常不必指定。mount 会自动选择正确的类 型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16 文件系统:msdos
Windows 9x fat32 文件系统:vfat
Windows NT ntfs 文件系统:ntfs
Mount Windows 文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
-o op ons主要用来描述设备或档案的挂接方式。常用的参数有:loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset :指定访问文件系统所用字符集
device要挂接(mount)的设备
dir设备在系统上的挂接点(mount point)

案例

mount -t iso9660 /dev/cdrom /mnt/cdrom/

设置开机自动挂载

##1)进入fstab 该文件主要用来存放系统的一些静态资源,也是系统启动时默认读取的配置文件
vim /etc/fstab
##2)输入挂载命令 (命令主要是根据个人要挂载的来设  这里是以/dev/cdrom挂载到/mnt/cdrom分区为例 其中defaults表示挂载后的设备文件默认读取挂载点的权限参数,0 0 代表不自检)
/dev/cdrom     /mnt/cdrom      iso9660   defaults 0 0

5.9.5 fdisk 分区

该命令只能在root下使用

基本语法:
fdisk -l (功能描述:查看磁盘分区详情)
fdisk 硬盘设备名 (功能描述:对新增硬盘进行分区操作)

选项功能
-l显示所有硬盘的分区列表

Linux分区

Device分区序列
Boot引导
Start从X磁柱开始
End到Y磁柱结束
Blocks容量
Id分区类型ID
System分区类型

分区按键说明

按键功能
m显示命令列表
p显示当前磁盘分区
n新增分区
w写入分区信息并退出
q不保存分区信息直接退出

5.10 进程管理

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地 址空间,并占用一定的系统资源

5.10.1 ps 查看当前系统进程状态

基本语法:
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)

选项功能
a列出带有终端的所有用户的进程
x列出当前用户的所有进程,包括没有终端的进程
u面向用户友好的显示风格
-e列出所有进程
-u列出某个用户关联的所有进程
-f显示完整格式的进程列表

如果想查看进程的CPU占用率和内存占用率,可以使用aux
如果想查看进程的父进程ID可以使用 ef

5.10.2 kill 终止进程

基本语法:
kill [选项]进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

选项功能
-9表示墙皮进程立刻停止

5.10.3 pstree 查看进程树

基本语法:
pstree[选项]

选项功能
-p显示进程的PID
-u显示进程的所属用户

5.10.4 top 实时监控系统进程状态

基本命令
top [选项]

选项功能
-d 秒数指定top 命令每隔几秒更新。默认是 3 秒在top 命令的交互模式当 中可以执行的命令
-i使 top 不显示任何闲置或者僵死进程
-p通过指定监控进程 ID 来仅仅监控某个进程的状态
操作功能
P以 CPU 使用率排序,默认就是此项
M以内存的使用率排序
N以 PID 排序
q退出top

5.10.5 netstat 显示网络状态和端口占用信息

基本语法:
netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat –nlp | grep 端口号 (功能描述:查看网络端口号占用情况)

选项功能
-a显示所有正在监听(listen )和未监听的套接字( socket)
-n拒绝显示别名,能显示数字的全部转化成数字
-l仅列出在监听的服务状态
-p表示显示哪个进程在调用

5.11 crontab 系统定时任务

5.11.1 crontab 服务管理

基本语法:
crontab [选项]

选项功能
-e编辑 crontab 定时任务
-l查询 crontab 任务
-r删除当前用户所有的 crontab 任务

6、软件包管理

6.1 RPM

6.1.1 RPM概述

RPM 文件是类似于 ZIP 文件或 tarball 的存档文件。实际上,它们使用了压缩来减小存档文件的大小。但是,除了文件之外,RPM 存档中还包含有关软件包的元数据。可以使用 rpm 工具查询

6.1.2 RPM查询命令

基本语法
rpm -qa (功能描述:查询所安装的所有 rpm 软件包)

案例

rpm -qa | grep pubkey

6.1.3 RPM 卸载命令(rpm -e)

基本语法:
1)rpm -e RPM软件包
2)rpm -e --nodeps 软件包

选项功能
-e卸载软件包
- - nodeps卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了

6.1.4 RPM 安装命令(rpm -ivh)

基本语法:
rpm -ivh RPM 包全名

选项功能
-iinstall ,安装
-v- -werbose,显示详细信息
-h- -hash,进度条
- -nodeps安装前不检查依赖

6.2 YUM仓库配置

6.2.1 YUM概述

借助于YUM软件仓库,可以完成安装、卸载、自动升级rpm软件包等任务,能够自动查找并解决rpm包之间的依懒关系,而无须管理员逐个、手工地安装每个rpm包,使管理员在维护大量Linux服务器时更加轻松自如。特别是在拥有大量Linux主机的本地网络中,构建一台源服务器可以大大缓解软件安装、升级等对Internet的依懒

6.2.2 YUM 的常用命令

基本语法:
yum [选项] [参数]

选项功能
-y对所有提问都回答“yes”
参数功能
install安装 rpm 软件包
update更新 rpm 软件包
check-update检查是否有可用的更新 rpm 软件包
remove删除指定的 rpm 软件包
list显示软件包信息
clean清理 yum过期的缓存
deplist显示 yum软件包的所有依赖关系

6.2.3 修改网络 YUM 源

#1)安装 wget, wget 用来从指定的 URL 下载文件
[root@hadoop101 ~] yum install wget
#2)/etc/yum.repos.d/目录下,备份默认的 repos 文件
[root@hadoop101 yum.repos.d] pwd
/etc/yum.repos.d
[root@hadoop101 yum.repos.d] cp CentOS-Base.repo   CentOS-Base
.repo.backup
#3)下载网易163或者是aliyun的repos文件,任选其一
[root@hadoop101 yum.repos.d] wget
http://mirrors.aliyun.com/repo/Centos-7.repo //阿里云
[root@hadoop101 yum.repos.d] wget
http://mirrors.163.com/.help/CentOS7-Base-163.repo //网易163
#4)使用下载好的repos文件替换默认的repos文件
#例如:用CentOS7-Base-163.repo替换CentOS-Base.repo
[root@hadoop101 yum.repos.d]# mv CentOS7-Base-163.repo CentOS-Base.repo
#5)清理旧缓存数据,缓存新数据
[root@hadoop101 yum.repos.d]#yum clean all
[root@hadoop101 yum.repos.d]#yum makecache
yum makecache就是把服务器的包信息下载到本地电脑缓存起来
#6)测试
[root@hadoop101 yum.repos.d]# yum list | grep firefox
[root@hadoop101 ~]#yum -y install firefox.x86_64

7、克隆虚拟机

7.1 克隆

1) 从现有虚拟机(关机状态)克隆出新的虚拟机,右键选择管理=>克隆
2)选择虚拟机中的当前状态
3)选择创建完整克隆
4)设置虚拟机名称及存储位置

总结

看到这里 恭喜各位同学已经基本学习完关于Linux,关于LInux,同学们还是要自己多敲代码才能熟练掌握Linux常用的基本命令!!不足的话,也希望大家能够评论发言,俺也期待同学们指教!!

感谢观看!!!

iOS 版智能生活 App SDK 开发入门教程1.5W字超详细步骤说明

涂鸦智能生活 App SDK iOS 版提供了即全面又灵活的 IoT App 开发模式,大家可以通过本教程在两小时内快速开发出一款自己的 IoT App,并实现如下功能:

  •  使用手机号码注册并登录一个用户账号。
  •  在登录状态下创建一个家庭,并查看和修改家庭信息
  •  以智能灯泡为例,通过 App 连接一个智能设备。
  •  使用这款创建的 App 控制灯泡的开关和亮度。

大家可以前往App 开发平台查看本教程中的示例代码,本次教程按功能模块进行分类,方便大家可以快速找到对应的代码参考学习。

效果展示

学习完本教程,并且结合一定的面板开发后,大家可以创建出一个类似以下 iOS App 的 Demo。

准备工作

在开始本教程前,请先确保已经完成以下内容 :

  1. 涂鸦 IoT 开发平台注册账号并创建 App,获取 SDK 的 AppKey,AppSecret。参考我之前的文章 >> 准备工作
  2. 准备一个涂鸦赋能的智能产品,本教程以智能灯泡为例。
  3. 使用 CocoaPods 将涂鸦智能生活App SDK 集成到您的项目中。参考我的文章 >> 如何使用 CocoaPods 将智能生活 App SDK iOS 版快速集成到项目中。

第一步:注册用户账号

本模块中,仅演示使用手机号注册登录。除此以外,涂鸦智能生活 App SDK 还提供了邮箱、第三方、匿名等多种注册登录方式。

注册用户账号时:

  • 需要提供 countryCode 参数来区分注册地区,用于就近选择涂鸦 IoT 开发平台的可用区。如中国大陆为 86,美国为 1

  • 之后将频繁地调用对象 TuyaSmartUser。它是一个单例,存储了当前用户的所有信息及相关的登录注册方法。

查询验证码服务可用地区

为了加强用户信息的数据安全,涂鸦优化了验证码和添加了账号限制。只有验证码服务可用的地区,才可以发送验证码。大家需要先查询自己的开发者账号是否已经在从涂鸦 IoT 开发平台开通验证码服务的可用地区列表。

[[TuyaSmartUser sharedInstance] getWhiteListWhoCanSendMobileCodeSuccess:^(NSString *regions) 

 failure:^(NSError *error) 

];

返回值 regions 表示一个或多个国家或地区,以 , 隔开的字符串,例如 86 和 01。可用区编号列表。

获取注册账号的验证码

与大部分注册流程类似,用户必须先获取验证码。无论是手机或是邮箱,都可以使用统一的获取验证码接口在注册及后续密码修改,验证码登录,信息完善等操作中获取相应的验证码。

NSString * region = [[TuyaSmartUser sharedInstance] getDefaultRegionWithCountryCode:countryCode];

[[TuyaSmartUser sharedInstance] sendVerifyCodeWithUserName:userName // phone number or email address
											region:region
										countryCode:countryCode // NSString ,like 86 or 01
												type:1     // code type , 1: verification code register,
											success:^
											// request success
											 failure:^(NSError *error) 
										// request fail
										// get error details  from   error.localizedDescription
	];

 

使用手机号码注册账号

使用手机号码注册账号需要上传国家码、手机号码、密码、获取到的验证码等信息。

[[TuyaSmartUser sharedInstance] registerByPhone:countryCode //country code ,like 86 or 1
							phoneNumber:phone
								password:password
									code:code  // VerifyCode
								success:^

								// register success

								 failure:^(NSError *error) 

						// register fail
							// get error details  from   error.localizedDescription
										

];

使用手机号码登录账号

账号注册成功后,用户就可以使用手机号码登录账号。

[[TuyaSmartUser sharedInstance] loginByPhone:countryCode
							phoneNumber:phone
							password:password
								success:^

							// login successfully

							 failure:^(NSError *error) 

							// login fail

	];

第二步:创建和管理家庭

家庭是智能生活 App SDK 开发下实际场景的最大单位。IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。用户可以在用户账号下创建任意多个家庭,在指定家庭下,用户还可以添加并管理多个房间和家庭成员。

操作家庭模块时,大家将频繁调用对象 TuyaSmartHomeModel 和 TuyaSmartHome

对象说明
TuyaSmartHomeModel存放了家庭的基本信息,如 ID、名字、位置等。
TuyaSmartHome存放了家庭相关的所有功能,如单个家庭信息管理、家庭下的家庭成员管理、房间管理等。TuyaSmartHome 需要使用正确的 homeId 进行初始化。

 

创建家庭

在登录状态下,用户可以创建家庭,之后对于房间、成员、设备等对象的管理都基于家庭下。创建家庭需要通过 TuyaSmartHomeManager 调用 创建家庭 接口。

[self.homeManager addHomeWithName:name
                  geoName:city
                  rooms:@[@""]  // we could add rooms after creating the home , so pass a null list firstly .
                  latitude:self.latitude
                  longitude:self.longitude
                  success:^(long long result) 

                       //add success, result here is the homeID .

                   failure:^(NSError *error) 

                        //add failed

                  ];

 创建家庭接口说明

- (void)addHomeWithName:(NSString *)homeName
                geoName:(NSString *)geoName
                  rooms:(NSArray <NSString *>*)rooms
               latitude:(double)latitude
              longitude:(double)longitude
                success:(TYSuccessLongLong)success
                failure:(TYFailureError)failure;

参数说明

参数说明
homeName家庭的名称
geoName家庭的地址
rooms家庭下房间的名称列表
latitude家庭地址纬度
longitude家庭地址经度
success成功回调
failure失败回调

示例代码

Objc:

- (void)addHome 
    [self.homeManager addHomeWithName:@"you_home_name"
                          geoName:@"city_name"
                            rooms:@[@"room_name"]
                         latitude:lat
                        longitude:lon
                          success:^(double homeId) 

        // homeId 创建的家庭的 homeId
        NSLog(@"add home success");
     failure:^(NSError *error) 
        NSLog(@"add home failure: %@", error);
    ];

Swift:

 func addHome() 
    homeManager.addHome(withName: "you_home_name",
                         geoName: "city_name",
                           rooms: ["room_name"],
                        latitude: lat,
                       longitude: lon,
                         success:  (homeId) in
        // homeId 创建的家庭的 homeId
        print("add home success")
    )  (error) in
        if let e = error 
            print("add home failure: \\(e)")
        
    

查询家庭列表

在登录状态下大家可以直接获取家庭列表。如还没创建过家庭,将返回 空数组

    //get home list and refresh the TableView
    [self.homeManager getHomeListWithSuccess:^(NSArray<TuyaSmartHomeModel *> *homes) 
      // get success , refresh UI
      //  [self.tableView reloadData];
     failure:^(NSError *error) 

    // get failed

    ];

最佳实践

在创建了家庭后,后续房间成员、用户配网等相关操作均需要基于某一特定家庭,因此建议将这一特定家庭作为 App 的全局变量存储。当然,大家也可以在本地随时切换当前家庭,涂鸦 IoT 开发平台并不会记录这一信息。

在本教程和配套的 Sample 中,默认将列表的第一个家庭设为当前家庭。

+ (TuyaSmartHomeModel *)getCurrentHome 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if (![defaults valueForKey:@"CurrentHome"]) 
        return nil;
    

    long long homeId = [[defaults valueForKey:@"CurrentHome"] longLongValue];

    if (![TuyaSmartHome homeWithHomeId:homeId]) 
        return nil;
    

    return [TuyaSmartHome homeWithHomeId:homeId].homeModel;


+ (void)setCurrentHome:(TuyaSmartHomeModel *)homeModel 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setValue:[NSString stringWithFormat:@"%lld", homeModel.homeId] forKey:@"CurrentHome"];


实现以上逻辑后,家庭的操作就可以被简化:

  • 查询家庭列表:

    self.home = [TuyaSmartHome homeWithHomeId:[TYHome getCurrentHome].homeId];
    
  • 设置家庭 ID:

    [TYHome setCurrentHome:xxx];
    

第三步:设备配网

简单来说,配网就是将设备连接并注册到云端,使其拥有与云端远程通信的能力。涂鸦智能生活 App SDK 提供了丰富的配网方式以支持大部分智能设备。如 Wi-Fi 连接,蓝牙连接等。

配网方式介绍

本模块以 Wi-Fi 配网为例介绍如何使用SDK 将设备配置到云端。

Wi-Fi 配网方式包括 EZ、AP、扫 App 二维码三种方式,在之后的 iOS 版本 SDK 中,推荐使用 AP 热点模式 代替 Wi-Fi 快连模式(即EZ模式)。主要原因如下:

  • 相比 EZ 模式,AP 模式成功率高、可靠性好,对手机和路由器有兼容性要求小。AP 模式配网成功率高于 EZ 模式。
  • 当 Xcode 升级至 12.5 版本后,编译出来的 App 无法在大于等于 14.5 版本的 iOS 系统的设备上发出 EZ 配网的数据包。此时,App 需要额外开启一个 com.apple.developer.networking.multicast 的权限。这个权限需要向苹果额外申请,等审批通过后才能够使用。目前临时的解决方案是降低 Xcode 版本,但仍推荐使用 AP 模式。

获取配网 Token

开始配网之前,SDK 需要在联网状态下从涂鸦 获取配网Token,然后才可以开始热点模式配网。Token 的有效期为 10 分钟,且配置成功后就会失效,再次配网需要重新获取。

获取 Token 需要上传当前的 homeId,因此大家需要确保处于登录状态并至少创建了一个家庭。

[[TuyaSmartActivator sharedInstance] getTokenWithHomeId:homeId
                                                success:^(NSString *token) 
		                                    //  NSLog(@"getToken success: %@", token);
		                                   // you could start ConfigWiFi now
	                                       failure:^(NSError *error) 
		                                 //NSLog(@"getToken failure: %@", error.localizedDescription);
	                                     
];

获取Token 接口说明

- (void)getTokenWithHomeId:(long long)homeId
                   success:(TYSuccessString)success
                   failure:(TYFailureError)failure;

参数说明

参数说明
homeId设备将要绑定到的家庭的 ID
success成功回调,返回配网 Token
failure失败回调,返回失败原因

示例代码

Objc:

- (void)getToken 
	[[TuyaSmartActivator sharedInstance] getTokenWithHomeId:homeId success:^(NSString *token) 
		NSLog(@"getToken success: %@", token);
		// TODO: startConfigWiFi
	 failure:^(NSError *error) 
		NSLog(@"getToken failure: %@", error.localizedDescription);
	];

Swift:

func getToken() 
    TuyaSmartActivator.sharedInstance()?.getTokenWithHomeId(homeId, success:  (token) in
        print("getToken success: \\(token)")
        // TODO: startConfigWiFi
    , failure:  (error) in
        if let e = error 
            print("getToken failure: \\(e)")
        
    )

iOS 版本适配

iOS 14 版本适配

从 iOS 14 版本开始,在设备配网、局域网本地控制时会触发 本地网络 权限弹窗。

  • 如果用户点击了允许,App 才能够向本地局域网发送数据。
  • 如果用户点击了拒绝,将无法使用相关功能。

目前苹果没有提供任何 API 对此权限进行判断,建议在相关功能无法正常使用时提示、引导用户检查 系统设置 中的 app设置,确认是否开启了 本地网络 权限。

iOS 13 版本适配

从 iOS 13 版本开始,如果用户没有开启地理位置权限,在已开启 Wi-Fi 权限的前提下,[[TuyaSmartActivator sharedInstance] currentWifiSSID] 将获取不到有效的 Wi-Fi SSID 或 BSSID。

在此情况下,iOS 会返回下列默认值:

  • SSID:WLAN 或 Wi-Fi,针对中国大陆地区则是 WLAN
  • BSSID:“00:00:00:00:00:00”

开始设备配网

开始配网前,请确保设备处于待配网状态。操作方法可参考设备的使用说明书。

调用 配网接口,需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。

[TuyaSmartActivator sharedInstance].delegate = self;
[[TuyaSmartActivator sharedInstance] startConfigWiFi:TYActivatorModeAP
                                                ssid:ssid
                                            password:password
                                               token:token
                                             timeout:100];

开始配网 接口说明

- (void)startConfigWiFi:(TYActivatorMode)mode
                   ssid:(NSString *)ssid
               password:(NSString *)password
                  token:(NSString *)token
                timeout:(NSTimeInterval)timeout;

参数说明

参数说明
mode配网模式
ssidWi-Fi 名称
passwordWi-Fi 密码
token配网 Token
timeout超时时间,默认 100 秒

示例代码

Objc :

- (void)startConfigWiFi:(NSString *)ssid password:(NSString *)password token:(NSString *)token 
	// 设置 TuyaSmartActivator 的 delegate,并实现 delegate 方法
	[TuyaSmartActivator sharedInstance].delegate = self;

	// 开始配网,快连模式对应 mode 为 TYActivatorModeEZ
	[[TuyaSmartActivator sharedInstance] startConfigWiFi:TYActivatorModeEZ ssid:ssid password:password token:token timeout:100];


#pragma mark - TuyaSmartActivatorDelegate
- (void)activator:(TuyaSmartActivator *)activator didReceiveDevice:(TuyaSmartDeviceModel *)deviceModel error:(NSError *)error 

	if (!error && deviceModel) 
		//配网成功
    

    if (error) 
        //配网失败
    

Swift :

func startConfigWiFi(withSsid ssid: String, password: String, token: String) 
    // 设置 TuyaSmartActivator 的 delegate,并实现 delegate 方法
    TuyaSmartActivator.sharedInstance()?.delegate = self

    // 开始配网
    TuyaSmartActivator.sharedInstance()?.startConfigWiFi(TYActivatorModeEZ, ssid: ssid, password: password, token: token, timeout: 100)


#pragma mark - TuyaSmartActivatorDelegate
func activator(_ activator: TuyaSmartActivator!, didReceiveDevice deviceModel: TuyaSmartDeviceModel!, error: Error!) 
    if deviceModel != nil && error == nil 
        //配网成功
    

    if let e = error 
        //配网失败
        print("\\(e)")
    

使用 AP 模式配网时,需要先实现 TuyaSmartActivatorDelegate 协议,以监听配网结果的回调。

@interface xxxViewController () <TuyaSmartActivatorDelegate>
- (void)activator:(TuyaSmartActivator *)activator didReceiveDevice:(TuyaSmartDeviceModel *)deviceModel error:(NSError *)error 
    if (deviceModel && error == nil) 
             //success
            // NSLog(@"connected success: %@", deviceModel.name);
    

    if (error) 
        //fail
    

   // stop config

(可选)停止配网

开始配网操作后,App 会持续广播配网信息,直到配网成功或是超时才停止。如果需要中途取消操作或配网完成,需要调用 停止配网 接口。

 [TuyaSmartActivator sharedInstance].delegate = nil;
 [[TuyaSmartActivator sharedInstance] stopConfigWiFi];

停止配网接口说明

- (void)stopConfigWiFi;

示例代码

Objc:

- (void)stopConfigWifi 
	[TuyaSmartActivator sharedInstance].delegate = nil;
	[[TuyaSmartActivator sharedInstance] stopConfigWiFi];

Swift:

func stopConfigWifi() 
    TuyaSmartActivator.sharedInstance()?.delegate = nil
    TuyaSmartActivator.sharedInstance()?.stopConfigWiFi()

第四步:控制设备

本章节主要操作对象包含 TuyaSmartDeviceModel 和 TuyaSmartDevice

对象说明
TuyaSmartDeviceModel
  • TuyaSmartHomeModel 和 TuyaSmartHome 类似,TuyaSmartDeviceModel 存放了设备的基本信息,如 ID、名字、图标等。
  • TuyaSmartDeviceModel 类的 dps 属性(NSDictionary 类型)定义了当前设备的状态,称作数据点(DP,Data Point)或功能点。每个 DP 都存储了了一个设备的功能信息。如开关(布尔值),灯泡的亮度(数值型)等。对于设备的控制都通过获取和修改 DP 值实现。
TuyaSmartDeviceTuyaSmartDevice 存放了设备相关的所有功能,如功能控制,设备固件管理等。您需要用正确的 deviceId 初始化一个 TuyaSmartDevice

查询设备列表

设备成功配网后,可以在对应的家庭下查看对应的设备列表。

self.home = [TuyaSmartHome homeWithHomeId:#your homeId];
self.deviceList = [self.home.deviceList copy];

查看设备信息

  • 设备的功能点信息存放在 deviceModel 的 schemaArray 中。

    TuyaSmartDevice *device = self.device;
    NSArray *schemas = device.deviceModel.schemaArray;
    
  • schemaArray 存放了该设备的所有功能点信息,每个功能点被封装成一个TuyaSmartSchemaModel 对象。

  • 对于部分功能点信息复杂的设备,涂鸦将功能点再一次封装在 TuyaSmartSchemaModel 的 property 属性中。具体判断方式如下:

    NSString *type = [schema.type isEqualToString:@"obj"] ? schema.property.type : schema.type;
    
    	if ([type isEqualToString:@"bool"]) 
    
    		SwitchTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"switchCell"];
    		if (cell == nil)
    			cell = [[[NSBundle mainBundle] loadNibNamed:@"SwitchTableViewCell" owner:self options:nil] lastObject];
    
    			cell.label.text = schema.name;
    			[cell.switchButton setOn:[dps[schema.dpId] boolValue]];
    
    			;
    
    		
    		return cell;
    
    	
    
    else if ([type isEqualToString:@"value"]) 
    
    		SliderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"valueCell"];
    		if (cell == nil)
    			cell = [[[NSBundle mainBundle] loadNibNamed:@"SliderTableViewCell" owner:self options:nil] lastObject];
    
    			cell.label.text = schema.name;
    			cell.detailLabel.text = [dps[schema.dpId] stringValue];
    			cell.slider.minimumValue = schema.property.min;
    			cell.slider.maximumValue = schema.property.max;
    			cell.slider.value = [dps[schema.dpId] floatValue];
    
    			;
    		;
    		return cell;
    
    	
    
    	else if ([type isEqualToString:@"enum"]) 
    		//...
    	
    
    	//...
    

在上述代码中,以智能灯泡为例将其功能点信息展示在 TableView 上。其中:

  • type 为 bool 的 cell 展示了开关的信息。
  • type 为 value 的 cell 展示了其亮度的信息。

控制设备

控制设备需要将对应的 DP 以 NSDictionary 形式通过 设备控制 接口改变设备状态或功能。

 同样以灯泡为例,以下代码分别修改了其开关状态和亮度值。

if ([type isEqualToString:@"bool"]) 

        SwitchTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"switchCell"];
        if (cell == nil)
            cell = [[[NSBundle mainBundle] loadNibNamed:@"SwitchTableViewCell" owner:self options:nil] lastObject];

            cell.label.text = schema.name;
            [cell.switchButton setOn:[dps[schema.dpId] boolValue]];
            cell.isReadOnly = isReadOnly;
           // turn on/off when click the UISwitch
            cell.switchAction = ^(UISwitch *switchButton) 
                [weakSelf publishMessage:@schema.dpId: [NSNumber numberWithBool:switchButton.isOn]];
            ;

        
        return cell;

    

else if ([type isEqualToString:@"value"]) 

        SliderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"valueCell"];
        if (cell == nil)
            cell = [[[NSBundle mainBundle] loadNibNamed:@"SliderTableViewCell" owner:self options:nil] lastObject];

            cell.label.text = schema.name;
            cell.detailLabel.text = [dps[schema.dpId] stringValue];
            cell.slider.minimumValue = schema.property.min;
            cell.slider.maximumValue = schema.property.max;
            [cell.slider setContinuous:NO];
            cell.slider.value = [dps[schema.dpId] floatValue];

            // change the value when tap the UISlider
            cell.sliderAction = ^(UISlider * _Nonnull slider) 
                float step = schema.property.step;
                float roundedValue = round(slider.value / step) * step;
                [weakSelf publishMessage:@schema.dpId : [NSNumber numberWithInt:(int)roundedValue]];
            ;
         ;
        return cell;

    
- (void)publishMessage:(NSDictionary *) dps 
    [self.device publishDps:dps success:^
            // change success
    
    failure:^(NSError *error) 
         // change failed
    ];

如果需要监听设备状态的改变,如在线状态、移除通知、功能点状态改变等。需要实现 TuyaSmartDeviceDelegate 协议。

self.device = [TuyaSmartDevice deviceWithDeviceId:## your deviceId];
self.device.delegate = self;
#pragma mark - TuyaSmartDeviceDelegate

/// Device information updates, such as the name and online status.
/// @param device The device instance.
- (void)deviceInfoUpdate:(TuyaSmartDevice *)device;

/// Device online status updates
/// @param device The device instance.
- (void)deviceOnlineUpdate:(TuyaSmartDevice *)device;

/// Indicates whether the device is removed.
/// @param device The device instance.
- (void)deviceRemoved:(TuyaSmartDevice *)device;

/// The DP data updates.
/// @param device The device instance.
/// @param dps The command dictionary.
- (void)device:(TuyaSmartDevice *)device dpsUpdate:(NSDictionary *)dps;

/// The DP data updates.
/// @param device The device instance.
/// @param dpCodes The DP codes.
- (void)device:(TuyaSmartDevice *)device dpCommandsUpdate:(NSDictionary *)dpCodes;

/// The group OTA task progress.
/// @param device The gateway instance.
/// @param groupId group OTA task id.
/// @param type The firmware type.
/// @param progress The update progress.
- (void)device:(TuyaSmartDevice *)device groupOTAId:(long)groupId firmwareType:(NSInteger)type progress:(double)progress;

/// The group OTA task status.
/// @param device The gateway device instance.
/// @param upgradeStatusModel The model of the update status.
- (void)device:(TuyaSmartDevice *)device
    groupOTAStatusModel:(TuyaSmartFirmwareUpgradeStatusModel *)upgradeStatusModel;

/// The callback of Wi-Fi signal strength.
/// @param device The device instance.
/// @param signal The signal strength.
- (void)device:(TuyaSmartDevice *)device signal:(NSString *)signal;

/// Receives MQTT custom messages.
/// @param device The device instance.
/// @param message The custom message.
- (void)device:(TuyaSmartDevice *)device didReceiveCustomMessage:(TuyaSmartMQTTMessageModel *)message;

/// Receives LAN custom messages.
- (void)device:(TuyaSmartDevice *)device didReceiveLanMessage:(TuyaSmartLanMessageModel *)message;

/// The delegate of warning information updates.
/// @param device The device instance.
/// @param warningInfo The warning information.
- (void)device:(TuyaSmartDevice *)device warningInfoUpdate:(NSDictionary *)warningInfo;

/// The delegate of changes in device normal firmware/pid version update's status/progress
/// Notice: sometimes the progress may <0, when it occured please ignore the progress.
/// @param device The device instance.
/// @param statusModel status/progress model.
- (void)device:(TuyaSmartDevice *)device otaUpdateStatusChanged:(TuyaSmartFirmwareUpgradeStatusModel *)statusModel;

/// The thing message data update.
/// Example:
///     type == property:
///         payload = 
///           "code_name1": 
///             "value": "code_value1",
///             "time": 1234567890
///           ,
///           "code_name2": 
///             "value": 50,
///             "time": 1234567890
///           
///         
///     type == action:
///         payload = 
///            "actionCode": "testAction",
///            "outputParams": 
///              "outputParam1":"outputValue1",
///              "outputParam2":50
///            
///         
///     type == event:
///         payload = 
///            "eventCode": "testEvent",
///            "outputParams": 
///              "outputParam1":["outputValue1", "outputValue2"],
///              "outputParam2":false
///            
///         
/// @param device The device instance.
/// @param thingMessageType The message type.
/// @param payload The message payload.
- (void)device:(TuyaSmartDevice *)device didReceiveThingMessageWithType:(TuyaSmartThingMessageType)thingMessageType payload:(NSDictionary *)payload;

(可选)移除设备

调用 移除设备 接口,可以将当前设备从对应家庭下移除。

[self.device remove:^
		NSLog(@"remove success");
	   failure:^(NSError *error) 
		NSLog(@"remove failure: %@", error);
	  ];

移除设备 接口说明

- (void)remove:(nullable TYSuccessHandler)success failure:(nullable TYFailureError)failure;

参数说明

参数说明
success成功回调
failure失败回调

示例代码

Objective-C:

- (void)removeDevice 
	// self.device = [TuyaSmartDevice deviceWithDeviceId:@"your_device_id"];

	[self.device remove:^
		NSLog(@"remove success");
	 failure:^(NSError *error) 
		NSLog(@"remove failure: %@", error);
	];

Swift:

func removeDevice() 
	device?.remove(
		print("remove success")
	, failure:  (error) in
		if let e = error 
			print("remove failure: \\(e)")
		
	)

(推荐)集成设备面板

为了减少客户的开发成本,涂鸦针对特定设备提供了一系列的设备控制面板。详情请登录 涂鸦IoT开发平台 参考 全品类控制面板空调品类控制面板

 

实践结果

学习完本次教程,相信大家已经创建出了一个自己的 App,它可以进行用户账号注册、家庭创建、家庭查询、设备配网、设备控制等。

下一步

为了降低开发者的开发成本,涂鸦将 SDK 中按模块进行了功能抽离和 UI 封装,为大家提供了一整套一键接入的 UI业务包,可以根据需要自由选择需要的业务模块。

以上是关于Linux新手快速入门(万字超详细)的主要内容,如果未能解决你的问题,请参考以下文章

(万字超详细总结纯手打)MYSQL深度学习分析

❤️Docker超详细基础教程,快速入门docker首选❤️(万字长文建议收藏)

iOS 版智能生活 App SDK 开发入门教程1.5W字超详细步骤说明

万字长文 Vue全家桶从入门到实战,超详细笔记整理 ( 一 ) (建议收藏)

关于linux新手快速入门的几个重要概念及指令

❤️万字Python基础保姆式教学❤️,小白快速入门Python!