linux基础/问卷调查/Linuxfork




  linux基础:
  $cat /sys/class/net/eth0/address;   $ifconfig -a;  $ip link show;   $ip address show; #linux查看mac地址;
  $cat /proc/net/arp;  查看连接到本机的远端ip的mac地址;
  /dev/下是设备文件,UNIX将设备以文件的文件来访问(以WINDOWS大不同);  /sys/class/下是驱动文件,也可以open,read来访问,WRITE也行但会带来严重后果的;
  sysfs文件系统总是被挂载在/sys挂载点上;  
  /sys下的目录结构是经过精心设计的;
    /sys/devices是所有设备的真实对象,包括如视频卡和以太网卡等真实的设备,也包括ACPI等不那么显而易见的真实设备;还有tty/bonding等纯粹虚拟的设备;
    /sys/devices是内核对系统中所有设备的分层次表达模型,也是/sys文件系统管理设备的最重要的目录结构;
    /sys/dev维护一个按字符设备和块设备的主次号码(major:minor)链接到真实的设备(/sys/devices下)的符号链接文件,它是在内核 2.6.26 首次引入;
    /sys/bus内核设备按总线类型分层放置的目录结构,devices中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成Linux统一设备模型的一部分;
    /sys/class按照设备功能分类的设备模型,如系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统;它也是构成Linux统一设备模型的一部分;
    /sys/block系统中当前所有的块设备所在,按照功能来说放置在/sys/class之下会更合适,从2.6.22开始就已标记为过时,已正式移到/sys/class/block其中的内容已经变为指向它们在/sys/devices/中真实设备的符号链接文件;
    /sys/firmware系统加载固件机制的对用户空间的接口,关于固件有专用于固件加载的一套API;
    /sys/fs按照设计是用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点;一些传统的虚拟文件系统(VFS)层次控制参数仍然在sysctl(/proc/sys/fs)接口中中;
    /sys/kernel内核所有可调整参数的位置,目前只有uevent_helper/kexec_loaded/mm和新式的slab分配器等几项较新的设计在使用它,其它内核可调整参数仍然位于sysctl(/proc/sys/kernel)接口中;
    /sys/module系统中所有模块的信息,不论这些模块是以内联(inlined)方式编译到内核映像文件(vmlinuz)中还是编译为外部模块(ko文件),都可能会出现在/sys/module中;
    /sys/power系统中电源选项,这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机/重启等;
    /sys/slab(对应2.6.23内核,在2.6.24以后移至/sys/kernel/slab);从2.6.23开始可以选择SLAB内存分配器的实现,并且新的SLUB(Unqueued Slab Allocator)被设置为缺省值;
  $cat /proc/version;  #查看系统/内核版本;   $cat /proc/cpuinfo;  $cat /proc/meminfo;
  $dmidecode; #以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息;信息包括了硬件以及BIOS,既可以得到当前的配置,也可以得到系统支持的最大配置,比如说支持的最大内存数等;
  $ifdown; $ifup; $ifconfig;(interface configuration的缩写)  3个命令都是用于启动网络接口;  ifup/ifdown仅就/etc/sysconfig/network-scripts内的ifcfg-ethx(x为数字)进行启动或关闭的操作;
  $uname -r;  $cat /etc/issue;  $lsb_release -a;  #查看linux内核版本
  system()函数,执行系统命令;
  字符串常量"I am happy"的最后由系统自动加上一个'\0';
  $uptime; 获取主机运行时间和查询linux系统负载的;
  $top/free;  内存占用大的原因,结果中used已使用的内存表示总计分配给缓存(包含buffers与cache)使用的数量,但其中可能部分缓存并未实际使用;
  cache,数据访问的局部性(cpu与mem之间),硬件或os提供;buffer,减少不必要的状态切换和设备IO(mem与io设备),程序知道并与os共享;缓存,临时仓库;
  /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间;它以文件系统的方式为内核与进程提供通信的接口;





  卸载后问卷调查:监视/data/data/目录变化(轮询/文件观察者)
  $am start -a android.intent.action.VIEW -d http://shouji.360.cn/web/uninstall/uninstall.html  
  错误尝试:1.注册BroadcastReceiver,监听android.intent.action.PACKAGE_REMOVED系统广播;2.监视log;
  linux内核提供功能:
  #include <unistd.h> //POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,如read()/write()/getpid();unistd.h在unix中类似于window中的windows.h;
  #include <sys/inotify.h> //Inotify是一个Linux特性,它监控文件系统操作,比如读取/写入和创建;
  #include <fcntl.h>  //fcntl.h定义了很多宏和open,fcntl函数原型; unistd.h定义了更多的函数原型;
  #include <stdlib.h>  //即standard library标准库头文件;最常用的系统函数; 常用的函数如malloc()/calloc()/realloc()/free()/system()/atoi()/atol()/rand()/srand()/exit()等等;
  在java层,FileObserver类,是基于inotify实现的;
  MediaProvider,蓝牙和下载器分别两种不同数据更新方式;蓝牙,MediaScannerConnection;源码/packages/apps/Bluetooth/BluetoothOppService.java
  下载器DownloadProvider,用的MediaScannerService;源码/packages/providers/DownloadProvider/DownloadService.java
 
  LinuxC中启动进程用fork函数;
  Linux中,每个用户拥有一个id,0和-2是User IDs(UIDs);0是root,-2是随机用户(which may not be a person, it may just be a fake account used for internal reasons);
  Permission Denial:startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL;#android4.2的bug;
  ActivityManagerService.java类中,handleIncomingUser();#查阅源码;
  windowsC中,创建新进程,三个SDK函数WinExec()/ShellExec()/CrateProcess();
  Java创建进程,Runtime.getRuntime().exec(*);或者new ProcessBuilder("notepad.exe").start();
  exec函数族,共6个:用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序;
  当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行;因为调用exec并不创建新进程,所以前后的进程ID并未改变;exec只是用另一个新程序替换了当前进程的正文/数据/堆和栈段;



发布了8 篇原创文章 · 获赞 7 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/liu31187/article/details/28859265
今日推荐