首页 文章 精选 留言 我的

精选列表

搜索[Linux],共10000篇文章
优秀的个人博客,低调大师

17.Linux shell编程(通过Makefile看Android.mk文件)

(创建于2018/2/11 上午8:12:32) Makefile文件 //递归展开式,可以引用还没有定义的变量,展开是引用时展开 1 str1=$(str2) 2 str2=hello //直接展开式,必须引用定义好了的变量,定义之后就会展开 4 str3:=android 5 str4:=$(str3) 6 str5:=$(str1) world //变量的追加 8 str5 +=,nice to meet you //自定义函数 10 myfun=$2 $1 //将自定义函数返回值赋给一个变量 11 param=$(call myfun,20,10) 12 13 test: 14 @echo $(str1) 15 @echo $(str4) 16 @echo $(str5) 17 @echo $(param) //调用自定义函数,call是调用函数的关键字 18 @echo $(call myfun,40,30) Android.mk //调用my-dir函数,返回Android.mk文件所在的目录,my-dir是内置函数,将目录赋值给变量LOCAL_PATH, //放在第一行,地址当前所在目录 LOCAL_PATH := $(call my-dir) #ffmpeg lib //include $(CLEAR_VARS) 编译模块时,清空LOCAL_MODULE等参数,每个模块单独编译 //每次编译一个模块时,要清空上一个模块的变量信息,重新设置 include $(CLEAR_VARS) //模块名称,编译生成后的模块名 LOCAL_MODULE := avcodec //编译需要的源文件 LOCAL_SRC_FILES := libavcodec-56.so ////include file Makefile可以引入其他的Makefile文件 include $(PREBUILT_SHARED_LIBRARY) #myapp include $(CLEAR_VARS) LOCAL_MODULE := myffmpeg LOCAL_SRC_FILES := dn_ffmpeg_player.c ##-landroid参数 for native windows LOCAL_LDLIBS := -llog -landroid -ljnigraphics //需要的头文件 LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/ffmpeg LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/libyuv //编译需要的动态库 LOCAL_SHARED_LIBRARIES := avcodec avdevice avfilter avformat avutil postproc swresample swscale libyuv include $(BUILD_SHARED_LIBRARY)

优秀的个人博客,低调大师

我把Linux系统上面误删的数据找回来了

一、背景 突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了,之前又没有做过数据恢复的测试,然后我找到了一款数据恢复的软件,成功把删除的大部分数据找回来了,我的数据恢复过程如下。 二、安装恢复软件 1、epel 仓库安装 如果我们的源里面添加了 epel 仓库的话,我们可以直接使用下面的命令安装。 yum install extundelete -y 2、源码编译安装 wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 yum -y install bzip2 e2fsprogs-devel e2fsprogs gcc-c++ make tar -xvjf extundelete-0.2.4.tar.bz2 cd extundelete-0.2.4 ./configure make && make install 三、删除数据查找 首先我们最好先卸载挂载的磁盘,我这里是 /dev/sda5 挂载到了 /data 目录下面。因为我的数据路径比较深,所以我们需要一步步查找,可以先从根分区(/data) inode 查找,根分区(/data)当前目录的 inode为2。 extundelete /dev/sda5 --inode 2 我们会看到 weapps (/data/webapps)目录的inode, extundelete /dev/sda5 --inode 24641537 我们看到项目(/data/webapps/project)的 inode, extundelete /dev/sda5 --inode 24903688 我们找到了最终删除数据的目录 upload (/data/webapps/project/upload) extundelete /dev/sda5 --inode 24904454 我们可以看到标称的 Deleted,这些数据就是我们要进行恢复的数据。 四、数据恢复 那我们就恢复指定目录,以当前分区(就是把/data当做根目录/)为根分区进行路径设定,项目名进行掩盖。 extundelete /dev/sda5 --restore-directory /webapps/project/upload 因为磁盘数据一直在读写,所以有些文件之前的 inode 已经被重新分配了,导致部分数据无法恢复,数据最后会告诉我们有多少文件没有回复,但是大部分数据我们已经恢复了,这就是很重要的事情了。 那我们查看一下回复的数据吧,软件会在当前目录生成一个目录 RECOVERED_FILES 里面就是我们恢复的数据。 恢复全部数据可以使用命令 extundelete /dev/sda5 --restore-all 使用方法 extundelete --help 其中,参数(options)有:--version, -[vV],显示软件版本号。--help,显示软件帮助信息。--superblock,显示超级块信息。--journal,显示日志信息。--after dtime,时间参数,表示在某段时间之后被删的文件或目录。--before dtime,时间参数,表示在某段时间之前被删的文件或目录。 动作(action)有:--inode ino,显示节点“ino”的信息。--block blk,显示数据块“blk”的信息。--restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。--restore-file 'path',恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。--restore-files 'path',恢复命令参数,表示将恢复在路径中已列出的所有文件。--restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。-j journal,表示从已经命名的文件中读取扩展日志。-b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。-B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。 在数据删除之后,首先要卸载被删除数据所在的磁盘或是分区,如果是系统根分区遭到误删除,就需要进入单用户模式下,将根分区以只读的方式挂载。 原因:因为文件删除之后,仅仅是将文件的inode节点中的扇区指针清零,实际上文件还存在磁盘上面,如果磁盘以读写方式挂载,这些删除的数据块可能会被系统从新分配出去,这些数据块被覆盖之后,这些数据就真的丢失了,所以以只读的方式挂载,尽可能避免数据被覆盖。

