我最近在学linux,涉及到修改安卓模拟器的goldfish内核,现在已经可以做到重新编译内核,并且动态添加自己的内核模块了。我把最近经常用到的linux命令总结了下,供大家参考。
1.sudo uname --m //查看当前的Linux版本,64位还是32位
2.:q //用来退出文本编辑模式
3.vim编辑文本的时候,初始进去的是命令行模式,按“i”进入插入模式。
4.您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字
5. 退出vi及保存文件在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)
:wq! (强制保存并退出)
6.sudo gedit /var/log/syslog //查看系统日志
7./usr/local/eclipse/eclipse //eclipse启动命令
8.sudo find -name avd //查找avd
9. ls -al //可看到该目录下所有文件
10.grep //命令用于查找文件中包含有指定字符串的行
11.sdk 代理服务器:mirrors.neusoft.edu.cn 端口号:80
12.gedit //文本编辑器
13.gedit ~/.profile //编辑用户个人的环境变量
14.source ~/.profile //在当前bash环境下读取并执行~/.profile中的命令
15.ubuntu截屏快捷键 "printscreen"
16.cd //改变目录位置至用户登录时的工作目录
17.cd ~ //改变目录位置至用户登录时的工作目录
18.ll //命令以长格形式列出当前目录下的所有文件
19.less //命令分屏查看文件profile的内容,注意“q”键用于退出less命令
20.export //将自定义变量设定为系统幻镜变量(当前shell有效)
21.git clone https://android.googlesource.com/kernel/goldfish.git //以https方式克隆到本地,可以读写。
22.git branch -a //查看全部的版本file/dir to devi
23.git checkout -b "branchname" //创建并切换到该分区,相当于以下两个命令:
git branch "branchname" //创建分支
git checkout "branchname" //切换到分区
24.make //编译命令
25.makefile //定义了一系列的规则来制定文件的编译顺序,可以自动化编译。
26.cat /xx/xx //一次显示整个文件
27.cat file1 file2>file //将几个文件合并位一个文件
28.cat > filename //创建一个文件,在控制台编辑完文件之后,按"回车键"会自动保存文件,ctrl+z会退出当前的编辑模式。
29.export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_40
export JAVA_HOME=~/java/jdk1.6.0_45
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
30.系统设置--export 功能说明:设置或显示环境变量。
31.source //在当前bash环境下读取并执行FileName中的命令,该filename文件可以无"执行权限"
32.sh/bash //打开一个子shell来读取并执行FileName中命令,该filename文件可以无"执行权限"
33../FileName //打开一个子shell来读取并执行FileName中命令,该filename文件需要"执行权限"
34.make //编译、链接、执行工程
35.vim /etc/profile //配置环境变量
export ANDROID_HOME=/home/nijian/software/adt-bundle-linux-x86-20131030/sdk+= 等号后面的.o后缀文件则是由该目录下的对应名称的.c文件编译而来。
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH
export JAVA_HOME=~/java/jdk1.6.0_45
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$JAVA_HOME/bin
36.cp file1 file2 //用于文件的复制
37.cp -R folder1 folder2 //用于文件夹的复制
38.mv //移动文件或者文件夹,会删除原来的文件复制到另一个位置
39.ln –s 源文件 目标文件 //ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接
40.make -f makefilename //告诉make用哪个makefile,如果不使用这个选项,make将搜索当前目录下第一个名为makefile的文件
41. .c只是简单的文本文件 .o是编译之后的二进制文make -件
42.touch filename //创建一个不存在的文件
43.gcc test.c -o test //用来编译.C源文件,-O用来生成目标文件
44.gcc -E test.c //gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果
45.gcc -S test.i -o test.s //gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件
46.gcc -c test.s -o test.o //只编译不链接,产生.o文件,就是obj文件,不产生执行文件
47. ./test //在命令行窗口中,执行./test, 让它说HelloWorld吧,执行当前的可执行文件
48.gcc test1.c test2.c -o test //同时编译两个.c源文件,生成可执行文件
49. .a //UNIX下,是Archive File,也就是 .a 文件,代表.o文件的集合
50.makefile规则 target ... : prerequisites ...
command //target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令)这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容
51.make clean //如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下“make clean”就可以了
52.$(xxxx) //代表取出xxx代表的值,有点想jquery的dom操作。
53.obj-y += XXX.o //中的y表示编译进内核,+=标识具体的内核模块或者具体的变量值,+= 等号后面的.o后缀文件则是由该目录下的对应名称的.c文件编译而来
54.obj-$(CONFIG_BUTTONS_LEDS) //中CONFIG_BUTTONS_LEDS则表示一个变量
55.obj-y obj-n obj-m //y表示编译进内核,而m则表示以模块的方式进行编译,n表示不编译进内核
56.lsmod //是一个小程序,用来显示文件、proc/modules的信息,也就是显示当前内核模块装载的模块
57.insmod //动态载入模块
58. .ko //代表内核模块
59.rmmod //移除内核模块
60.x:=foo //用变量来定义变量
61.$(var:a=b) //变量“var”中所有以“a”字串“结尾”的“a”替换成“b”字串
62.objects = main.o foo.o bar.o utils.o
objects += another.o //代表变量值的追加,$(objects)值变成:“main.o foo.o bar.o utils.o another.o”(another.o被追加进去了)
63.obj-m //则表示该文件作为模块编译.
64../emulator -avd nijian81 -kernel ~/android-kernel/goldfish/arch/arm/boot/zImage
65.lsmod //列出来系统的内核信息
66.adb push /mymodule/XXX.ko /data/XXX.ko //将内核模块从本地位置复制到目的位置
67.make -C xxx //切换到指定目录再执行 make 过程,makefile 在这个指定目录里面
68.modinof hello.ko //查看模块的信息
69..so //为共享库,是shared object,用于动态连接的,和dll差不多
70.uname -a //查看当前shell下运行的linux内核版本是多少
71. make goldfish_defconfig
make goldfish_armv7_defconfig
make menuconfig
make -j8 //编译goldfish源码需要的指令
72./proc/kmsg //这个文件用于检索用printk生成的内核消息
73.dmesg //dmesg用来显示开机信息
74.printk() //打印内核消息
75.rmmod hello.ko //动态卸载模块
76.asmlinkage //函数定义前加宏asmlinkage ,表示这些函数通过堆栈而不是通过寄存器传递参数
77.void * //为“无类型指针”,void *可以指向任何类型的数据
78.gcc -pedantic hello.c -o hello //用于输出gcc编译过程中的警告信息
79.gcc -Wall hello.c -o hello //尽可能多的输出gcc编译过程中的警告信息
80.gcc -Wall -Werror hello.c -o hello //输出警告消息,gcc在产生警告的地方停止编译
81.clean:
rm -rf *.o .cmd *.ko *.mod.c .tmp_versions *.order *.symvers //Makefile文件中的clean,用于执行make clean时删除对应格式的文件
82.rm //删除文件命令
83.$(shell pwd) //表示当前Makefile所在的路径
84.Makefile中“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成KO文件。