Linux常用命令

替换当前目录下所有字符串

在Android的开发过程中,要将Android移植到自己的平台并将所有关于Android.mk字符串重命名为Mydroid.mk

1
# sed -i s/"Android.mk"/"Mydroid.mk"/g `grep -rl "Android.mk" ./`

首先grep当前目录下包含Android.mk字符串的文件,然后输入给sed进行替换。注意包住grep命令的是\`(TAB键上面的字符,不包括\),而不是(单引号)。 可在grep命令后面加上–exclude_dir=".git"排除对.git/目录下文件的替换。

查看某个xxx命令的帮助

man xxx

rename批量文件操作

将Android项目中所有文件夹下名字为Androd.mk的文件重命名为Mydroid.mk。前面的是替换字符串。

1
# find ./ -name "Android.mk" | xargs rename "s/Android.mk/Mydroid.mk/g"

scp 局域网内拷贝

假设本地一份Android的source code在A(192.168.1.2)电脑上(~/work/A_Android),要将其拷贝到远程同一局域网内的B电脑(192.168.1.3 用户名为:xxx)的目录(~/work/B_Android)下:

1
# scp -r ~/work/A_Android xxx@192.168.1.3:~/work/B_Android

查看某个目录的占用空间

du -sh ./

软连接

ln -s entity_file virtual_file: 其中entity_file为真实存在的文件,virtual_file为软连接生成的文件。

设置环境变量

export MYVAR=true: 添加环境变量MYVAR
env | grep MYVAR: 在环境变量中查找MYVAR
unset MYVAR: 删除环境变量MYVAR

获取当前CPU温度

1
#cat /sys/class/thermal/thermal_zone0/temp

获取到的值除以1000就是当前CPU的摄氏温度了。

挂载只读分区为可读写分区

mount -o remount rw /system

  • -o: 指定加载文件系统的选项;
  • remount: 为-o的选项,重新加载设备,常用于改变设备的状态;
  • rw: 为-o的选项,以可读写模式加载;
  • /system: 重新将挂载的只读的/system分区挂载为可读写。

挂载U盘

mount -t vfat /dev/block/sda1 /temp

挂在文件系统

mount -t ext4 /dev/block/mmcblk0p1 /system

复制粘贴

在Linux shell窗口下ctrl + shift + cctrl + shift + v为复制粘贴。 shift + insert也可以进行粘贴。

编译过程中的信息输出到文件

make 2>&1 | tee build.log

串口工具minicom的使用

sudo minicom -s启动minicom的配置选项,通过字母选择配置选项。

  • 启动后的minicom可以先按ctrl+a然后再按z可以出现帮助界面,之后选择对应字母可以配置minicom的功能。选择Serial port setup并做如下配置,可配置串口信息:
    图1
  • 如果说minicom只输入打印信息但是键盘无法输入,此时是由于打开硬件流控,设置Hardware Flow ControlNO即可。

  • 打开minicom,然后按一下ctrl + a,再按z键,会出现下面这个界面,看到Capture on/off这项了吗,按下l键,命名要保存的log名称即可保存log。
    图1

! 的神奇用法

http://www.linuxidc.com/Linux/2015-05/117774.htm
!是可以指定执行前面执行过的第几条命令,通常跟history命令搭配。比如说经常会出现这种情况,有个命令xxx,此时你去执行它,比如:xxx argv1 ~/work/other
这样会提示你没有权限执行 xxx 命令,正常你会重新做如下处理:sudo xxx argv1 ~/work/other
但是此时我们可以使用!!来替代上次的命令,可以使用:sudo !!
你可以运行!-1!-2或者!-7等命令来执行你记录序列中的倒数第一条命令、倒数第二条命令已经倒数第七条等等。

查找历史命令

可以使用ctrl + r,然后键入你要查找的关键字符串,此时会将已经执行过的命令自动补全。

1
(reverse-i-search)`make ker': make kernelimage

其中make ker是我敲入的,而make kernelimage是查找的结果,回车就可以执行make kernelimage编译kernel的操作。

grep 忽略某个目录

grep -rn “xxx” -R --exclude-dir=Dir_Name

grep两个字符串

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
Victor@Victor-HP:/$cat /proc/1/status
Name: init
State: S (sleeping)
Tgid: 1
Ngid: 0
Pid: 1
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
NStgid: 1
NSpid: 1
NSpgid: 1
NSsid: 1
VmPeak: 33900 kB
VmSize: 33860 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 4296 kB
VmRSS: 3496 kB
VmData: 1636 kB
VmStk: 136 kB
VmExe: 248 kB
VmLib: 3068 kB
VmPTE: 88 kB
VmPMD: 12 kB
VmSwap: 272 kB
Threads: 1
SigQ: 0/15244
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 00000001a0016623
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
Seccomp: 0
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 4450
nonvoluntary_ctxt_switches: 2503

比如说我只想要VmSizeVmRSS的内容,可以使用如下命令:
cat /proc/1/status | grep -E 'VmSize|VmRSS'

1
2
3
Victor@Victor-HP:/$cat /proc/1/status | grep -E 'VmSize|VmRSS'
VmSize: 33860 kB
VmRSS: 3496 kB

while true

假设我们要持续cat 某一个GPIO的状态,不用一直执行如下的命令:

1
#cat /sys/class/gpio/gpio88/value

我们可以在 shell 下执行 while true 命令来连续执行某个命令,比如说:

1
2
3
4
5
#while true
> do
> cat /sys/class/gpio/gpio88/value
> sleep 2
> done

其中dodone中间为要循环执行的命令,sleep 2表示休眠2s。

反汇编

使用objdump工具反汇编生成的vmlinux文件,将反汇编的结果输出给vmlinux.log

1
# ../prebuilts/gcc/linux-x86/arm/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-objdump -d -l -f -g -S vmlinux > vmlinux.log

复制大文件

当要大量复制(或移动)文件时cp ./*.patch patch/,有时会提示如下错误-bash: /bin/cp: 参数列表过长,解决办法:

1
# find . -name "*.patch" -exec cp {} ./patch/ \;

提示:在使用-exec参数时,必须以\;结尾,而且之前要有一个空格,否则,系统会提示find遗漏-exec参数,命令将无法执行

Title:Linux常用命令

Author:Victor Huang

Time:2019-03-17 / 16:03

Link:http://wowothink.com/d0edc1ed/

License: Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)