2015-11-18 15:41:22 guoer9973 阅读数 572
  • framebuffer驱动详解-linux驱动开发第7部分

    本课程是linux驱动开发的第7个课程,主要内容是linux的framebuffer驱动详解,本课程带大家分析fb驱动的框架、构成以及一些代码细节,目标是让大家彻底掌握fb驱动在内核中的配置和移植方法、掌握显示设备驱动的关键点。

    6106 人正在学习 去看看 朱有鹏

1,首先要安装内核源码等准备工作。

具体见1-4部。点开看看

如果你想要动态加载的组建的话,直接跳过1就可以了。

2,新建一个test.c

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kthread.h>

MODULE_LICENSE("GPL");

static struct completion comp;
static struct task_struct *t;

static int hello_thread(void *arg)
{
        printk("wait_for_completion...");
        wait_for_completion(&comp);
        printk("done!\n");
        return 0;
}

int __init hello_completion_init(void)
{
        init_completion(&comp);
        t = kthread_run(hello_thread, NULL, "hello_thread");
        return 0;
}

void __exit hello_completion_eixt(void)
{
        complete(&comp);
        kthread_stop(t);
}

module_init(hello_completion_init);
module_exit(hello_completion_eixt);

3,创建Makefile文件

obj-m = test.o 
all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean: 
    rm -rf *.o *.ko *.mod.c *.mod.o modules.* Mod*

注意文件的书写规则。


规则
tab 命令

/usr/src/linux-source-3.2.0/linux-source-3.2.0,这个是内核解压后的文件路径。

4,用tmux 窗口执行make

make

5,安装生成的test.ko组件

insmod hello.ko 

6,查看组件是否启动成功

lsmod

7,查看打印信息

    查看模块信息:dmesg
    打印输出最近一次的信息: 
    dmesg | tail -f
    dmesg|grep action

注意需要开个tmux,先启动查看,因为安装后程序会立即执行。

8,打印信息

root@ubuntu-ts:~/linux-module# cat /proc/kmsg
<4>[15467.560074] done!
2016-04-27 20:21:47 AterMerry 阅读数 16993
  • framebuffer驱动详解-linux驱动开发第7部分

    本课程是linux驱动开发的第7个课程,主要内容是linux的framebuffer驱动详解,本课程带大家分析fb驱动的框架、构成以及一些代码细节,目标是让大家彻底掌握fb驱动在内核中的配置和移植方法、掌握显示设备驱动的关键点。

    6106 人正在学习 去看看 朱有鹏

初学linux,各种被虐,经过各种折腾,终于成功在centosos7上搭建好了vsftpd,把操作过程写出来,供大家参考!


#-------------------------------------------------------------------

#   实现的目标及场景:

#   在centos7上搭建ftp环境,配置vsftpd

#   创建账号Fuser并使用该账号登录

#   使用被动模式,端口区间:40000-41000

#-------------------------------------------------------------------

一:安装Vsftpd软件

安装vsftpd,并设置开机启动

#yum install -y vsftpd

#systemctl start vsftpd.service

#systemctl enable vsftpd.service

二:配置vsftpd环境

执行下边的命令,一行一行来。

#sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

#sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'

#echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300

#\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=Fuser

#\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES

#\nallow_writeable_chroot=YES

#\npasv_min_port=40000\npasv_max_port=41000

#\naccept_timeout=5\nconnect_timeout=1" >> /etc/vsftpd/vsftpd.conf

三:创建ftp用户

创建用户Fuser,一些写教程登录终端是/bin/false,我卡这半天,具体可以搜它和nologin的区别

#useradd Fuser -d /wwwroot -s /sbin/nologin

#chown Fuser.Fuser /wwwroot -R

#passwd Fuser

四:重启vsftp服务

systemctl restart vsftpd.service

注意,这里是centos的关于vsftp重启,以前的命令在这不管用!如果开了防火墙,记得把相应的端口添加进去,本场环境中涉及21,40000-41000


可能会用到的:

彻底删除用户:#userdel -rf Fuser   //强制删除用户及相关目录文件 

变更用户属性:#usermod -s /sbin/nologin Fuser

查看当前服务:#netstat -lntp


