小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Linux
  5. 正文

《鸟哥的Linux私房菜》(基础篇)笔记整理(第8章)

2019年1月5日 976点热度 0人点赞 0条评论

一、Linux系统常见的压缩命令

在Linux的环境中,压缩文件的扩展名大多是“*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz”。但是在linux中扩展名不是没什么作用吗?这是因为,Linux支持的压缩命令非常多,人们要想解压该文档,就必须知道该文档是用什么命令来进行压缩的,所以拓展名就是为了告诉用户它是使用什么方式压缩的,那么我们就可以用对应的命令进行解压缩。

tar是一种将很多文件(目录)打包成一个文件的命令,单纯的tar命令只是打包,并不提供压缩,但后来的GNU计划中,将整个tar与压缩功能结合在一起了。

1.gzip,zcat/zmore/zless/zgrep

gzip所建立的压缩文件后缀名为.gz。该命令也可以解压缩compress、zip和gzip等软件所压缩的文件。其使用格式如下:

[dmtsai@study ~]$ gzip [-cdtv#] 文件名

[dmtsai@study ~]$ zcat 文件名.gz

选项与参数:

-c:将压缩的数据输出到屏幕上,可通过数据流重导向来处理;

-d:解压缩的参数;

-t:可以用来检验一个压缩文件的一致性~看看文件有无错误;

-v:可以显示出原文件/压缩文件案的压缩比等信息;

-#:#为数字的意思,代表压缩等级,-1最快,但是压缩比最差、-9最慢,但是压缩比最好!预设是-6。

注意:在预设状态下,使用gzip命令会压缩文件为.gz的文件,但是源文件就会被删除。

zcat用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。

zcat [选项] 文件名

-S:指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项;

-c:将文件内容写到标注输出;

-d:执行解压缩操作;

-l:显示压缩包中文件的列表;

-L:显示软件许可信息;

-q:禁用警告信息;

-r:在目录上执行递归操作;

-t:测试压缩文件的完整性;

-V:显示命令的版本信息;

-l:更快的压缩速度;

-9:更高的压缩比。

zcat/zmore/zless则可以对应于cat/more/less的方式来读取纯文本档被压缩后的压缩文件。由于gzip这个压缩命令主要想要用来取代compress的,所以不但compress的压缩文件案可以使用gzip来解压缩,同时zcat这个命令可以同时读取compress与gzip的压缩文件。

另外,如果想从压缩文本文档中查找数据,可以使用zgrep来搜索关键词,而无需将压缩文本解压缩。如果使用compress建立的.z文件,可以使用znew将文件更新成gzip的格式。

2.bzip2,bzcat/bzmore/bzless/bzgrep

bzip2则是为了取代gzip并提供更佳的压缩比。其使用方法如下:

[dmtsai@study ~]$ bzip2 [-cdkzv#] 文件名

[dmtsai@study ~]$ bzcat 文件名.bz2

选项与参数:

-c:将压缩的过程产生的数据输出到屏幕上;

-d:解压缩的参数;

-k:保留源文件,而不会删除原始的文件喔;

-z:压缩的参数(默认值,可以不加);

-v:可以显示出原文件/压缩文件案的压缩比等信息;

-#:与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快。

  1. xz, xzcat/xzmore/xzless/xzgrep

xz压缩比相比bzip2来说更高,用法也基本上跟gzip/bzip2一致。

[dmtsai@study ~]$ xz [-dtlkc#] 文件名

[dmtsai@study ~]$ xcat 文件名.xz

选项与参数:

-d:解压缩;

-t:测试压缩文件的完整性;

-l:列出压缩文件的相关信息;

-k:保留原本的文件不删除;

-c:将数据由屏幕上输出;

-#:同上,压缩比参数。

综上所述,可以对这三个命令的性能和时间性能进行总结如下。

类型 压缩比 压缩所需时间
gzip 最低 最少
bzip2 中等 中等
xz 最高 最长

 

二、打包命令:tar、解压缩后的SELinux问题

虽然gzip、bzip2、xz也能够针对目录来进行压缩,不过它们对目录的压缩指的是“将目录内的所有文件分别进行压缩”,而不像在Windows的系统,可以使用类似WinRAR这一类的压缩软件来将好多数据打包为一个文件。

在Linux下,可以使用tar指令。它可以将多个目录或文件打包成一个大文件,并通过gzip/bzip2/xz的支持,将该文件进行压缩。

tar的参数非常多,这里仅列举几个常用的。

[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包与压缩

[dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar檔名]             <==查看文件名

[dmtsai@study ~]$ tar [-z|-j|-J] [xv] [-f 既有的 tar檔名] [-C 目录]   <==解压缩

选项与参数:

-c:新建打包文件,可搭配-v来查看过程中被打包的文件名(filename);

-t:查看打包文件的内容含有哪些文件名;

-x:解打包或解压缩的功能,可以搭配-C(大写)在特定目录解压缩/解开;

【注意:-c,-t,-x不可同时出现在一串指令列中。】

-z:通过gzip的支持进行压缩/解压缩:此时文件名最好为*.tar.gz;

-j:通过bzip2的支持进行压缩/解压缩:此时文件名最好为*.tar.bz2;

-J:通过xz的支持进行压缩/解压缩:此时文件名最好为*.tar.xz;

【注意:-z,-j,-J不可以同时出现在一串命令列中。】

-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来;

-f filename:-f后面要立刻接要被处理的文件名;

-C目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项;

-p(小写):保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文本;

-P(大写):保留绝对路径,亦即允许备份数据中含有根目录存在之意;

--exclude=FILE:在压缩的过程中,不要将FILE打包。

最简单只需要记住以下三个指令:

①压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称;

②查询:tar -jtv -f filename.tar.bz2;

③解压缩:tar -jxv -f filename.tar.bz2 -C 解压缩的目录。

1.使用tar加入-z,-j或-J的参数备份/etc/目录

使用格式如下:

tar -zpcv -f /root/etc.tar.gz /etc

tar -jpcv -f /root/etc.tar.bz2 /etc

tar -Jpcv -f /root/etc.tar.xz /etc

加入p的原因是为了保存原本文件的权限和属性。备份的时候一定要把原本文件的权限都备份好。

2.查阅tar文件的数据内容,与备份文件名是否有根目录的意义

tar -jtv -f /root/etc.tar.bz2

如果加上-v,那么详细的文件权限/属性都会被列出来,如果只想知道文件名,那么就不需要加-v。我们还可以发现,每个文件名都没有了根目录。这是为了安全,我们使用tar备份可能会需要解压缩,在tar所记录的文件名就是解压缩后的实际文件名,如果没有拿掉根目录,解压缩后的文件名就是绝对路径,就会在解压缩后覆盖原来/etc/xxx的目录中去。

如果确认使用绝对路径,那么就将选项里面的-p修改为-P即可。

3.将备份的数据解压缩,被考虑特定目录的解压缩(-C的应用)

默认情况下,解压缩目录是解压缩到当前目录。如果需要修改解压缩的目录,可以使用-C选项。例如

tar -jxv -f /root/etc.tar.bz2 -C /tmp

即将etc.tar.bz2解压到/tmp目录中。

4.仅解开单一文件的方法

我们假设以解压缩shadow文件为例。

步骤:

STEP 1:先找到我们要的文件名。

tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'

STEP 2:将该文件解开。用法如下:

tar -jxv -f 打包文件.tar.bz2 待解开文件名

实际运行命令为:

tar -jxv -f /root/etc.tar.bz2 etc/shadow

5.打包某目录,但不包含该目录下某些文件

tar -jcv  -f /root/system.tar.bz2 --exclude=/root/etc*

6.仅备份比某个时刻新的文件(其实就是增量备份)

某些情况下,我们需要备份新文件而不是旧文件。此时--newer-mtime这个选项就极其重要。当我们仅使用--newer的时候,表示后续日期包括mtime和ctime,如果是--newer-mtime,显然只是mtime。

7.其它知识:tarfile和tarball

如果仅是打包而已,就是『tar -cv -f file.tar』而已,这个档案我们称呼为tarfile。如果还有进行压缩的支持,例如『tar -jcv -f file.tar.bz2』时,我们就称呼为tarball。

8.特殊应用:利用管道命令与数据流

在tar的使用中,有一种方式最特殊,那就是通过标准输入输出的数据流重定向(standard input/standard output)以及管道命令(pipe)的方式,将待处理的文件一边打包一边解压缩到目标目录去。

例如将/etc整个目录一边打包一遍在/tmp解压缩的命令如下:

[root@study ~]# cd /tmp

[root@study tmp]# tar -cvf - /etc | tar -xvf -

这个命令有点像cp -r /etc /tmp,但是要注意,输出文件和输入文件都变成了-,并且有一个|存在,者分别代表着standard output、standard input和管道命令。你可以把-想象为内存中的一个缓冲区,这就好理解了。

9.拓展:SELinux问题

SELinux的权限问题可能会让系统无法存取某些配置文件内容,导致影响系统的政策使用权。解决方法如下:

①通过各种可行的救援方式登入系统,然后修改/etc/selinux/config档案,将SELinux改成permissive模式,重新启动后系统就正常了;

②在第一次恢复系统后,不要立即重新启动,先使用restorecon-Rv/etc自动修复一下SELinux的类型即可;

③通过各种可行的方式登入系统,建立/.autorelabel档案,重新启动后系统会自动修复SELinux的类型,并且又会再次重新启动,之后就正常了。

三、XFS文件系统的备份与还原

使用tar是针对目录树系统进行备份,如果想要针对整个文件系统进行备份和还原,就要使用xfsdump和xfsrestore两个命令。注意xfsdump不支持目录备份。

1.XFS文件系统备份:xfsdump

xfsdump除了可以进行文件系统的完整备份(full backup),还可以进行增量备份(Incremental backup)。

使用xfsdump时,请注意以下限制:

①xfsdump不支持没有挂载的文件系统备份!所以只能备份已挂载的;

②xfsdump必须使用root的权限才能操作(涉及文件系统的关系);

③xfsdump只能备份XFS文件系统;

④xfsdump备份下来的数据只能让xfsrestore解析;

⑤xfsdump是透过文件系统的UUID来分辨各个备份文件的,因此不能备份两个具有相同UUID的文件系统。

[root@study ~]# xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份文件名] 待备份数据

[root@study ~]# xfsdump -I

选项与参数:

-L:xfsdump会记录每次备份的session标头,这里可以填写针对此文件系统的简易说明;

-M:xfsdump可以纪录储存媒体的标头,这里可以填写此媒体的简易说明;

-l:是L的小写,就是指定等级~有0~9共10个等级(默认为0,即完整备份);

-f:后面接产生的文件,亦可接例如/dev/st0装置文件名或其他一般文件的文件名等;

-I:从/var/lib/xfsdump/inventory列出目前备份的信息状态。

(1)用xfsdump备份完整文件系统。

#1.先确定/boot是独立的文件系统喔!

[root@study ~]# df -h /boot

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda2      1014M  131M  884M  13% /boot      #挂载/boot的是/dev/vda装置!

# 看!确实是独立的文件系统喔! /boot 是挂载点!

 

# 2. 将完整备份的文件名记录成为 /srv/boot.dump :

[root@study ~]# xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot

(2)用xfsdump进行增量备份

注意:一定要进行过完整备份之后,才能进行增量备份。

# 0.看一下有没有任何文件系统被xfsdump过的资料

[root@study ~]# xfsdump -I

#1.开始建立增量备份文件,此时我们使用level1吧:

[root@study~]#xfsdump -l 1 -Lboot_2 -Mboot_2 -f /srv/boot.dump1 /boot

#2.最后再看一下是否有记录level1备份的时间点呢

[root@study~]#xfsdump -I

 

2.XFS文件系统还原:xfsrestore

[root@study ~]# xfsrestore -I        <==用来察看备份文件资料

[root@study ~]# xfsrestore [-f 备份文件] [-L S_label] [-s] 复原目录<==单一文件系统复原

[root@study ~]# xfsrestore [-f 备份文件] -r 待复原目录   <==透过增量备份文件复原系统

[root@study ~]# xfsrestore [-f 备份文件] -i 待复原目录    <==进入交互模式

选项与参数:

-I:跟xfsdump相同的输出,可查询备份数据,包括Label名称与备份时间等;

-f:后面接的就是备份文件;

-L:就是Session的Labelname,可用-I查询到的数据;

-s:需要接某特定目录,亦即仅复原某一个文件或目录之意;

-r:如果是用文件来储存备份数据,那这个就不需要使用,如果是一个磁带内有多个文件,需要这东西来达成增量恢复;

-i:进入交互模式,管理员使用的。

(1)用xfsrestore观察xfsdump后的备份数据内容

xfsrestore -I

(2)简单恢复level0的文件系统(完全备份文件)

xfsrestore -f /srv/boot.dump -L boot_all /boot

若仅复原备份文件内的grub2到/tmp/boot2/里面去的话,则为

xfsrestore -f /srv/boot.dump -L boot_all -s grub2 .tmp/boot2

(3)仅恢复增量备份资料

恢复增量备份文件与恢复单一文件系统类似,备份数据是由level0->level1->level2…进行,所以恢复也是类似。

xfsrestore -f /srv/boot.dump1 /tmp/boot

(4)仅恢复部分文件的xfsrestore交互模式

如果我们想要部分数据还原,但是我们又不知道备份文件里面有什么,就需要交互界面来做尝试。

#1.先进入备份文件内,准备找出需要备份的文件名数据,同时恢复到/tmp/boot3中

mkdir /tmp/boot3

xfsrestore -f /srv/boot.dump -i /tmp/boot3

========================= subtree selection dialog ==========================

 

the following commands are available:

pwd

ls [ <path> ]

cd [ <path> ]

add [ <path> ]       # 可以加入復原檔案列表中

delete [ <path> ]    # 從復原列表拿掉檔名!並非刪除喔!

extract              # 開始復原動作!

quit

help

ls

#此处全部省略

-> add grub

-> add grub2

-> add config-3.10.0-229.el7.x86_64

-> extract

 

四、光盘写入工具

1.mkisofs:建立镜像文件

[root@study ~]# mkisofs [-o 镜像文件] [-Jrv] [-V vol] [-m file] 待备份文件... \

>  -graft-point isodir=systemdir ...

选项与参数:

-o:后面接你想要产生的那个镜像文件的文件名;

-J:产生较兼容于windows机器的文件名结构,可增加文件名长度到64个unicode字符;

-r:透过RockRidge产生支持Unix/Linux的文件数据,可记录较多的信息(如UID/GID等);

-v:显示构建ISO文件的过程;

-Vvol:建立Volume;

-mfile:-m为排除文件(exclude)的意思,后面的文件不备份到镜像文件中;

-graft-point:graft有转嫁或移植或移植的意思。

光盘的格式一般称为iso9660,这种格式一般仅支持旧版的DOS文件名,亦即文件名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在。所以要加上-r这个选项。

一般情况下,所有被添加到镜像文件中的文件都会被放置到镜像文件的根目录。为了解决这个问题,可以使用-graft-point选项,利用如下方法来定义位于镜像文件中的目录:

镜像文件中的目录所在=实际Linux文件系统的目录所在

例如:/movies/=/stv/movies/(在Linux的/srv/movies内的文件,加至镜像文件中的/movies/目录)。

(1)制作/修改开机启动光盘映像

mkisofs -o /custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \

> -no-emul-boot -V 'CentOS 7 x86_64' -boot-load-size 4 -boot-info-table -R -J -v -T .

  1. cdrecord:光盘烧录工具
[root@study ~]# wodim --devices dev=/dev/sr0...            <==查询刻录机的BUS位置

[root@study ~]# wodim -v dev=/dev/sr0 blank=[fast|all]        <==擦除重复读写光盘

[root@study ~]# wodim -v dev=/dev/sr0 -format                 <==格式化DVD+RW

[root@study ~]# wodim -v dev=/dev/sr0 [可用选项功能] file.iso

选项与参数:

--devices:用在扫瞄磁盘总线并找出可用的刻录机,后续的装置为ATA接口;

-v:在cdrecord运作的过程中,显示过程;

dev=/dev/sr0:可以找出此光驱的bus地址,非常重要;

blank=[fast|all]:blank为擦除可重复写入的CD/DVD-RW,使用fast较快,all较完整;

-format:对光盘片进行格式化,但是仅针对DVD+RW这种格式的DVD;

[可用选项功能]主要是写入CD/DVD时可使用的选项,常见的选项包括有:

-data:指定后面的档案以数据格式写入,不是以CD音轨(-audio)方式写入;

speed=X:指定刻录速度,例如CD可用speed=40为40倍数,DVD则可用speed=4之类;

-eject:指定刻录完毕后自动退出光盘;

fs=Ym:指定多少缓冲存储器,可用在将映像档先暂存至缓冲存储器。预设为4m,一般建议可增加到8m,不过,还是得视你的刻录机而定。

针对DVD的选项功能:

driveropts=burnfree:打开BufferUnderrunFree模式的写入功能

-sao:支持DVD-RW的格式

(1)检测你的刻录机位置

文本模式的刻录确实比较麻烦,需要首先找到刻录机才可以。查询刻录机的方式为:

[root@study ~]# ll /dev/sr0

brw-rw----+ 1 root cdrom 11, 0 Jun 26 22:14 /dev/sr0 # 一般 Linux 光驱文件名

[root@demo ~]# wodim --devices dev=/dev/sr0

wodim: Overview of accessible drives (1 found) :

-------------------------------------------------------------------------

0  dev='/dev/sr0'      rwrw-- : 'ASUS' 'DRW-24D1ST'

-------------------------------------------------------------------------

注意:一定要有dev=/dev/xxx,否则系统会通知找不到光盘。

(2)进行CD/DVD的刻录工作

①先擦除光盘原始内容(只读光盘无需此操作)

[root@demo ~]# wodim -v dev=/dev/sr0 blank=fast

中间会跑出一堆信息告诉你擦除的进度,而且会有10秒钟的时间等待你的取消。

②开始刻录

[root@demo ~]# wodim -v dev=/dev/sr0 speed=4 -dummy -eject /tmp/system.img

③刻录完成,测试挂载一下,检查内容。

 

五、其它常见的压缩与备份工具

1.dd

在上一章,我们使用dd来创建了一个大文件。但是实际上,dd的关键作用在于备份,其可以读取硬盘设备的内容(几乎是直接读取扇区“sector”),然后将这个设备备份成一个文件。dd有很多用途,下面选取比较重要的几个讲述如下:

[root@study ~]# dd if="input_file" of="output_file" bs="block_size" count="number"

選項與參數:

if:输入文件(input file),也可以是设备;

of:输出文件(output file),也可以是设备;

bs:计划的一个block的大小,若未指定则预设为512bytes(一个sector的大小);

count:多少个bs的意思。

dd是一个一个扇区去读写,即使没有用到的扇区也被写入到备份当,所以产生的文件会跟原本硬盘一样大。不过dd就是因为不理会文件系统,单纯有啥记录啥,因此无论磁盘内的文件系统是否认识,它都可以备份和还原。

2.cpio

cpio可以备份任何东西,包括硬件设备文件。不过cpio有个大问题,那就是cpio不会主动的去找文件来备份。一般来说,cpio要配合类似find等可以找到文件名的命令来高速cpio应该被备份的数据在哪里。

[root@study ~]# cpio -ovcB  > [file|device] <==备份

[root@study ~]# cpio -ivcdu < [file|device] <==还原

[root@study ~]# cpio -ivct  < [file|device] <==查看

备份会使用到的选项与参数:

-o:将数据copy输出到文件或设备上;

-B:让预设的Blocks可以增加至5120bytes,预设是512bytes这样的好处是可以让大文件的储存速度加快(请参考i-nodes的概念)。

还原会使用到的选项与参数:

-i:将数据自文件或设备copy出来到系统当中;

-d:自动建立目录,使用cpio所备份的数据内容不见得会在同一层目录中,因此我们

必须要让cpio在还原时可以建立新目录;

-u:自动的将较新的文件覆盖较旧的文件;

-t:需配合-i选项,可用在查看以cpio建立的文件或设备的内容。

一些可共享的选项与参数:

-v:让储存的过程中文件名称可以在屏幕上显示;

-c:一种较新的portable format方式储存。

我们发现,上述的选项与指令中怎么会没有指定需要备份的数据呢?还有那个大于(>)与小于(<)是怎么回事呢?

因为cpio会将数据整个显示到屏幕上,因此我们可以通过将这些屏幕的数据重新导向(>)一个新的档案!至于还原呢?就是将备份文件读进来cpio(<)进行处理之意。

例如:找出/boot下所有的文件,并将其备份到/tmp/boot.cpio中去。命令如下:

[root@study ~]# cd /

[root@study /]# find boot -print

[root@study /]# find boot | cpio -ocvB > /tmp/boot.cpio

[root@study /]# ll -h /tmp/boot.cpio

-rw-r--r--. 1 root root 108M Jul  3 00:05 /tmp/boot.cpio

[root@study ~]# file /tmp/boot.cpio

/tmp/boot.cpio: ASCII cpio archive (SVR4 with no CRC)

我们使用find root来找到文件名,然后通过管道,就能讲文件名传送给cpio进行处理,最终得到/tmp/boot.cpio文件。为何要先转换到根目录再寻找boot呢,为何不直接寻找/boot呢?这是因为cpio很笨,它不会理会你给出的是绝对路径还是相对路径的文件名,所以即便你加上绝对路径的/开头,那么未来解开的时候,它也一定会覆盖掉原本的/boot。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux 鸟哥的linux私房菜
最后更新:2019年1月5日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
小花豆生活第-2天:“残酷”的军训! 莱芜赛区第四比赛日:天津VS河北,福建VS江苏 《鸟哥的Linux私房菜》(基础篇)笔记整理(第13章)Part.1 《鸟哥的Linux私房菜》(基础篇)笔记整理(第12章) 《鸟哥的Linux私房菜》(基础篇)笔记整理(第13章)Part.2 小花豆生活第7天:累并快乐着的第一周
标签聚合
python学习 linux Java 算法 鸟哥的linux私房菜 生活 学习 Python leetcode 高中
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号