Other

Linux命令CMD

10分钟让你掌握Linux常用命令(+1万+++收藏) 1、常用Linux命令 2、windows下CMD常用命令 文章目录 一、目录操作二、文件操作三、文件内容操作(查看日志,更改配置文件)1、grep(检索文件内容)2、awk(数据统计)3、sed(替换文件内容)4、管道操作符`|` 四、系统日志位置五、创建与删除软连接六、压缩和解压缩七、Linux下文件的详细信息八、常用的docker容器的命令:九、运维常用命令1、查看服务器端口号是否可用 十、yum常用命令十一、其他命令1、xargs 十二、Linux内核优化十三、用户权限操作1、添加用户2、添加组 十四、TOP1、统计信息区2、进程信息区 十五、文件安装1、文件下载(lrzsz) 十六、文章PDF版本 一、目录操作 pwd 查看当前工作目录 clear 清除屏幕 cd ~ 当前用户目录 cd / 根目录 cd - 上一次访问的目录 cd .. 上一级目录 123456 查看目录内信息 ll 查看当前目录下内容(LL的小写) 1 创建目录 mkdir aaa 在当前目录下创建aaa目录,相对路径; mkdir ./bbb 在当前目录下创建bbb目录,相对路径; mkdir /ccc 在根目录下创建ccc目录,绝对路径; 123 递归创建目录(会创建里面没有的目录文件夹) mkdir -p temp/nginx 1 搜索命令 find / -name 'b' 查询根目录下(包括子目录),名以b的目录和文件; find / -name 'b*' 查询根目录下(包括子目录),名以b开头的目录和文件; 12 重命名

linux驱动移植-LCD驱动触摸屏驱动案例

一、触摸屏种类 触摸屏的基本原理是,用手指或其他物体触摸安装在显示器前端的触控屏时,所触摸的位置(以坐标形式)由触摸屏控制器检测,并通过接口(如RS-232串行口)送到CPU,从而确定输入的信息。 触摸屏系统一般包括触摸屏控制器(卡)和触摸检测装置两个部分: 触控屏控制器(卡)的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行: 触摸检测装置一般安装在显示器的前端,主要作用是检测用户的触摸位置,并传送给触控屏控制卡; 1.1 电阻触摸屏 电阻类触摸屏的关键在于材料科技。电阻屏根据引出线数多少,分为四线、五线、六线等多线电阻触摸屏。下面以四线电阻式触摸屏为例介绍。 四线电阻式触摸屏的结构如图,在玻璃或丙烯酸基板上覆盖有两层透平,均匀导电的ITO层,分别做为X电极和Y电极,它们之间由均匀排列的透明格点分开绝缘。其中下层的ITO与玻璃基板附着,上层的ITO附着在PET薄膜上。X电极和Y电极的正负端由“导电条”(图中黑色条形部分)分别从两端引出,且X电极和Y电极导电条的位置相互垂直。引出端X-,X+,Y-,Y+一共四条线,这就是四线电阻式触摸屏名称的由来。 当有物体接触触摸屏表面并施以一定的压力时,上层的ITO导电层发生形变与下层ITO发生接触,该结构可以等效为上图中的电路。 计算触点的X,Y坐标分为如下两步:  计算Y坐标,在Y+电极施加驱动电压Vdrive, Y-电极接地,X+做为引出端测量得到接触点的电压,由于ITO层均匀导电,触点电压与Vdrive电压之比等于触点Y坐标与屏高度之比; 计算X坐标,在X+电极施加驱动电压Vdrive, X-电极接地,Y+做为引出端测量得到接触点的电压,由于ITO层均匀导电,触点电压与Vdrive电压之比等于触点X坐标与屏宽度之比;   所以: $$x=\frac{V_{x_+}}{V_{driver}} \times width_{screen}$$ $$y=\frac{V_{y_+}}{V_{driver}} \times height_{screen}$$ 测得的电压通常由ADC转化为数字信号,再进行简单处理就可以做为坐标判断触点的实际位置。 四线电阻式触摸屏除了可以得到触点的X/Y坐标,还可以测得触点的压力,这是因为top layer施压后,上下层ITO发生接触,在触点上实际是有电阻存在的,如图3的Rtouch。压力越大,接触越充分,电阻越小,通过测量这个电阻的大小可以量化压力大小。 1.2 电容触摸屏 是利用人体的电流感应进行工作的。电容式触摸屏是是一块四层复合玻璃屏,玻璃屏的内表面和夹层各涂有一层ITO,最外层是一薄层矽土玻璃保护层,夹层ITO涂层作为工作面,四个角上引出四个电极,内层ITO为屏蔽层以保证良好的工作环境。 当手指触摸在金属层上时,由于人体电场,用户和触控屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分从触控屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。 二、硬件分析 2.1 硬件接线 由于我们Mini2440开发板使用的S3C2440 SOC,只支持四线电阻式触摸屏。这里我们使用的LCD型号为LCD-T35(TD035STEB4),该4线连接在S3C2440的AIN4~AIN7引脚上,该引脚专门是用来接收模拟输入信号: 引脚说明: YM: (Y Minus)触摸屏的Y坐标的负线,也可以用Y -表示; YP : (Y Power)触摸屏的Y坐标的正线, 也可以用Y+表示; XM: (X Minus)触摸屏的Y坐标的负线, 也可以用X-表示; XP : (X Power)触摸屏的Y坐标的正线, 也可以用X+表示; 2.2 x坐标获取 如下图, 把XP接3.3V 、XM接0V,YP和YM悬空。我们以按压X坐标的中间位置,X层和Y层便闭合,此时YP就会输出当前X坐标值的1.66V给CPU 。 2.3 y坐标获取 如下图, 把YP接3.

