【专项突破】Linux重定向与管道

This article is written by Xrilang(Chinese Name:萌狼蓝天

If you want find me ,You can contact me in BiliBili . My Bilibili name is 萌狼蓝天

Of course, you can also add my QQ(My QQ number is: 3447902411)

(Please note that your sole purpose of adding me is limited to technical exchange. I won't help you with your homework!)


萌狼蓝天 - 博客园 | 萌狼工作室 - 萌狼蓝天 (mllt.cc) | 萌狼蓝天の技术栈 | Welcome !

输入输出重定向

标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令中输入

标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕

错误输出重定向(STDERR,文件描述符2):默认输出到屏幕

文件描述符是一个非负整数,用于指代被打开的文件,所有与文件读写相关的系统调用都是通过文件描述符调用起来的。

符号 作用 备注
命令 > 文件 标准输出重定向到一个文件中(会清空原有文件数据) 命令 1> 文件
命令 2> 文件 错误输入重定向到一个文件中(会清空原有文件数据)
命令 >> 文件 标准输出重定向到一个文件中(会追加到原有文件数据后) 命令 1>> 文件
命令 2>> 文件 错误输出重定向到一个文件中(会追加到原有文件数据后)
命令 >> 文件 2>&1
命令 &>> 文件

标准输入错误重定向到回收站:命令 2>/dev/null

简单过滤命令

查看 head、more、tail

命令:head、more、tail

head -行数 文件名(顺序)
more 文件名
tail -行数 文件名(倒序)

例子:使用翻页形式查看 /etc目录中的文件列表及属性信息

ls /etc -l | more

替换 tr

命令:tr

tr 原始字符 目标字符

提取 cut

命令:cut

cut 参数 文本

用“列”提取文本字符

按列搜索,要用-f 参数设置需要查看的列数,-d设置间隔符号

cut -f(列) -d(分隔文本或符号)(文件名)

排序 sort

命令:sort

sort 文件名
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • --help 显示帮助。
  • --version 显示版本信息。
  • [-k field1[,field2]] 按指定的列进行排序。

去重 uniq

命令:uniq

作用:检查文本文件中重复出现的行列。一般和sort搭配使用,消除连续重复的行。

sort 文件名 | unqi
# 显示重复次数:-c或--count 在每列旁边显示该行重复出现的次数。
sort 文件名 | unqi -c
# -u或--unique 仅显示出一次的行列。
sort 文件名 | unqi -u
# 在文件中找出重复的行:-d或--repeated 仅显示重复出现的行列。
sort 文件名 | unqi -d

计数 wc

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。

$ wc testfile           # testfile文件的统计信息
3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598

如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2

$ wc testfile testfile_1 testfile_2  #统计三个文件的信息
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708

含参实例

# 查看有多少个用户
cat /etc/passwd | wc -l
wc -l < /etc/passwd

参数

  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 显示行数。
  • -w或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。

实例

管道命令符

查找 grep

命令:grep

作用:在文本内容中查找出指定文本行并标红

例子:查找当前系统不允许登陆系统的用户信息

grep -n /sbin/nologin /etc/passwd

例子:查找文件中包含关键字词的内容

grep -n 关键字词 文件名

例子:查找文件中不包含关键字词的内容

grep -v 关键字词 文件名

例子:查看当前被限制登陆系统的用户数

grep /sbin/nologin /etc/passwd | wc -l

补充内容

access.log

序号 字段
1 远程主机IP
2 远端用户标识(已废弃)
3 远程用户名
4 请求时间
5 请求第一行(典型格式:请求方法/访问资源协议)
6 状态代码(显示客户端的请求是否成功)
7 发送字节数(服务器发送给客户端的总字节数)
8 请求来源
9 客户端浏览器识别信息

例子:统计出所有来访客户端的数目

(1)查找远程主机IP(cat access.log | cut -f1 -d ' '

(2)并排序去重(sort | uniq

(3)统计出所有来访客户端的数目(wc -l

cat access.log | cut -f1 -d ' ' | sort | uniq | wc -l
# 查看文件 | 提取出第一列,分隔符为‘ ’| 排序 | 去重 | 显示输出 数目

例子:查看日志中出现次数排名前五的客户端IP,并将IP保存到名为clients.txt中

cat access.log | cut -f1 -d ' ' | sort | uniq -c | sort -nr | head -5 > clients.txt

例子:查看指定文件(FileName)再指定日期(VisitDate)访问的次数

cat access.log | grep 'VisitDate' | grep 'FileName' | wc -l
# grep 'FileName' access.log | grep 'VisitDate'

练习

练习题:grep

1.查找 /etc/passwd 中允许登陆的用户信息

# 查找文件中不包含关键字词的内容:grep -v 关键字词 文件名
grep -v /sbin/nologin /etc/passwd

2.查找 /etc/group中wheel组的用户信息

grep wheel /etc/group

3.统计 /etc/passwd 中允许登陆的用户数

grep -v /sbin/nologin /etc/passwd | wc -l

4.查看 /dev 文件中的详细信息,并使用翻页功能

ls /dev -l | more
ls -l /dev | more
ll /dev | more

5.利用管道和passwd --stdin 修改用户密码

echo '密码' |  passwd --sdtin 用户名

If you want to reprint this article, please quote the link instead of copying my content and republishing it.

【Linux】【专项突破】Linux重定向与管道的更多相关文章

  1. 015 Linux 标准输入输出、重定向、管道和后台启动进程命令

    目录 1 三种标准输入输出 2 什么是重定向?如何重定向? (1)什么是重定向? (2)如何重定向? 3 管道符以及和它容易混淆的一些符号使用 (1)管道符 | (2)&和&& ...

  2. 谈谈Linux下的数据流重定向和管道命令

    一.标准输入.标准输出.错误输出概述 1.标准输入(stdin)是指令数据的输入,代码为0,使用<或者<<,默认是键盘. 2.标准输出(stdout)是指令执行成功返回的结果,代码为 ...

  3. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

  4. Linux - 重定向与管道

    标准输出重定向 ">" 操作符:覆盖目标文件内容 huey@huey-K42JE:~/huey/linux/cmdline$ date > foo huey@huey- ...

  5. 46 关于Linux的I/O重定向

    I/O重定向是一个过程,这个过程捕捉一个文件.或命令.或程序.或脚本.甚至代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件.或命令.或程序.或脚本. 1.I/O重定 ...

  6. Linux:Day4(上) 文件管理、管道

    文件管理:cp.mv.rm 复制命令:cp cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION] ...

  7. [Linux]基本I/O重定向

    在我们设置定时任务的时候经常会使用标准输出和标准错误输出.这个在Linux是一个非常重要的概念,而且这个很有用.程序应该有数据库的来源端.数据的目的端,以及报告问题的地方,它们被称为标准输入.标准输出 ...

  8. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  9. Linux脚本执行过程重定向

    Linux脚本执行过程重定向 一.bash调试脚本,并将执行过程重定向到指定文件 bash –x  shell.sh 2>&1 | tee shell.log

随机推荐

  1. 第二周PTA笔记 均等笔+旋转骰子+两个日期相差天数

    均等笔 n个人围成一圈,每人有ai支笔.每人可以向左右相邻的人传递笔,每人每次传递一支笔消耗的能量为1.求使所有人获得均等数量的笔的最小能量. 输入格式: 第一行一个整数n ,表示人的个数(30%的数 ...

  2. [bzoj1089]严格n元树

    设f[i]表示深度不超过i的方案数,那么有f[0]=1,$f[i]=f[i-1]^{n}+1$,然后用高精度即可(注意深度恰好为d还要用f[d]-f[d-1]才是答案) 1 #include<b ...

  3. [源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化

    [源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化 目录 [源码解析] PyTorch 分布式(9) ----- DistributedD ...

  4. 使用apt安装docker

    使用apt安装docker # 更新数据源 apt-get update # 安装所需依赖 apt-get -y install apt-transport-https ca-certificates ...

  5. app如何测试

    你的app是如何测试?  考虑UI界面测试,在测试主体的功能模块,考虑异常测试,关机,卡死,重启...,  交互性测试,手机常用操作,打电话,短信..,适配性测试,原来我们的公司就买了华为mate8 ...

  6. 联盛德 HLK-W806 (三): 免按键自动下载和复位

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  7. setoolkit的钓鱼实验

    1.在kali中打开setoolkit 2.在菜单中选择第一个进入社会工程学攻击 3.选择第二个模块属于网站攻击向量 4.选择第五个模块,进行web劫持攻击 5.选择第二个,进行网站克隆 6.发现访问 ...

  8. 文件/目录对比:diff命令

    命令格式 diff [参数] [文件1或目录1] [文件2或目录2] Linux diff命令用于比较文件的差异. diff以逐行的方式,比较文本文件的异同处. 如果指定要比较目录,diff会比较目录 ...

  9. DTOJ 3999: 游戏

    题目描述这个游戏是这样的,你有一个初始序列S ,你每次可以选择一段任意长度的连续区间,把他们+1 再膜k,给定目标序列,你需要尝试用尽量少的操作次数将初始序列变为目标序列.作为一名优秀的OIer,您认 ...

  10. [R报错] Kruskal-wallis test 所有组的层次都必需是有限的

    做了个两组间的Kruskal-wallis检验,出现如下错误: 对应的英文版本错误为: All group levels must be finite is.finite(data$type)一下果然 ...