RHEL9基础(三)

IO管道和输入输出

IO--->input output

Linux中输出输出设备:键盘、显示屏

键盘是输入设备--->通过键盘获取人敲打的命令 stdin

显示屏是输出设备--->结果是通过显示屏输出  stdout

标准输入  标准输出

如果不想要输出的结果显示在显示屏上?该怎么做

重定向:将原来的标准输出(显示在显示屏上的内容)或者输入(通过键盘输入的内容)重定向到某个文件中

输出重定向:将显示屏上的输出结果重定向到某个文件中;

>file 标准的输出重定向  覆盖文件内容

>>file 标准的输出重定向 追加文件内容

2>file  错误输出重定向  覆盖文件内容

2>>file   错误输出重定向 追加文件内容

&>file 等价于 > file 2>&1 全部重定向

Linux系统比较特殊的设备:

/dev/null 黑洞、垃圾桶(放到此垃圾桶里面的信息无法找回,通常在shell脚本中使用的多)

/dev/zero 0字符设备

dd if=/dev/zero of=a.txt bs=10M count=1   创建一个10M大小的文件a.txt

输入重定向:将原来键盘上输入的内容改变为通过文件进行输入

eg: passwd user < passwd (将密码保存到passwd文件中,通过passwd文件进行修改密码)

passwd - -stdin user < passwd (将密码保存到passwd文件中,通过passwd文件进行修改密码)

管道符:|

连接管道两端的命令,作用是将管道前面的输出结果 作为 管道后面的输入参数

格式:command1 | command2 | command3 | command4 |….

eg: echo redhat | passwd –stdin user

只能接受标准输出,无法接受错误输出

tee三通管道:

格式:command1 | tee filename | command2

将comand1的执行结果保存到filename文件中,再将command1的执行结果作为command2的输入

eg: ifconfig | tee ip.txt | grep inet

作用:常常适用于各种排错的场景,想要输出到屏幕又想保存到文件中

使用cat一键生成配置文件,发送多行到stdin

使用<<EOF 从键盘接受输入

直到EOF结束

cat > /etc/yum.repos.d/dvd.repo <<EOF

[BaseOS]

name=BaseOS

baseurl=file:///media/BaseOS

gpgcheck=0

enabled=1

[AppStream]

name=AppStream

baseurl=file:///media/AppStream

gpgcheck=0

enabled=1

EOF

EOF字符没有特殊的要求,前后EOF对应上即可。前面是什么符号,后面就是什么符号

vim编辑器高级特性

Linux编辑器:

vi 原生态自带

vim vi的高级版本(由软件包vim-enhanced提供)

gvim 图形化编辑器(由软件包vim-X11提供)

vim编辑器的优缺点:

缺点:所有的操作都是键盘操作,上手难度有点大,无法使用鼠标

优点:不需要图形化页面;兼容性好,可以在其他的Linux系统上运行;熟悉vim后,使用效率高

vim编辑器的三种模式:

编辑(插入)模式:标准的编辑内容

命令模式:可以文件的内容复制、粘贴、过滤关键字等操作

退出模式:可以保存、退出、另存为等操作

vim使用格式:

vim 文件

vim 接上已经存在的文件,则打开文件;

vim 接上不存在的文件,如果保存后则生成文件;

vim恢复丢失的文件

使用vim编辑器的时候,如果修改文件的时候没有保存异常退出的情况下(比如终端异常关闭,vim进程异常退出),就会生成一个.swp交换文件。这个.swp交换文件保存源文件的内容,是文件的保护机制;

解决办法:vim 打开这个文件;然后输入d 

rm -f 删除这个交换文件

模式的切换

命令模式切换到编辑模式:i a o I A O

            i: 在光标的左边插入

               I: 在光标的行首插入

               o: 在光标的下方插入一行

               O: 在光标的上方插入一行

               a: 在光标的右边插入

               A: 在光标的行尾插入

编辑模式和退出模式切换到命令模式,按Ecs键

编辑模式无法切换到退出模式,需要先切换为命令模式,再切换为退出模式;

在Linux中单词的概念,单词的组成=字母、数字、下划线组成的字符串称为单词

操作类型

操作键

功能

光标方向移动

