Shell命令

1.shell命令的执行机制:fork+exec执行命令(任何的shell都会执行)

2.shell中的用户输入处理

1  命令行参数:选项、参数
2  运行时输入
3  read命令:
4  1.基本读取、
5  2.超时处理-t选项、
6  3.隐藏方式读取-s选项)
7  4.从文件中读取

3.shell的反引号

1 /*
2 反引号在Linux shell命令行中有特殊的含义:反引号间的内容,会被shell先执行。其输出被放入主命令后,主命令再被执行。命令替换,即完成引用的命令的执行,将其结果替换出来,与变量替换差不多
3 */
4 echo date '--date=1 hour ago' +%Y-%m-%d-%H
5 echo $(date '--date=1 hour ago' +%Y-%m-%d-%H)

4.setuid

setuid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。 因此当程序设置了setid权限位时,普通用户会临时变成root权限,但实际用户任然是原来的mike。

5.linux文件

/etc/mtab文件的作用:记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等; /etc/fstab是系统准备装载的find命令:以递归的方式进行搜索文件或文件夹

6.find命令

Shell命令Shell命令
1 1  --查找当前目录下所有文件中包含deposit_account的文件
2 2  -- f 普通文件 l 符号连接 d 目录 c 字符设备 b 块设备 s 套接字 p Fifo
3 3  find . -type f -print |xargs grep "deposit_account"
4 4  --查找根目录下名字为create.txt的文件
5 5  find / -name "create.txt"
6 6  --查找根目录下文件大小大于100M的文件
7 7  find / -size +100M
8 8  --使用find查找png和jpg的文件 -o 指定多个-name选项
9 9  find . -name '*.png' -o -name '*.jpg' -type f

find

7.for循环

Shell命令Shell命令
1  1  /*for 变量名 in 取值列表({1..100}--1到100依次执行、{1..100..2} --间隔2个)
 2  2  do
 3  3     命令序列
 4  4  done
 5  5  --举例*/
 6  6  sum=0
 7  7  for ((i=1;i<100;i++))
 8  8  do
 9  9     sum=$($i+$sum)
10 10  done
11 11     echo "0-100的和为:" $sum

for循环

8.正则表达式

Shell命令Shell命令
 1  1  --行首定位符“^”:用来匹配行首的字符
 2  2  --列出etc目录下以po开头的文件
 3  3  str='ls /etc |grep "^po"'
 4  4  echo "$str"
 5  5 6  6  --行尾定位符“$”
 7  7  str='ls /etc |grep "conf$"'
 8  8  echo "$str"
 9  910 10  --单个字符匹配“.”:圆点“.”用来匹配任意单个字符,包括空格,但是不包括换行符“\n”
11 11  --列出所有的包含字符串“13”的文件名
12 12  str=cat dian.txt <span>|</span> grep &quot;<span>13</span><span>&quot;
13 13  echo "$str"
14 14  echo "-------------"
15 15  --列出包含字符串'13'以及另外一个字符的文件名
16 16  str=cat dian.txt <span>|</span> grep &quot;<span>13</span><span>.&quot;
17 17  echo "$str"
18 1819 19  --限定符“”:用来指定其前面的一个字符必须要重复出现多少次才能满足匹配
20 20  str=ls <span>/</span>etc <span>|</span> grep &quot;<span>^</span>sss<span>*</span><span>&quot;
21 21  echo "$str"
22 2223 23  --字符集匹配“[]”
24 24  /"[a-f]”表示匹配字母表中a到f中的任意一个字母。
25 25  “[0-9]”表示匹配任意单个数字
26 26  "[^b-d]” 匹配除了从 b 到 d 范围内所有的字符  --取反
27 27  */
28 28  --筛选所有以字符r开头,并且紧跟着1个字符c的文本行
29 29  str='ls /etc |grep "^rc"'
30 30  echo "$str"
31 31  echo "---------------------"
32 32  --筛选所有以字符r开头,紧跟着1个字符为c,下面1个字符为单个数字的文本行
33 33  str='ls /etc | grep "^rc[0-9]"'
34 34  echo "$str"
35 3536 3637 37  --字符集不匹配“[^]”:表示不匹配其中列出的任意字符
38 38  "[^b-d]” 匹配除了从 b 到 d 范围内所有的字符
39 3940 40  --反斜杠字符 \转义  使这个字符表示原来字面上的意思
41 41  “\$“表示了原来的字面意思”$”,而不是在正则表达式中表达的匹配行尾的意思.

