- 国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异
彩虹小黑馬
妙用编辑器编辑器linuxmacosEverEditEmEditorNotepad
1换行符格式1.1应用场景 稍微了解计算机历史的人都知道,计算机3大操作系统:Windows、Linux/Unix、MacOS,这3大系统对文本换行的定义各不相同,且互不相让,导致在文件的兼容性方面存在一些问题,比如它们对换行的定义:Windows:回车符(CR)+换行符(LF)Linux/Unix:换行符(LF)MacOS:回车符(CR)在Windows上编写的代码,默认使用CR+LF表示换行
- 【Unix/Linux】$bash-3.2是什么
程序员赵大宝
Linuxlinuxunix
bash-3.2指的是BourneAgainShell(Bash)的3.2版本。Bash是一个广泛使用的Unixshell和命令语言,是GNU项目的一部分,也是许多Linux发行版和Unix系统的默认shell。以下是一些关于Bash3.2的要点:1.兼容性:Bash3.2是Bash的一个较旧版本,但它仍然提供了与早期Unixshell(如BourneShell)的兼容性。2.特性:尽管Bash3
- 普通用户使用docker时得权限问题
古冉
dockerlinux运维
安装完docker,运行指令时,出现了以下错误提示:意思是试图连接unix:///var/run/docker.sock:,但权限不够。如下图所示:原因分析:这是因为你当前的用户没有这个权限。默认情况下,docker命令会使用Unixsocket与Docker引擎通讯。而只有root用户和docker组的用户才可以访问Docker引擎的Unixsocket。出于安全考虑,一般Linux系统上不会直
- [Go] golang缓冲通道实现管理一组goroutine工作
程序员老狼
通道1.当一个资源需要在goroutine之间共享时,通道在goroutine之间架起了一个管道2.无缓冲通道和有缓冲通道,make的第二个参数就是缓冲区大小3.无缓冲通道需要发送和接收都准备好,否则先执行的goroutine会阻塞等待4.有缓冲的通道,在缓冲区没满之前,发送和接收动作都不会阻塞,空的时候接收才会阻塞time.Now().Unix()当前时间戳time.Millisecond毫秒t
- 利用Shell指令通过函数获取用户UID
嘿嘿就是写!
服务器数据库linux
一、引言在Unix和Linux操作系统中,每个用户都有一个唯一的标识符(UID)。UID是用户账号的一个重要属性,用于区分不同的用户。在Shell脚本中,我们经常需要获取特定用户的UID。通过编写一个简单的Shell函数,我们可以轻松地获取任何用户的UID。二、获取用户UID的Shell函数以下是一个简单的Shell函数,用于获取指定用户的UID:get_user_uid(){#参数为用户名use
- 不同command line interface中 python Venv虚拟环境的激活方式
Cmmm丶
cmltoolpythonpython开发语言
GitBash.venv_name/Scripts/activateWindownsCMLvenv_name\Scripts\activatePowershellvenv_name\activate.ps1Unixsourcevenv_name/bin/activate————————我目前奥尔堡大学做博士后(我的googlescholar,我的Github),关注能源转型过程中的环境、经济问题。
- Oracle日常运维(一线DBA必备技能)(一)
小小不董
OracleDB管理及运维oracle运维dba数据库
Listitem本篇结合自己经历,介绍下Oracle日常运维(一线DBA必备技能)的一些基本项目。1.日常巡检基础管理1.1DB实例状态巡检检查实例-linux/unix操作系统层面ps-ef|grepsmon/pmon;登录数据库(注意备库)selectopen_modefromv$database;OPEN_MODE--------------------READWRITE监听状态lsnrct
- Shell 脚本:环境变量使用详解
IT策士
shell脚本从入门到精通chromelinux容器云原生服务器
Shell脚本:环境变量使用详解在编写脚本和执行Shell命令的过程中,你可能已经发现了环境变量的存在。环境变量是Linux和Unix系统中的一个重要组成部分,它们定义了系统操作、命令行界面以及系统中运行的其他程序的行为。更准确地说,它们就像是操作系统的DNA,决定了系统的行为和性能。因此,了解环境变量以及如何使用它们是每个Linux和Unix用户的必备技能。这篇文章旨在提供一个简明的环境变量的介
- el-date-picker 月份选择器范围禁用
@阿猫阿狗~
vue.js前端javascript
el-date-picker月份选择器范围禁用data(){return{//只能选择2026以后包含2026pickerOptions:{disabledDate:(time)=>{letmin='2026-01'letnow=this.timeCopymin=moment(min).unix()letmax=moment(now).unix()time=time.getTime()/1000r
- Linux find命令详解
我是唐青枫
Linuxlinux运维服务器
一、命令介绍Linuxfind命令是类unix操作系统中最重要和最常用的命令行实用程序之一。find命令用于根据指定的条件搜索和定位与参数匹配的文件和目录列表。find命令提供了广泛的选项,允许用户在不同的条件下使用它。它使个人能够根据多种标准搜索文件,包括权限、用户、组、文件类型、日期、大小和各种其他参数。find作为程序员工作台项目的一部分出现在Unix版本5中,由DickHaight与cpi
- Linux ps命令详解(不是PS)
我是唐青枫
Linuxlinux服务器网络
一、命令介绍ps命令是ProcessStatus的缩写,是一个命令行实用程序,用于显示或查看与Linux系统中运行的进程相关的信息。命令原理:ps是通过读取虚拟文件:/proc拿到进程数据的,不需要给ps设置任何的权限就可以运行。更深层次的后面再分析。ps可以接受几种不同的选项:UNIX选项,带有前导-风格的,也叫Standard-Style(标准风格)。BSD选项,不带前导-风格的,也叫BSD-
- python func for shell operation
weixin_33682719
收集一篇python中shell操作解释地比较全面的文章,我主要需要用到shel中的cp命令和rm命令===========华丽丽分割线,转载内容如下============os.chkdir(path)转换到目录path下。os.system('mda')可以直接创建目录。os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos
- Linux中getifaddrs函数
花落已飘
Linux网络编程实战linux网络网络协议
文章目录**函数原型****参数****返回值****释放资源****`structifaddrs`结构****示例代码****输出示例****相关函数****总结**getifaddrs是Linux(以及其他Unix-like系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,例如IP地址、子网掩码、广播地址等。函数原型#include#include
- Linux 网络抓包分析工具tcpdump详细使用方式 使用方式与wieshark协同工作
浩浩测试一下
网络&&抓包arm开发网络安全安全系统安全web安全安全架构
目录tcpdump工具详解一、核心原理1.抓包机制2.协议解析二、基础使用方式1.基本语法2.常用选项3.过滤表达式三、高级使用案例案例1:捕获TCP握手与挥手案例2:检测网络重传问题案例3:提取HTTP请求内容案例4:分析DNS查询问题案例5:统计TCP连接状态四、性能优化技巧五、与Wireshark的协作六、总结tcpdump工具详解tcpdump是Linux/Unix系统中最强大的网络抓包分
- Nacos安装
勾魂皮卡丘
运维java
1.源码安装1.预备环境Nacos依赖Java环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置Maven环境,请确保是在以下版本环境中安装使用:1.64bitOS,支持Linux/Unix/Mac/Windows,推荐选用Linux/Unix/Mac。2.64bitJDK1.8+;下载&配置。3.Maven3.2.x+;下载&配置。1.JDK配置[root@nacos~]#tar
- excel unix时间戳 日期时间 互转
Thomas2143
总结
实现互转(秒或者毫秒):2010-10-1800:00:00128733120012873312002010-10-1800:00:00目录unix时间戳:unix时间戳转日期日期转unix时间戳linux日期unix时间戳互转单元格格式时间列unix时间戳列unix时间戳:从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数中国属于东八区即时间戳转换为日期后需要+8hours(
- vi 是 Unix 和 Linux 系统中常用的文本编辑器
qq_25467441
unixlinux服务器
`vi`是Unix和Linux系统中常用的文本编辑器,它有几种不同的模式,其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行,以下是一些常用的`vi`命令来控制光标位置:•h,j,k,l:分别用于将光标向左、向下、向上、向右移动一个字符。•Ctrl+f:向下滚动屏幕,但不移动光标位置。•Ctrl+b:向上滚动屏幕,但不移动光标位置。•G:将光标移动到文件的开头。•gg(两个g):将光标
- Linux定时任务crontab使用教程
weixin_34290000
python操作系统
2019独角兽企业重金招聘Python工程师标准>>>在日常的开发中,crontab(时程表)应该是最常用的指令之一,下面我们来看看百度百科的解释:crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρνο),原意是时间。通常,crontab
- 网络安全协议之比较(SSH、 PKI、SET、SSL)
zstarstone
转载网络安全
转自:http://blog.chinaunix.net/uid-20663154-id-1585302.html一、SSH介绍什么是SSH?传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-mi
- Linux内核学习之--模块与设备
文艺小少年
Linux内核机制及驱动分析内核linuxsysfs
一、引言本章讨论内核的四种成分设备类型:为了统一普通设备的操作做的分类模块:Linux内核中按照需求加载和卸载目标源码的机制内核对象:内核数据结构中支持面向对象的简单操作,还维护对象之间的父子关系sysfs:表示系统中设备树的一个文件系统二、设备类型Unix系统中,所有设备被分为以下三类块设备字符设备网络设备块设备blkdev,通常可再’/dev/block’目录下查看,寻值单位为块(相当于硬件概
- Ubuntu 下 nginx-1.24.0 源码分析 - ngx_max_sockets
若云止水
ubuntunginxlinux
在Nginx的源代码中,ngx_max_sockets全局变量的声明位于os/unix/ngx_os.hexternngx_int_tngx_max_sockets;定义在os/unix/ngx_posix_init.cngx_int_tngx_max_sockets;ngx_max_sockets定义了Nginx能够同时使用的最大Socket文件描述符数量。它确保Nginx不会超过系统或配置允许
- 简记Python多进程知识点
Jo乔戈里
python开发语言
一、进程创建的方式1、fork特点:①直接拷贝当前进程中几乎所有变量的值(注意不是执行主进程中的代码);②可以在代码中任何位置开启;③可以自动拷贝文件对象,锁等特殊对象,也可以通过参数传递;④只能在unix系统上使用,注意不支持Windows;⑤启动速度快;为了说明第一点,通过看下述代码预测一下输出结果:importmultiprocessingdeftask():file_obj.write("
- Go语言入门:从安装到环境配置
程序员
Go语言入门:从安装到环境配置一、初识Go语言嘿,还记得2009年Go语言横空出世的时候吗?那可真是让整个编程界都沸腾了!这个由Google的三位大神级工程师-RobertGriesemer、RobPike和KenThompson(对,就是那个写出Unix的大佬)一起搞出来的新语言,简直让人眼前一亮。说实话,他们最初就是想解决自己在Google内部开发时的烦恼,特别是在处理多核、网络通信和大型项目
- linux设备驱动分类总结 1
蓝灯ing
1.字符驱动设备指存取时没有缓存的设备,采用字节流访问的设备,如按键,串口,声卡,触摸屏等2.块驱动设备有缓存来支持,块设备必须能够随机存取(randomaccess),字符设备则没有这个要求。UNIX下,采用一个数据块来进行访问,数据块一般为512字节,1K等,linux下,可以采用任意尺寸的数据来访问,字符设备和块设备的区别在于内核描述它们的使用的数据结构是不一样的,访问它们的操作接口是不一样
- Ubuntu Crontab 日志在什么位置 ?
鸠摩智首席音效师
ubuntu
Cron是类unix操作系统中基于时间的作业调度器。用户使用这个实用工具来安排作业(命令或脚本)在固定的时间、日期或间隔定期运行。Crontab是一个配置文件,它指定按给定时间表定期运行的shell命令。在管理Linux系统(尤其是Ubuntu和Debian)时,了解在哪里可以找到crontab日志对于系统管理员和开发人员来说至关重要。Cron日志默认位置Ubuntu和Debian中,CronJo
- Linux shell脚本介绍
huhy~
Linuxlinux运维服务器
shell入门案例变量与环境运算符与字符串处理条件判断与控制语句数组与函数进程管理与调试文本处理练习案例批量创建用户监控系统资源Shell是Linux和Unix系统中的命令解释器(CommandInterpreter),它是用户与操作系统之间的桥梁,允许用户输入命令来控制计算机的行为。Shell既可以用于交互式操作(输入命令后立即执行),也可以用于编写Shell脚本,实现自动化任务。不同的Linu
- python GUI经验贴搜集
流水石板路
python基本用法
Python提供了多个图形开发界面的库,几个常用PythonGUI库如下:Tkinter:Tkinter模块(Tk接口)是Python的标准TkGUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里。Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。wxPython:wxPython是一款开源软件,是P
- Centos/Debian 占用CPU100%挖矿病毒清理
EruruI
运维linux运维
Cetnos/Debian占用CPU100%挖矿病毒清理①top命令查看病毒进程,现在它一般由十位数随机字符串组成找到进程ID,例如7538,执行:systemctlstatus7538其一般会有一个守护进程,如:'cgroup…/system.slice/cron.service7542xxx7538xxx’在/tmp/.X11-unix/下一般会有记录守护进程id的文件,不为空的里面好像有加密
- linux用户用户组与ACL
网络安全(king)
网络工程师网络安全黑客linux运维服务器
使用者ID:UID与GID#在使用Linux的过程中,经常会遇到各种用户ID(useridentifier,UID)和组ID(groupidentifier,GID),Linux也是通过对这些ID的管理实现的自主访问控制(discretionaryaccesscontrol,DAC)。用户ID(英语:useridentifier,一般缩写为UserID或UID),全称用户标识符,在类UNIX系统中
- 《how linux work》A. 参考文献
linux
附录A.参考文献Abrahams,PaulW.,和BruceLarson,《UNIX快速入门指南》,第2版。波士顿:Addison-Wesley专业出版社,1995年。Aho,AlfredV.,BrianW.Kernighan,和PeterJ.Weinberger,《AWK编程语言》。波士顿:Addison-Wesley,1988年。Aho,AlfredV.,MonicaS.Lam,RaviSet
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include