RHCSA的学习(5)

news2024/10/22 5:03:10

 一、文本内容处理命令


1、数据流和重定向

1、数据流
  • 标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
  • 标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
  • 标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上

不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去,而分别传送所用的特殊字符如下所示:

  • 标准输入(stdin):代码为0
  • 标准输出(stdout):代码为1
  • 标准错误输出(stderr):代码为2

2、重定向操作符

重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。

  • 输出重定向操作符: > 、 >>
  • 输入重定向操作符: < 、 <<

3、输出重定向案例

标准输出重定向: 1> 或 > 、 1>> 或 >>

标准错误输出重定向: 2> 、 2>>

案例1:输出重定向(覆盖)

[root@localhost ~]# date 1> date.txt

案例2:输出重定向(追加)

[root@localhost ~]# date >> date.txt

案例3:错误输出重定向

[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt   
#重定向到不同的位置

案例4: 正确和错误都输入到相同位置

[root@localhost ~]# ls /home/ /aaaaaaaaa &>list.txt
  #混合输出

案例5: 正确和错误都输入到相同位置

[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>&1
  #重定向到相同的位置

案例6:重定向到空设备/dev/null

[root@localhost ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null
#空设备,即将产生的输出丢掉

[root@localhost ~]# ls /home/ /aaaaaaaaa &>/dev/null
  #空设备,即将产生的输出丢掉

4、输入重定向案例
标准输入重定向: < 或 0< 、 0<< 或 <<

案例1:从文件读取数据作为cat命令的输入

[root@master ~]# echo test > file    
[root@master ~]# cat < file
test

案例2:标准输入重定向 << 并不表示追加,而是表示输入结束的意思,即作为一个结束符。

[root@server ~]# cat > file3 << end
> china
> china
> hello
> end
[root@server ~]# cat file3
china
china
hello

# 输入end终止输入,不必输入ctrl+d来结束

拓展案例:

案例1:使用输入重定向写邮件

[root@localhost ~]# mail -s "ssss" alice
#没有改变输入的方向,默认键盘
111
222
333
^D
[root@localhost ~]# su - alice
[alice@localhost ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/alice": 1 message 1 new
\>N  1 root@localhost.local Mon Oct 29 14:09  18/657   "ssss"
& 

[root@localhost ~]# mail -s "test01" alice < /etc/hosts #输入重定向,来自于文件

案例2:

[root@localhost ~]# dd if=/dev/zero of=/file1.txt bs=1M count=2
[root@localhost ~]# dd </dev/zero >/file2.txt bs=1M count=2

案例3:mysql表结构导入

[root@localhost ~]# mysql -uroot -p123 < bbs.sql

案例4:at

[root@localhost ~]# at now +5 min
at> useradd yang99
at> <EOT>
job 1 at 2015-06-09 11:57

[root@localhost ~]# vim at.txt
useradd yang100
useradd yang102
[root@localhost ~]# at now +2 min < at.txt
job 2 at 2015-06-09 11:55

拓展:使用文件描述符重定向的复杂用法

使用文件描述符的重定向都使用了&符号:

  • cmd >&n 把输出送到文件描述符n
  • cmd m>&n 把输出到文件符m的信息重定向到文件描述符n
  • cmd >&- 关闭标准输出
  • cmd <&n 输入来自文件描述符n
  • cmd m<&n m来自文件描述符n
  • cmd <&- 关闭标准输入
  • cmd <&n- 移动输入文件描述符n而非复制它
  • cmd >&n- 移动输出文件描述符 n而非复制它

示例 2>&1 :将stderr重定向到标准输出

2>&1  ==  &>

二、将标准输出重定向到文件

echo命令

  • 作用:向终端设备上输出字符串或变量提取后的值

  • 格式

echo  "字符串" 
echo  "$量"
  • 例:

[root@server ~]# echo  "hello world"
[root@server ~]# str1="hello world"
[root@server ~]# echo  "$str1"
hello world
[root@server ~]# num=1024
[root@server ~]# echo  "$num"
1024
​
[root@server ~]# echo $SHELL
/bin/bash

​将标准输出重定向到文件

[root@server ~]# echo  "hello"  > /root/test/file
[root@server ~]# echo  "world" >> /root/test/file

扩展:

如果两种引号内是普通的标准字符,那是没有区别

但如果有特殊含义字符,下面区别

' ' :不会解释特殊字符含义,强引用

" " :会解释特殊字符含义,弱引用

补充:

[root@localhost ~]# echo 当前主机时间$`date`   ``命令替换符
当前主机时间Sat Nov 26 14:56:27 CST 2022
root@localhost ~]# echo 当前主机时间$(date)     $()命令替换符 
当前主机时间Sat Nov 26 14:56:27 CST 2022

三、管道符:|

作用
  • 管道符号,是unix一个很强大的功能,符号为一条竖线:"|",用于两个命令或者多个命令相连接,将管道符左边命令的输出作为管道符右边命令的输入

格式
命令A  | 命令2  | 命令3  ……
[root@server ~]# more  test1.txt  | wc -l  # 统计行数
5
[root@server ~]# cat  /etc/group | tee  test2.txt
​
[root@server ~]# cat  /etc/group | tee  test1.txt  test2.txt 
某些情况需要慎用管道符
  • 编写命令计算字符串长度

# 法1:
[root@server ~]# time for i in {1..10000};do str1=`seq -s "nihao" 100`;echo ${#str1} &> /dev/null;done
real    0m21.439s   
user    0m2.649s
sys     0m17.714s
​
# time计算耗时
# for 循环10000次
# seq生成nihao1、nihao2……nihao100
# 法2:通过管道符调用awk实现
[root@server ~]# time for i in {1..10000};do str1=`seq -s "haodao" 100`;echo "${str1}" | awk '{print length($0)}' &> /dev/null;done
​
real    0m55.732s
user    0m13.067s
sys     0m43.360s
  • 结论:方法1所耗时最少,效率最高,方法2中结合了管道符的使用,耗时最多,效率最低,由于linux中的shell是由C语言开发的,因此它底层命令效率是最高的,而方法1中用的是linux内置命令,内置的操作;方法2通过管道符,这涉及到类似二次加工,效率肯定也就低了

tee命令读取数据输出到文件

tee命令

作用
  • 读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕(即想把输出保存到文件中,又想在屏幕上看到内容)

  • tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时输出到文件。

格式
tee 参数  文件名
参数
  • -a或--append,附加到现有文件的后面,而非覆盖它

  • -i或--ignore-interrupts  忽略中断信号

  • --help  在线帮助

[root@server ~]# tee test1.txt
aaa
aaa
bbb
bbb
ccc
ccc   # 输入ccc并回车后按下ctrl+d 结束输入
[root@server ~]# cat test1.txt 
aaa
bbb
ccc
[root@server ~]# tee -a test1.txt  # 追加
123
123
456
456
[root@server ~]# cat test1.txt 
aaa
bbb
ccc
123
456

四、切割显示-cut

作用

  • cut命令用于按列提取文本内容

格式

cut  -d  "分隔符"  -f列数字  文件名


-c 字符        cut  -c 1-4  剪切每一行第1-4个字符
-d 分割字符
-f 分割字段    第几个分隔字段,例:4-5个字段,包含分隔符

示例

  • /etc/passwd文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,如:

[root@server ~]# head  2 /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin
  • 基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可,但如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。

[root@kongd ~]# cut -d : -f1 /etc/passwd  每行:分隔的第一个字段
root
bin
daemon
adm
lp
  • 例:提取内核版本号

[root@server ~]# uname -a | cut -d " " -f3
  • 例:提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d "/" -f1 | cut -d " " -f6
# 注意空格
  • 例:提取mac地址

[root@server ~]# ip a | grep link/ether | cut -d " " -f6

五、排序显示-sort

作用

  • sort命令用于对文本内容进行排序显示

格式:

sort  -参数  文件名

参数

选项作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围

示例

  • sort命令执行后默认会按照字母顺序进行排序

[root@server ~]# cat fruit.txt 
banana
pear
apple
orange
[root@server ~]# sort fruit.txt 
apple
banana
orange
pear

[root@server ~]# cat  /etc/passwd | cut -d : -f1 | sort  # 取出所有账户名
  • sort -u参数进行去重操作:

[root@server ~]# cat sort.txt 
Welcome to openlab.com
Red Hat certified
Welcome to openlab.com
Free Linux Lessons
Linux Course
[root@server ~]# sort -u sort.txt 
Free Linux Lessons
Red Hat certified
Welcome to openlab.com
  • 数字排序

[root@server ~]# cat number.txt 
45
12
3
98
82
67
24
56
9
[root@server ~]# sort -n number.txt 

[root@server ~]# sort -nr number.txt  # 降序
  • 下面的内容是节选自/etc/passwd文件中前五个字段的内容,并进行混乱排序后的样子:

[root@kongd ~]# cat user.txt 
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
  • 上面其实是五个字段,各个字段之间是用了冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用-t参数指定间隔符,-k参数指定第几列,-n参数进行数字排序来搞定:

[root@server ~]# sort -t : -k 3 -n user.txt 
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd

常用:#sort -nu aaa   将文件中的行按照数值从小到大显示,并且重复行只显示一次

六、去重显示-uniq

作用

  • uniq命令用于去除文本中连续的重复行(重复行必须相邻 )

格式

uniq -参数 文件名

-c  显示重复次数
-d  显示文件重复出现的内容
-D  显示所有重复行

示例

  • 对比两个文本内容进行操作

[root@server ~]# cat uq1.txt 
Welcome to openlab.com
Welcome to openlab.com
Welcome to openlab.com
Welcome to openlab.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@kongd ~]# uniq uq1.txt 
Welcome to openlab.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course

七、文本内容统计wc

作用

  • wc命令用于统计指定文本文件的行数、字数(单词数)或字节数(默认每行后面有一个换行符)

格式

wc -参数 文件名

参数

选项作用
-l只显示行数
-w只显示单词数
-c只显示字节数
-m统计字符数

示例

  • 统计所有

[root@server ~]# wc  /etc/passwd
  37     88     2083 /etc/passwd
# 行数  单词数    字节数 
  • 配合管道符计算

[root@server ~]# ll / | wc -l   # 文件数

[root@server ~]# grep  "/bin/bash"  /etc/passwd  |  wc -l

[root@server ~]# cat /etc/passwd | cut -d ":" -f1 | wc -l

八、文件中字符替换显示-tr

作用

  • tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出

格式

tr  -参数  替换内容  新内容

参数

  • -c :反选设定字符,符合 “替换内容” 的部份不做处理,不符合的剩余部份才进行转换

  • -d :删除指令字符

  • -s :缩减连续重复的字符成指定的单个字符

示例

  • 小写字母全部转换成大写字母

[root@server ~]# cat /etc/passwd  | tr a-z A-Z 
  • 提取IP地址

[root@server ~]# ip a | grep ens160 | grep inet | cut -d /  -f1 | tr -s ' ' | cut -d ' ' -f3

例:

[root@localhost /]# echo helloworld | tr l 0 把l字符替换成0字符
he00owor0d
[root@localhost /]# echo helloworld | tr hl 0 把h以及l字符替换成0字符
[root@localhost /]# echo helloworld | tr l 01 把l字符替换成0字符
[root@localhost /]# echo helloworld | tr -t hl 0 等长字符替换;把h字符替换成0字符
[root@localhost /]# echo helloworld | tr -c l 0 反选定;除了l字符之外的字符替换成0字符
[root@localhost /]# echo helloworld | tr -d hl  删除字符;删除hl字符
[root@localhost /]# echo 1  2      3| tr -s " " " "  将多个连续重复字符替换为单个字符;
将多个连续重复的空格字符替换为单个空格字符
[root@localhost /]# df -h | tr -s " " " " | cut -d " " -f 4

九、文件内容过滤显示—grep

作用:

  • 在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用

格式

grep   -参数  查找条件  文件名

参数

选项说明
-o只把查找的关键字显示出来
-c仅显示找到的行数
-i忽略大小写
-n显示行号
-v反向选择——仅列出没有“关键词”的行
-A-A 2 搜索时显示匹配到的那一行以及下2行
-B-B 2 搜索时显示匹配到的那一行以及上2行
-C-C 2 搜索时显示匹配到的那一行以及上下2行

例:

 grep 'root' /etc/passwd      过滤关键字,有root关键字行打印到终端
 grep -o 'root' /etc/passwd   过滤关键字,只把root关键字打印到终端  
 grep -i 'ROOT' /etc/passwd   过滤关键字乎略大小写
 grep -v 'root' /etc/passwd   过滤关键字,把没有关键字的行显示
 #cat /etc/login.defs
 grep -v  '^#' /etc/login.defs   ^#以#号开头
 grep -v  '^#' /etc/login.defs  | grep -v '^$'   ^$ 空白行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2020前端面试 - JavaScript2.0篇

前言&#xff1a; 个人觉得面试其实是一个自我学习的过程&#xff0c;如果说短时间内找不到工作&#xff0c;那一定是你面的还不够多&#xff0c;不要气馁&#xff0c;不要放弃&#xff0c;在心底告诉自己&#xff0c;下一次面试&#xff0c;再下一次面试&#xff0c;一定能够拿…

为什么inet_ntoa会返回错误的IP地址?

目录 1、调用inet_addr和inet_ntoa实现整型IP与点式字符串之间的转换 1.1、调用inet_addr将点式字符串IP转换成整型IP 1.2、调用inet_ntoa将整型IP转换成点式字符串IP 2、调用inet_ntoa返回错误点式字符串IP的原因分析 3、解决多线程调用inet_ntoa返回错误点式字符串IP的办…

在 Docker容器中安装 ROS-Melodic 并使用 rviz 进行图形化显示

文章目录 写在前面1. 背景描述2. 安装步骤2.1 允许本地机器上的用户或进程连接到 X server2.2 拉取 docker 镜像2.3 使用镜像osrf/ros:melodic-desktop-full创建并运行容器2.4 运行 roscore2.5 运行 rviz 参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04&#xff0…

基于SSM的微信小程序博客管理系统(博客1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM的微信小程序博客管理系统实现与设计&#xff0c;实现了管理员与用户&#xff0c;管理员实现了用户管理、博文信息管理、博文类型管理、我的博文管理、个人名片分享管理、签到管理…

SAP S/4 HANA 销售返利

目录 1 简介 2 后台配置 3 主数据 4 业务操作 4.1 场景 1 - 返利应计 4.2 场景 2 - 最终结算 1 简介 在过去 SAP ECC 把“返利”功能集成在了 SD 模块当中&#xff0c;而 SAP S/4 HANA 把“返利”集成在了结算管理功能模块当中。究其原因&#xff0c;主要是 ECC “返利”…

深度解析LMS(Least Mean Squares)算法

目录 一、引言二、LMS算法简介三、LMS算法的工作原理四、LMS算法的特点五、LMS算法的应用场景六、LMS算法的局限性七、总结八、进一步探讨 一、引言 自适应滤波器是一种动态调整其参数以适应变化环境的信号处理工具&#xff0c;广泛应用于噪声消除、信道均衡和系统识别等领域。…

算法工程师重生之第二十五天(加油站 分发糖果 柠檬水找零 根据身高重建队列 )

参考文献 代码随想录 一、加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。…

Mysql的Innodb的RR隔离级别到底有没有解决幻读问题?

InnoDB中的repeatable read这种隔离级别通过间隙锁MVCC解决了大部分的幻读问题&#xff0c;但是并不是所有的幻读都能解读&#xff0c;想要彻底解决幻读&#xff0c;需要使用Serializable的隔离级别。 MVCC解决幻读 在RC中&#xff0c;每次读取都会重新生成一个快照&#xff…

EDM平台排行榜与工具推荐

本文总结了EDM平台排行榜&#xff0c;包括ZohoCampaigns、Mailchimp等。各平台在集成性、自动化、模板库等方面各具优势&#xff0c;适合不同规模和需求的企业。选择适合的EDM平台对营销活动成功至关重要。 1. Zoho Campaigns 简介 Zoho Campaigns是Zoho的edm平台&#xff0c…

[LeetCode] 515. 在每个树行中找最大值

题目描述&#xff1a; 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,10…

标准地图下载

官网&#xff0c;地图来源为中国地图出版社、国家基础地理信息中心 http://bzdt.ch.mnr.gov.cn/ 能够下载各个版本的中国地图 世界地图

python中的工具

一、Scapy Scapy是python语言编写的工具&#xff0c;也是一个强大的交付式数据包处理程序&#xff0c;能够伪造或者解码大量的网络协议数据包&#xff0c;能够发送、嗅探、剖析和伪造网络数据包&#xff0c;如端口扫描、路由跟踪、探测、攻击或网络发现等。 python3环境下&am…

2022年华为杯数学建模竞赛B题论文和代码

基于整数规划的方形件排样和组批优化问题研究 常见的板式产品如玻璃&#xff0c;PCB板&#xff0c;铝合金门窗等产品因其结构定制化程度高的特点&#xff0c;相关生产制造的企业往往采用“多品种小批量”的个性化生产模式。通过对客户订单的组批&#xff0c;预先规划好各个产品…

【2022统考真题】计算时间复杂度

目录 一、题目描述 二、思路分析 三、易错提醒 四、同级和嵌套的关系 一、题目描述 下列程序段的时间复杂度是&#xff08;&#xff09; int sum 0; for (int i 1; i < n; i * 2) for (int j 0; j < i; j) sum; A. O(logn) B. O(n) C. O(nlogn) D…

卡牌小程序开发,线上抽卡机的优势

今年以来&#xff0c;卡牌成为了一种新的潮玩方式&#xff0c;继盲盒后在度成为大众收藏娱乐的选择。卡牌的种类各异&#xff0c;以热门IP为原型&#xff0c;设计出了专属卡牌&#xff0c;具有较大的收藏价值&#xff0c;吸引了无数的消费者的关注。 随着互联网技术的发展&…

python常用的字符串方法

一、求字符串的长度 python最常用的内置函数 二、切片获取子串 获取前第5个字符 print(s[:5]) # wuzij 获取后6个字符 print(s[-6:]) # python 三、去掉多余空格 四、是否以某个串开头 五、是否包含某个子串 六、串联多串 七、分割多串 八、替换子串

施瓦辛格之女凯瑟琳和克里斯帕拉特的女儿养成了她们妈妈一个习惯

凯瑟琳施瓦辛格与克里斯帕拉特的长女莉拉和次女艾洛斯显然与其母亲极为相像&#xff0c;一张崭新且罕见的照片清晰地展露了这一情形&#xff01; 广告 10 月 13 日&#xff0c;施瓦辛格分享了一系列家人外出游玩的照片。她分享了这些甜蜜温馨的照片&#xff0c;并附上标题写道&…

链接伪类(:hover)CSS背景图片有闪动BUG的解决方法 vue3

现象&#xff1a; hover时候&#xff0c;图片还没加载出来&#xff0c;导致边框闪烁 在Vue 3中&#xff0c;如果你遇到了使用伪类(:hover)时背景图片出现闪烁的问题&#xff0c;可能是由于浏览器的渲染机制导致的。解决这个问题的方法可能包括&#xff1a; 使用background-pos…

【Go初阶】两万字快速入门Go语言

初见golang语法 package mainimport "fmt"func main() {/* 简单的程序 万能的hello world */fmt.Println("Hello Go")} 第一行代码package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包&#xff0c;如&#xff1a;package main…

中级课程RHCE

RHCE 一、复习RHCSA1.1 系统安装1.1.1 安装虚拟机1.1.2 第一个快照1.1.3 第二个快照vi编辑器1.1.4 看网关网卡 1.2 文件管理1.3 目录管理1.4 用户管理1.5 权限管理1.6 存储管理1.6.1 标准分区管理实验&#xff1a;1.6.2 逻辑卷管理实验&#xff1a;1.6.3 交换空间管理实验 …