感谢a49410330 bowen680等朋友对本文错误的指正!

2014-02-24 21:17:26 hustyangju 阅读数 1792
  • framebuffer驱动详解-linux驱动开发第7部分

    本课程是linux驱动开发的第7个课程,主要内容是linux的framebuffer驱动详解,本课程带大家分析fb驱动的框架、构成以及一些代码细节,目标是让大家彻底掌握fb驱动在内核中的配置和移植方法、掌握显示设备驱动的关键点。

    6106 人正在学习 去看看 朱有鹏
一个基本的Linux设备驱动开发环境由宿主机和目标机组成,宿主机就是用来做驱动开发工作的主机,目标机就是用来运行和测试设备驱动的主机,在宿 主机上需要有开发工具(gcc,gdb,make等)和linux源码(版本要对应目标机上的linux内核),而目标机上只要运行linux即可。由于 步骤有所不同,下面分为普通Linux设备驱动开发和嵌入式Linux设别驱动开发两种情况来讲述环境的搭建和驱动程序的编译:


(一)普通Linux设备驱动开发


普通Linux主要是区分于嵌入式Linux(一般指uClinux),在这种开发中宿主机和目标机可以是一台主机,即在本机上开发编译然后在本机 上加载运行(Linux设备驱动也可以直接编译进内核,但为了开发工作方便,一般采用动态加载的方式),当然也可以是两台主机,如果是两台主机的话,要保 证宿主机上的linux源码的版本号与目标机中的linux内核版本一致。普通Linux设备驱动开发的步骤如下:


在宿主机上安装开发工具和下载linux源码(要求版本号和目标机上的linux内核版本一致)。开发工具主要有gcc、gdb、make等,这些工具在redhat或fc中默认就安装了,在debian或Ubuntu中可以通过下面这个命令安装:
apt-get install build-essential
linux源码可以通过以下几种途径获得:
直接去www.kernel.org下载
通过包管理工具下载源码,在debian和Ubuntu中可以通过下面这个命令下载,
apt-get install linux-source-(版本号) ,下载后的文件在/usr/src目录中,解压到该目录即可
将源码解压到/usr/src/目录后,进入linux-source-(版本号)目录中执行下面几个命令:
make oldconfig
make prepare
make scripts


编写Linux驱动程序,以一个最简单的hello.c为例,hello.c的内容如下:


#include "linux/init.h"
#include "linux/module.h"


static int hello_init(void)
{
    printk(KERN_ALERT "Hello World linux_driver_module\n");
    return 0;
}


static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbey linux_driver_module\n");
}


module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lpj");
写Makefile文件,一个示例如下,里面各项参数根据实际情况更改:


#sample driver module
obj-m := hello.o
KDIR = /usr/src/linux-source-2.6.24/


all:
     $(MAKE) -C $(KDIR) M=$(PWD)


.PHONY:clean
clean:
     rm -f *.mod.c *.mod.o *.ko *.o *.tmp_versions
编译,在hello.c和Makefile所在目录下执行 make 即可,编译后在当前目录生成hello.ko文件
加载并测试:加载使用insmod或modprobe命令来实现,如在当前路径执行如下代码:
insmod hello.ko 或 modprobe hello
注意,如果在虚拟终端加载内核的话,将看不到内核打印信息,因为内核打印信息不会输出到虚拟终端,而是输出到/proc/kmsg文件中,所以可以通过以下方式查看内核信息:
cat /proc/kmsg 会一直打印,需要Ctrl-C手动终止
dmesg 或 dmesg | tail -N ,N为一数字,表示显示最后N行
卸载:使用rmmod命令卸载驱动模块,如 rmmod hello
(二)嵌入式Linux设备驱动开发


这种开发中一般目标机为带有嵌入式处理器的开发板,而宿主机为PC,开发环境需要在宿主机上搭建,嵌入式Linux设备驱动开发的步骤如下:


在宿主机上下载嵌入式Linux的源码,并安装嵌入式Linux开发工具(针对于不同的嵌入式处理器,工具也有所不同,如对应于Arm的arm-gcc系列,针对nios2处理器的nios2-cc系列)
编写Linux设备驱动驱动程序,还以上面给出的hello.c为例,将该文件复制到(linux 源码目录)/drivers/(目标文件夹)/中
在(目标文件夹)中创建Makefile和Kconfig(菜单配置文件),内容分别如下:


