0
点赞
收藏
分享

微信扫一扫

05Linux常用命令(输入输出处理)

幺幺零 2022-03-16 阅读 43

Linux常用命令(输入输出处理)

一、重定向

标准输入、标准正确输出、标准错误输出
进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个数字标识。这个标识叫文件描述符。
进程使用文件描述符来管理打开的文件(FD----file descriptors).
文件描述符:每打开一个程序都会有文件描述

0,标准输入(键盘)   #标准输入的文件描述符
1,标准输出  #标准的正确输入给你反馈
2,标准错误   #标准的错误输入给你反馈
3+,进程在执行过程中打开的其他文件
&:表示正确错误混合输出 
ll //ahh 2 >/dev/null #错误输出都会被吃掉

命令执行过程的数据传输情况:

file --Standard input-→Command –Standard output-→ file/device

|

Standard error

|

file/device

在执行一个命令时,命令可能由文件读入数据,经过处理之后,再将数据输出到屏幕上。standard output与standard error output分别代表“标准输出”与“标准错误输出”,这两个命令默认都是输出到屏幕上面。
标准输出:命令执行所回传的正确的信息。
标准错误输出:命令执行失败后,所回传的错误信息。
举例来说,系统有/etc/ssh/ssh_config文件但没有/etc/ssh/ssh_config1文件,此时如果执行cat /etc/ssh/ssh_config和cat /etc/ssh/ssh_config1命令,cat会进行:
标准输出:读取/etc/ssh/ssh_config文件后将内容显示在屏幕上。
标准错误输出:找不到/etc/ssh/ssh_config1文件,屏幕上显示错误信息。
不管正确与否信息都会输出到屏幕上。通过某些机制把标准输出和标准错误输出分开就是数据流重定向的功能。数据流重定向可以将standard output(简称stdout)与standard error output(简称stderr)分别传送到其他的文件或设备去,分别传送所用的特殊字符如下所示:
编号 通道名称 描述 默认连接 用法
0 stdin 标准输入 键盘 仅读取
1 stdout 标准输出 显示屏 仅写入
2 stderr 错误输出 显示屏 仅写入

二、管理输入输出

1、输入重定向<
command <file	将 file 文件中的内容作为 command 的输入。
command <<END	从标准输入(键盘)中读取数据,直到遇见分界符 END 才停止(分界符可以是任意的字符串,用户自己定义)。
command <file1 >file2	将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。

#cat  /etc/passwd 它是以键盘作为标准输入设备,并将文件内容显示到控制台

语法1: # cat < /etc/passwd     而输入重定向,cat < /etc/passwd ,它是将passwd文件指定为输入设备,并将内容显示到控制台。

语法2.#  cat << xiexie
# cat <<xiexie(这个字符串字符是任意的,没有任何含义)
它的作用是将这个 xiexie 字符之前的内容(document) 作为输入传递给cat,碰到xiexie将自动结束输入,并将输入的内容显示出来;

语法3:# cat  /etc/passwd  < a  > b.txt   :将文件passwdt输入重定向到a,输出重定向到b.txt文件
2、输出重定向>
command >file	以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。
command >>file 以追加的方式,把 command 的正确输出结果输出到 file 文件中。

语法1:date 1> date.txt #正确输出--覆盖
# 注意:如果 > 前面什么都不加默认为1,标准正确输出。

语法2:date >> date.txt #正确输出--追加

语法3:ls /home/ /aaaaaaaaa >list.txt 2>error.txt #重定向到不同的位置[错误输出]

语法4:ls /home/ /aaaaaaaaa &>list.txt #混合输出到相同文件

语法5:ls /home/ /aaaaaaaaa >list.txt 2>/dev/null #空设备,将错误的输出丢掉

语法6: ls /home/ /aaaaaaaaa &>/dev/null #空设备,将正确与错误的输出丢掉

cat > file << EOF 是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。
cat >>file <<EOF 是用来追加到已创建的文本

语法:cat >> file5 <<EOF
#可以写到脚本或者文件里面
EOF:开始和结束的标记。
成对使用
结尾的另一个必须定格写。

管道 |、命令回传码$?、与&&、或||、分号;

用法:command1 | command2 |command3 |....
#rpm -qa | grep 'httpd' #查看所有安装的软件包,过滤包含httpd的包
#echo "xiaoqiang" | passwd --stdin xiaohui{用户名} #修改已创建xiaohui的密码为xiaoqiang

; #执行多条命令,不管成功不成功都执行
&& #如果前面命令执行成功,则执行,不成功,不执行
|| #或者的意思。如果前面的命令执行成功则不执行,不成功则执行后面的,相当于应急

cut:将一行信息的某一段“切”出来

cut
参数:
-d:后面接分隔字符,与-f一起使用;
-f:依据-d的分隔字符将一段信息切为数段,用-f取出第几段的意思;
-c:以字符(characters)的单位取出固定字符区间;
举例:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除


cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f

常用:cut -d -f 组合或 cut -c
1.提取每一行的第3个字节: who | cut -b 4
2.提取第1,第2、第3个字节: who|cut -b 1-3 =who|cut -b 1,2,3
#cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。不能颠倒定位的顺序。

3:取出/etc/passwd文件中‘:’分隔的第6个内容(也就是用户家目录):
cat /etc/passwd | cut -d ':' -f 6 =cut -d':' -f6 /etc/passwd
4:如果要取出第1个(用户名)和第6个,为:cat /etc/passwd | cut -d ':' -f 1,6
4:取出第12个字符以后的字符:cat /etc/passwd | cut -c 12-
5:取出第12个字符到第20个字符:cat /etc/passwd | cut -c 12-20
6:要显示字段的某个范围,可以指定开始和结束的字段,中间用连字符(-)连接,如下所示
grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7

grep:若一行中有需要的信息,就取出该行


grep [-acinv] [--color=auto] ‘查找字符串’ filename
参数:
-a:将binary文件以text文件的方式查找数据;
-c:计算找到‘查找字符串’的次数;
-i:忽略大小写的不同,大小写视为相同;
-n:输出行号;
-v:反向选择,即显示出没有‘查找字符串’的那一行;
-w:单词匹配,grep -w root只匹配含root单词的行而不再匹配含root如roota单词的行;
--color=auto:可以将找到的关键字部分加上颜色显示;
例:
grep 'root' /etc/password #过滤文件中带root的内容
grep '^root' /etc/password #过滤以root开头的行
grep 'bash

grep [-acinv] [--color=auto] ‘查找字符串’ filename
参数:
-a:将binary文件以text文件的方式查找数据;
-c:计算找到‘查找字符串’的次数;
-i:忽略大小写的不同,大小写视为相同;
-n:输出行号;
-v:反向选择,即显示出没有‘查找字符串’的那一行;
-w:单词匹配,grep -w root只匹配含root单词的行而不再匹配含root如roota单词的行;
--color=auto:可以将找到的关键字部分加上颜色显示;
例:
grep 'root' /etc/password #过滤文件中带root的内容
grep '^root' /etc/password #过滤以root开头的行
grep 'bash$' /etc/password #过滤以root结尾的行
grep -R root /etc  # 过滤出/etc目录下所有带有root的文件
grep -v root #取root相反的,就是出去文件全部带root的
grep -n root /etc/passwd #将/etc/passwd,有出现 root 的行取出来
#x27;
/etc/password #过滤以root结尾的行
grep -R root /etc # 过滤出/etc目录下所有带有root的文件
grep -v root #取root相反的,就是出去文件全部带root的
grep -n root /etc/passwd #将/etc/passwd,有出现 root 的行取出来

wc:计算输出的信息的整体数据

wc [-lwmc]
参数:
-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串
wc -l

split:切割命令

split [-bl] file PREFIX
参数:
-a 添加文件后缀长度, 默认2
-b:后面可接欲切割成的文件大小,可加单位,例如b,k,m等;
-C <字节> : 与参数"-b"相似,但是在切割时将尽量维持每行的完整性
-d 添加数字后缀
-l:以行数来进行切割;
PREFIX:代表前导符,可作为切割文件的前导文字。
例:
1:切割文件: 每2行一个文件,且输出文件名数字标识,数字标志为3位数
split -l 2 -d -a 3 test.txt
2:切割文件: 每2行一个文件,且输出文件名数字标识,数字标志为3位数,且自定义前缀输出文件名
split -l 2 -d -a 3 test.txt a
3:切割文件: 每20k一个文件
split -b 20k test.txt

sort:排序

将etc/password中的用户按uid 大小排序
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行
命令:sort -t":" -k3 -n /etc/password #以:分隔,将第三列按字数升序
sort -t"" -k3 -n /etc/password  -r #以:分隔,将第三列按字数降序
sort -t":" -k3 -n /etc/passwd |head #以: 分隔,将第三列按字数升序看前十行
sort -t":" -k3 -n /etc/passwd |tail #以: 分隔,将第三列按字数升序看后十行
#netstat -lntp | awk 'NR==3{print $4}' | awk -F':' '{print $2}'
ip a |grep "ens33" | awk 'NR==2{print $4}' | awk -F'/' '{print $2}'
-F后面默认空格 NR:行 $以空格分隔符的第二个参数

uniq:去重

 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
 选项与参数:
-i   :忽略大小写字符的不同;
-c  :进行计数,显示行出现的次数
-d  :仅显示重复出现的行,即出现次数>=2的行,且只打印一次
-u  :只显示唯一的行
排序文件,默认是去重:cat words | sort |uniq
排序之后删除了重复行,同时在行首位置输出该行重复的次数:sort testfile | uniq -c
仅显示不重复的行:sort testfile | uniq -u
举报

相关推荐

0 条评论