20200530数据流重定向

写这个博客,估计我也不会再看,就是记录下

一些快捷键

Ctrl + C终止命令,没啥说的
Ctrl + D输入结束符,cat > xxx  这种命令
Ctrl + S暂停屏幕的输出
Ctrl + Q恢复屏幕的输出
Ctrl + U删除输入命令
Ctrl + Z挂起进程并放入后台,jobs显示当前暂停的进程,bg,fg 调到前后台

通配符:

*0到无穷多个
?至少一个任意字符
[][abcd] abcd至少一个
[-][0-9] 代表所有字符
[^]代表非

数据流重定向:

< 标准输入,  << 终止符

> 覆盖输出 , >> 追加输出

标准输入(stdin):代码为0,使用< <<

标准输出(stdout):代码为1,使用 > >>

标准错误输出(stderr):代码为2,使用 2> 或  2>>

find /home -name .bashrc > list_right 2> list_error   # 标准输出和标准错误输出放在不同位置。

垃圾桶黑洞:其实也能没啥,就怕自己忘了路径,/dev/null

find /home -name .bashrc 2> /dev/null  # 错误数据被丢到垃圾桶

将标准输出和标准错误输出输入到一起:

find /home -name .bashrc > list 2>&1   # 普遍用法
或
find /home -name .bashrc &> list     # 个人喜欢

标准输入 < <<

cat > catfile   # 创建个文件,并等待用户输入作为文件
testing
cat file test
# 按下 ctrl + d  结束输入

 标准输入 <

cat > catfile < ~/.bashrc       # 用stdin替代键盘的输入以建立新文件的流程
# 就是把原本由屏幕输入的内容变为由文件输入

标准输入 <<     指定终止符,和ctrl + d 一个作用

[root@iz2zeczv3xrnm2jx6aayhxz test]# cat > catfile << "pp"
> abc
> opp
> ppp
> pp

命令执行的判断根据,&& ||

cmd1&&cmd2 cmd1执行成功,开始执行cmd2;cmd1执行失败cmd2则不执行
cmd1 || cmd2cmd1执行失败才执行cmd2,cmd1执行成功不会执行cmd2

管道命令

管道命令仅能处理经由前面一个命令传来的正确信息,也就是标准输出的信息,对于标准错误并没有直接处理能力。

 

cut

cut 

-d       后面接分割符,与-f一起使用

-f        根据-d 的分隔符将一段信息划分成为数段,用-f 取出第几段的意思

-c        以字符的单位取出固定字符区间

echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo ${PATH} | cut -d : -f 5
/root/bin
echo ${PATH} | cut -d ":" -f 5
/root/bin
# 加不加""无所谓

# 注意是3段和5段,不是3到5
echo ${PATH} | cut -d : -f 3,5 
/usr/sbin:/root/bin


export | cut -c 12      # 代表截取第12个字符
export | cut -c 12-     # 12往后
export | cut -c 12-15   # 12 到 15

 

grep

grep

-a      将二进制文件以文本文件的方式查找数据

-c       计算找到,查找字符的次数

-i        忽略大小写的不同,所以大小写视为相同

-n       输出行号

-v       反向选择,

last | grep root
last | grep -v root
last | grep -v root | cut -d ' ' -f 1
last | grep -v root | cut -d ' ' -f 1

 

sort

-f    忽略大小写
-b   忽略最前面的空格部分

-M   以月份的名字来排序

-n    使用纯数字进行排序

-r     反向排序

-u    就是uniq,相同数据就出现一行

-t     分割符,默认tab键来分割

-k     以哪个区间来进行排序的意思

cat /etc/passwd | sort                 # 默认按照第一个字母进行排序
cat /etc/passwd | sort -t : -k 3       # 按照: 分割的第三段排序
cat /etc/passwd | sort -t : -k 3 -n    # -n 指明按照第三栏,并且按照数字格式排序

 

uniq 

-i     忽略大小写

-c    进行计数

