Liunx 常用命令
================================================================================
1. 远程拷贝文件
--------------------------------------------------------------------------------- 
  scp -r xyf@192.168.1.20:/home2/xyf/a20/android4.0 ./android/   
	
2. 远程登录
---------------------------------------------------------------------------------
   ssh droid05@192.168.1.23
convert L: /FS:NTFS // L 是你的盘符 格式化U盘,当你的盘大于4G ,想拷贝大于4G文件
3. 登录驱动配置文件
---------------------------------------------------------------------------------
   make menuconfig ARCH=arm
选择平台为arm 默认的是x86 .
4. 打印信息
---------------------------------------------------------------------------------
   adb shell logcat -b radio > logcat-radio.log	  -->  3g dongle
在preinstall.sh最后加入如下命令:
echo 8 > /proc/sys/kernel/printk
echo 1 > /sys/class/axppower/axpdebug
cat /proc/kmsg > /data/local/kmsg`date +%Y%m%d_%H%M%S` &
logcat > /data/local/logcat`date +%Y%m%d_%H%M%S` &
adb shell
ls | busybox grep drm
上述命令会在/data/local/logcat下生成LOG信息,以开机时间命名。
5. 我们的修改工具 sys_config1后,如果能不升级整个固件就让其生效 
---------------------------------------------------------------------------------
修改sys_config1后,如果能不升级整个固件就让其生效
   1>. 在android shell中将/dev/block/nanda mount到某个节点:
    	mount -t vfat /dev/block/nanda /mnt/nand
   
   2>. 修改sys_config1后build固件,然后在lichee\tools\pack\out\bootfs下找到scrpt.bin和script0.bin
   
   3>. 然后用adb连接后,将scritp.bin和script0.bin推到所mount节点的根目录下,替换原有同名文件:
   	 adb push script*.bin  /mnt/nand/
   4>. 最后sync重启即可
       
       adb shell
       sync
       reboot
6. 如何单独替换内核 
---------------------------------------------------------------------------------
   1>. android shell中将/dev/block/nanda mount到某个节点:
	mount -t vfat /dev/block/nanda /mnt/nand
   2>. 用adb连接后,将bImage直接push到所mount节点的linux目录下,替换bImage:
	adb push bImage /mnt/nand/linux
   3>. sync重启即可
	
        adb shell
	sync
	reboot
7.git and repo 基本命令 
---------------------------------------------------------------------------------  	
repo  
========================
  1>.  repo status       								-> 查看工程下面所有git 状态
  2>.  repo branch										-> 查看工程下面所以分支
  3>.  repo start    <分支名称> --all  					->创建repo分支
  4>.  repo checkout <分支名称>							->切换分支	
  5>.  repo forall -c git remote -v 					->查看远程分支
  6>.  repo forall -c git pull <远程分支> <本地分支> 	-> 同步远程分支到本地
  7>.  repo forall -c git merge <合并改过BUG分支>
  8>.  repo forall -c git branch -d <删除分支的名称>
  9>.  repo forall -c git checkout .					-> 检出git 上的内容
  10>. repo forall -c git checkout -b 分支名 			->该条命令会对repo下的project执行新建并切换branch的命令
  11>. repo forall -c git diff <分支名称 -> <分支名称 +> 	->比较两个分支的不同
      	