#makefile
obj-$(CONFIG_HELLODRV) += hello.o


#Kconfig
menu  USER_DEVICE_DRIVERS
config HELLODRV
 tristate "Hello"
 ---help---
   This is a sample driver programme.
endmenu
注意,如果Kconfig文件中的"tristate"写成"bool",则该模块只能选为Y(编译进内核)或N(不选择),不能选为M(编译为模块,可动态加载)


修改上层目录( linux内核源码目录/drivers/)中的Makefile和Kconfig文件,Makefile中加入如下语句:


#makefile
obj-y += (目标文件夹)


(此处有多种写法,这只是其中一种)
Kconfig中加入如下语句:


#Kconfig
source "drivers/(目标文件夹)/Kconfig"
编译内核:几个基本的命令及选择界面如下:
make menuconfig 执行到这一步后,会看到下面这个界面:
      
其中Vendor/Product...是选择处理器厂家和型号的,Kernel/Library...是配置应用程序的,按空格键或回车键可以进入选项进行配置,用上下键移动到Kernel/Library...菜单上,按空格或回车进入下面的内核配置界面:
   




在该界面有两个Customize...选项,第一个是选择自定义配置内核,第二个是选择自定义配置应用程序,按空格键可以选择这些选项,选择后按 exit键退出,选择是否保存的时候选择“yes“,如果选择了第一个Customize...,则退出后会自动进入内核配置界面,如下图:
 




该界面有很多选项,这里不细讲,我们要配置驱动模块,就用上下键移动到Device Drivers上,然后按回车或空格键进入,设备驱动配置界面如下图:
 




这里就是linux-2.X/drivers/Kconfig里的内容了,下面那个绿色的V(+)表示这一页没显示完,可以用下键继续往下浏览,找到我们自己的菜单名,然后按回车或空格进入,我的模块配置界面如下:
 




用M键使选项前的尖括号里显示M表示该模块要动态加载,也可以按y键选择直接编辑进内核,选择完后exit退出,选择yes或no的对话框通一选yes。
make romfs #第一次编译内核前一定要有该步骤
make


加载测试:将生成的zImage文件下载到开发板,开发板上的嵌入式Linux启动后可以用insmod或modprobe加载驱动模块,测试完毕后可以通过rmmod命令卸载驱动模块
2019-04-30 18:15:51 chenweida1 阅读数 1394
  • framebuffer驱动详解-linux驱动开发第7部分

    本课程是linux驱动开发的第7个课程,主要内容是linux的framebuffer驱动详解,本课程带大家分析fb驱动的框架、构成以及一些代码细节,目标是让大家彻底掌握fb驱动在内核中的配置和移植方法、掌握显示设备驱动的关键点。

    6106 人正在学习 去看看 朱有鹏

第一章:搭建渗透环境测试环境

(1)主要内容是介绍如何安装kali linux,包括在物理机和虚拟机上的安装和VMware Tools的安装,过程和网上教程大同小异。
(2)介绍什么是渗透测试
定义:通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。包括对系统的任何弱点、技术缺陷或漏洞的主动分析。
(3)两种渗透测试
白盒测试:攻击者将拥有所有内部知识,并可以在不需要害怕被阻断的情况吓任意地实施攻击。
黑盒测试:模拟攻击者的入侵行为,并在不了解客户组织大部分信息和只是的情况下实施的。

第二章:WiFi网络的构成

(1)WiFi是一个建立于IEEE 802.11标准的无线局域网络(WLAN)设备。
(2)WiFi工作原理AP(Access Point 例如:无线路由器)每100ms将SSID(Service Set Identifier)经由beacons(信号台)封包广播一次。
(3)802.11协议介绍以及无线AP的配置:TP-LINK 和 360随身wifi

第三章:监听WiFi网络

