Linux中详细而确实的分析以及备份系统的登录文件

登录文件就是记录系统活动信息的几个档案,例如: 何时,何地, 何人做了什么动作, 也就是什么时候哪个程序做了什么样的行为,发生了何种的事件

LInux主机中在背景之下有很多的daemons同时在工作着,这中工作中的程序总是会显示一些讯息,这些讯息被记录到登录档文件中,记录这些系统

的重要讯息就是登录文件的工作. 当你的某个服务(sendmail)无法启动的话,那么查询一下/var/log/maillog通常可以得到不错的解答,又比如WWW

服务(apache软件)在某个时刻流量特别大,你想要了解为什么时,可以透过登录档去找出该时段是哪些IP在联机与查询的网页数据为何,就可以知道

原因了,通常只要通过屏幕上面的错误讯息,登录文件的错误讯息,可以解决大部分的Linux问题

登录文件可以帮助我们了解很多系统重要的事件,包括登入者的部分信息,因此登录文件的权限通常被设定为仅有root能够读取而已,

通常的几个登录档包括以下这些:

/var/log/cron 你的crontab排程有没有实际被进行,进行过程有没有发生错误,你的/etc/crontab是否撰写正确

/var/log/dmesg 记录系统在开机的时候核心侦测过程所产生的各项信息,由于默认是将开机时核心的硬件侦测过程取消显示,因此额外将

数据记录一份在这个过程中

/var/log/lastlog 可以记录系统上面所有的帐号最近一次登录系统的相关信息,lastlog命令就是利用这个档案的记录信息来显示的

