Linux与Bash 编程——Linux数据处理三剑客-L3

22 篇文章 1 订阅
6 篇文章 1 订阅

目录:

  1. Linux三剑客之grep
    1. 内容检索:(注意:pattern是模式参数,可以是一个正则表达式或简单的文本匹配。)
    2. 文件检索:
  2. linux三剑客之awk
    1. awk简介:
    2. awk基本语法:
    3. awk上下文变量:
    4. 字段变量用法:
    5. pattern表达式:
    6. awkpattern匹配表达式案例:
    7. action行为表达式{action}:
    8. 单行转多行:
    9. 多行变单行:
    10. 计算平均数:
    11. awk的词典结构array:
  3. linux三剑客之sed
    1. sed简介:
    2. sed基本语法与常用参数
    3. sedpattern表达式
    4. sedaction表达式
    5. 行数操作
    6. s表达式
    7. 反向引用
    8. Linux三剑客实战
      1. 日志数据检索
      2. 上下文检索
  4. linux三剑客与管道使用
    1. 程序运行环境输入与输出:
    2. 管道重定向
    3. 管道连接
    4. 管道连接符|
    5. 管道执行的上下文控制
    6. Linux三剑客介绍
    7. 与SQL的对比
    8. 平台实现差异与官方文档
    9. 官方文档
    10. BRE基本正则表达式
    11. ERE扩展正则表达式
  5. 【实战】三剑客实战之nginx日志分析实战网络统计实战
  6. 【实战】三剑客实战之性能、网络统计实战
    1. 进程
    2. 统计一个进程的实时cpu数据需要用到哪个命令?
    3. 封装自己的ps命令:
    4. 统计aliyundun的性能:
    5. 网络:
    6. 网络命令:
    7. 统计连接网络链接情况:
  7. linux进阶命令
    1. Linux进阶命令学习
    2. curl接口请求
    3. curl发起get请求
    4. curl发起post请求
    5. 其他常用参数
    6. jq工具
    7. jq的安装
    8. jq格式化
    9. json数据提取
    10. json数据重组
  8. linux环境配置
    1. Bash环境
      1. bash自启动文件Startup
      2. bashprofile文件
      3. zsh自启动文件Startup
    2. PATH变量
      1. 常见的PATH变量问题
      2. PATH变量使用示例
    3. 应用安装
    4. Python环境配置
      1. Python版本选择推荐Python3.7+
      2. 利用系统自带包管理工具
      3. 安装包安装方式
      4. 源码安装
      5. 检查环境
      6. Python知识点
    5. nodejs环境配置
      1. nodejs生态
      2. npm包管理工具
      3. nodejs项目的编译
      4. appium源代码编译
    6. java环境配置
      1. java下载地址
      2. centosjava安装
      3. centosjava多版本配置
    7. maven环境配置
      1. maven安装
      2. mvn常用命令
      3. 编译项目
      4. maven的配置
    8. AndroidSDK环境配置
      1. AndroidSDK下载地址
      2. AndroidSDK命令行工具
      3. AndroidSDK构建工具
      4. AndroidSDK平台工具
      5. AndroidSDK模拟器工具
      6. AndroidSDK路径配置
      7. 创建模拟器并通过shell运行与执行测试
  9. Linux与Bash编程
    1. 统计/home目录下不同用户的普通文件的总数是多少:
    2. 统计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命令的主要功能包括:

  1. 逐行处理文本:awk命令可以从文件或标准输入中读取文本,并对每一行进行处理。可以使用awk命令对每一行进行操作,例如查找、替换、删除等。
  2. 数据格式化:awk命令可以对文本进行格式化输出,例如按照指定的格式对文本进行分行、缩进、对齐等。
  3. 变量和条件语句:awk命令可以使用变量和条件语句来控制处理流程,例如根据指定的条件对文本进行过滤、选择、排序等操作。
  4. 函数和宏: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]}'

 The GNU Awk User’s Guide

sed, a stream editor

GNU Grep 3.11

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 脚本教程》
  • Google

4.linux三剑客与管道使用

程序运行环境输入与输出:
  • 标准输入 0
    • read a;echo $a
  • 标准输出 1
    • echo baidu.com
  • 错误输出
    • ls not_exist_dir

PlantUML diagram

管道重定向
  • 管道与管道之间可以重定向
  • 管道与文件之间可以重定向

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 

管道连接 

PlantUML diagram

管道连接符 | 
  • 管道连接符 | 可以连接多个程序的执行
  • 管道连接是以子进程的方式启动的

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.com

curl -G https://www.baidu.com
curl -X GET https://www.baidu.com

POST:

- d:指定post请求体
curl -d 'login=1234' https://www.baidu.com

curl -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/profileA
/etc/bash.bashrcA
~/.bashrcB
~/.bash_profileB1
~/.bash_loginB2
~/.profileB3
source $BASH_ENVA
logout only:
~/.bash_logoutC
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 loginInteractive non-loginScript
/etc/zshenvAAA
~/.zshenvBBB
/etc/zprofileC
~/.zprofileD
/etc/zshrcEC
~/.zshrcFD
/etc/zloginG
~/.zloginH
~/.zlogoutI
/etc/zlogoutJ
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿瞒有我良计15

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值