#3.1 网络监听原理:
由于无线网络中信号的发送是广播模式发送,所以用户可以在传输过程中截获这些信息。想要截获所有信号,需要将无线网卡设置为监听模式。
#3.2 配置无线网卡
查看无线网卡配置:iwconfig
查看本机网络配置:ifconfig
#3.3 设置监听模式
3.3.1 Aircrack-ng工具介绍
Aircrack-ng是一款与802.11标准的无线网络分析有关的安全软件
功能:侦测、数据包嗅探、WEP和WPA/WPA2-PSK破解
3.3.1 启动监听模式
通过ifconfig查看网卡是否被识别以及是否已经激活,如果没有激活:ifcongfig wlan0 up
先将可能影响监听模式的进程kill :airmon-ng check kill
开启监听模式:airmon-ng <start|stop> <interface> [channel]

在这里插入图片描述如图使用iwconfig可以看到网卡模式为Monitor(监听)。

#3.4 扫描网络范围
3.4.1 使用airodump-ng 扫描
airodumo-ng是Aircrack-ng套件中的一个小工具,该工具主要用来捕获802.11数据报文。通过查看捕获报文,扫描附近AP的SSID、BSSID、信道、客户端的MAC及数量等。
语法:airodump-ng [选项] <interface name>
选项有很多,通过–help来查看
我们使用:airodump-ng wlan0mon 来扫描附近的无线网络,手动Ctrl+C停止扫描
在这里插入图片描述可以看到扫面结果,下面对每个参数进行介绍:
BSSID:这个很简单,我们可以看出来是AP的MAC地址
PWR:网卡报告信号水平,信号值越高说明离AP越近。如果所有PWR=-1,说明我们的网卡驱动不支持报告信号水平。
Beacons:无线AP发出的通告编号,每个接入点(AP)在最低速率(1M)时差不多每秒会发送10个左右的beacon,所以他们在很远的地方就被发现。
#Data:被捕获到的数据分组的数量
#/s:过去10秒钟内每秒捕获数据分组的数量
CH:信道号(从Beacon中获取)
MB:无线AP所支持的最大速率
ENC:使用的加密算法体系
CIPHER:检测到的加密算法
AUTH:使用的认证协议
ESSID:也就是所谓的SSID号,就是我们的wifi名称

第四章:捕获数据包

#4.1 数据包简介
三种包:握手包(4次握手),非加密包,加密包

#4.2 使用Wireshark捕获数据包
Wireshark是一个最知名的网络封包分析软件
4.2.1 捕获非加密模式的数据包
4.2.2-4.2.4介绍了三种数据包的捕获,需要注意的是想要显示某个wifi下数据包协议的话,需要加入wifi的名称和密码。加入方式:编辑–首选项–protocols–IEEE 802.11 --Edit…–添加。

#4.3使用伪AP

第五章: 分析数据包

#5.1 Wireshark简介
Wireshark可以截取网络封包,并且可以尽可能详细地显示网络封包资料。
设置捕获过滤器,捕获所需要的网络包,通过显示过滤器过滤出想要分析的包。主要是学习其中的过滤语法,可以参考其他人写的CSDN博客,例如:https://blog.csdn.net/wojiaopanpan/article/details/69944970 还有很多类似的博客。
接下来介绍了WEP WPA认证包的捕获和分析。以及如何在wireshark捕获信息界面中增加内容列。

第六章:获取信息

对渗透目标进行信息收集,BSSID,ESSID,CH,等等。

第七章:WPS加密模式(重要)

#7.1 WPS简介
WPS加密使得用户连接wifi时很方便,用户只需按路由器上的WPS键或者输入PIN码就可以接入wifi。
WPS的漏洞:PIN码时8位十进制构成,最后一位可以由前面7位算出,验证时先检测前4位,如果一致会得到一个反馈信息,所以只需扫描10000次就一定可以获得前4位PIN码,接下来最多扫描1000次既可确定后四位,pin时速度最快为2s/pin。这样即可暴力破解PIN码。一般路由器中显示的QSS功能就是WPS功能。
#7.3破解WPS加密
7.3.1 使用Reaver工具暴力破解
该工具会尝试一系列的PIN码,正确破解PIN码值后,还可以回复WPA/WPS2密码.