优秀的个人博客,低调大师

LINUX-内核-中断分析-中断向量表(3)-arm【转】

转自:http://blog.csdn.net/haolianglh/article/details/51986987 arm中断概念 在《ARM体系结构与编程》第9章中说到,ARM 中有个概念叫做“异常中断”,也就是包括外部中断在内的各种异常。显然,ARM体系的“异常中断”概念更加接近MIPS体系中的“异常”概念。 既然更类似MIPS体系,那么自然的ARM体系就存在“异常中断入口”和“异常中断向量表”的概念。 arm的异常中断向量表 非向量化中断 ARM体系定义了7种异常中断,在《ARM体系结构与编程》第9章的表9.1中标明了这7种异常中断。其中第6中异常中断即是外部中断的统一入口。显然,在ARM中,也类似MIPS一样实行了非向量化的外部中断。应该说RISC类的架构几乎都是采用非向量化中断。 向量化异常中断 虽然外部中断没有被向量化,但是异常中断被向量化了。因此,ARM也有一个所谓异常中断向量表。 摘自《ARM体系结构与编程》表9-1,如表 4 1所示,ARM的这个异常中断向量表可以是高端向量表,也可以是低端向量表,两者取其一。区别是基地址不同。高端向量是ARM架构可选配置,可以通过硬件外部输入管脚来配置是低端向量还是高端向量,不能通过指令来改变向量的位置,但如果ARM芯片内部有标准ARM协处理器,那么协处理器CP15的寄存器C1的bit13可以用来切换低端和高端向量地址,等于0时为低端向量,等于1时为高端向量。 异常中断向量表的初始化 arm体系在函数early_trap_init()中初始化这个异常中断向量表,相比x86以设置门的方式赋值idt_table,MIPS直接给全局变量exception_handlers[]成员赋值的方式。arm的方式比较另类。其方式是将从__vectors_start开始,直到__vectors_end之间的一段代码给复制到vectors_base地址上,这个vectors_base其实就是0x0000000或者0xffff0000。 ------------------------------------------------arch/arm/kernel/trap.c void __init early_trap_init(void *vectors_base) { /* 异常向量表 exception vectors的基址 */ unsigned long vectors = (unsigned long)vectors_base; extern char __vectors_start[], __vectors_end[]; vectors_page = vectors_base; /* * Copy the vectors, stubs and kuser helpers (in entry-armv.S) * into the vector page, mapped at 0xffff0000, and ensure these * are visible to the instruction stream. */ memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start); . . . } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 异常向量表内容是针对ARM的7种异常要采取的不同的处理代码,但是这个异常向量表总size是非常小的,其中每一种异常只有4字节的代码。因此实际上向量表中针对每一种异常的每一个表项都是一句跳转指令或者是使用ldr指令向PC寄存器写入新值。 ------------------------------------------arch/arm/kernel/entry-armv.S .globl __vectors_start __vectors_start: ARM( swi SYS_ERROR0 ) THUMB( svc #0 ) THUMB( nop ) W(b) vector_und + stubs_offset /* 未定义指令 */ W(ldr) pc, .LCvswi + stubs_offset /* 软件中断SWI,系统调用 */ W(b) vector_pabt + stubs_offset /* 指令预取中止 */ W(b) vector_dabt + stubs_offset /* 数据访问中止 */ W(b) vector_addrexcptn + stubs_offset /* 保留 */ W(b) vector_irq + stubs_offset /* 外部中断模式 */ W(b) vector_fiq + stubs_offset /* 快速中断模式 */ .globl __vectors_end __vectors_end: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 初始化大蓝图 下面以海思的Hi3535为例展示arm体系中断初始化的主要流程。 【作者】 张昺华 【出处】 http://www.cnblogs.com/sky-heaven/ 【博客园】 http://www.cnblogs.com/sky-heaven/ 【新浪博客】 http://blog.sina.com.cn/u/2049150530 【知乎】 http://www.zhihu.com/people/zhang-bing-hua 【我的作品---旋转倒立摆】 http://v.youku.com/v_show/id_XODM5NDAzNjQw.html?spm=a2hzp.8253869.0.0&from=y1.7-2 【我的作品---自平衡自动循迹车】 http://v.youku.com/v_show/id_XODM5MzYyNTIw.html?spm=a2hzp.8253869.0.0&from=y1.7-2 【新浪微博】 张昺华--sky 【twitter】 @sky2030_ 【facebook】 张昺华 zhangbinghua 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