42 4243 43 --转义(escape) “尖角号” \<...><!--...-->44 44 用于表示单词的边界. 尖角号必须被转义,因为不这样做的话它们就表示单纯的字面意思而已."\<the\>" 匹配单词"the",但不匹配"them", “there”, “other”, 等等.

正则表达式

9.扩展正则表达式

Shell命令Shell命令
1  1 --限定符"+" :匹配一个或多个前面的字符.和*相似,区别是它不匹配零个字符的情况.

 2  2  --筛选以字符串"ss"开头,后面至少紧跟着1个字符"s"的文本行
 3  3  str=ls /etc | egrep "^sss+"
 4  4  echo "$str"
 5  5  --输出
 6  6  sssd
 7  7  ​
 8  8  --限定符"?":限定前面的字符最多只出现1次,即前面的字符可以重复0次或者1次。
 9  9  str=ls /etc | egrep "^sss?"
10 10  echo "$str"
11 11  --输出
12 12  ssh
13 13  ssl
14 14  sssd
15 15  ​
16 16  --竖线"|" 和圆括号"()":
17 17  --竖线"|" 表示多个正则表达式之间"或"的关系
18 18  --竖线"|" 表示多个正则表达式之间"或"的关系
19 19  #筛选含有字符串"ssh"、"ssl"或者以字符串"yum"开头的文本行
20 20  #grep -E主要是用来支持扩展正则表达式
21 21  #grep -E =egrep
22 22  str=ls /etc | egrep "(ssh|ssl|^yum)"
23 23  echo "$str"
24 24  ​
25 25  ​
26 26  --转义"大括号"{}指示前边正则表达式匹配的次数,要转义是因为不转义的话大括号只是表示他们字面上的意思
27 27  "[0-9]\{5\}" --精确匹配 5 个数字 (从 0 到 9 的数字)

扩展正则表达式

10.perl正则表达式

Shell命令Shell命令
1  --数字匹配\d 符号"\d"匹配从0到9中的任意一个数字字符,等价于表达式"[0-9]"
2  --筛选以字符串rc开头,紧跟着一个数字的文本行 -P可以让grep使用perl的正则表达式语法
3  str=ls /etc | grep -P "^rc\d"
4  echo "$str"
5  ​
6  --非数字匹配\D  "\D"等价于表达式"[^0-9]"
7  --空白字符匹配\s :匹配任何空白字符,包括空格、制表符以及换页符="[\f\n\r\t\v]"。
8  --非空白字符匹配\S:符号"\S"匹配任何非空白字符,等价于表达式"[^\f\n\r\t\v]"

perl正则表达式

处理海量数据的命令:grep、cut、awk、sed

grep、sed命令是对行进行提取

cut、awk命令是对列进行提取

11.grep命令

Shell命令Shell命令
1  /*
 2  grep [选项]...[内容]...[file]
 3  -v 对内容进行取反提取
 4  -n 对提取的内容排列,显示行号
 5  -w 精确匹配
 6  -i 忽略大小写
 7  ^  匹配行首
 8  -E 正则匹配
 9  */
10  grep 'user' /etc/passwd  --匹配包含user的行
11  grep -n 'user' /etc/passwd --显示行号

grep

12.awk命令

Shell命令Shell命令
1  /*
 2  而awk比较倾向于将一行分成多个""字段"然后再进行处理。awk信 息的读入也是逐行读取的,在使用awk命令的过程 中,可以使用逻辑操作符"&"表示"与"、"||表示"或"、"!"表示非";还可以进行简单的数学运算,如H+、 -、*、/、%、^分别表示加、减、乘、除、取余和乘方。
 3  awk 选项 '{操作}' 文件名
 4  */
 5  awk '{print}' zz.txt   --默认输出所有
 6  awk -F: '{print $1}' zz.txt  --分隔符为:输出第一列
 7  echo 'this is a test' | awk '{print $NF}'  --$NF表示最后一个字段
 8  awk -F ':' '{ print toupper($1) }' demo.txt  --将输出的字符转成大写
 9  --awk '条件 动作' 文件名  结合正则表达式
10  awk -F ':' '/usr/ {print $1}' demo.txt  --只输出包含usr的行
11  awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt --输出奇数行
12  awk -F ':' '$1 == "root" {print $1}' demo.txt --输出第一个字段等于指定值的行

awk

13.route命令