repo forall -c ‘pwd && git fetch exdroid‘			-> 更新服务器的,不会更改本地内容
repo forall -c ‘pwd && git status‘					-> 验证每个分支的状态
repo forall -c git checkout -b <分支名>				-> 切换对应的分支repo 下所有的分支
repo forall -c git remote -v						-> 查看所有的原厂分支
repo forall -p -c ‘git log --oneline --name-only --committer=cqq‘  //查看曾经修改过的文件
repo forall -c git config core.fileMode false		//忽略权限修改
//更新,建议在更新前要建一个备份分支,
//这样即使新代码有问题,也可以切换会旧的代码分支出软件,新代码稳定后就可以把备份分支删除
repo checkout develop
repo forall -p -c git pull exdroid develop //android
repo forall -p -c git pull exdroid develop:develop //如果没更新到tag,用这个命令更新tag
repo forall -c ‘pwd && git status‘      //显示状态
repo forall -p -c git pull lichee develop  //lichee
repo checkout mybranch
repo forall -c git merge develop
//冲突标记,开始于: <<<<<<< HEAD
git cherry-pick commit-id //挑拣合并
git
========================
  1>. git status -s
  2>. git log --stat  			-> 查看log 信息 和 修改的内容
  3>. git diff
  4>. git diff --cached
  5>. git diff HEAD
  6>. git show					->查看历史修改 与git 无关 
      git show <commit id>
      git rev-parse <分支名称>	->查看当前的conmit id值
      git reflog 				->引用日志
      git show HEAD^			->查看上一次提交的信息
      git show d921970^			->改次的第二次提交  ^ 与 ~等同
      git show HEAD~3			-> HEAD^^^	
      git remote show 远程库名
	  
  7>. git log --online			->查看每次提交的哈希值
  8>. git br -v					->查看分支最后一次提交的信息
  9>. git add . 				->添加当前git 下的所有修改的文件
  10. git rm <文件名称>			->删除del 的文件
  11. git ci -m "注释"			->提交修改的文件
  12. git reset HEAD
  13. git reset HEAD^3
  14. git reset commit			->撤销指定版本
  15. git rm --cached <file>	->删除暂存区中的文件,工作区不变
  16. git checkout .  
  17. git checkout --<file>		->用暂存区的内容 替换 工作区的内容
  18. git checkout HEAD .		->HEAD的内容 替换 暂存区和工作区的内容
  19. git branch <新分支>		  
  20. git branch -d <删除的分支>	//如果分支没合并,删除会失败
  21. git branch -D <删除的分支>	///即使分支没合并,也会删除	
  22. git reset --hard + id		->回到未来,之后的都删掉了
  23. git checkout–b new_branch local_branch  	//切换到某个已经建立的本地分支local_branch,并且使用此分支初始化一个新分支new_branch。	
  24. git checkout –b new_branch remote_branch //切换到某个远程分支remote_branch,并且用此分支初始化一个新分支new_branch<本地分支>。
  25. git checkout –b new_branch commit_id 	//切换到某个commit id,并建立新分支new_branch
  26. git checkout –b new_branch tag  		//切换到某个tag,并建立新分支new_branch
  27. git config --global user.name "John Doe"
  28. git config  	  user.name "John Doe"
  29. git config --global user.email johndoe@example.com
  30. git config          user.email johndoe@example.com
  31. git revert commit-id		//还原指定版本的修改
  32. git show        			// 显示最近的一次提交的内容
  33. git show --name-only   		// 只显示修改的文件名,而不具体显示修改的行的内容
  34. git tag 				//查看tag 一个里程碑
  35. git tag v1.0			//新建一个tag 
  35. git tag -a v1.0.1 -m "注释"	//带注释的tag
  36. git tag -n<num>			//查看带注释的tag <num> 查看最大的行数	
  37. git reset --soft 回到提前之前 多次   git commot --amend -m "新的注释" etc	 悔棋 就查阅 p156 git指南
		`find -name ""` or $(find -name "")
  38. git whatchange -num	//查看分支修改的文件
     
  39. git clean -dn 		//确认是否删除
  40. git clean -dxf 		//清除未加入版本控制的文件
      
  41. git config --list
-----------------------------------------------------------------------------------------
git 对工作进度的保存
 git stash		保存
 git checkout  xxx
 git checkout  xxx_
 git stash pop		恢复
-----------------------
问题点:
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
方法:
	rm -f ./.git/index.lock
8. 查找命令 查看
---------------------------------------------------------------------------------  
  1. find ./ -name “string”
  
     find . -type f | xargs sed -i ‘s/a31st/xxx/g‘	
  
  2. grep "string" ./ -rn
  
  3. cat /system/usr/device.info
  4. cat /data/device.info
   	
9. logcat 
---------------------------------------------------------------------------------  
  基本命令
  	
  1. adb logcat -c 清除所有以前的日志
  
  2.adb logcat -d 这个命令是在时间上倒过来用的 就是你先操作然后敲这个命令 打出来的log就是你刚操作那段时间的log 而且自动退出log模式
3.adb logcat -s “xxx” 这个是设置过滤用的 比如你只想查看FirstDemo的日志 就替换最后的XXX
过滤
1.adb logcat ActivityManager:I MyApp:D *:S
  eg: ActivityManage:
	I/ActivityManager( 585): Starting activity: Intent {action=android.intent.action...}
上面表达式的最后的元素 *:S ,,是设置所有的标 签为”silent”,所有日志只显示有”View” and “MyApp”的,用 *:S 的另一个用处是 能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器也作为一项输出到日志中.
  2.adb logcat *:W
    上面的过滤语句指显示优先级为warning或更高的日志信息
3. adb logcat -v thread -> [adb] logcat [-v ]
    下面是用 thread 来产生的日志格式:
	需要注意的是你只能-v 选项来规定输出格式 option.
4. 查看 可用日志缓冲区
Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到 日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的 循环缓冲期:
     radio — 查看缓冲区的相关的信息.
	
     events — 查看和事件相关的的缓冲区.
