Linux命令vi/awk/sed/grep/find/busybox/mount/df/du/ifconfig/ip/iperf/chmod/kill killall/adb

本文详细介绍了Linux系统中常用的一些命令,包括vi/vim编辑器的使用,awk文本分析工具,sed文本处理工具,grep搜索工具,find查找文件,busybox全能工具,mount挂载,df磁盘空间检查,du磁盘使用情况,ifconfig网络配置,ip网络管理,iperf网络性能测试,chmod更改文件权限,以及kill/killall终止进程,adb安卓调试工具的使用。这些命令是Linux运维和开发中不可或缺的工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇包括: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),各模式的功能区分如下:

  1. 命令行模式command mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
  2. 插入模式(Insert mode)
    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
  3. 底行模式(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 'NR
3{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 内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值