Linux

Linux 常用指令自查记录

2020-02-03  本文已影响0人  天马行空爱做梦

背景:

  操作系统 MacOS。 工作初期会使用一些sumbline之类的文本工具来搜索,虽然也快,但是总觉得不高级。哈哈哈....
所以查了下资料,觉得linux中的一些指令还是蛮给力的。不仅可以提高效率,还可以写进shell脚本中。 所以整理一下,好记性不如烂笔头嘛。后面可以直接拿来用啦。

linux 常用指令

grep 指令 可以实现or,and,not的作用,这里只介绍一种,因为懒😝。下面例子or 和 and 中的pattern都是正则表达式哦,具体如下:

1.grep 实现or用法:
grep -E 'pattern1|pattern2' filename

2.grep 实现and用法:
grep -E 'pattern1.pattern2' filename 注解: 两个pattern1与pattern2 顺序是固定的
grep -E 'pattern1.
pattern2|pattern2.*pattern1' filename 注解: 两个pattern1与pattern2 顺序是不固定的
3.grep 实现not 非的用法:
grep -v 'pattern1' filename 注解: -v 选项用来实现反选匹配的( invert match),可匹配得到除下指定pattern外的所有lines。

vim 编辑器

vim最常用到的有如下:
G->直接跳转到文件的最后一行
dd->删除光标当前行
10 dd -> 删除后面10行,这里的数字可以自定义
i->进入插入模式
x->删除光标处的字符
o-> 插入下一行
w-> 查看下一个word
b-> 查看上一个word


image.png

一、用/和?的区别:
/后跟查找的字符串。vim会显示文本中第一个出现的字符串。
?后跟查找的字符串。vim会显示文本中最后一个出现的字符串。

ping和telnet

ping命令是不能够测试端口的,ping只是测试网络联接状况以及信息包发送和接收状况。
格式:ping IP地址或主机名 [-t] [-a] [-n count] [-l size]
参数含义:-t不停地向目标主机发送数据;
-a 以IP地址格式来显示目标主机的网络地址 ;
-n count 指定要Ping多少次,具体次数由count来指定 ;
-l size 指定发送到目标主机的数据包的大小。

例子:ping 192.168.0.1 -t 不停的测试192.168.0.1,
按ctrl+c停止
测试端口使用telnet IP地址或主机名 端口,

使用tcp协议的例如telnet 192.168.0.1 80测试192.168.0.1的80端口

Linux jq命令

jq 是一个轻量级的json处理命. 可以用在shell脚本中。

JsonList举例:

cat .json.txt | jq .
[
  {
    "name": "zhangsan",
    "age": 21,
    "courses": [
      "语文",
      "数学",
      "英语"
    ]
  },
  {
    "name": "lisi",
    "age": 22,
    "courses": [
      "物理",
      "化学",
      "生物"
    ]
  }
]

JsonList获取zhangsan这个value的方法是:cat .json.txt | jq '.[0].name'

JsonObject举例

cat json.txt |jq '.'
{
  "uuid": "1192751169468366850",
  "deviceUuid": "1192751164410036225",
  "serverVerify": "0",
  "serverAddress": "127.0.0.1",
  "ntpServerAddress": "127.0.0.1",
  "otherServer": "true",
  "otherServerAddress": "127.0.0.1",
  "networkRelayAddress": "127.0.0.1"
}

获取JsonObject 获取uuid方法:cat .json.txt | jq '.uuid'

json重组

# 只输出name 和 age
cat ./json.txt | jq '[.[] | {name:.name, age:.age}]'
[
  {
    "name": "zhangsan",
    "age": 21
  },
  {
    "name": "lisi",
    "age": 22
  }
]
# 输出name和第一个course
cat ./json.txt | jq '[.[] | {name:.name, course:.courses[0]}]'
[
  {
    "name": "zhangsan",
    "course": "语文"
  },
  {
    "name": "lisi",
    "course": "物理"
  }
]

综上: jq中的 "." 代表的是all的内容。 后面的获取方法和Java中处理json 体是一个道理啦。

Linux -awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk语言的最基本功能,是在文件或者字符串中,基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。

通常,awk是以行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
举例

[root@www ~]# last -n 5 <==仅取出前五行
root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)
root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)
dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)
root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)

[root@www ~]# last -n 5 | awk  '{print $1}'
root
root
root
dmtsai
root

linux xargs

xargs 一般是和管道一起使用.
举例:
复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I {} cp {} /data/images
xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。

-d 选项可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

上一篇 下一篇

猜你喜欢

热点阅读