main — 查看主要的日志缓冲区
[adb] logcat [-b ]
下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息:
adb logcat -b radio
  5. logcat -v time -s "xxx"
10.内核打印级别
---------------------------------------------------------------------------------  
  echo 8 > proc/sys/kernel/printk 可以看到所有内核打印
  echo 1 > /sys/class/axppower/axpdebug
    
  logcat -v time > /sdcard/log1 $  
  cat /proc/kmsg > /sdcard/kmsg1 &  定向到sd 卡上
11. chiphd search
---------------------------------------------------------------------------------  
git clone ssh://builder@192.168.1.22/home2/builder/release/chiphd_script/zzzzz-chiphd
git clone ssh://droid05@192.168.1.23/home/droid05/git/clone.git/llf-chiphd.git
git clone ssh://droid05@192.168.1.23/home/droid05/git/clone.git/sugar-chiphd.git
git clone ssh://git@192.168.1.20/home/git/git_repo/chiphd_devices/a3xBox/4.2/mars_g1000.git
git clone ssh://boxbuilder@192.168.1.23/home2/boxbuilder/git/project/chiphdDevices.git
git clone  ssh://git@192.168.1.20/git_repo/chiphd_devices/a31s/4.4/chiphdDevices.git
git clone  ssh://boxbuilder@192.168.1.23/home2/boxbuilder/git/a3142/chiphdDevices.git   //a31 中诺
ssh://hbc@192.168.1.20/home2/hbc/git/winners/winners.git	//F10
back
------------
i15
git clone ssh://hbc@192.168.1.20/home2/hbc/git/i15/android.git
git clone ssh://hbc@192.168.1.20/home2/hbc/git/i15/lichee.git
i12
git clone ssh://hbc@192.168.1.20/home2/hbc/git/sugar-a20/android.git
git clone ssh://hbc@192.168.1.20/home2/hbc/git/sugar-a20/lichee.git
// 脚本库文件 下载全志sdk
git clone  ssh://builder@192.168.1.22/home2/builder/release/chiphd_script
./download_chiphd_AOSP_autoScan.sh --allwinner
cp chiphd_script/tar_repo.sh .
public:
git clone ssh://git@192.168.1.20/home2/xyf/git/H8/chiphdDevices.git
  
12.git patch
---------------------------------------------------------------------------------  
1. git format-patch -1   单次提交做成patch
使用之前先检查补丁的可用性:
   git apply --check  newpatch.patch  先检查patch 文件
   git apply --stat newpatch.patch    检查能否应用成功
引用patch 
   patch_chiphd_ap 0001-add-osd-usb-insmod-and-rrmod.patch   打补丁 但不自动提交
   git am --signoff < newpatch.patch	 打补丁,使用-s或--signoff选项,可以commit信息中加入Signed-off-by信息)
			
 ////////////////////////////////////////////////////////////////////
 //创建补丁, 1b6d 是hash值
  git diff 1b6d > my.patch
  git format-patch 1b6d      //更正式
  git format-patch -3        //依次创建前3次提交的补丁
  //打补丁
  git apply < my.patch
  //在实际打补丁之前,可以先用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中
  git apply --check 0001-seeing-if-this-helps-the-gem.patch
  git apply 0001-seeing-if-this-helps-the-gem.patch  //然后打补丁
