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就可以匹配上面两个字符串
版权声明: 此文章版权归Jack Ou所有,如有转载,请註明来自原作者