á、â、ß、à

上、下、左、右

翻页

Page Down或Ctrl+F

向下翻动一整页内容

Page Up或Ctrl+B  

向上翻动一整页内容

行内快速跳转

Home键或“^”、数字“0”

跳转至行首

End键或“$”键

跳转到行尾

行间快速跳转

1G或者gg

跳转到文件的首行

G

跳转到文件的末尾行

#G

跳转到文件中的第#行

行号显示

:set nu

在编辑器中显示行号

:set nonu

取消编辑器中的行号显示

操作键

功能

x或Del

删除光标处的单个字符

dd

剪切当前光标所在行

Ndd

剪切前光标所在行以及下面N-1行

cc

替换改行,并进入插入模式

d^

删除当前光标之前到行首的所有字符

d$

删除当前光标处到行尾的所有字符

dw

删除当前光标处到词尾的所有字符

Nyy

复制当前N行整行的内容到剪贴板

:Start,end copy dest

将start到end行的内容复制到dest行以下

:Start,end m dest

将start到end行的内容移动到dest行以下

p

将缓冲区中的内容粘贴到光标位置处之后

P(大写)

粘贴到光标位置处之前

操作键

功能

/word

从上而下在文件中查找字符串“word”

?word

从下而上在文件中查找字符串“word”

n

定位下一个匹配的被查找字符串

N

定位上一个匹配的被查找字符串

操作键

功能

u

按一次取消最近的一次操作多次重复按u键,恢复已进行的多步操作

U

撤消光标所在行的更改

Ctrl-r

取消最后一次“撤消”

.

重复操作

命令

功能

:s /old/new

将当前行中查找到的第一个字符“old” 串替换为“new”

:s /old/new/g

将当前行中查找到的所有字符串“old” 替换为“new”

:m,n s/old/new/g

在行号“m,n”范围内替换所有的字符串“old”为“new”

:% s/old/new/gi

在整个文件范围内替换所有的字符串“old”为“new”

:s /old/new/c

在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认

命令

功能

:s /old/new

将当前行中查找到的第一个字符“old” 串替换为“new”

:s /old/new/g

将当前行中查找到的所有字符串“old” 替换为“new”

:m,n s/old/new/g

在行号“m,n”范围内替换所有的字符串“old”为“new”

:% s/old/new/gi

在整个文件范围内替换所有的字符串“old”为“new”

:s /old/new/c

在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认

vim可视化模式和多行注释

vim可视化模式

在此模式下,用户可以使用光标键选择想要编辑的文本区域。可以进行删除d等操作

选择文本区域

Ctrl + v 列方向选定

v   字符高亮选定

V  行高亮选定

多行注释

  1. Ctrl+v 选中要注释的行
  2. 按大写的I
  3. 插入注释符号#
  4. 按Ecs

多窗口模式

在单个vim中,可以打开多个窗口,方便文件之间对比或者修改

Ctrl+w,s;横向分割屏幕

Ctrl+w,v;纵向分割屏幕

补充操作

Ctrl+w 方向键,在窗口中进行切换

:sp file 在同一个窗口中打开其他的文件

文本处理工具

文本查看工具

cat 查看文本内容,合并文本内容(cat后面可以接上多个文件)

-n 显示序列号

-A 显示特殊字符(人眼不可见的)

more / less 分页查看文本内容

more -d (有提示信息)

less 可以使用 v 进行编辑,过滤关键字,跳转关键字

head 查看文件开头的内容(默认是查看10行)

-n 查看指定行数

head -n 20 passwd  等价于 head -n +20 passwd  

head -n -10 passwd 查看除了文件末尾10行的其他内容(最后10行不显示)

tail 查看文件末尾的内容(默认是查看10行)

-n 查看指定行数

tail -n 20 passwd 等价于 tail -n -20 passwd  

tail -n +20 passwd 查看除了文件开头10行的其他内容(开头10行不显示)

tail -f  文件  实时监控文件内容,将内容进行追加到文件中并且显示到显示屏上

应用场景:日志排错

查看43到54行内容;固定公式:head查看最大的行数 | tail查看 最大行数-最小行数+1

head -n 54 passwd | tail -n 12

grep通过关键字进行过滤文件内容