java学习笔记day03

java语言基础知识 1,类型转换知识 ···自动类型转换 类型范围小的变量,可以直接赋值给类型范围大的变量  自动类型转换的底层原理:  char可以直接赋给int,因为char类型是字符,在底层是二进制数据,char是两个字节,int是4个字节  总结:  ···表达式的自动类型转换   总结:  ···强制类型转换 类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。 解决办法:  PS: 万能提示键:alt+回车   总结: 2,运算符的使用 ···基本算数运算符   总结:  

linux转移字符及单引号双引号区别

shell中有两类字符,一种是普通字符,即普通纯文本(literal);另一类即元字符(meta),是shell的保留字符,在shell中有着特殊意义。 元字符有时会造成麻烦,比如说想要在程序中用美元符号打印商品价格,但是这一符号在shell中一般被用来提取变量的值。 为了消除这些特殊符号的功能,就必须对其进行转义和引用。  转义: 转义是指使用转义符引用单个字符,从而使其表达单纯的字符的字面含义。Shell中的转义符是反斜线“\”,使用转义符的目的是使转义符后面的字符单纯地作为字符出现,而不解释其特殊的含义 shell特殊字符及转义    引用:引用是指将字符串用某种符号括起来,以防止特殊字符被解析为其他意思。  Shell中一共有4种引用符,分别是双引号、单引号、反引号(在键盘上和波浪号位于同一个键)和转义符。其中双引号又叫“部分引用”或“弱引用”,可以引用除$符、反引号、转义符之外的所有字符;单引号又叫“全引用”或“强引用”,可以引用所有字符;反引号则会将反引号括起的内容解释为系统命令。  1、部分引用(双引号) 部分引用是指用双引号括起来的引用。在这种引用方式中,$符、反引号(`)、转义符(\)这3种特殊字符依然会被解析为特殊意义。  2、全引用(单引号) 全引用是指用单引号括起来的引用。单引号中的任何字符都只当作是普通字符(除了单引号本身,也就是说单引号中间无法再包含单引号,即便用转义符转义单引号也不行)。所有在单引号中的字符都只能代表其作为字符的字面意义。  3、命令替换 命令替换是指将命令的标准输出作为值赋给某个变量。比如,在某个目录中输入ls命令可查看当前目录中所有的文件,但如何将输出存入某个变量中呢?这就需要使用命令替换了,这也是Shell编程中使用非常频繁的功能。 Shell中有两种方式可以完成命令替换,一种是反引号(`),一种是$(),使用方法如下: `command` 或者 $(command) 二者区别 ``在多种UNIX Shell中均可使用,而$()只能在Bash Shell中使用。 $()可以嵌套使用,而``不可以。  

解决VMware运行MS-DOS 5以上版本使用较大内存开机卡HIMEM内存自检的问题

