本篇包括:vi/awk/sed/grep/find/busybox/mount/df/du/ifconfig/ip/iperf/chmod/kill killall/adb
(1)vi
1 vi编辑器是所有Unix及Linux系统下标准的编辑器
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 命令行模式command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。 - 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。 - 底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi简化成两个模式,就是将底行模式last line mode也算入命令行模式command mode。
2 在终端执行 vi +文本文件名 就可以进入vi编辑界面,这时候处在「命令行模式(command mode)」
3 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候就可以开始输入文字。
4 按Esc键可以退出插入模式
5 在底行模式界面输入qw q!都可以退出vi编辑界面,有所不同的是qw是退出时保存,q!是强制退出,一般常用的是这两个退出
6 具体常用的命令行操作还有:
按「i」切换进入插入模式「insert mode」,按"i"进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
按「ctrl」+「b」:屏幕往"后"移动一页。
按「ctrl」+「f」:屏幕往"前"移动一页。
按「ctrl」+「u」:屏幕往"后"移动半页。
按「ctrl」+「d」:屏幕往"前"移动半页。
按数字「0」:移到文章的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的"行尾"。
按「^」:移动到光标所在行的"行首"
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
(2) awk
是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
平常用的比较多的awk命令:ls -lh |awk ‘{print $5}’
用来获取当前目录下的各个文件的大小
ls -lh
总用量 176M
-rw-rw-r-- 1 xuzehao xuzehao 6.7K 8月 14 15:43 192.168.222.123.info
drwxr-xr-x 2 root root 4.0K 8月 4 08:44 logs
-rwxrwxrwx 1 xuzehao xuzehao 176M 7月 31 08:53 main_2.1
-rw-r–r-- 1 root root 51 8月 14 11:33 output.txt
drwxr-xr-x 2 root root 4.0K 8月 4 08:46 pic_dir
drwxr-xr-x 2 root root 4.0K 8月 4 08:44 temp
ls -lh |awk ‘{print $5}’
6.7K
4.0K
176M
51
4.0K
4.0K
一般我是用在Python程序中去读取设备上某个文件夹或者某个文件的大小,如果在Python程序中用df -h会获取所有的文件名和大小,后期再用正则匹配去匹配有时候会匹配比较麻烦(当文件比较多比比较复杂时,如果文件少还是用正则匹配简单)
如果要指定某一行:ls -lh |awk ‘NR3{print $9,$5}’ 这边的例子是指定第三行返回文件名和大小
ls -lh |awk 'NR3{print $9,$5}’
logs 4.0K
这样编程的时候再去切片就简单很多(用空格切片).
还有一种比较经常使用的场景是拷机过程中ping设备,ping要打印时间,把ping的信息保存到文件,方便定位设备什么时候重启
命令如下:
ping ip | awk ‘{ print $0"\t" strftime("%Y-%m-%d %H:%M:%S",systime()); fflush()}’ >> outIP.info &
有&会放在后台进行,如果要终止ping要kill一下进程号
如果报错为:awk: line 2: function systime never defined
执行一下:sudo apt-get install gawk
(3)sed
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法模板:sed [-hnV][-e
(4)grep
grep是我们在排查log或者是bug、ps的时候常用的过滤方法
例如:ps |grep xxx就可以过滤出来我们所要的进程
我们还可以搭配find命令去查找并过滤
常用的选项:grep的常用选项:
-V: 打印grep的版本号
-E: 解释PATTERN作为扩展正则表达式,也就相当于使用egrep。 或操作
-F : 解释PATTERN作为固定字符串的列表,由换行符分隔,其中任何一个都要匹配。也就相当于使用fgrep。
-G: 将范本样式视为普通的表示法来使用。这是默认值。加不加都是使用grep。
-c: 抑制正常输出;而是为每个输入文件打印匹配线的计数
-h:禁止输出上的文件名的前缀。无论查找几个文件都不会在匹配内容前输出文件名
(5)find
语法示例:find path -option [ -print ] [ -exec -ok command ] {} ;
一般我们在终端上使用为:
find /sn_app/ -name lib* 查找sn_app里面的lib开头的文件
配合上grep可以这么使用:
find /sn_app/ -name *.log |grep error
查找/sn_app/里面是.log结尾的文件,文件名里包含error
常用的选项:
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-mount #查文件时不跨越文件系统mount点
对系统文件进行查找(会用这个可以加快我们查找文件):
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user xuzehao #查找在系统中属于xuzehao这个用户的文件
(6)busybox
BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。
使用起来就是在命令前加上busybox,比如busybox ls
在设备上加不加busybox在使用上没有区别,因为设备为嵌入式的Linux,会搭载 busyBox,而我们输入的命令最后都指向了busyBox
(7)mount(remount、umount)
mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者
格式
mount -a [-fv] [-t vfstype] [-n] [-rw][-F] device dir
在Linux中,设备名称通常都存在/dev里。这些设备名称的命名都是有规则的,可以用“推理”的方式把设备名称找出来
在日常使用中,我们要对硬盘进行写入或者对一些文件做修改时,需要重新挂载: remount -o rw,xxxx,重新挂载后可以获得权限,这里的原理是因为进入单用户模式后,我们的/文件系统是只读模式,无法进行修改,那么这个时候我们就需要用到一条命令:mount –o remount,rw / 这个命令来让我们的/路径文件系统为可读模式
还可以umount卸载一个区域
(8)df
df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统
常用的选项:
-a, --all 包含所有的具有 0 Blocks 的文件系统
-h, --human-readable 使用人类可读的格式以K,M,G为单位,提高信息的可读性
-l, --local 限制列出的文件结构
-T, --print-type 显示文件系统的形式
df -h
Filesystem Size Used Available Use% Mounted on
文件系统 大小 使用 可用 已用百分百 挂载
在编辑自动化脚本时,需要判断设备上此磁盘的使用情况,就会搭配-h进行使用,然后正则匹配 Use%值
当然还可以搭配awk进行单列的匹配会比直接进行正则匹配更为高效和快速:
df /xxxx/apps/ -h |awk ‘{print $5}’
返回值:Use%
25%
这样我们在自动化开发里面去正则匹配就很简单了(可以根据\n进行切片)
(9) du
du命令用于显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间
常用的选项:
-a或-all 显示目录中个别文件的大小
-h, --human-readable 使用人类可读的格式以K,M,G为单位,提高信息的可读性
du和df的不同在于df不会扫描全部的文件,du会扫描并打印全部的文件和大小,包括一些隐藏文件,du在最后一行会显示当前目录的总大小
(10)ifconfig
ifconfig可以查看ip、mac等等信息
以单张网卡为例:
ifconfig
br0 Link encap:Ethernet HWaddr 54:F6:C5:99:0B:2A
inet addr:192.168.222.6 Bcast:192.168.222.255 Mask:255.255.255.0
inet6 addr: fe80::56f6:c5ff:fe99:b2a/64 Scope:Link
inet6 addr: 2001:bc5:1:0:56f6:c5ff:fe99:b2a/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:707480 errors:0 dropped:0 overruns:0 frame:0
TX packets:137209 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:47568230 (45.3 MiB) TX bytes:79886477 (76.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:34810 errors:0 dropped:0 overruns:0 frame:0
TX packets:34810 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4508985 (4.2 MiB) TX bytes:4508985 (4.2 MiB)
可以查看ipv4:inet addr,ipv6:inet6 addr,mac:HWaddr等等lo表示本地地址127.0.0.1=localhost
ifconfig不仅仅可以查看一些信息,虽然查看信息是最经常使用
还可以启动关闭指定网卡:
ifconfig eth0 down\up
为网卡配置和删除IPv6地址:
ifconfig eth0 add\del 33ffe:3240:800:1005::2/ 64
修改MAC地址(立马生效,但是重启后就恢复原来的mac):
ifconfig eth0 down
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
ifconfig eth0 up
给eth0网卡配置IP地址,加上子掩码,加上个广播地址
ifconfig eth0 192.168.222.56 netmask 255.255.255.0 broadcast 192.168.222.255
(11)ip
ip 命令与 ifconfig 命令类似,但比 ifconfig 命令更加强大,主要功能是用于显示或设置网络设备。
ip 命令是 Linux 加强版的的网络配置工具,用于代替 ifconfig 命令
语法:ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT 为常用对象,值可以是以下几种:
OBJECT={ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | token }
常用对象的取值含义如下:
link:网络设备
address:设备上的协议(IP或IPv6)地址
addrlabel:协议地址选择的标签配置
route:路由表条目
rule:路由策略数据库中的规则
常用选项的取值含义如下:
-V:显示命令的版本信息;
-s:输出更详细的信息;
-f:强制使用指定的协议族;
-4:指定使用的网络层协议是IPv4协议;
-6:指定使用的网络层协议是IPv6协议;
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时,不使用IP地址,而使用主机的域名。
常用命令:
ip link show # 显示网络接口信息
ip link set eth0 up # 开启网卡
ip link set eth0 down # 关闭网卡
ip link set eth0 promisc on # 开启网卡的混合模式
ip link set eth0 promisc offi # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400 # 设置网卡最大传输单元
ip addr show # 显示网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
ip route show # 显示系统路由
ip route add default via 192.168.1.254 # 设置系统默认路由
ip route list # 查看路由信息
ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
ip route del default # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
(12)iperf
Iperf 是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽,
具有多种参数和UDP特性。Iperf可以报告带宽,延迟抖动和数据包丢失。
启动方法:
-s 以server模式启动,eg:iperf -s
-c host 以client模式启动,host是server端地址,eg:iperf -c 192.168.222.6
选项说明:
f [k|m|K|M] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K
-i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2
-l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16 -m 显示tcp最大mtu值
-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o c:\iperflog.txt
-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp协议
-w 指定TCP窗口大小,默认是8KB
-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C 兼容旧版本(当server端和client端版本不一样时使用)
-M 设定TCP数据包的最大mtu值
-N 设定TCP不延时
-V 传输ipv6数据包 server专用参数
-D 以服务方式运行ipserf,eg:iperf -s -D -R 停止iperf服务,针对-D,eg:iperf -s -R
client端专用参数
-d 同时进行双向传输测试
-n 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000
-r 单独进行双向传输测试
-t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5
-F 指定需要传输的文件
-T 指定ttl值
1)TCP测试
服务器执行:#iperf -s -i 1 -w 1M
iperf: ignoring extra argument – 1
Server listening on TCP port 5001
TCP window size: 320 KByte (WARNING: requested 1.00 MByte)
[ 4] local 192.168.222.16 port 5001 connected with 192.168.222.66 port 38524
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 7.4 sec 83.6 MBytes 94.6 Mbits/sec
客户端执行:#iperf -c host -i 1 -w 1M 其中-w表示TCP window size,host需替换成服务器地址。
iperf -c 192.168.222.16 -p 5001 -i 1 -w 1M
Client connecting to 192.168.222.16, TCP port 5001
TCP window size: 416 KByte (WARNING: requested 1.00 MByte)
[ 3] local 192.168.222.66 port 38524 connected with 192.168.222.16 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 11.5 MBytes 96.5 Mbits/sec
[ 3] 1.0- 2.0 sec 11.2 MBytes 94.4 Mbits/sec
[ 3] 2.0- 3.0 sec 11.2 MBytes 94.4 Mbits/sec
[ 3] 3.0- 4.0 sec 11.2 MBytes 94.4 Mbits/sec
[ 3] 4.0- 5.0 sec 11.2 MBytes 94.4 Mbits/sec
[ 3] 5.0- 6.0 sec 11.4 MBytes 95.4 Mbits/sec
[ 3] 6.0- 7.0 sec 11.2 MBytes 94.4 Mbits/sec
^C[ 3] 0.0- 7.4 sec 83.6 MBytes 94.7 Mbits/sec
2)UDP测试
服务器执行:#iperf -u -s
iperf -u -s
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 160 KByte (default)
[ 3] local 192.168.222.16 port 5001 connected with 192.168.222.66 port 56859
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-11.1 sec 126 MBytes 95.5 Mbits/sec 0.836 ms 0/89986 (0%)
[ 3] 0.0-11.1 sec 1 datagrams received out-of-order
客户端执行:iperf -u -c 192.168.222.16 -p 5001 -b 900M -i 1 -w 1M -t 60
iperf -u -c 192.168.222.16 -p 5001 -b 900M -i 1 -w 1M -t 60
Client connecting to 192.168.222.16, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 416 KByte (WARNING: requested 1.00 MByte)
[ 3] local 192.168.222.66 port 56859 connected with 192.168.222.16 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 11.5 MBytes 96.6 Mbits/sec
[ 3] 1.0- 2.0 sec 11.5 MBytes 96.4 Mbits/sec
[ 3] 2.0- 3.0 sec 11.3 MBytes 94.6 Mbits/sec
[ 3] 3.0- 4.0 sec 11.5 MBytes 96.3 Mbits/sec
[ 3] 4.0- 5.0 sec 11.3 MBytes 95.2 Mbits/sec
[ 3] 5.0- 6.0 sec 11.4 MBytes 95.3 Mbits/sec
[ 3] 6.0- 7.0 sec 11.3 MBytes 95.2 Mbits/sec
[ 3] 7.0- 8.0 sec 11.3 MBytes 95.1 Mbits/sec
[ 3] 8.0- 9.0 sec 11.4 MBytes 95.8 Mbits/sec
[ 3] 9.0-10.0 sec 11.4 MBytes 95.7 Mbits/sec
[ 3] 10.0-11.0 sec 11.4 MBytes 95.2 Mbits/sec
^C[ 3] 0.0-11.1 sec 126 MBytes 95.6 Mbits/sec
[ 3] Sent 89987 datagrams
[ 3] Server Report:
[ 3] 0.0-11.1 sec 126 MBytes 95.5 Mbits/sec 0.835 ms 0/89986 (0%)
[ 3] 0.0-11.1 sec 1 datagrams received out-of-order
其中-b表示 使用带宽数量,千兆链路使用90%容量进行测试就可以了。
(13)chmod
chmod可以修改文件的权限,一般我们经常使用的就是chmod 777 xxxx 可读可写可执行
语法为:
chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
选项:
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
(14)kill killall
kill命令用于删除执行中的程序或工作,无法终止该程序,可使用-9信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 jobs 指令查看。
用法为ps |grep xxx
会得到一个进程号
kill 进程号
killall 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程
kill 命令杀死指定进程 PID,需要配合 ps 使用,而 killall 直接对进程对名字进行操作,更加方便
比如killall node
(15)adb
adb是安卓调试桥,在测试安卓系列产品时,总是需要adb工具
查看设备连接情况:adb devices
如果是多台设备要加上-s参数
查看顶部Activity:adb shell dumpsys activity | grep “mFocusedActivity”
定位包名:adb shell dumpsys Windows policy |mFocuseWindow
查看日志:adb logcat
安装apk文件:adb install -r -t xxx.apk
卸载App:adb uninstall com.zhy.app
往手机SDCard传递文件:adb push 文件名 手机端SDCard路径
从手机端下载文件:adb pull /sdcard/xxx.txt
查看手机端安装的所有app包名:adb shell pm list packages
屏幕截图:adb shell screencap /sdcard/screen.png
录制视频:adb shell screenrecord /sdcard/demo.mp4
其实如果输入adb shell可以进入如同linux的命令行界面
在做appium自动化开发的时候,需要通过adb去查看一些信息
dumpsys命令可以提供非常多的系统信息。可以通过adb shell service list来查看dumpsys能提供查询信息的服务
常用的有:
服务 类名 功能
activity ActivityManagerService AMS相关信息
package PackageManagerService PMS相关信息
window WindowManagerService WMS相关信息
input InputManagerService IMS相关信息
power PowerManagerService PMS相关信息
procstats ProcessStatsService 进程统计
battery BatteryService 电池信息
alarm AlarmManagerService 闹钟信息
meminfo MemBinder 内存