grep根据关键字过滤出来的是关键字所在的

格式:grep [选项]  参数

-i 忽略大小写

-o 只显示匹配关键字的内容

-c 显示一共匹配到了几行

-q 静默模式,不输出任何信息(通常和shell脚本联合使用,echo $? 判断是否成功)

0 成功; 非0 失败

-v 取反,不匹配指定关键字的行

-Ax 将匹配的行数以及下面x行打印出来

-Bx 将匹配的行数以及上面x行打印出来

-Cx 将匹配的行数以及上下x行打印出来

-r  通过文件的内容搜索文件

-l 只打印文件的名字(通常和-r 联合使用)

正则表达式

作用:主要是匹配字符串的规律,通过正则能够实现更多复杂的过滤;

eg: 要过滤以root开头或者以nologin结尾的行数

正则使用元字符表示找规律(^ $ 都是元字符)

基本正则:

^ 以xxx开头的字符

$ 以xxx结尾的字符

\< 在字(由数字、字母、下划线组成)的开始进行匹配

\> 在字的结尾进行匹配

. 匹配任何单个字符

[abc]  匹配列表内任意单个字符

[^ abc]  不匹配列表内任意单个字符

[a-z] / [0-9]  对a和z或者 0-9 之间的字符进行匹配

\  反斜杠,转义字符,专门去掉反斜杠后面的单个字符的含义

* 表示前一项匹配0次或者多次

.* 表示匹配所有

扩展正则

格式:grep -E 或者 egrep

+ 对前一项进行重复匹配1次或者多次

?对前一项进行0次或者1次重复匹配

{j} 对前一项进行j次重复匹配

{,j} 对前一项进行最多j次重复匹配

{j,} 对前一项进行最少j次重复匹配

{j,k} 对前一项进行最少j次,最多k次重复匹配

eg: egrep  ‘ro{1,2}’  /etc/passwd

s|t  表示匹配s或者匹配t  同时过滤两个关键字

eg: egrep ‘error|faild’ -i  /var/log/messages

(abc) 表示将前一项的内容作为一个整体

cut过滤列和字段

注意:grep过滤出来的是行,cut过滤出来的是列

cut:

-d 指定分隔符

-f 指定列数

eg:cut -d: -f3 /etc/passwd

cut -d: -f3,6 passwd 取第3列和第6列

-c 提取指定数量的字符

cut -c 1-3 passwd  取第一个到第三个字符

awk ‘{print $2}’ 默认使用空格为分隔符

-F 指定 分隔符

wc 统计文件的行数、单词数、字节数(文件的大小)

wc /etc/passwd

67  128 3475 /etc/passwd

行数 单词数 字节数

wc -l 查看行数

wc -wc  查看单词数、字节数

w 单词数、c字节数

应用场景:统计文件数量等

sort排序工具

sort默认使用字符表的方式排序,不是按照数字的方式排序

sort:

-n 以数字的方式排序(从小到大)

-t  指定分隔符

-k 指定列数

-r 降序(通常和-n联合使用)

-f 忽略大小写

-u 去重重复的内容

uniq:去重工具(只去重相邻重复的行)

uniq和sort联合使用,sort先排序,uniq再进行去重

uniq -c 统计文件中重复的内容

diff和vimdiff比较文件

a 添加

c 修改

d 删除

 vimdiff--->vim-enhanced软件包

tr文本转换工具

用来做字符转换

大写转小写,小写转大写,echo abc | tr a-z A-Z

字母转数字,数字转字母,echo 123 | tr 1-3 a-z

tr -d 13 ,删除字符13,在屏幕上删除指定的字符(源文件内容不修改)

tr -d user < user.txt

sed流编辑器

类似于vim编辑器,能够修改文件内容,对内容进行删除、替换、插入、等等操作

sed是一行一行的读取文件的内容,在处理的时候,将内容放到模式空间(临时缓冲区)中,模式空间内部所有的内容处理完成,将打印在屏幕上

注意:sed默认处理的是模式空间中的内容,源文件不改变

选项:

sed -n ‘/root/p’ /etc/passwd 不输出模式空间的内容

sed -i.bak ‘/root/d’ /etc/passwd  修改文件内容之前先备份再修改(/root/d 删除root关键字)