优秀的个人博客,低调大师

Linux-CentOS 6.5 mini 中没有curses.h的问题

1、直接贴过程 [fengbo@CentOS: jigsaw]$ rpm -q ncursesncurses-5.7-3.20090208.el6.i686[fengbo@CentOS: jigsaw]$ rpm -q ncurses-develpackage ncurses-devel is not installed[fengbo@CentOS: jigsaw]$ sudo yum install ncurses-devel[sudo] password for fengbo:已加载插件:fastestmirror设置安装进程Loading mirror speeds from cached hostfile* base: mirrors.btte.net* extras: mirrors.btte.net* updates: mirror.bit.edu.cn解决依赖关系--> 执行事务检查---> Package ncurses-devel.i686 0:5.7-3.20090208.el6 will be 安装--> 完成依赖关系计算 依赖关系解决 =====================================================================================================软件包 架构 版本 仓库 大小=====================================================================================================正在安装:ncurses-devel i686 5.7-3.20090208.el6 base 642 k 事务概要=====================================================================================================Install 1 Package(s) 总下载量:642 kInstalled size: 1.7 M确定吗?[y/N]:y下载软件包:ncurses-devel-5.7-3.20090208.el6.i686.rpm | 642 kB 00:00运行 rpm_check_debug执行事务测试事务测试成功执行事务正在安装 : ncurses-devel-5.7-3.20090208.el6.i686 1/1Verifying : ncurses-devel-5.7-3.20090208.el6.i686 1/1 已安装:ncurses-devel.i686 0:5.7-3.20090208.el6 完毕! 本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4567414.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

shell脚本监控Linux系统节点和服务CPU内存性能

1、获取信息 #!/bin/bash #描述: # 把top信息输入到一个文件内部 #作者:孤舟点点 #版本:1.0 #创建时间:2017-11-09 03:04:28 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH p=`pwd` Day=`date +"%Y%m%d"` HOST=`hostname` for((i=0; i<1440; i=i+1)) do echo "Date `date +"%Y-%m-%d %H:%M:%S"`" >>$p/$Day-top.txt top c -bn1 >>$p/$Day-top.txt sleep 1 done 2、筛选信息 #!/bin/bash #描述: #作者:孤舟点点 #版本:1.0 #创建时间:2017-11-09 04:08:52 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH p=`pwd` Day=`date +"%Y%m%d"` HOST=`hostname` mkdir -p $p/$HOST-$Day PT=$p/$HOST-$Day cd $PT cat $p/$1 | grep -v grep | grep "^Date" >> $PT/Time-$Day.txt cat $p/$1 | grep -v grep | grep "^Cpu(s):" >> $PT/CPU-$Day.txt cat $p/$1 | grep -v grep | grep "^Mem:" >> $PT/Mem-$Day.txt cat $p/$1 | grep -v grep | grep "^Swap:" >> $PT/Cache-$Day.txt while read line do cat $p/$1 | grep -v grep | grep "$line" >> $PT/$line-$Day.txt done < $p/service.txt # 这里service.txt是按行存放的服务名称 cd $p 3、整理数据 例如用Excel整理内存使用情况,这里把获取的时间和内存信息放在Excel内部,并把内存列用Excel分列,用时间和使用的内存大小列可以制作出一张内存使用趋势图;同理也可以制作CPU、cached及各个微服务的CPU和内存趋势图。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。