13. 创建项目工程
-------------------------------------------------------------------------------------
createProject.sh
14.
-------------------------------------------------------------------------------------
tar zcvf ../a13_eclipse.src.tar.gz `cat .classpath | grep classpathentry | sed ‘s%.*path="\([^"]*\)".*$%\1%‘ | sed ‘s%net_out%%‘`
15.
---------------------------------------------------------------------------------------
悔棋 就查阅 p156 git指南
介绍 git reset --soft 回到提前之前 多次    "新的注释" etc
16. tar  包过滤
---------------------------------------------------------------------------------------
tar zcvf xxx.tar.gz /etc  --exclude=  + 文件 + 文件夹   是针对当前目录的
tar zcvf ../11.tar.gz ./  --exclude=1/2/3 --exclude=.git
17. 获取android 源代码 只含有 *.java
---------------------------------------------------------------------------------------
  1. cp development/ide/eclipse/.classpath .
  2. TFiles=$(sed -n ‘/path="/p‘ ./.classpath | sed ‘s%.*path="\([^"]*\)".*$%\1%‘)
  3. ls $TFiles 1>/dev/null 出错,删掉改行      
  4. tar zcvf ../a13_eclipse.src.tar.gz $TFiles  .classpath
解压后导入eclipse 查看源码 并调试。
18. sed 介绍   
------- ----------------------
sed -i ‘s/\r//‘ + filename  替换\n
19 shell shell调试 http://www.cnblogs.com/softwaretesting/archive/2012/02/06/2339671.html
1.echo
-------------------------
字背景颜色范围:40 - 49 
40:黑 
41:深红 
42:绿 
43:黄色 
44:蓝色 
45:紫色 
46:深绿 
47:白色 
-----------------------
字颜色:30 - 39 
30:黑 
31:红 
32:绿 
33:黄 
34:蓝色 
35:紫色 
36:深绿 
37:白色 
-----------------------
ANSI控制码 
\33[0m 关闭所有属性 
\33[01m 设置高亮度 
\33[04m 下划线 
\33[05m 闪烁 
\33[07m 反显 
\33[08m 消隐 
\33[30m -- \33[37m 设置前景色 
\33[40m -- \33[47m 设置背景色 
\33[nA 光标上移n行 
\33[nB 光标下移n行 
\33[nC 光标右移n行 
\33[nD 光标左移n行 
\33[y;xH设置光标位置 
\33[2J 清屏 
\33[K 清除从光标到行尾的内容 
\33[s 保存光标位置 
\33[u 恢复光标位置 
\33[?25l 隐藏光标 
\33[?25h 显示光标
----------------------------
eg:
  echo -e "\033[31m  xxx \033[0m"
  echo -e "\e[1;32m  xxx \e[0m "
2.
-----------------------------------
19. getprop sys.mem.opt
-----------------------------------
a23 1G和512M自适应,
adb shell
getprop sys.mem.opt
    1G的结果为false
    512M的结果为true
    
20.ssh
---------------------------------    
使用ssh-keygen设置ssh无密码登录 <http://blog.csdn.net/hustpzb/article/details/8230454>
Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。
github的SSH配置如下:
一 、
设置Git的user name和email:
$ git config --global user.name "xuhaiyan"
$ git config --global user.email "haiyan.xu.vip@gmail.com"
二、生成SSH密钥过程:
1.查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥:
    $ ssh-keygen -t rsa -C “haiyan.xu.vip@gmail.com”
    按3个回车,密码为空。
    Your identification has been saved in /home/tekkub/.ssh/id_rsa.
    Your public key has been saved in /home/tekkub/.ssh/id_rsa.pub.
    The key fingerprint is:
    ………………
最后得到了两个文件:id_rsa和id_rsa.pub
3.添加密钥到ssh:ssh-add 文件名
需要之前输入密码。
4.在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥。
打开https://github.com/ ,登陆xuhaiyan825,然后添加ssh。
5.测试:ssh git@github.com
    The authenticity of host ‘github.com (207.97.227.239)’ can’t be established.
    RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added ‘github.com,207.97.227.239′ (RSA) to the list of known hosts.
    ERROR: Hi tekkub! You’ve successfully authenticated, but GitHub does not provide shell access
    Connection to github.com closed.
三、 开始使用github
1.获取源码:
$ git clone git@github.com:billyanyteen/github-services.git
2.这样你的机器上就有一个repo了。
3.git于svn所不同的是git是分布式的,没有服务器概念。所有的人的机器上都有一个repo,每次提交都是给自己机器的repo
仓库初始化:
git init
生成快照并存入项目索引:
git add
文件,还有git rm,git mv等等…
项目索引提交:
git commit
4.协作编程:
将本地repo于远程的origin的repo合并,
推送本地更新到远程:
git push origin master
更新远程更新到本地:
git pull origin master
补充:
添加远端repo:
$ git remote add upstream git://github.com/pjhyett/github-services.git
重命名远端repo:
$ git://github.com/pjhyett/github-services.git为“upstream”
21.vi 加密
--------------------------------
用命名 X 来保存文件会进行加密。
eg:
:X
请输入密码
解密方法:
:set key=		//设置key 未空
:w
:x
解密完成
忘记密码,这个还没办法解决。
22. tar 解包 压缩命令集	 <http://blog.163.com/aragorn_king/blog/static/188005152201162753126735/>
--------------------------------
23.apktools 
--------------------------------
DoChiphdPreApk ~/a31box_g2000/android/device/softwinner/xx/preApk
24.touch		<http://www.cnblogs.com/peida/archive/2012/10/30/2745714.html> 相关参数说明
--------------------------------
//更新所有 c and c++ 
find $path -name ‘*.[HhCc]*‘ | xargs touch -c
25. adb 占用问题
--------------------------------
一、命令:adb nodaemon server  查看哪个端口被占用 
二、命令:netstat -ano | findstr "5037" 列出端口被占用的进程
三、在任务管理器里找到对应的占用端口的进程,然后杀掉进程。
或者用命令杀掉进程: ntsd -c q -p ""
26. ln -s  原路径 链接路径
原文:http://www.cnblogs.com/llfang/p/4310621.html