sed -e 's/root/huawei/' -e '/rot/d' root  执行多条命令

sed -r 默认支持基本正则,-r使用扩展正则

地址定界

使用sed需要指定处理的行数,要处理哪一行或者哪几行;如果不指定的话,默认会处理所有

1)#:#代表数字,指定要处理的行数

sed ‘10p’ /etc/passwd  或   sed ‘10d’  /etc/passwd

2)$:$表示文件的最后一行

sed ‘$p’ /etc/passwd   或 sed ‘$d’  /etc/passwd

3)/regexp/:表示匹配关键字regexp所在的行,可以基于基本正则和扩展正则进行匹配

sed -n ‘/root/p’  /etc/passwd

4)/regexp/I:表示忽略大小写

sed -n ‘/dns/Ip’  /etc/passwd

5)\%regexp%:表示匹配关键字regexp所在的行,当匹配的字符里面特殊符号,需要转义

当匹配的字符里面有特殊符号,例如 / 等

只需要转移第一个特殊字符,在sed中它会认为后面的和前面一样

sed -n ‘\%/bin/bash%p’ /etc/passwd

6)addr1,addr2  指定一个范围

1,20 指定1到20行

sed ‘1,20p’ /etc/passwd -n

1,/sync/ 指定从第一行开始,匹配第1行到sync关键字所在的行(中间全部匹配上)

sed ‘1,/sync/p’ /etc/passwd -n

/root/,/memeda/  匹配root行到memeda行中间的所有行

sed ‘/root/,/memeda/p’ /etc/passwd -n

7)first~step:指定起始的位置及步长,例如:1~2表示1,3,5…

sed ‘1~2p’ /etc/passwd -n  从第一行开始匹配,隔一行匹配一行

8)addr1,+N:指定行以及以后的N行

1,+10 从第一行开始,往下匹配10行(一共11行)

sed ‘1,+10’ /etc/passwd -n

1,~10 从第一行开始,往下匹配到10行(一共10行)  等价于  1,10

sed ‘1,~10p’ /etc/passwd -n

sed编辑(处理动作)

对文件的内容进行删除、打印、修改等

p:打印模式空间处理后的内容

例如:sed ‘1,20p’ /etc/passwd    会打印模式空间的内容,同时也会打印处理后的内容,所以有两行

  sed ‘/root/p’ /etc/passwd -n

例如: 想要查看文件的10-20内容

head -n 20 /etc/passwd | tail -n 11

sed ’10,20p’ /etc/passwd -n

d:删除匹配的行

sed ‘1,20d’ /etc/passwd

sed ‘/root/d’ /etc/passwd

a \test : 在匹配的行数后面追加内容

sed ‘1a\memda’ /etc/passwd

sed ‘/sshd/a\memeda’ /etc/passwd

i \test:在匹配的行数前面追加内容

sed ‘1i\memda’ /etc/passwd

sed ‘/sshd/i\memeda’ /etc/passwd

c \test:修改匹配的行(把匹配到的这一行内容都进行修改)

sed ‘/root/c\memeda’ /etc/passwd

