Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

0. 常用命令

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
ps -elf|grep lte            # 查看进程状态
ps aux # 查看进程状态
ps -T -p `pidof lte_agent` # 查看进程包含的线程
ss -lpn |grep pidof # 查看进程套接字使用情况
lspci # 查看设备上pcie设备信息的命令(pcie:一种高速串行计算机扩展总线标准)
lscpu # 查看cpu相关信息
shutdown -r -t 1 # 重启
set -enb # 出错则停止运行
ifconfig | more # 终端从头开始输出
kill -9 `pidof lte_daemon` # 杀死进程

# 内存
free -h -w -s 3 # 每3秒打印一次内存使用情况
du -sh {filename} # 查看文件或目录大小
du -h -d 1 # 查询目录使用情况
df -h # 查询磁盘分区使用情况
free # 查看系统内存使用情况

# 文件
whereis {filename} # 查找二进制文件、源代码文件和man手册页
find -name {filename} # 查找文件路径
file {filename} # 查看文件信息
true > {filename} # 清空文件夹
> $filename # 将终端打印的内容重定向 $filename,{$filename}不存在则创建,存在清空再输入
>> $filename # 追加
scp [filename] root@192.169.46.230:{path} # SCP传文件
tail -f [filename] |grep lte_agent # 实时输出文件内容

# 网络
ip addr add 10.11.1.130/24 dev eth1 # 添加IP地址
ip addr del 10.11.1.130/24 dev eth1 # 删除IP地址
ip route del 192.168.200.28/30 via 192.168.10.1 dev eth1 # 删除路由
ip route add 192.168.200.28/30 via 192.168.10.1 dev eth1 metric 10 # 添加路由
ip tuntap add eth1 mode tap # 添加虚拟网口
ip tuntap add vnet1 mode tun # 添加虚拟网口,与tap有所不同,tun不带mac地址
ip link add link eth0 name eth0.2 type vlan id 2 # 创建子接口
ip link set eth0.1 up # 设置端口状态
ip link set dev eth2 mtu 9000 # 设置端口MTU值
ethtool -n eno1 # 查看端口分流规则
ethtool --config-ntuple eno2 flow-type ip4 src-ip 192.168.112.118 dst-ip 192.168.112.32 action 0x0 loc 5 # 配置分流规则

# 工具
ssh root@10.11.1.131 # ssh连接
scp {srcfilename} root@192.169.46.230:{path} # scp传文件


# 环境变量
env # 查看环境变量
export # 设置临时环境变量
unset # 删除临时环境变量

# 模块
modprobe vfio-pci # 挂载vfio-pci模块
lsmod | grep vfio # 查看已挂载的模块
rmmod vfio-pci # 卸载vfio-pci模块

# 库
strings lte_oam | grep VERSION # 输出进程中的字符串
objdump -d --start-addres=0x428790 --stop-address=0x4287b0 lte_ncp # 将二进制转成汇编查看
readelf -s libcspl_interface.so.0.0.1 | grep CSPL_Get_McbIp # 查看动态库中的接口
grep -rin "char" ./ # 查询库中的接口

# 编译
gcc -E hello.c -o hello.i # 预处理
gcc -S hello.c # 预处理、编译
gcc -c hello.c # 预处理、编译、汇编
gcc hello.c # 预处理、编译、汇编、链接
gcc -E hello.c -o hello.i # 预处理
gcc -S hello.i -o hello.s # 编译
gcc -c hello.s -o hello.o # 汇编
gcc hello.o -o hello # 链接

1. 变量 $X 的含义

1
2
3
4
5
6
7
8
9
$$          # Shell本身的PID(ProcessID) 
$! # Shell最后运行的后台Process的PID
$? # 最后运行的命令的结束代码(返回值)
$- # 使用Set命令设定的Flag一览
$* # 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ # 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# # 添加到Shell的参数个数
$0 # Shell本身的文件名
$1$n # 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

2. 符号 ${}、## 和 %% 的使用方法

1
2
3
4
5
6
7
8
9
10
file=/dir1/dir2/dir3/my.file.txt

${file#*/} :删掉第一个 / 及其左边的字符串 :dir1/dir2/dir3/my.file.txt
${file##*/} :删掉最后一个 / 及其左边的字符串 :my.file.txt
${file#*.} :删掉第一个 . 及其左边的字符串 :file.txt
${file##*.} :删掉最后一个 . 及其左边的字符串 :txt
${file%/*} :删掉最后一个 / 及其右边的字符串 :/dir1/dir2/dir3
${file%%/*} :删掉第一个 / 及其右边的字符串 :(空值)
${file%.*} :删掉最后一个 . 及其右边的字符串 :/dir1/dir2/dir3/my.file
${file%%.*} :删掉第一个 . 及其右边的字符串 :/dir1/dir2/dir3/my

记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边);
%是去掉右边(键盘上% 在$ 的右边);
单一符号是最小匹配;两个符号是最大匹配。

3. 符号 : 的使用方法

1
2
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2

4. 符号 / 的使用方法

1
2
${file/dir/path}    :将第一个 dir 替换为 path :/path1/dir2/dir3/my.file.txt
${file//dir/path} :将全部 dir 替换为 path :/path1/path2/path3/my.file.txt

5. 使用参数判断

1
2
3
4
5
6
7
8
9
-d     :判断制定的是否为目录
-z :判断制定的变量是否存在值
-f :判断制定的是否为文件
-L : 判断制定的是否为符号链接
-r :判断制定的是否可读
-s : 判断存在的对象长度是否为0
-w : 判断制定的是否可写
-x :判断存在的对象是否可以执行
! :测试条件的否定符号

6. 子shell

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;
2、一个shell中的系统环境变量怎样才会被复制到子shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中);
4、不用export定义的变量只对该shell有效,对子shell是无效的。

评论