reaver -i wlan0mon -b 11:22:33:44:55:66 -p 12345678(#PIN)

如上,如果知道PIN码是可以秒解wifi密码的。如果没有的话只能通过暴力破解,需要很长时间,只要用户有足够长的时间,就可以破解出WPA或WPA2的密码。

reaver -i wlan0mon -b 11:22:33:44:55:66 -vv

在不知道PIN码的情况下,通过暴力破解,大约需要2~14小时。期间可能会将路由器PIN死,所以我们需要保存PIN进度,用以以后再PIN(这部分看网上教程)。值得注意的是,通过该方法破解路由器需要一个较强的信号。

#7.3.2 使用Wifite工具
该工具只支持Linux操作系统,
– i 指定捕获无线接口
– c 指定信道
– b 指定AP的BSSID
– wpa 指定仅扫描wpa加密网络
– wps 指定仅扫描wps加密网络
– pps 指定每秒注入的包数
通常该工具可以用来判断网络中那些AP使用了何种加密方式,使用下面命令简单快捷判断出附近wifi的加密类型

wifite -pps 660

第八章:破解WEP加密WIFI

WEP加密原理:基于RC4的序列加密算法,使用密钥生成伪随机密钥流序列与明文数据进行异或来生成密文。
现在通过WEP加密的wifi很少了,主要是该加密方式已经出现100%破解办法,通过抓包注入,获取足够的数据包,即可彻底瓦解WEP机密。
破解方法:使用Aircrack-ng 工具破解
(1):airmon-ng check kill 杀掉影响网卡的进程
(2):airmon-ng start wlan0 开启网卡监听模式
(3):airodump-ng wlanmon 扫面附近wifi,查看有没有WEP可以利用,Ctrl+C结束
(4):airodump-ng --ivs -w 保存文件名 --bssid 11:22:33:44:55:66 -c 信道 wlan0mon
当Data达到一定数量时,一万以上,可以尝试进行密码破解。
(5):aircrack-ng wireless-01.ivs 通过所捕获的数据包进行破解,无需密码字典,因为通过大量的数据包可以推出WEP加密的密钥。

第九章:破解WPA加密wifi

由于WPA/WPA2加密的wifi破解需要用到强大的密码字典,本章介绍了生成字典的工具crunch,下面介绍简单用法:

crunch [minimum length] [maximum length] [character set] [options]
eg: crunch 1 6 abcdef -o password.txt 通过-o指定保存文件
cat /usr/share/crunch/charset.lst 中有很多库文件,我们可以通过-f指定使用哪一个库文件
eg: crunch 1 8 -f /usr/share/crunch/charset.lst mixalpha -o password.txt

– b 指定文件最大字节数
– c 指定密码个数
– d 限制出现相同元素的个数。例如-d 3 就不会出现zzffgg
– 0 指定输出位置
– p 定义密码元素

使用Aircrack-ng工具破解WPA
(1):为了尽可能不被发现,首先修改当前网卡的MAC地址

airmon-ng stop wlan0mon (关闭监听模式)
macchanger --mac 00:11:22:33:44:55 wlan0(修改无线网卡的MAC)

(2):杀影响进程,开监听

airmon-ng check kill
airmon-ng start wlan0

(3):查看附近wifi

airodump-ng wlan0mon    (此时也可以用wifite查看附近WiFi,能够给出目标是否WPS加密,但是给不出mac)

(4):选择渗透目标,监听捕获握手包

airodump-ng -c 11 -w huawei --bssid 目标mac wlan0mon (指定信道,保存文件,目标AP的mac)

(5):另外开启一个终端,使用泛洪攻击目标WiFi,迫使客户端重连以获取握手包

aireplay-ng -0 10 -a 目标MAC -c 客户端mac wlan0mon
-0 表示使用泛洪攻击模式,后面的10表示攻击次数,如果是0的话表示循环攻击
-a 指定攻击目标APmac
-c 指定攻击客户端mac

这个时候客户端会被迫重连,正常情况在另一个终端就可以看到获取到了握手包。获取到了4个文件,我们需要 .cap文件来破解密码。
(6):通过.cap文件破解密码

aircrack-ng -w /usr/share/wordlists/rocrack.txt  huawei.cap    (-w 指定使用字典)

接下来就是跑字典了,如果字典中有该密码,就可以成功破解,没有的话就需要换字典了。

总结:

攻击流程:
(1)对于WEP加密模式:使用aircrack-ng工具包就可以破解了,具体操作上文有详细步骤
(2)对于WPA/WPA2加密模式,判断是否有WPS加密,如果有的话可以使用PIN码暴力破解,这种办法只要时间足够,是一定可以破解出来的。如果目标AP没有使用WPS加密的话,我们采用一般的暴力破解办法进行破解。通过抓取握手包进行暴力破解,这种情况主要是看字典强度还有看运气,如果密码过于复杂,字典中没有对应的密码,则不可能破解出来的,对于一个普通的密码,只要有一个好的密码字典,还是可以轻而易举得破解出来的。字典可以使用crunch构造,例如构造出手机号码字典用于尝试破解WiFi。

防范措施:
(1):尽量不要使用WEP加密模式,该模式极度不安全,能够利用漏洞达到100%破解
(2):关闭WPA/QSS(WPS),针对WPS漏洞的利用可是可以100%破解WiFi密码的
(3):禁止SSID广播
(4):启用MAC地址过滤
(5):设置比较复杂的密码

新的改变

ON我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ(z)=0tz1etdt&ThinSpace;. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

2018-08-22 10:32:37 smallcolzacio 阅读数 3320
  • framebuffer驱动详解-linux驱动开发第7部分

    本课程是linux驱动开发的第7个课程,主要内容是linux的framebuffer驱动详解,本课程带大家分析fb驱动的框架、构成以及一些代码细节,目标是让大家彻底掌握fb驱动在内核中的配置和移植方法、掌握显示设备驱动的关键点。

    6106 人正在学习 去看看 朱有鹏

LINUX Shell脚本编程实例详解(一)上

ping命令测试网段内主机的2例详解

使用linux已经有10来年了但是一直止于各种服务器的搭建和环境的调优,能力不能得到提升,今天突然下定决心学习Shell脚本编程,因此以网上广为流传的《Shell脚本100例》为基础学习、实验和笔记。

废话不说上栗子。

使用vim shell100-scanip-1.sh命令创建脚本文件

#!/bin/bash
for i in {1..254}
do
        ping -c2 -i0.3 -W1 192.168.18.$i &>/dev/null
        if [ $? -eq 0 ];then
                echo "192.168.18.$i is up"
        else
                echo "192.168.18.$i is down"
        fi
done

解释:

第一句 #!/bin/bash

在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
目前研发送测的shell脚本中主要有以下两种方式:
(1) #!/bin/sh
(2) #!/bin/bash

止于使用sh还是bash来解释的区别后边抽时间专门写一篇文章,这里不在详述

第二句 for i in {1..254}

            do

            ......

           done

是循环结构,for循环类似程序中的for循环,i为循环变量,循环变量值在in{}里依次循环,循环体从do开始,done结束。

第三句ping -c2 -i0.3 -W1 192.168.18.$i &>/dev/null

ping命令参数

-c2:设置完成要求回应的次数;这里设置为2是考虑网络路由的问题导致第一次ping不能返回而第二次ping可以返回的情况(具体原因请自行阅读网络原理)

-i0.3:指定收发信息的间隔时间(秒计),这里的时间是综合考虑ping命令返回超时的时间和每次ping的时间,原则应为:返回超时<i参数<ping命令发送间隔。

-W1:即超时时间(毫秒计),这里表示超时时间为1毫秒,也就是说一毫秒后ping命令结束。

&>/dev/null :表示将标准输出stdout和标准错误输出stderr重定向到null的设备中,也就是说不打印到屏幕上了,而且也不保存文件(放到名叫null的设备中——无底洞永远消失)。

第四句判断语句

if [ $? -eq 0 ];then
           ......     
        else
         ......       
        fi

if判断语句 [ ]中为判断表达式,$?表示最后运行是否成功,成功为0 不成功为1

第五句、第六句

echo "192.168.18.$i is up"、echo "192.168.18.$i is down"表示回显到屏幕上$i表示当前i变量的值

栗子1解释完毕,待续

 

没有更多推荐了,返回首页