指定关键字进行替换操作: s/查找的关键字/替换后的关键字  (/ 可以换成其他的符号 例如@ #等)

sed ‘s/root/huawei/ ’ /etc/passwd 默认只替换第一个匹配到的关键字

sed ‘s/root/huawei/2’ /etc/passwd 替换第二个匹配到的关键字

sed ‘1s/root/huawei/2’ /etc/cpasswd 将第一行的第二个root替换为huawei

sed '1,3s/root/huawei/' passwd   将第一行到第三行的第一个匹配到的root替换为huawei

如果要想进行全局替换,则加上g 

sed ‘s/root/huawei/g ’ /etc/passwd 替换所有的root

忽略大小写,i

sed ‘s/root/huawei/gi ’ /etc/passwd 替换所有的root(忽略大小写)

w /目标路径:另存为文件

sed ‘3,4w /opt/passwd.txt’  /etc/passwd

! 取反:如果地址后面有!,表示不匹配该行

sed ‘1!s/root/huawei/gi’ /etc/passwd 表示除了第一行意外,所有的root都修改为huawei

删除字符(利用替换的特性,将匹配的字符串替换为空则为删除)

sed ‘s/root//’ /etc/passwd将/etc/passwd中的root关键字替换为空(删除)

案例

sed -n 5p passwd  打印第5行

sed -n $p passwd 打印最后一行

sed -n ‘1,5p’ passwd 打印第1-5行

sed -n '/root/Ip' passwd  匹配带有root关键词的行,并忽略大小写

sed -n '\%root%Ip' passwd  同上

sed '1,5d' passwd  删除第1-5行

sed -i.bak '1,5d' passwd  删除第1-5行,源文件被修改

sed  '2a \abc' passwd  在文件第2行下面追加abc

sed 's/north/hello/' datafile --替换每行第一个north

sed 's/north/hello/g' datafile --全部替换

sed '1 s/north/hello/g' datafile --替换第一行所有的north

sed '1 s/north/hello/' datafile --替换第一行第一个north

sed '1 s/north/hello/2' datafile --只替换第一行第二个north

巧用替换删除内容(不是删除行)

sed 's/north//' datafile --删除所有行的第一个north

sed 's/north//g' datafile --删除全部的north

sed '1 s/north//2' datafile --删除第一行第二个

sed 's/^/#/'  datafile  给每行开始加注释,^就代表开始

sed 's/^.//' datafile --删除每行第一个字母

sed 's/^\<[a-Z]*[a-Z]\>//' datafile --删除每行第一个单词

初识bash shell

shell:命令解释器。人机交互的接口。第三方的翻译工具。shell脚本语言。

系统怎么知道你敲打了ls命令是列出当前目录的内容???  ---> 敲打命令实则是交给内核执行

shell解释器充当中间人翻译的作用,将用户输入的命令(ls pwd cd等)翻译成为系统内核看的动的语言

shell的种类:

bash shell(主流的Linuxshell解释器)  csh ksh

bash shell更加符合用户敲打命令的习惯,提供不同的功能作用

大多数的Linux系统默认的shell程序是bash shell,比如说centos openeuler rhel等等,今天你学会了rhel的命令,你去centos 你去openeuler系统依旧会敲打命令,因为它们默认的shell程序都是bash shell

bash shell提供的功能

  1. 快捷键
    1. ctrl+A 把光标移动到命令行开头
    2. ctrl+E 把光标移动到命令行结尾
    3. ctrl+C 强制终止当前的命令
    4. ctrl+L 清屏,相当于 clear 命令
    5. ctrl+U 删除或剪切光标之前的命令
    6. ctrl+K 删除或剪切光标之后的内容
    7. ctrl+Y 粘贴 ctrl+U 或 ctrl+K 剪切的内容
    8. ctrl+R 在历史命令中搜索
    9. ctrl+D 退出当前终端
    10. ctrl+Z 暂停,并放入后台
    11. ctrl+S 暂停屏幕输出
    12. ctrl+Q 恢复屏幕输出
  2. history 历史记录

历史记录文件:~username/.bash_history

history -c 清空历史记录

history -w 将历史记录立即写入到文件中

永久删除历史记录:

history -w 

echo > ~username/.bash_history

history -c

3.通配符

快速的定位文件

* 匹配所有

? 匹配任意单个字符

[abc] 匹配该列表中的任意字符

[0-9] 匹配该列表中的任意单个数字

[^abc] 匹配除该列表意外的所有字符

[:alpha:]:    匹配字母(不区分大小写)

[:lower:]:    匹配小写字母

[:upper:]:    匹配大写字母

[:digit:]:      匹配数字

[:alnum:]:   匹配任意字母或数字

4.命令扩展符号

~ 表示用户的家目录

 ` ` 和 $() 命令的执行符号:引用命令的结果

eg: echo $(hostname)  或 cp /etc/passwd /opt/passwd-backup-`date +%F`

{ } 表示一个范围,有顺序的匹配大括号内的字符

eg: touch {1..10}.txt     touch {a..d}.txt    touch {1..10..2}.txt

如果括号内范围不连续,则使用 逗号 隔开

eg: touch {rhel,openeuler,centos}.txt

5.管道符、重定向、tab键补全

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值