Shell命令Shell命令
1  /*
 2  在网络中,route命令用来显示、添加、删除和修改网络的路由。
 3  route [-f] [-p] [Command] [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface]
 4  route -f:用于清除路由表
 5  route -p:用于创建永久路由
 6  route Command:主要有print(打印路由)、ADD(添加路由)、DELETE(删除路由)、CHANGE(修改路由)4个常用命令
 7  route Destination:表示到达的目的IP地址
 8  route MASK:表示子网掩码的关键字
 9  route Netmask:表示具体的子网掩码,如果不进行设置,系统默认设置成255.255.255.255(单机IP地址),添加掩码时要注意,特别是要确认添加的是某个IP地址还是IP网段,如果代表全部出口子网掩码可用0.0.0.0
10  route Gateway:表示出口网关
11  route interface:表示特殊路由的接口数
12  route metric:表示到达目的网络的跳数
13  -net 后面跟的是目标网络,gw就是gateway(网关入口)
14  */
15  --局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是
16  route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1

route

14.cut命令

Shell命令Shell命令
1  cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的
2  cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]
3  -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了-n标志。
4  -c :以字符为单位进行分割。
5  -d :自定义分隔符,默认为制表符。
6  -f  :与-d一起使用,指定显示哪个区域。
7  -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
8

cut

15.sed命令

Shell命令Shell命令
1  -n --把匹配到的行输出打印到屏幕
 2  p  --以行为单位进行查询,通常与-n一起使用
 3  eg:df -h | sed -n '2p'     --打印第二行
 4  d   --删除  eg :df -h |sed '2d'  --删除第二行
 5  a   --在行下边插入新的内容 eg:sed '2d 122344' 1.txt
 6  i   --在行上边插入新的内容 eg:sed '2i 122344' 1.txt
 7  c   --替换               eg:sed '2c 122344' 1.txt
 8  s/被替换的内容/新的内容/g   --eg: sed s/"//g  1.txt
 9  -i   --对源文件进行修改    --eg: sed -i s/"//g  1.txt
10  -e   --表示可以执行多条动作
11  sed -n '/100%/p' 1.txt   --匹配到100%的打印出来

sed

16.xargs命令

Shell命令Shell命令
1 /*xargs是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具,它擅长将标准输入数据转换成命令行采纳数。xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以单行或多行文本输入转换为其他格式,例如多行转单行,单行转多行。xargs的默认命令是echo,空格是默认定界符。
2  */
3  --多行换入单行输入
4  cat test.txt | xargs
5  ---n 选项多行输出
6  cat test.txt  | xargs -n3
7  --d 自定义定界符
8  echo "abcadbsbdkvbwwlg" | xargs -db

xargs

17.sort命令

Shell命令Shell命令
1 /*
 2 sort命令将文件的每一行作为比较对象,通过将不同行进行相互比较,从而得到最终结果。比较原则是从首字符开始,向后依次按ASCII码值进行比较,最后将结果按升序输出
 3 参数:
 4 sort -u  :在输出行中去除重复行
 5 sort -r  :sort命令默认的排序方式是升序,如果想改成降序,就需要加上 -r
 6 sort -o  :由于sort默认是把结果输出到标准输出,所以需要用到重定向才能将结果写入文件,形如sort filename > newfile。但是,如果你想把排序结果输出到原文件中,用重定向可就不行了,需要
 7 */
 8 sort -n -k 2 -t : facebook.txt  --以冒号分割开,以第二列进行排序
 9 sort -r number.txt -o number.txt --排序后重定向到number.txt
10 cat words.txt|xargs -n 1 |sort -r

View Code

18.uniq命令

Shell命令Shell命令
1 /*
 2 uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
 3 uniq 可检查文本文件中重复出现的行列,直接去重
 4 -c: 在每列旁边显示该行重复出现的次数。
 5 -d: 仅显示重复出现的行列,显示一行。
 6 -D: 显示所有重复出现的行列,有几行显示几行。
 7 -u: 仅显示出一次的行列
 8 -i: 忽略大小写字符的不同
 9 -f Fields: 忽略比较指定的列数。
10 */
11 --统计words文件里边每个单词出现的次数
12 cat words.txt|xargs -n 1 |sort -r |uniq -c |awk 'print{$2" "$1}'
13 --忽略第一列的字符
14 uniq -c -f 1 uniq.txt
15 --忽略前边四个字符
16 uniq -c -s 4 uniq.txt

View Code