回想上世纪末各种计算机设备内存刚刚开始容量增长的时代,软件的更新似乎显得有些跟不上硬件的进步。与此同时伴随着的自然是硬件升级的需求。在这样的前提下,“扩充内存”和“扩展内存”的概念便应运而生。电脑不再局限于只能使用固定容量的内存,而是可以通过安装扩充内存的方式,来按需求增加内存以满足使用需要。由此引申出了很多规范和标准。然而,使用扩充内存必须在计算机中安装专门的扩充内存板,而且还要安装管理扩充内存板的管理程序。由于扩充内存是在扩展内存之前推出的,由于扩充内存使用起来比较麻烦,所以在扩展内存出现后不久就被淘汰了。虽然相比之后的扩展内存这样的设计还是有一定局限性,但在一定程度上确实开创了硬件升级的先河。 更先进的扩展内存技术只能用在80286或更高档次的机器上,几乎所有使用DOS的机器上超过1M的内存都是扩展内存。扩展内存同样不能被DOS直接使用,而是需要使用相应的管理程序进行处理。于是在DOS5.0以后出现了Himem.sys这个扩展内存管理程序,我们可以通过它来管理扩展内存。 可参考:百度百科-扩充内存 而时过境迁,计算机发展至如今,8G16G等内存早已屡见不鲜。而这对于像我这样总想怀旧的人有些阻碍。我在虚拟机里安装这些老旧系统时,总会想着将内存分配的多一点(让这些老玩意见识见识什么叫超级计算机(雾))那么以MS-DOS 6.22为例,每次开机我便不得不面临一个很该死的问题——它开机会做扩展内存自检…… 也就是说,每次开机,你都要忍受这么一行字闪啊闪闪得没完没了... HIMEM is testing extended memory... 原因很简单——VMware的虚拟机认为你设置的内存里只有640KB是系统内存,剩下的所有都被系统当作扩展内存来用了... 于是,一开机HIMEM便会尽职尽责地扫描你的那些“扩展内存”...以那个年代程序的处理速度检测如今的大容量内存,那用时可想而知。 如何解决的关键在于两点:第一点就是降低虚拟机的硬件兼容性以更切合老式的设备加速处理过程,第二点就是——干脆把它关掉。 1.修改虚拟机的硬件兼容性 虚拟机->管理->更改硬件兼容性... 进入 更改硬件兼容性向导,把兼容性调到Workstation 5.x 或 6.x的版本 至此虚拟机硬件版本已经修改了,当然一些功能也会丢失。如果有需要,完事后可以再改回来。这样做是为了取得更相似于老式设备的兼容性,让我们先进入系统。 接下来的任务是混进系统修改启动设置。鉴于它会卡在这是因为内存太高,我们先暂时把内存调至最低。 现在开机,稍加等待便可以看见C:\>了,毕竟这个内存不大。 那现在我们可以修改config.sys来关掉这个开机检查项: edit config.sys 你会看到有一行如下所述: DEVICE=C:\DOS\HIMEM.SYS 这一行便是开机会启动HIMEM管理程序的原因。它有一个参数可以取消检查,我们只需要把这个参数加上: DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF 输入后按Alt便可以将焦点切换至菜单。那么File->Save,最后Exit。 重启,问题解决。之后内存,系统兼容性,我们就都可以改回去了。 参考资料:1 2

Linux高级I/O函数 mmap, munmap

目录存储映射的基本概念这种共享映射有什么用?mmap()和munmap()函数mmap与页大小四种映射共享文件映射私有文件映射共享匿名映射私有匿名映射 存储映射的基本概念 存储映射(memory map)简称mmap,是直接将实际存储的物理地址映射到进程空间,而不使用read/write函数。这样,可以省去中间繁杂调用过程, 快速对文件进行大量输入输出。 mmap() 用于申请一段内存空间,将一个文件或Posix共享内存区对象映射到进程的地址空间;munmap() 释放由mmap创建的这段内存空间。二者是实现存储映射的关键。 注意:用mmap时,open()不可省,read()/write()可省。 根据内存背后有无实体文件与之关联,映射可以分为两种: 文件映射:内存映射区域有实体文件与之关联。mmap系统调用将普通文件的一部分内容直接映射到进程的虚拟地址空间。一旦完成映射,就可以通过在相应的内存区域中操作字节来访问文件内容。这种映射也称为基于文件的映射。 匿名映射:匿名映射没有对应的文件。这种映射的内存区域会被初始化成0。 使用mmap内存映射文件的示意图: 可以看到,调用mmap,会申请一段内存空间(文件的内存映射部分),并且这段内存会自动映射到指定的文件内存映射部分。返回的是这段内存的起始地址,对应文件的内存映射部分offset处。 一个进程映射的内存可以与其他进程中的映射共享物理内存。所谓共享是指各个进程的页表条目指向RAM中的相同分页。 两个进程内存共享映射: 这种进程间的内存映射的共享,通常发生在两种情况; 1)通过fork,子进程继承父进程通过mmap映射的副本; 2)多个进程通过mmap映射同一个文件的同一个区域; 这种共享映射有什么用? 我们知道,在Linux中,进程地址空间是相互隔离的,一个进程不能直接操作另一个进程的虚拟地址空间中的内存。而mmap给出2种解决方案:前面的1)和2)。 在1)中,通过fork子进程继承父进程mmap的副本。对于malloc出来的内存,栈变量,父子进程存在写时复制现象,也就是说是两份内存。而对于mmap创建的共享内存,可以做到进程间共享同一个共享映射。 私有映射(MAP_PRIVATE) 映射内容上发生的变更对其他进程不可见,也就是说堆映射内容的改变是私有的。对文件映射,变更不会同步到底层文件。内核用写时复制技术完成这个任务。 共享映射(MAP_SHARED) 在映射内容上发生的所有变更,对所有共享同一个映射的其他进程都可见。对文件映射,变更会同步到底层文件。共享映射用于进程间通信。 内存映射根据有无文件关联,分成文件与匿名;根据映射是否在进程间共享,分成私有和共享。两两组合,有4种情形内存映射: 变更可见范围 文件 匿名 共享 内存映射IO,进程间共享内存 进程间共享内存 私有 根据文件内存初始化内存 内存分配 mmap()和munmap()函数 声明如下 #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *addr, size_t length); 参数

