目录:
- Linux三剑客之grep
- 内容检索:(注意:pattern是模式参数,可以是一个正则表达式或简单的文本匹配。)
- 文件检索:
- linux三剑客之awk
- awk简介:
- awk基本语法:
- awk上下文变量:
- 字段变量用法:
- pattern表达式:
- awkpattern匹配表达式案例:
- action行为表达式{action}:
- 单行转多行:
- 多行变单行:
- 计算平均数:
- awk的词典结构array:
- linux三剑客之sed
- sed简介:
- sed基本语法与常用参数
- sedpattern表达式
- sedaction表达式
- 行数操作
- s表达式
- 反向引用
- Linux三剑客实战
- 日志数据检索
- 上下文检索
- linux三剑客与管道使用
- 程序运行环境输入与输出:
- 管道重定向
- 管道连接
- 管道连接符|
- 管道执行的上下文控制
- Linux三剑客介绍
- 与SQL的对比
- 平台实现差异与官方文档
- 官方文档
- BRE基本正则表达式
- ERE扩展正则表达式
- 【实战】三剑客实战之nginx日志分析实战网络统计实战
- 【实战】三剑客实战之性能、网络统计实战
- 进程
- 统计一个进程的实时cpu数据需要用到哪个命令?
- 封装自己的ps命令:
- 统计aliyundun的性能:
- 网络:
- 网络命令:
- 统计连接网络链接情况:
- linux进阶命令
- Linux进阶命令学习
- curl接口请求
- curl发起get请求
- curl发起post请求
- 其他常用参数
- jq工具
- jq的安装
- jq格式化
- json数据提取
- json数据重组
- linux环境配置
- Bash环境
- bash自启动文件Startup
- bashprofile文件
- zsh自启动文件Startup
- PATH变量
- 常见的PATH变量问题
- PATH变量使用示例
- 应用安装
- Python环境配置
- Python版本选择推荐Python3.7+
- 利用系统自带包管理工具
- 安装包安装方式
- 源码安装
- 检查环境
- Python知识点
- nodejs环境配置
- nodejs生态
- npm包管理工具
- nodejs项目的编译
- appium源代码编译
- java环境配置
- java下载地址
- centosjava安装
- centosjava多版本配置
- maven环境配置
- maven安装
- mvn常用命令
- 编译项目
- maven的配置
- AndroidSDK环境配置
- AndroidSDK下载地址
- AndroidSDK命令行工具
- AndroidSDK构建工具
- AndroidSDK平台工具
- AndroidSDK模拟器工具
- AndroidSDK路径配置
- 创建模拟器并通过shell运行与执行测试
- Bash环境
- Linux与Bash编程
- 统计/home目录下不同用户的普通文件的总数是多少:
- 统计netstat-anp状态为LISTEN和CONNECT的
1.Linux 三剑客之 grep
获取行 grep pattern file
获取内容 grep -o pattern file
获取上下文 grep -A -B -C pattern file
内容检索:(注意:pattern
是模式参数,可以是一个正则表达式或简单的文本匹配。)
- 获取行
grep pattern file:(
这个命令用于在文件中搜索匹配给定模式(pattern)的行。模式可以是正则表达式或简单的文本匹配。该命令返回所有匹配的行,不进行任何排序或过滤。)
- 获取内容
grep -o pattern file (
这个命令与上一个命令类似,但它只返回匹配模式的行,而不是整个行。这意味着它会返回匹配模式的文本行,而不是包含这些文本的行。)
- 获取上下文
grep -A -B -C pattern file(
将返回匹配模式的行,并显示匹配行的前2行和后3行,以及匹配行的上下文(即匹配行的前1行和后1行)。
- -C:理解-C参数 ,返回匹配行的前2行,后俩行
文件检索:
递归搜索 grep pattern -r dir/
展示匹配文件名 grep -H 111 /tmp/1
只展示匹配文件名 grep -l 111 /tmp/1
- 递归搜索
grep pattern -r dir/
- 展示匹配文件名
grep -H pattern file
- 只展示匹配文件名
grep -l pattern file
范围约束:
忽略大小写 grep -i pattern file
不显示匹配的行 grep -v pattern file
使用扩展正则表达式 grep -E pattern file
文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*"
- 忽略大小写
grep -i pattern file
- 不显示匹配的行
grep -v pattern file
- 使用扩展正则表达式
grep -E pattern file
- 文件范围和目录范围约束
grep 111 -r /tmp/demo/ --include "11*"(
这个命令将搜索/tmp/demo/
目录及其子目录中以111
开头的文件,并输出包含文本111
的行。)
进程检索:
- 进程过滤场景比较特殊,需要注意 grep 本身会开启新进程,所以需要单独过滤掉 grep 进程
ps -ef | grep ssh
503 2507 1 0 29 821 ?? 0:00.08 /usr/bin/ssh-agent
503 50022 11154 0 8:11下午 ttys002 0:00.00 grep ssh
ps -ef | grep ssh | grep -v grep
503 2507 1 0 29 821 ?? 0:00.08 /usr/bin/ssh-agent
2.linux三剑客之awk
awk简介:
awk是一个强大的文本处理工具,它可以用于处理各种类型的文本数据,包括文件、管道、标准输入等。awk命令可以对文本进行逐行处理,并且可以根据指定的规则对文本进行格式化和输出。
awk命令的主要功能包括:
- 逐行处理文本:awk命令可以从文件或标准输入中读取文本,并对每一行进行处理。可以使用awk命令对每一行进行操作,例如查找、替换、删除等。
- 数据格式化:awk命令可以对文本进行格式化输出,例如按照指定的格式对文本进行分行、缩进、对齐等。
- 变量和条件语句:awk命令可以使用变量和条件语句来控制处理流程,例如根据指定的条件对文本进行过滤、选择、排序等操作。
- 函数和宏:awk命令可以使用自定义函数和宏来扩展其功能,例如定义自定义函数来处理特定的文本操作。
awk命令通常与其他命令和工具结合使用,例如cat、find、ls等,以便更有效地处理大规模的文本数据。awk命令可以用于各种应用程序,包括数据处理、数据分析、文件格式转换、文本解析等。
awk 基本语法:
- awk 是 linux 下的一个命令,同时也是一种语言解析引擎
- awk 具备完整的编程特性。比如执行命令,网络请求等
- 精通 awk,是一个 linux 工作者的必备技能
- 语法
awk 'pattern{action}'
awk 上下文变量:
- 开始 BEGIN 结束 END
- 行数 NR
- 字段与字段数 $1 $2 .. $NF NF
- 整行 $0
- 字段分隔符 FS
- 输出数据的字段分隔符 OFS
- 记录分隔符 RS
- 输出字段的行分隔符 ORS
字段变量用法:
- -F 参数指定字段分隔符,可以用|指定多个- 多分隔符 -F ‘<|>’
- BEGIN{FS=“_”} 也可以表示分隔符
- $0 代表当前的记录
- $1 代表第一个字段
- $N 代表第 N 个字段
- $NF 代表最后一个字段
- $(NF-1) 代表倒数第二个字段
pattern 表达式:
- 正则匹配
$1~/pattern/
/pattern/
- 比较表达式
$2>2
$1=="b"
awk pattern 匹配表达式案例:
- 开始和结束
awk 'BEGIN{}END{}'
- 正则匹配
- 整行匹配
awk '/Running/'
- 字段匹配
awk '$2~/xxx/'
- 整行匹配
- 行数表达式
- 取第二行
awk 'NR==2'
- 去掉第一行
awk 'NR>1'
- 取第二行
- 区间选择
awk '/aa/,/bb/'
awk '/1/,NR==2'
action 行为表达式 {action}:
- 打印
{print $0}
{print $2}
- 赋值
{$1="abc"}
- 处理函数
- 原始内容 $0
- 更新后内容
{$1=$1;print $0}
单行转多行:
echo 1:2:3 | awk 'BEGIN{RS=":"}{print $0}'
多行变单行:
echo '1
2
3' | awk 'BEGIN{RS="";FS="\n";OFS=":"}{$1=$1;print $0}'
1:2:3
echo '1
2
3' | awk 'BEGIN{ORS=":"}{$1=$1;print $0}'
1:2:3:
计算平均数:
echo '1,10
2,20
3,30' | awk 'BEGIN{total=0;FS=","}{total+=$2}END{print total/NR}'
awk 的词典结构 array:
- array 是稀疏矩阵,类似 python 的词典类型
- 统计多家机构的营业额
- 统计多家机构的营业额平均值
统计多家机构的营业额
echo 'a, 1, 10
a, 2, 20
a, 3, 30
b, 1, 5
b, 2, 6
b, 3, 7' | awk '{data[$1]+=$3}
END{for(k in data) print k,data[k]}'
统计多家机构的营业额平均值
echo 'a, 1, 10
a, 2, 20
a, 3, 30
b, 1, 5
b, 2, 6
b, 3, 7' | awk '{data[$1]+=$3;count[$1]+=1;}
END{for(k in data) print k,data[k]/count[k]}'
3.linux三剑客之sed
sed简介:
- sed命令可以读取文本文件,并使用一系列指令对文本进行修改、删除、插入、替换等操作。sed命令通常用于处理文本数据,例如查找、替换、格式化、排序等。
sed 基本语法与常用参数
- 语法结构 sed [addr]X[options]
- -e 表达式
- sed -n ‘2p’ 打印第二行
- sed ‘s#hello#world#’ 修改
- -i 直接修改源文件
- -E 扩展表达式
- –debug 调试
sed pattern 表达式
- 行数与行数范围 20 30,35
- 正则匹配 /pattern/
- 区间匹配 //,//
sed action 表达式
- p 打印,通畅结合-n 参数:sed -n ‘2p’
- s 查找替换:s/REGEXP/REPLACEMENT/[FLAGS]
- d 删除,删除前两行 sed ‘1,2d’
- a 追加
- c 改变
- i 插入内容到匹配行之前
- e 执行命令
- 分组匹配与字段提取:sed ‘s#([0-9])|([a-z])#\1 \2#’
行数操作
- 打印特定行
sed -n 2p
- 删除最后一行
sed $d
s 表达式
- s 表示替换
- s 后面的追加字符可以为任意字符
- g 表示全局匹配
- & 表示匹配内容
echo a:b:c | sed 's/:/123&/'
a123:b:c
echo a:b:c | sed 's/:/&123/'
a:123b:c
echo a:b:c | sed 's#:#|#g'
a|b|c
反向引用
- 使用()对数据进行分组
- 使用\1 \2 反向引用分组
echo 0 1 2 3 4 | sed -E 's#([1-3]) ([1-3]) ([1-3])#\3 \2 \1#'
0 3 2 1 4
Linux 三剑客实战
日志数据检索
- 找出 log 中的 404 500 的报错 考察严谨性
find_error_log() {
less nginx.log | grep -E '(" 404 |" 500)'
less nginx.log | grep '$9~/404|500/'
}
上下文检索
- 找出 500 错误时候的上下文 考察 grep 高级用法
日志数据统计
- 找出访问量最高的 ip 统计分析
数据文件修改
- 找出访问量最高的页面地址 借助于 sed 的统计分析
参考资料
- 高级 Bash 脚本编程指南
- LINUX 与 UNIX SHELL 编程指南
- 鸟哥的 Linux 私房菜
- Bash 官方文档
- 阮一峰的《bash 脚本教程》
4.linux三剑客与管道使用
程序运行环境输入与输出:
- 标准输入 0
read a;echo $a
- 标准输出 1
echo baidu.com
- 错误输出
ls not_exist_dir
管道重定向
- 管道与管道之间可以重定向
- 管道与文件之间可以重定向
echo 11 > /tmp/aaa.txt
read var < /tmp/aaa.txt
echo $var
ls not_exist_dir > /tmp/aaa.txt
ls not_exist_dir > /tmp/aaa.txt 2>&1
管道连接
管道连接符 |
- 管道连接符
|
可以连接多个程序的执行 - 管道连接是以子进程的方式启动的
echo myname | { read line; echo input is $line; }
管道执行的上下文控制
- 使用 { command; } 注意花括号与内部命令之间的空格与分号
- 使用控制逻辑 while read 组合
- 使用 $() ``
#这个方式无法获得变量x
echo hello world | read x;
echo $x
#如下两个方式可以获得变量x
echo hello world | { read x; echo $x; }
echo hello world | while read x; do echo $x;done
Linux 三剑客介绍
- grep 基于正则表达式查找满足条件的行
- awk 名字来源于三个作者的名字简称,根据定位到的数据行处理其中的分段
- sed stream editor 根据定位到的数据行修改数据 >
与 SQL 的对比
Linux 三剑客 | SQL Structured Query Language |
---|---|
grep 数据查找定位 | select * from table like ‘%xx’ |
awk 数据切片 | select field from table |
sed 数据修改 | update table set field=new where field=old |
平台实现差异与官方文档
- mac 上的实现与 gnu 的实现有差异
- 不同版本之间有小的语法差异
- 可以通过独立下载 gawk 等工具实现
官方文档
- https://www.gnu.org/software/grep/manual/grep.html
- https://www.gnu.org/software/gawk/manual/gawk.html
- https://www.gnu.org/software/sed/manual/sed.html
BRE 基本正则表达式
- ^ 开头 $结尾
[a-z]
[0-9]
区间,如果开头带有^表示不能匹配区间内的元素*
0 个或多个.
表示任意字符
ERE 扩展正则表达式
- 基本正则表达式(BRE)基础上的扩展
?
非贪婪匹配+
一个或者多个()
分组{}
范围约束|
匹配多个表达式的任何一个
5.【实战】三剑客实战之nginx日志分析实战网络统计实战
找出 log 中的 404 500 的报错 考察严谨性
less nginx.log | grep -E '(" 404 |" 500)'
less nginx.log | grep '$9~/404|500/'
找出访问量最高的ip,统计分析,取出top3的ip和数量,打印出来
less nginx.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -3
6.【实战】三剑客实战之性能、网络统计实战
进程
- top
- ps
统计一个进程的实时cpu数据需要用到哪个命令?
封装自己的ps命令:
ps_ex ()
{
ps -o uname,pid,ppid,thcount,ni,pri,psr,pcpu,pmem,rss,vsz,sz,start_time,time,comm,c,command,args "$@"
}
统计aliyundun的性能:
perf_get ()
{
top -b -d 1 -n 20 | grep --color=auto --line-buffered -i yundun$ | awk 'BEGIN{print "cpu","mem"}{cpu+=$9;mem+=$10;print $9,$10}END{print "";print cpu/NR,mem/NR}'
}
网络:
- netstat -tlnp
- netstat -tnp
网络命令:
统计连接网络链接情况 :
connection_summary() {
netstat -tn |
awk 'NR>2{print $4,$6}' |
awk -F: '{print $2}' |
sort | uniq -c | sort -nr |
awk '{print $2"\t"$3"\t"$1}'
}
7.linux进阶命令
Linux 进阶命令学习
- curl
- jq
curl 接口请求
- curl是一个发起请求数据给服务器的工具
- curl支持的协议FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP
- curl是一个非交互的工具
curl 发起 get 请求
- curl -G url
- curl url
- curl -X GET url
- 带参数的get请求使用 -G配合-d
curl 发起 post 请求
- curl -d “name=xxx” url
- curl -X POST url
其他常用参数
- curl -o filename url 保存响应内容
- curl -i url 显示头信息
- curl -I url 仅显示头信息
- curl -s url 静默访问不输出错误和进度
- curl -v url 输出通信过程
- curl -H headers url 添加头信息
- curl -x “ip:port” url 为请求添加代理
jq 工具
- jq 非 jQuery
- 它是一个处理 json 的神器
jq 的安装
yum install jq
jq 格式化
echo '{"a":1,"b":2}' | jq '.'
json 数据提取
# 提取指定key
echo '{"foo":53,"bar":"some datas"}' | jq .foo
# 从数组中提取单个数据
echo '[{"a":1,"b":2},{"c":3,"d":4}]' |jq .[0]
# 从数组中提取所有数据
echo '[{"a":1,"b":2},{"c":3,"d":4}]' |jq .[]
# 从数组中提取多个值
echo '[{"a":1,"b":2},{"c":3,"d":4},{"e":5,"f":6}]' |jq .[0,2]
json 数据重组
# 数据重组成数组
echo '{"a":1,"b":2,"c":3,"d":4}'| jq '[.a,.b]'
# 数据重组成对象
echo '{"a":1,"b":2,"c":3,"d":4}'| jq '{"tmp":.b}'
GET:
-G:使用get请求
- d:指定请求数据
curl https://www.baidu.comcurl -G https://www.baidu.com
curl -X GET https://www.baidu.com
POST:
- d:指定post请求体
curl -d 'login=1234' https://www.baidu.comcurl -X POST https://www.baidu.com
Other:
保存响应内容
- curl -o tmp.html https://www.baidu.com
输出通信的整个过程
- curl -v https://www.baidu.com
不输出错误和进度信息
- curl -s https://www.baidu.com
jq:
一个 jq 程序是一个过滤器
它接受一个输入并产生一个输出
官网:jq
简单使用:
. 格式优化
echo '{"a":11,"b":12}' | jq '.'
常用方法 :
内容提取:
echo '{"foo": 42, "bar": "less interesting data"}' | jq .foo
从数组中提取单个数据:
echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0]
从数组中提取所有数据:
echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[]
过滤多个值:
echo '[{"a":1 ,"b":2},{"c":3,"d":4}]' | jq .[0,1]
数据重组成数组:
echo '{"a":1,"b":2,"c":3,"d":4}' | jq '[.a,.b]'
数据重组成对象:
echo '{"a":1, "b":2,"c":3,"d":4}' | jq '{"tmp":.b}'
8.linux环境配置
Bash 环境
- Linux 自带
- Mac 自带
- Windows 使用 git bash https://gitforwindows.org/
bash 自启动文件 Startup
- 系统级初始化文件 /etc/profile
- 登录用户特定初始化文件 ~/.bash_profile
- bash 初始化文件 ~/.bashrc
交互登录 | 交互非登录 | 脚本 | |
---|---|---|---|
/etc/profile | A | ||
/etc/bash.bashrc | A | ||
~/.bashrc | B | ||
~/.bash_profile | B1 | ||
~/.bash_login | B2 | ||
~/.profile | B3 | ||
source $BASH_ENV | A | ||
logout only: | |||
~/.bash_logout | C |
bash profile 文件
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
zsh 自启动文件 Startup
- 系统级初始化文件 /etc/zprofile
- 登录用户特定初始化文件 ~/.zprofile
- shell 初始化文件 ~/.zshrc
Interactive login | Interactive non-login | Script | |
---|---|---|---|
/etc/zshenv | A | A | A |
~/.zshenv | B | B | B |
/etc/zprofile | C | ||
~/.zprofile | D | ||
/etc/zshrc | E | C | |
~/.zshrc | F | D | |
/etc/zlogin | G | ||
~/.zlogin | H | ||
~/.zlogout | I | ||
/etc/zlogout | J |
PATH 变量
- PATH 变量是一个路径列表,以:隔开
- 如果可执行程序所在的目录在 PATH 变量的路径列表里,那么输入命令时可省略路径
- 路径列表前面的路径为优先匹配路径,可以用来实现新老版本程序的命令更换
常见的 PATH 变量问题
- python2 与 python3 指定问题
- 安装过的命令找不到问题
PATH 变量使用示例
export CHROMEDRIVER_HOME=$HOME/projects/chromedriver/91
export PATH=$CHROMEDRIVER_HOME:$PATH
export VSCODE_HOME=/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin
export PATH=$VSCODE_HOME:$PATH
export SONAR_HOME=/usr/local/Cellar/sonar-scanner/4.2.0.1873
export PATH=$SONAR_HOME/bin/:$PATH
export SONARQUBE_TOKEN=c7a93fb6bb1e3268f7099b0f26672ba43c117bb9
export ANDROID_HOME=$HOME/Library/Android/sdk/
export PATH=$ANDROID_HOME/emulator/:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:~/bin/:$PATH
应用安装
- 平台自带的 app store:
- yum @centos/redhat
- apt-get @ubuntu debian
- scoop winget @windows
- 特定平台版本管理工具 pyenv nvm
- 安装包安装 pkg dmg
- 源码编译安装 make ; make install
redhat/centos 平台示例
- yum search $package
- yum install $package
- yum remove $package
ubuntu/debian 平台
- apt-cache search $package
- apt-get install $package
- apt-get uninstall $package
开源镜像站
- 华为:https://mirrors.huaweicloud.com/
- 阿里云:https://developer.aliyun.com/mirror/
Python环境配置
Python 版本选择 推荐 Python3.7+
- 下载:https://www.python.org/downloads/
- 入门:https://docs.python.org/3/tutorial/index.html
- Python3 已经成为行业标准,推荐使用 Python3.x 版本
- Python3.6 增加了类型注解,推荐使用这个版本以上
利用系统自带包管理工具
yum search python3
yum install -y python3
安装包安装方式
- windows .exe
- mac .dmg .pkg
- centos .rpm
源码安装
#提前安装对应的各种开发库依赖,每个版本的要求可能都不同
curl -O https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
tar -zxvf Python-3.10.0.tgz
cd Python-3.10.0
./configure
make
sudo make install
#DESTDIR=/tmp/python3 make install
检查环境
python -V
which python
echo $PATH
Python 知识点
- pip
- virtualenv
- pycharm
nodejs 环境配置
nodejs 生态
- nodejs:https://nodejs.org/zh-cn/
- npm:node 的包管理工具
- cnpm:国内镜像版客户端
npm 包管理工具
npm install -g $package
npm uninstall $package
npm install
nodejs 项目的编译
- appium https://github.com/appium/appium
- stf https://github.com/DeviceFarmer/stf
appium 源代码编译
git clone https://github.com/appium/appium.git
cd appium
npm install
npm run build
node .
[Appium] Welcome to Appium v1.23.0-beta.0 (REV b2415a08729d64b16bf07da772fd9280de7932c8)
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
^C[Appium] Received SIGINT - shutting down
[debug] [Appium] There are no active sessions for cleanu
java环境配置
java 下载地址
- java https://www.java.com/zh-CN/
- oracle jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html
- openjdk https://openjdk.java.net/
centos java 安装
yum search jdk
yum install -y java-11-openjdk
centos java 多版本配置
sudo alternatives --list
sudo alternatives --config java
maven环境配置
maven 安装
unzip apache-maven-3.8.3-bin.zip
export PATH=/opt/apache-maven-3.8.3/bin:$PATH
which mvn
mvn 常用命令
mvn clean test
mvn package install
mvn test -DskipTests
mvn clean \
org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent \
test \
org.jacoco:jacoco-maven-plugin:0.8.5:report \
-Dmaven.test.failure.ignore=true \
-Dmaven.test.skip=false
编译项目
git clone https://github.com/spring-guides/gs-spring-boot.git
cd gs-spring-boot/complete
mvn package
java -Dserver.port=8888 -jar target/spring-boot-complete-0.0.1-SNAPSHOT.jar
#SERVER_PORT=8888 mvn spring-boot:run
maven 的配置
- The Maven install: ${maven.home}/conf/settings.xml
- A user’s install: ${user.home}/.m2/settings.xml
Android SDK环境配置
Android SDK 下载地址
Android SDK 命令行工具
~ seveniruby$ ls /Users/seveniruby/Library/Android/sdk/tools/bin/
apkanalyzer jobb screenshot2
archquery lint sdkmanager
avdmanager monkeyrunner uiautomatorviewer
Android SDK 构建工具
~ seveniruby$ ls /Users/seveniruby/Library/Android/sdk/build-tools/29.0.3/
NOTICE.txt dexdump mipsel-linux-android-ld
aapt dx package.xml
aapt2 i686-linux-android-ld renderscript
aarch64-linux-android-ld lib runtime.properties
aidl lib64 source.properties
apksigner lld split-select
arm-linux-androideabi-ld llvm-rs-cc x86_64-linux-android-ld
bcc_compat mainDexClasses zipalign
core-lambda-stubs.jar mainDexClasses.rules
d8 mainDexClassesNoAapt.rules
Android SDK 平台工具
~ seveniruby$ ls /Users/seveniruby/Library/Android/sdk/platform-tools/
NOTICE.txt etc1tool make_f2fs_casefold source.properties
adb fastboot mke2fs sqlite3
api hprof-conv mke2fs.conf systrace
dmtracedump lib64 package.xml
e2fsdroid make_f2fs sload_f2fs
Android SDK 模拟器工具
~ seveniruby$ ls /Users/seveniruby/Library/Android/sdk/emulator/
LICENSE lib64
NOTICE.csv mksdcard
NOTICE.txt package.xml
android-info.txt perfetto-protozero-protoc-plugin
bin64 qemu
darwin-aarch64-replace.sh qemu-img
emulator qsn
emulator-check resources
emulator64-crash-service source.properties
lib
Android SDK 路径配置
#*unix,长期使用放入到~/.bash_profile中
#ANDROID_HOME官方不推荐使用,但是仍然生效
#export ANDROID_HOME=/Users/seveniruby/Library/Android/sdk
export ANDROID_SDK_ROOT=/Users/seveniruby/Library/Android/sdk
export PATH=$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/tools/bin:$PATH
#windows 长期使用放入到系统属性里
set ANDROID_SDK_ROOT=E:\Android\sdk\
创建模拟器并通过 shell 运行与执行测试
avdmanager create avd -n 'ceshiren.com.29' -k 'system-images;android-29;google_apis;x86_64'
emulator -list-avds
emulator @ceshiren.com.29
adb devices
adb logcat
adb shell monkey -p com.google.android.apps.messaging 500
avdmanager delete avd -n ceshiren.com.29
9.Linux与Bash编程
统计 /home
目录下不同用户的普通文件的总数是多少:
find /home -type f -printf "%u\n" | sort | uniq -c
统计 netstat -anp
状态为 LISTEN 和 CONNECT 的连接数量分别是多少:
netstat -anp | grep LISTEN | wc -l
netstat -anp | grep CONNECT | wc -l