Original: https://www.cnblogs.com/xiuercui/p/16711927.html
Author: 程序界第一佳丽
Title: Shell命令

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577535/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mit 6.824 lab2A ,raft 领导人选举实现(lab2D中有关于此处大量代码修改,找出了很多错误)

    lab2 说明: https://pdos.csail.mit.edu/6.824/labs/lab-raft.html 参考博客: https://zhuanlan.zhihu….

    Linux 2023年6月7日
    0134
  • Timeout connecting to [localhost/127.0.0.1:9200]

    空服务启动时(或者压根没引入es相关jar包)报Timeout connecting to [localhost/127.0.0.1:9200]错误时,查看pom.xml中是否引用…

    Linux 2023年6月7日
    0152
  • 实验

    编写程序实现以下功能 编写程序,打印99乘法表 将一面额为10元倍数的整钱( 输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。 输入输出示例 Input …

    Linux 2023年6月7日
    0101
  • IOC容器模拟实现

    运用反射机制和自定义注解模拟实现IOC容器,使其具有自动加载、自动装配和根据全限定类名获取Bean的功能。 1-1 IOC容器的本质 IOC容器可理解为是一个map,其中的一个en…

    Linux 2023年6月8日
    099
  • PyTorch 介绍 | 快速开始

    本节介绍有关机器学习常见任务重的API。请参阅每一节的链接以深入了解。 Working with data PyTorch有两个有关数据工作的原型: torch.utils.dat…

    Linux 2023年6月16日
    094
  • Red Hat Enterprise Linux (RHEL) 8.5 发布(含下载)

    2021 年 11 月 10 日,红帽企业 Linux (RHEL) 8.5 现已正式发布 (GA),并带来了新功能和改进,以帮助简化部署、优化性能并帮助降低环境中的风险。无论您的…

    Linux 2023年5月27日
    0115
  • 代码中的软件工程复习

    编写高质量代码的基本方法 通过控制结构简化代码 通过数据结构简化代码 一定要有错误处理 注意性能优先的代价 拒绝修修补补不断重构代码 性能优先策略带来的隐藏代价 软件工程师的人力成…

    Linux 2023年6月8日
    0105
  • [编译] 9、在Linux下搭建 nordic 最新基于 zephyr 的开发烧写环境

    前言 1、概述 2、安装工具 3、获取 nRF Connect SDK 源码 4、安装 Python modules 5、安装 toolchain 6、下载 nRF Command…

    Linux 2023年6月8日
    090
  • Linux通过手机USB网络共享上网

    多数情况下,服务器无法直接联网,需通过手机连线上网。设置方法如下: 终端中查看现有网络接口: ip addr 或 ifconfig 连接好数据线并在手机设置中打开”通过…

    Linux 2023年6月14日
    096
  • DHCP欺骗攻击—模拟

    实验拓扑: 基本配置: DHCP服务器配置: 客户端配置: 攻击者配置: 使用云与kail桥接 云: kail虚拟机配置: 为kali linux也添加一张网卡,桥接到VMnet1…

    Linux 2023年6月13日
    098
  • kafka-部署

    kafka部署 版本选择: Scala 2.12-kafka_2.12-2.7.0.tgz #版本格式 kafka_scala版本_kafka版本 部署三台服务器的高可用kafka…

    Linux 2023年6月14日
    0110
  • 【原创】Linux PCI驱动框架分析(一)

    背景 Read the fucking source code! –By 鲁迅 A picture is worth a thousand words. –…

    Linux 2023年6月8日
    0127
  • sql注入

    一.原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有…

    Linux 2023年6月6日
    096
  • Feign 进行rpc 调用时使用ribbon负载均衡源码解析

    转载请注明出处: Feign客户端接口的动态代理生成是基于JDK的动态代理来实现的,那么在所有的方法调用的时候最终都会走InvocationHandler接口的实现,默认就是Ref…

    Linux 2023年6月14日
    078
  • 如何在 pyqt 中实现桌面歌词

    前言 酷狗、网抑云和 QQ 音乐都有桌面歌词功能,这篇博客也将使用 pyqt 实现桌面歌词功能,效果如下图所示: 代码实现 桌面歌词部件 LyricWidget 在 paintEv…

    Linux 2023年6月7日
    0112
  • django解析POST过来的json时,Unterminated string starting

    结论:我遇到的问题是与号( &), 分号( ; ), 等号( = ) 都会成为字符串分割符。导致后端解析json参数失败 1.bug产生背景 handsontable插件实…

    Linux 2023年6月8日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球