1.指令集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 光标移到命令行最前端
ctrl + A

# 光标移到命令行最后面
ctrl + E

# 删除当前命令行指令
ctrl + U

# 查看所有详情
ls -all

# 查看文件大小
ls -lh

# 递归查看文件夹内容
ls -R

# 查看磁盘大小
df -h

# 文件属性介绍
-rw-r--r-- 1 root root 0 Apr 25 20:33
文件权限 软连接数 当前用户 用户组 文件大小 日期

# 文件权限
- 【普通文件】
d 【目录】
l 【软链接(Win快捷方式】
c 【字符设备文件】
b 【块设备文件】
p 【管道】
s 【套接字】

# root用户
$ 普通用户

chmod u+rwx 111.txt 第一组可读可写可执行【u当前用户 g当前组 o其他组 a代表所有组】

adduser jack 添加名为jack这个组
chown aaa 1.txt 把1.txt修改aaa当前用户组
chgrp aaa 1.txt 将1.txt的组权限改成aaa同组

tac倒序查看
more 1.txt 分页查看
head -2 1.txt 查看前两行
tail -3 1.txt 查看后三行

shift+zz 命令行模式退出
u撤销

i当前光标字符输入
I当前光标所在行头
a当前光标后一个字符输入
A当前光标所在行尾输入

h:左 j:下 k:右 l:上
gg跳到第一行
G调到最后一行
:set number 查看行号
$回到行尾部
0回到行首
dw删除单词
dd删除本行
yy复制光标所在行
p粘贴到当前行
P粘贴到下一行

r+字符,替换光标当前字符
:s /123/456 当前所在行的123替换成456
:1.6s /123/456/g 1—6行中123换成456
:%s /123/456/g 全文123替换成456

分屏:
:vsp 左右分屏
: sp上下分屏
ctrl+ww 切换分屏

echo $? 监测上一个命令是否执行成功,0为成功,其他为失败

# 替换字符串
sed -i "s/com.gxa.sdk/com.gxa.service/g" `grep -rl "com.gxa.sdk" ./`

# 查看所有进程
PS -A

2. SHELL脚本

2.1 基本语法
1
2
3
4
5
6
#!bin/bash

#定义变量(符号之间不能有空格)
A=10

echo A==$A
2.2 参数
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(“ “)包含时,都以”$1” “$2” … “$n” 的形式输出所有参数。

但是当它们被双引号(“ “)包含时,”$*” 会将所有的参数作为一个整体,以”$1 $2 … $n”的形式输出所有参数;”$@” 会将各个参数分开,以”$1” “$2” … “$n” 的形式输出所有参数。
对于(””)双引号中带$符号的非参数前面必须加’ \ ‘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!bin/bash 

#打印当前路径,注意是大写
echo PWD: $PWD

# 获取参数
echo 当前shell脚本名称是: $0
echo 参数一: $1
echo 参数二: $2

# 查看执行状态
if(($?));then
echo 执行失败
else
echo 执行成功
fi

# 查看外界传入的参数
echo 外界传入参数内容: $*
echo 外界传入参数个数: $#
2.3 循环
1
2
3
4
5
6
7
8
#!bin/bash

# seq 1 20是循环遍历1到20
# 执行命令使用``
for i in `seq 1 20`
do
echo "the number:$i"
done
2.4 计算器工具
1
2
3
4
5
6
7
8
9
#!bin/bash

a=0
for f in `seq 1 100`
do
a=`expr $f + $a`
done

echo "total: $a"
2.5 查找文件并打包
1
tar -czf output.tgz *.txt
2.6 读文件
1
2
3
4
5
6
#!bin/bash

while read readline
do
echo $readline
done<`pwd`/1.txt
2.7 shell函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

function test01() {
echo "我是一个函数"
}
test01 # 调用此函数

# 函数里面是可以定义变量的,不要去考虑,堆,栈,弹栈,他就是脚本
function test02() {
var1="Kevin"
var2="Derry"
echo $var1
echo $var2
echo "我是一个函数"
}

# 函数传递参数
function test03() {
echo "我是一个函数,参数是:`expr $1`"
}
test03 99999 # 内置传递参数

function test04() {
echo "我是一个函数,参数是:`expr $1`"
}

test04 $1 # 脚本配合 内置传递参数

3.Linux下去掉^M的四种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
第一种方法:
cat -A filename 就可以看到windows下的断元字符 ^M

第二种方法:
sed -i ‘s/^M//g' filename
#注意:^M的输入方式是 Ctrl + v ,然后Ctrl + M

第三种方法:
#vi filename
:1,$ s/^M//g
^M 输入方法: ctrl+V ,ctrl+M

第四种方法:
cat filename |tr -d ‘/r' > newfile
^M 可用 /r 代替

4.查问题常用指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
1.查看TP是否有事件上报
getevent -v /dev/input/event2

2.查看包名
pm list package -f

3.查看当前进程包名
am monitor

4.查看子目录所以文件大小
du -h
du -sh 文件名 查看文件夹大小

5.查看文件类型
jieou@gxatek-fw-no:/work/jieou/gxa_saturn$ file android_build_log.txt

android_build_log.txt: UTF-8 Unicode text, with very long lines

6.指令打开网页
am start -a android.intent.action.VIEW -d http://www.baidu.com

7.git stash 指令
git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

8.更新api
make update-api

9.查看所有包名
pm list packages

10.对所有仓库执行每个命令
repo forall -c 命令
repo status
git reset --hard HEAD 回退当前仓库所有文件到HEAD节点
git reset --hard HEAD,回退上一次的提交节点。中间modified,add后的modified都会被清除
git clean -fd (-f代表文件)(-d代表目录 )针对没有git add 过的文件,没有跟踪过的git 文件清除可以用这个命令:

11.裁剪应用
PRODUCT_DELETE_PACKAGES += \

12.查看应用包名类名
pm list package -f

13.查看启动界面
dumpsys package 包名

14.遍历所有某个文件的内容
find -name "*.mk" | xargs grep -nr "SoundRecorder"

15.查看版本信息
dumpsys package com.gxa.service.systemui | grep versionName

16.查看系统从启动开始到当前运行了多久
uptime

17.计算sha值和md5值
md5sum <filename>
sha1sum <filename>
sha256sum <filename>

windows:
certutil -hashfile filename MD5

certutil -hashfile filename SHA1

certutil -hashfile filename SHA256

18.查看产品lunch多少
/device/qcom/qssi/AndroidProducts.mk
PRODUCT_MAKEFILES := \

$(LOCAL_DIR)/qssi.mk

COMMON_LUNCH_CHOICES := \

qssi-userdebug

19.查看子目录大小
du -h --max-depth=1 /tmp
如果--max-depth=0说明是当前目录

20.切换分支失败
强行回退到某个提交号
git reset --hard 提交号

21.拉远程分支,并且新建分支
git checkout 远程分支 -b 本地分支名

22.同步代码
repo init -u ssh://xxx@10.103.106.23:29418/avnt/8155/tiger/manifest -b xos_security --repo-url=ssh://xxx@10.103.106.23:29418/tools/repo.git --no-repo-verify
repo sync

23.停止cpu给某个进程分配时间片
停止:kill -19 pid
恢复:kill -18 pid

24.发广播
am broadcast -a android.intent.action.BOOT_COMPLETED
adb shell am broadcast -a com.android.test --es test_string "this is test string" --ei test_int 100 --ez test_boolean true
说明:红色为key,蓝色为value,分别为String类型,int类型,boolean类型

25.查看当前分支提交图
git log --graph

26.查看网速
sar -n DEV 1 100

27.进入救援
dtach -a /tmp/android
setprop persist.vendor.usb.mode adb

28.清除包资源
pm clear 包名

29.查看应用被主动杀
singal 9
Slow operation

30.查看用户组列表
pm list users
删除用户
pm remove-user userId

31.fastboot
fastboot flash la_system_a system.img

32.解压jar
jar -xvf classes.jar

33.查看指定进程线程信息
ps -T -p pid
查看所有线程信息
top -H

34.设置车机窗口大小
wm size 1920x720

35.查看网速
1代表一秒统计并显示一次100代表统计一百次
sar -n DEV 1 100

36.selinux
logcat | grep avc: >> /sdcard/selinux.txt &

37.进入退出recovery模式
bosch_swdl -b normal
adb shell setprop vendor.bosch.recover.mode 1

38.切换adb模式
echo host > /sys/devices/platform/soc/a600000.ssusb/mode
echo peripheral > /sys/devices/platform/soc/a600000.ssusb/mode

39.输入十字架
settings put system pointer_location 1
dumpsys input |grep -ie FocusedApplication

40.关闭dmverity
adb disable-verity

41.取selinux avc
logcat | grep avc: >> /sdcard/selinux.txt &

5.鸟哥常用指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
在man中,^xxx查找开头为xxx的单词。

在man中使用whatis passed,参看多少章节有内容,然后用:man 章节号 指令 查看对应章节内容。

man -k 自己记得的那部分关键字,查看命令。

man 文件 查看配置文件作用

runlevel查看我当前所在运行级别,不同级别能运行的服务不一样。

init 级别号 切换到某个级别

ls -ld 目录,查看目录本身的权限

chmod -R 000 dir 递归修改目录内部文件权限

tail -f 文件,监控文件内容

od -t c /system/bin/ls 查看ls二进制

which ls 查看ls可执行文件所在的目录
whereis ls 查看含有ls的所有文档路径,包含帮助文档
where -b ls 查看可执行文件位置
where -m ls 查看ls manpage位置
locate jackou 查看含有jackou的所有目录
updatedb 更新locate查找的数据库,因为locate数据库每天更新一次,刚刚创建的文件不一定能查到
locate -i jack 忽略大小写查看所有含有jack的文件或者文件夹

dd if=/dev/zero of=file1 bs=1M count=1
从dev/zero取出1M大小的文件写入到file1中,bs代表一个单位大小,count代表有多少个单位。

file -size +2M 查找大于2M的所有文件,小于用-
file -newer 文件 查看比文件创建时间更新的文件

filefrag -v 文件 查看文件处于具体哪些block中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
echo jack{1..100} 输出jack1到jack100
echo jack{a..z} 输出jacka到jackz
echo jack{1..100..2}增加步长为2
echo jack{01..100}输出以0开头的数字

alias 命令别名
unalias取消别名

!行号 查看行号对应的指令
!!查看上一个运行的指令

ctrl+k 删除光标之后的字符串
ctrl+u 删除光标之前的字符串
ctrl+l 清屏

grep -c 列出匹配关键字的行数
grep '^$' 文件 选出所有空格行。如果再加-v参数,表示反转,过滤有内容的行,加-n参数,显示行号。
^代表正则表达式以某字符开始,$以某字符结束,.代表有且仅有任意一个字符的匹配下,例如.s可以匹配is或者as

正则表达式:+代表匹配一次或多次,i+匹配i出现一次或多次的字符串,?代表匹配一次或者多次,例如god gd,使用g?d就可以匹配上面两个字符串