/var/log/maillog或/var/log/mail/*

记录邮件的往来信息,其实主要是记录sendmail(SMTP 协议提供者)与dovecot(POP3 协议提供者)所产生的讯息,SMTP是发信所使用的通讯

协议,POP3则是收信使用的通讯协议,sendmail与dovecot则分别是两套达成通讯协议的软件

/var/log/messages 这个档案几乎记录了全部系统发生的错误讯息(或者重要的信息) 如果系统发生莫名的错误时,这个档案一定要查询看看

/var/log/secure 基本上,只要涉及需要输入帐号密码的软件,当登录时(不管登录正确或错误)都会被记录在此档案中,包括系统的login程序

图形接口登入所使用的gdm程序,su ,sudo等程序,还有网络联机的ssh,telnet等程序,登录信息都会被记载在这里

/var/log/wtmp, /var/log/faillog:这两个档案可以记录正确登录系统者的帐号信息与错误登录时所使用的帐号信息,我们在last就是读取wtmp

来显示的,这对于一般帐号者的使用行为有帮助

/var/log/httpd/* /var/log/news/* /var/log/samba/* :

不同的网络服务会使用它们自己的登录档案来记载他们自己所产生的各项讯息,上述的目录内则是个别服务所制定的登录档

这些登录档是如何产生的呢?

基本分为两种:一种是软件开发商自行定义写入的登录档与相关格式,例如www软件的apache服务,另一种是由Linux distribution提供的

登录档管理服务来统一管理,你只要将讯息丢到这个服务后,他就会自己分门别类的将各种讯息放置到相关的登录档去,syslogd这个服务

就是来统一管理登录档的

除了syslogd之外,我们的核心也需要额外的登录服务来记录核心产生的各项服务来记录核心产生的各项服务,这个专门记录核心信息的登录

文件服务就是klogd,所以说,登录档所需要的服务主要是syslogd与klogd这两者,由于登录档天天都有,你的登录档文件的容量就会很大

如果登录文件容量太大,可能会导致大档案读写效率不佳,因为要从磁盘读入内存,越大的档案消耗内存量越多,你需要对登录档备份和更新

可以通过logrotate这个来自动化处理登录文件容量与更新的问题,logrotate将旧的登录档更改名称,然后建立一个空的登录档,如此一来,新

的登录文件将重新开始记录,将旧的登录档留下一阵子,如果旧的保留了一段时间没有问题,就可以让系统自动的将他砍掉,免得占用

很多宝贵的硬盘空间

针对登录文件所需的功能 ,我们需要的服务和程序有

syslogd : 主要登录系统与网络等服务的讯息

klogd :主要登录核心产生的各项信息

logrotate : 主要在进行登录文件的轮替功能

ps aux | grep syslog 查询服务有没有启动

chkconfig --list syslog 查看在那些启动类别下会启动此服务

例如 执行 cat /var/log/secure

输出  Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session opened for user root by (uid=0)

解释  由 www 这部主机的 atd[PID 为 18701] 传来的消息,这个消息是透过 pam_unix 这个模块所提出的,讯息内容为 root (uid=0) 这个账号已经开启atd 的活动了

其实还有很多的信息值得查阅的,尤其是/var/log/messages的内容,

1.当你的系统似乎不太正常时

2.某个daemon老是无法正常启动时

3.某个使用者老是无法登入时

4.某个daemon执行过程中老是不顺畅时

反正觉得系统不太正常,就得要查询查询登录档就是了.

syslog的配置文件 : /etc/syslog.conf

这个是syslogd这个daemon的配置文件,我们知道syslogd可以负责主机产生的各个信息的登录,而这些信息本身是有【严重等级】之分的

而且资料最终要传送到那个档案去是可以修改的,所以每个Linux distributions放置的登录档档名可能会有所差异

基本上syslog针对各种服务与讯息记录在某些档案的配置文件就是/etc/syslog.conf,

这个档案的规定语法是
(1) 什么服务 (2)什么等级讯息 (3)需要被记录在哪里(装置或档案) 这三个咚咚

服务名称

syslog本身有规范一些服务,可以透过这些服务来储存系统的讯息,syslog认识的服务有以下这些:

auth 主要与认证有关的机制,例如 login ssh su 等需要帐号/密码的咚咚

cron 就是例行性工作排程 cron/at 等产生讯息记录的地方

daemon 与各个daemon有关的讯息

kern 就是核心产生讯息的地方

lpr 打印机相关的讯息

mail 邮件收发有关的讯息记录

news 新闻组服务器有关的东西

syslog 就是syslogd这支程序本身产生的信息

user uucp local0 - local7 与unix like机器本身相关的一些讯息

上面就是syslog自行制定的服务名称,软件开发商可以透过呼叫上述的服务名称来记录他们的软件,举例来说,sendmail与postfix及dovcot

都是与邮件有关的软件,这些软件在设计登录文件记录时,都会呼叫syslogd内的mail服务名称,所以上述的三个软件产生的讯息在syslog

看起来,就会是mail类型的服务,所以,将各种类别的服务之登录文件,记录在不同的档案里面,就是/etc/syslog.conf 所要作的规范了

syslog将讯息分为7个主要等级

info, notice, warning,err,ciit,alert, emerg(panic)除了这些等级,还有就是两个特殊的等级,那就是debug (错误侦测等级) 与 none (不需登录等级)

例如我们想要作一些错误侦测,或者忽略掉某些服务的信息

需要留意一下讯息等级之前的【. = !】的链接符号

. 代表比后面还要高的等级(含该等级)都会被记录下来,例如mail.info就是指该信息等级高于info含本身时,就会被记录下来的意思

.= 代表所需要的等级就是后面接的等级而已,其他的不要

.! 代表不等于,亦即除了该等级外的其他等级都记录

讯息记录的文件名或装置或数据

档案的绝对路径:通常就是放置在/var/log里头的档案

打印机或其他 例如/dev/lp0 这个打印机装置

使用者名称:显示给用户

远程主机 例如@ www.baidu.test 当然也要对方主机支持才行

*:代表目前正在线的所有人,类似于wall这个指令

syslog.conf

mail.info /var/log/maillog 任何大于info等级含info等级的讯息都会被记录到后面接的档案之中,

将新闻资料及例行性工作排成的讯息放入到 /var/log/cronnews的档案中 ,但是这两个程序的警告讯息则记录在/var/log/cronnews.warn中

那么设定syslog.conf

news.* , cron.*  /var/log/cronnews

news.=warn; cron.=warn /var/log/cronnews.warn

记录所有的信息,但是不想要记录cron, mail , news等信息

*.*, news,cron,mail.none  /var/log/messages

*.*, news.none; cron.none; mail.none /var/log/messages

使用.分隔时,那么等级只要接在最后一个即可,如果是以; 来分的话, 那么就需要将服务与等级都写上去

1. #kern.*:只要是核心产生的讯息,全部都送到 console(终端机) 去。console 通常是由外部装置连接到系统

而来, 丼例来说,很多封闭型主机 (没有键盘、屏幕的系统) 可以透过连接 RS232 连接口将讯息传输到外部

的系统中, 例如以笔记本电脑连接到封闭主机的 RS232 插口。这个项目通常应该是用在系统出现严重问题而

无法使用默认的屏幕观察系统时, 可以透过这个项目来连接取得核心的讯息

2. *.info;mail.none;news.none;authpriv.none;cron.none:由亍 mail, news, authpriv, cron 等类别产生的讯

息较多, 并且已经写入底下的数个档案中,因此在 /var/log/messages 里面就不记录这些项目。除此之外的其

他讯息都写入 /var/log/messages 中。这也是为啥我们说这个 messages 档案很重要的缘故!

3. authpriv.*:认证方面的讯息均写入 /var/log/secure 档案;

4. mail.*:邮件方面的讯息则均写入 /var/log/maillog 档案;

5. cron.*:例行性工作排程均写入 /var/log/cron 档案;

6. *.emerg:当产生最严重的错误等级时,将该等级的讯息以 wall 的方式广播给所有在系统登入的账号得知,

要这举做的原因是希望在线的用户能够赶紧通知系统管理员来处理这举可怕的错误问题。

7. uucp,news.crit:uucp 是早期 Unix-like 系统进行数据传递的通讯协议,后来常用在新闻组的用途中。

news 则是新闻组。当新闻组方面的信息有严重错误时就写入 /var/log/spooler 档案中;

8. local7.*:将本机开机时应该显示到屏幕的讯息写入到 /var/log/boot.log 档案中;

9. 后面的 news.=crit、news.=err、news.notice 则主要在分别记录新闻组产生的不同等级的讯息。

上面的第四行关于mail的记录中,在记录前面有个减号是为了当产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中,等到

数据量够大才一次性的将所有数据都填入磁盘内,这样有助于登录文件的存取性能,但是由于讯息暂时记录在内存中,因此若不正常关机导致

登录信息未填回到登录档中,可能会造成部分数据的遗失

自己增加登录文件档案功能

如果有特殊的要求,需要特殊的档案来帮你记录时,可以修改syslog.conf ,如此一来,就可以重复的将许多的信息记录在不同的档案当中

以方便你的管理,下面将所有的信息写入到/var/log/admin.log

*.info   /var/log/admin.log

重启syslog服务就生效了

注意:syslog的登录档只要被编辑或wq过就无法继续记录,需要重新启动才行

为了保证登录档的安全性,可以将档案设置成以chattr设定i这个属性,不过此时也不能新增数据了,所以我们要使用a这个属性,这个档案

就只能被增加,而不能删除数据

chattr + a /var/log/messages

查看 lsattr /var/log/messages

加上这个属性后,登录档就仅能被增加了,不能被删除,直到root 取消这个a的参数 chattr -a /var/log/messages 之后,才能被删除或移动

所以如果root密码丢失,那么这个属性也不安全了

登录档服务器的设定

syslog.conf档案当中,可以将登录档传送到打印机或者远程主机上面去,那么当别人入侵时,也不怕了

我们的syslog本身就已经具有这个登录文件服务器的功能,只是默认并没有启动功能而已,Linux主机会启动一个端口来监听

那个预设的端口是UDP 514

Server 端的设定 修改syslogd的启动配置文件 通常在/etc/sysconfig

找到底下这一行

SYSLOGD_OPTIONS="-m 0"

# 改成底下这样子!

SYSLOGD_OPTIONS="-m 0 -r"

接着重新启动与观察syslogd

/etc/init.d/syslog restart

netstat -lunp | grep syslog

这样你的Linux主机已经可以接受来自其他主机的登录信息了,当然需要知道网络方面的相关基础,

Client端的设定

只要指定某个信息传送到这部主机即可,我们的登录档IP为192.168.1.100,而client端希望所有的数据都送给主机,可以在/etc/syslog.conf

里面新增这样的一行

*.*  @192.168.1.100,接着重新启动syslog后,就搞定了

登录档的轮替

假如已经利用chattr 设定 +a这个属性了,那么该如何logrotate的工作

logrotate这个程序是规定的时候到了之后才进行登录档的轮替,所以这个logrotate程序当然就是挂在cron底下进行的

仔细看/etc/cron.daily里面的档案,/etc/cron.daily/logrotate就是记录了每天要进行的登录档轮循的行为

logrotate 的配置文件

logrotate主要是针对登录档来进行轮替的动作,当然要记载什么状态下才将登录档进行轮替,那么logrotate这个程序的参数配置文件就是

/etc/logrotate.conf

/etc/logrotate.d/

那个logrotate.conf才是主要的参数档案,至于logrotate.d是一个目录,该目录的所有档案都会被主动的读入/etc/logrotate.conf当中来进行

在/etc/logrotate.d/里面的档案中,如果没有规定到的一些细部设定,则以/etc/logrotate.conf这个档案的规定来指定为默认值

多久进行一次这样的logrotate工作,这些都记录在logrotate.conf里面

logrotate.conf的内容

weekly <==预设每个礼拜对登录档进行一次 rotate 的工作

rotate 4 <==保留几个登录档呢?预设是保留四个!

create <==由亍登录档被更名,因此建立一个新的来继续储存之意!

#compress <==被更动的登录档是否需要压缩?如果登录档太大则可考虑此参数启动

include /etc/logrotate.d # 将 /etc/logrotate.d/ 这个目录中的所有档案都读进来执行 rotate 的工作!

/var/log/wtmp {   <==仅针对 /var/log/wtmp 所设定的参数

monthly           <==每个月一次,取代每周!

minsize 1M     <==档案容量一定要超过 1M 后才进行 rotate (略过时间参数)

create 0664 root utmp <==指定新建档案的权限与所属账号/群组

rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。

这个wtmp可记录登录者与系统重新启动时的时间与来源主机及登录期间的时间

由亍具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看档案容量

由亍仅保留一个登录档而已,不满意的话可以将他改成 rotate 5 吧!

其实我们可以像wtmp这样将所有的资料都写入/etc/logrotate.conf 但是这样会太复杂,尤其是当我们使用许多的服务在系统上面时

每个服务都要去修改/etc/logrotate.conf的设定也似乎不太合理,如果独立出来一个目录,那么就可以放置到/etc/logrotate.conf/当中

各个服务可以拥有自己的登录档轮替设定,你也可以自行修改成自己喜欢的样式

文件内容的格式是:

登录文件的绛对路径文件名 ... {

个别的参数设定值,如 monthly, compress 等等

}

[root@www ~]# vi /etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \   档名,可以使用空格符号分隔多个登录档

/var/log/boot.log /var/log/cron {

sharedscripts

postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null ||

true

/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null ||

true

endscript

}

执行脚本:可呼叫外部指令来进行额外的命令下达,这个设定与sharescripts。。。endscript设定合用才行

至于可用的环境为:

Prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;

Postrotate:在做完 logrotate 之后进行的指令,例如重新启动 (kill -HUP) 某个服务!

Prerotate 与 postrotate 对亍已加上特殊属性的档案处理上面,是相当重要的执行程序!

实例 接着该设定只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;

登录档轮替每周一次、保留四个、且轮替下来的登录档不进行压缩(未更改默认值);

轮替完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd

当遇上messages这个档案增加了chattr +a的属性,依据logrotate的工作原理,我们知道messages将会变更名成为messages.1

但是由于加上这个+a的参数,所以更名不成功,就要利用prerotate 与 postrotate 来进行登录档轮替前、后所需要作的动作

[root@www ~]# vi /etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \

/var/log/boot.log /var/log/cron {

sharedscripts

prerotate

/usr/bin/chattr -a /var/log/messages

endscript

sharedscripts

postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null ||

true

/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null ||

true

/usr/bin/chattr +a /var/log/message

endscript

}

在轮替前去掉a这个属性,轮替完成后再加上这个属性

那个 /bin/kill -HUP ... 的意义,这一行的目的在亍将系统的 syslogd重新以其参数档 (syslog.conf) 的资料读入一次,也可以想成是reload

由亍我们建立了一个新的空的记录文件,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误

logrotate [-vf] logfile

-v  启动显示模式,会显示 logrotate 运作的过程喔!

-f : 不论是否符合配置文件的数据,强制每个登录档都进行 rotate 的动作!

手动执行轮循 logrotate -v /etc/logrotate.conf

强制进行 logrotate 的动作  logrotate -vf /etc/logrotate.conf

由于logrotate的工作已经加入crontab里头了,每天系统都会自动的给他查看logrotate

只要注意一下那个/var/log/messages里头的字眼有:

Apr 8 15:19:47 www syslogd 1.4.1: restart (remote reception).

这说明syslogd重新启动的时候(就是因为/etc/logrotate.d/syslog的设定之缘故)

练习:

针对之前创建的 /var/log/admin.log来做轮循

chattr +a /var/log/admin.log

lsattr /var/log/admin.log

vi /etc/logrotate.d/admin

/var/log/admin.log {
monthly <==每个月迚行一次
size=10M <==档案容量大亍 10M 则开始处置
rotate 5 <==保留五个!
compress <==迚行压缩工作!
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/chattr +a /var/log/admin.log
endscript
}

测试一下 logrotate 相关功能的信息显示: logrotate -v /etc/logrotate.conf

lsattr /var/log/admin.log*

-----a------- /var/log/admin.log
------------- /var/log/admin.log.1.gz <==有压缩过喔! 注意 /etc/syslog.conf与/etc/logrotate.d/* 档案常常要搭配起来

分析登录档

例如之前谈过的last lastlog dmesg等等指令,这些数据非常的分散,如果你想要一口气读取所有的登录信息,可以使用logwatch

这个登录文件分析程序,可以通过该程序来了解登录文件信息

这个预设的logwatch这个套件所提供的分析工具,他会每天分析一次登录档案,并将数据以email的格式寄给root

虽然有logwatch这个工具,但是想要分析的数据毕竟和对方不同,可以自己写一个小程序用来分析自己的登录文件

这支程序分析的登录文件数据其实可以是固定的

/var/log/secure   /var/log/messages    /var/log/maillog

这三个文件包含的服务有pop3 mail ftp su 等会使用到pam的服务,都可以使用这个小程序

http://linux.vbird.org/download/index.php?action=detail&fileid=69

mkdir /usr/local/virus

tar -zxvf logfile-0.1-4-2.tgz -C /usr/local/virus 解压

cd /usr/local/virus/logfile

vi logfile.sh

email="root@localhost" <==大约在 93 行左右,请填入你的 email ,否则保留默认值

basedir="/usr/local/virus/logfile" <==保留默认值,除非你的执行目录不同于此!

vi /etc/crontab

10 0 * * * root /usr/local/virus/logfile/logfile.sh

# 增加这一行!让系统在每天的凌晨自己进行登录档分析!

1. 重要的登录记录文件 ( Secure file )

2. 使用 last 这个指令输出的结果

wtmp begins Wed Apr 8 15:19:47 2009

3. 将特重要的 /var/log/messages 列出来瞧瞧!

已经取消 crond 不 snmpd 的讯息

Apr 8 15:19:47 www syslogd 1.4.1: restart (remote reception).

Apr 8 15:34:25 www syslogd 1.4.1: restart (remote reception).

认识和分析系统日志和日志轮循相关推荐

  1. mySQL Slow Query Log Rotation(慢查询日志轮循设置)

    要分析公司网站MYSQL性能,常规MY.CNF调优是一方面,慢查日志分析也重要. 但现在日志太大了,作一个每天自动切割的任务.将脚本放在/etc/logrotate.d/. 如何分析导出日志,以后再写 ...

  2. Apache服务一日志轮询(cronolog)

    1.cronolog介绍 2.安装日志轮询工具cronolog 3.修改配置文件(%Y%m%d 按天轮询) 4.重启Apache服务 5.测试 6.轮询时间 6.1按周建立目录按天轮询 6.2按小时轮 ...

  3. 【Troubleshooting】用户组/权限_导致grid日志不轮循清理_Bug 9595783

    解决方法: 1.修改用户组/权限 root:root cd $GRID_HOME/log/`hostname`/crsd ; chown root:root * cd $GRID_HOME/log/` ...

  4. Nginx的继续深入(日志轮询切割,重写,负载均衡等)

    Nginx的访问日志轮询切割 通常什么情况Nginx会把所有的访问日志生成到一个制定的访问日志文件access.log里面,但时间一长,日志个头很大不利于日志的分析和处理. 有必要对Nginx日志进行 ...

  5. Python学习笔记-DNS域名轮循业务监控

    大部分的DNS解析是一个域名对应一个IP地址,但是通过DNS轮循技术可将一个域名对应多个IP地址,这样可以实现简单且高效的负载平衡,但是轮循技术有一个缺点就是当目标主机不可用时,不能自动的删除,所以引 ...

  6. apache的“按周配置访问日志轮询”,需要安装cronolg软件

    在学习第9课课前×××时,3月18日遇到过的1个问题有必要记录一下. 在这部分的答案讲解视频里,最后1题的"上机考试"题,第2题要求:apache的虚拟主机"按周配置访问 ...

  7. apache虚拟主机、日志轮询、日志统计、去版本优化

    一.虚拟主机 1.基于域名的虚拟主机 www.zhang.com   /var/html/www blog.zhang.com  /var/html/blog bbs.zhang.com   /var ...

  8. 日志分析篇---Linux日志分析

    日志分析篇-Linux日志分析 文章目录 日志分析篇---Linux日志分析 前言 一.日志简介 二.日志分析技巧 1.常用的shell命令 2.日志分析技巧 三.我的公众号 前言 Linux系统拥有 ...

  9. 【日志分析】Linux日志分析

    0x00 前言 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 本文简介一下Linux系统日志及日志分析技巧. 0x01 日志简介 日志默认存 ...

最新文章

  1. oracle ddl会被什么阻塞,MySQL Online DDL与DML并发阻塞关系总结
  2. 科沃斯机器人电池激活_扫地机器人充不进去电怎么办
  3. golang 开源代理
  4. [20150611]优化sql遇到问题.txt
  5. Vue_(Router路由)-vue-router路由的基本用法
  6. 【C++深度剖析教程1】C++中的经典问题解析-c++中的对象的构造顺序与析构顺序
  7. Maven搭建Nexus私服
  8. CC视频CTO栗伟:CDN系统架构及CC视频应用实践
  9. 弹出模态窗口,关闭并刷新页面
  10. Maven: git-commit-id-plugin插件
  11. Python list 初始化技巧
  12. 数组的 sort() 方法详解
  13. 【剑指 offer】(二十一)—— 包含 min 函数的栈
  14. java8 中的时间和数据的变化
  15. HDU 1181.变形课-并查集
  16. python判断键盘输入_python实时检测键盘输入函数的示例
  17. 100%快速解决谷歌翻译无法使用的问题,附修复工具
  18. 【数据结构】给定中序序列,有多少种前序序列
  19. matlab建立机器人模型,matlab 机器人工具箱8-通过URDF建立机器人模型
  20. python实现网页微信登录_django 微信网页授权登陆的实现

热门文章

  1. 朋友圈营销鱼龙混杂 微信商业化谨慎前行
  2. Python小白逆袭大神[作业]Day5-综合大作业
  3. 3dmax导入Sketchup 模型位置错乱的解决方法
  4. 使用插件(layui.css)对原本样式的影响
  5. 手机秒变鸿蒙,华为雄心不小!鸿蒙要做PC系统?手机秒变“电脑主机”
  6. 【转】漫谈iOS程序的证书和签名机制
  7. 海洋工作室——网站建设专家:扁鹊三兄弟的故事 与 目前中国现状惊人的相似!...
  8. moonlight进行英伟达显卡的win10桌面串流
  9. List和Set的特点对比
  10. 今日头条视频如何消重