md5加密- java与python的区别

python的md5加密 import hashlib name = '哈喽啊' obj = hashlib.md5() # md5加盐 obj.update('xxx'.encode('utf-8')) # md5加密 obj.update(name.encode('utf-8')) # 获取加密后的数据,以字节的形式展示, data = obj.digest() print(data) # b'\x1c\x7f\xd2\x051\x87\xb2\x88\xe7\xfc\xb9\x8e\xf9\x9a\x94\xe1' # 获取加密后的数据,以字符串的形式展示,本质是将 data 以16进制展示 res = obj.hexdigest() print(res) # 1c7fd2053187b288e7fcb98ef99a94e1 java的md5加密: import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Base64; public class Hello { public static void main(String[] args) throws NegativeArraySizeException { String name = 哈喽啊; try { MessageDigest instance = MessageDigest.getInstance(MD5); // md5的加盐 instance.update(xxx.getBytes()); // md5加密的字节数组 byte[] nameBytes = instance.

加密算法 -- SHA-256

java的 SHA-256加密,几乎与 MD5加密的写法一样: import java.security.MessageDigest; import java.util.Arrays; public class Hello { public static void main(String[] args) { String name = 哈喽啊; try { MessageDigest instance = MessageDigest.getInstance(SHA-256); // md5的加盐 instance.update(xxx.getBytes()); // md5加密的字节数组 byte[] nameBytes = instance.digest(name.getBytes()); System.out.println(Arrays.toString(nameBytes));// 打印结果:[-16, 34, -105, -18, -53, -91, 98, 48, -40, 115, 11, 25, 22, 7, -108, 5, 24, 51, -38, 36, 17, 94, -3, -102, -6, -76, -61, -77, -29, 4, 107, 84] String res = new String(nameBytes); System.

Apache Flink系列-⑤应用程序构建块

应用程序构建块 有状态函数为构建事件驱动的应用程序提供了一个框架。这里,我们将解释有状态函数体系结构的重要方面。 事件入口 有状态函数应用程序直接位于事件驱动的空间中,因此自然要从将事件引入系统开始。 在有状态函数中,将记录接收到系统中的组件称为事件入口。这可以是任何内容,从卡夫卡主题到消息队列,再到http请求——任何可以将数据输入系统并触发初始函数开始计算的内容。 有状态函数 图的核心是同名的有状态函数。 把这些当做你服务的基石。它们可以任意地相互传递消息,这是该框架摆脱传统的流处理世界观的一种方式。这些函数不需要建立静态数据流DAG,而是可以以任意的、可能是循环的、甚至是往返的方式相互通信。 如果您熟悉actor编程,那么它在组件之间动态传递消息的能力上确实有一些相似之处。然而,有一些显著的差异。 持续状态 首先,所有函数都有本地嵌入状态,称为持久状态。 在失败的情况下,将回滚整个世界状态(持久状态和消息),以模拟完全无故障的执行。 这些保证不需要数据库,相反,有状态函数利用了Apache Flink经验证的快照机制。 事件出口 最后,应用程序可以通过事件出口将数据输出到外部系统。 当然,函数可以执行任意计算,并且可以做任何他们喜欢的事情,包括进行RPC调用和连接到其他系统。通过使用事件出口,应用程序可以利用构建在Apache Flink连接器生态系统之上的预构建集成。