last | cut -d ' ' -f 1 | sort | uniq       # 去重
last | cut -d ' ' -f 1 | sort | uniq -c    # 计算次数, 重复的次数

 

wc

-l     仅列出行

-w    仅列出多少字,或者说单词,以空格分割。

-m    多少字符

cat catfile | wc 
3       4      21
行数   单词数   字符数

 

双向重定向:tee

tee 会同时将数据流分送到文件与屏幕

-a     以累加的方式,将数据加入到file当中

last | tee last.list | cut -d " " -f 1 先给文件一份,再给屏幕一份,实测必须先给文件,再给屏幕

 

tr 可以用来删除一段信息当中的文字,或是进行文字信息的替换

-d     删除信息当中的,后面的字符串

-s     替换重复的字符

last | tr '[a-z]' 'A-Z'       # 将小写字母转换成大写
cat /etc/passwd | tr -d ":"   # 将:删除

 

join 两个文件当中,有相同数据的那一行,才将它加在一起

-t       join默认以空格字符分割数据,并且比对第一个栏位的数据

-i       忽略大小写

-1       这个数字1,代表第一个文件要用那个栏位分析的意思

-2       代表第二个文件要用哪个栏位分析的意思

[root@iz2zeczv3xrnm2jx6aayhxz test]# head -n 3 /etc/passwd /etc/shadow
==> /etc/passwd <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

==> /etc/shadow <==
root:$6$czxmSZZEpX$q4CXU8JpkEO0pj4hqz2yHFRLyrZ7i5dowC944n1gJSc7qJq59vQ1rZXrCkHzufavtq5GzATgQJIhSUOBH.jKq0:18364:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::

[root@iz2zeczv3xrnm2jx6aayhxz test]# join -t ":" /etc/passwd /etc/shadow | head -n 3  # 第三栏进行合并
root:x:0:0:root:/root:/bin/bash:$6$czxmSZZEpX$q4CXU8JpkEO0pj4hqz2yHFRLyrZ7i5dowC944n1gJSc7qJq59vQ1rZXrCkHzufavtq5GzATgQJIhSUOBH.jKq0:18364:0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:17110:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:17110:0:99999:7:::
join -t ':' -1 4 /etc/passwd -2 3 /etc/group/ | head -n 3
# 合并前面文件的第四栏,和后面的第三栏

 

paste   直接将两行贴在一起,并且tab键隔开而已

-d    后面可以接分隔符, 默认tab来分割

-       如果file部分写成-,表示来自标准输入的数据

cat /etc/group | paste /etc/passwd /etc/shadow - | head -n 3
paste -d "-" te st           # te st 是两个文件

 

划分命令: split,  就是将文件划分为几个更小的文件

-b     后面可接欲划分成的大小文件,

-l       以函数来进行划分

split -b 300k /etc/services services    # 将这个文件划分为几个300k大小的文件

[root@iz2zeczv3xrnm2jx6aayhxz test]# ll
total 664
-rw-r--r-- 1 root root 307200 May 20 15:17 servicesaa
-rw-r--r-- 1 root root 307200 May 20 15:17 servicesab
-rw-r--r-- 1 root root  55893 May 20 15:17 servicesac


# 分成abc三个文件


cat services* >> servicesback

# 在合成一个     原来被分成的小部分的还在
ls -al / | split -l 10 - lsroot    # 将文件按每个文件10行内容分割
# 重点是这个 - ,如果需要stdout和stdin 时,但偏偏有没有文件,

 

参数代换   xargs

-e       这是EOF的意思,后面可以接一个字符,当xargs分析到这个字符时,就会停止工作

-p       在执行每个命令时,都会询问使用者的意思

-n       后面接次数,每次command命令执行时,默认是以echo来进行echo进行输出

id root
uid=0(root) gid=0(root) groups=0(root)

cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id
# 就是每次给id一个参数,否则或报错

 

关于 - 

stdin和stdout可以用- 来替代

tar -cvf - /home | tar -xvf - -c /tmp/homeback

# 将/home里面的文件给它打包,但打包的数据不是记录到文件,而是拆送到stdout。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值