`

鸟哥的linux私房菜(数据流重定向)

阅读更多
1、数据流重导向
标准输入(stdin) :代码为 0 ,使用 < 或 << ;
标准输出(stdout):代码为 1 ,使用 > 或 >> ;
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

一串指令的最左边一定是指令,而在 >,2>,< 右边的,必须是档案或装置才行!

• 1> :是将正确的数据输出到指定的地方去
• 2> :是将错误的数据输出到指定的地方去
[dmtsai@linux ~]$ find /home -name testing > list_right 2> list_error

如果我只要正确的数据,错误的信息我不要了。
[dmtsai@linux ~]$ find /home -name testing > list_right 2> /dev/null

如果我要将数据都写到同一个档案中。
[dmtsai@linux ~]$ find /home -name testing > list 2> list <==错误写法
[dmtsai@linux ~]$ find /home -name testing > list 2>&1 <==正确写法

那个 < 又是什么呀!?
[root@linux ~]# cat > catfile
testing
cat file test
<==这里按下 [ctrl]+d 结束输入来离开!

[root@linux ~]# cat > catfile < somefile

[root@linux ~]# cat > catfile <<eof
> This is a test testing
> OK now stop
> eof <==输入这个玩意儿,嘿!立刻就结束了!

[root@linux ~]# sync; sync; shutdown -h now

当前面的指令执行结果为正确 (例如:仅有 standard output 时),就可以接着执行后续的指令, 否则就予以略过!
[root@linux ~]# ls /tmp && touch /tmp/testingagin

那个 || 刚好完全跟 && 相反,当前一个指令有错误时,在 || 后面的指令才会被执行!
[root@linux ~]# ls /tmp/vbirding || touch /tmp/vbirding

以 ls 测试 /tmp/vbirding 是否存在,若存在则显示 "exist" ,若不存在,则显示 "not exist"!
ls /tmp/vbirding && echo "exist" || echo "not exist"

2、一些基本的管线命令指令介绍:
撷取命令: cut, grep
• cut
[root@linux ~]# cut -d'分隔字符' -f fields
[root@linux ~]# cut -c 字符区间
参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段讯息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;

• grep
[root@linux ~]# grep [-acinv] '搜寻字符串' filename
参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

排序命令: sort, wc, uniq
• sort
[root@linux ~]# sort [-fbMnrtuk] [file or stdin]
参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(预设是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,预设是 tab 键;
-k :以那个区间 (field) 来进行排序的意思;

• uniq
[root@linux ~]# uniq [-ic]
参数:
-i :忽略大小写字符的不同;
-c :进行计数

• wc
[root@linux ~]# wc [-lwm]
参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
范例二:我知道使用 last 可以输出登入者,但是 last 最后两行并非账号内容,
那么请问,我该如何以一行指令串取得这个月份登入系统的总人次?
[root@linux ~]# last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l
# 由于 last 会输出空白行与 wtmp 字样在最底下两行,因此,我利用
# grep 取出非空白行,以及去除 wtmp 那一行,在计算行数,就能够了解啰!

双向重导向: tee
[root@linux ~]# tee [-a] file
参数:
-a :以累加 (append) 的方式,将数据加入 file 当中!

字符转换命令: tr, col, join, paste, expand
• tr
[root@linux ~]# tr [-ds] SET1 ...
参数:
-d :删除讯息当中的 SET1 这个字符串;
-s :取代掉重复的字符!

DOS下面会自动在每行行为加入^M这个断行符号,这个时候我们可以使用这个tr来将^M去除。^M可以使用\r来替代
cat /etc/passwd | tr -d '\r' >/root/passwd.linux

• col
[root@linux ~]# col [-x]
参数:
-x :将 tab 键转换成对等的空格键

• join
[root@linux ~]# join [-ti12] file1 file2
参数:
-t :join 预设以空格符分隔数据,并且比对『第一个字段』的数据,
如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i :忽略大小写的差异;
-1 :这个是数字的 1 ,代表『第一个档案要用那个字段来分析』的意思;
-2 :代表『第二个档案要用那个字段来分析』的意思。
范例一:用 root 的身份,将 /etc/passwd 与 /etc/shadow 相关数据整合成一栏
[root@linux ~]# join -t ':' /etc/passwd /etc/shadow

范例二:我们知道 /etc/passwd 第四个字段是 GID ,那个 GID 记录在
/etc/group 当中的第三个字段,请问如何将两个档案整合?
[root@linux ~]# join -t ':' -1 4 /etc/passwd -2 3 /etc/group

• paste
[root@linux ~]# paste [-d] file1 file2
参数:
-d :后面可以接分隔字符。预设是以 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的资料的意思。
范例一:将 /etc/passwd 与 /etc/shadow 同一行贴在一起
[root@linux ~]# paste /etc/passwd /etc/shadow

范例二:先将 /etc/group 读出(用 cat),然后与范例一贴上一起!且仅取出前三行
[root@linux ~]# cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3

• expand
这玩意儿就是在将 [tab] 按键转成空格键

分割命令: split
[root@linux ~]# split [-bl] file PREFIX
参数:
-b :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分割。

我的/etc/termcap七百多k,若想分成300KB一个文件怎么办?

cd /tmp;split -b 300k /etc/termcap termcap
ll -l termcap*
......termcapaa
......termcapab

如何将上面的小文件合成一个文件
cat termcap* >>tercapback

将使用ls -al /输出 的信息中,每10行记录成一个文件
ls -al / |split -l 10 - lsroot
结果
wc -l lsroot*
.........

参数代换: xargs
范例一:将 /etc/passwd 内的第一栏取出,仅取三行,使用 finger 这个指令将每个
账号内容秀出来
[root@linux ~]# cut -d':' -f1 < /etc/passwd |head -n 3| xargs finger

范例二:同上,但是每次执行 finger 时,都要询问使用者是否动作?
[root@linux ~]# cut -d':' -f1 < /etc/passwd |head -n 3| xargs -p finger

范例三:将所有的 /etc/passwd 内的账号都以 finger 查阅,但一次仅查阅五个账号
[root@linux ~]# cut -d':' -f1 < /etc/passwd | xargs -p -n 5 finger

范例四:同上,但是当分析到 lp 就结束这串指令?
[root@linux ~]# cut -d':' -f1 < /etc/passwd | xargs -p -e'lp' finger

关于减号 - 的用途
[root@linux ~]# tar -cvf - /home | tar -xvf -
上面这个例子是说:『我将 /home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不需要使用 file 了!这是很常见的例子喔!注意注意!
分享到:
评论

相关推荐

    《鸟哥的Linux私房菜》基础篇-知识整理-读后感

    《鸟哥的Linux私房菜》是一本针对Linux初学者的经典教材,旨在为读者提供全面而深入的Linux基础知识。本书内容覆盖广泛,包括从计算机基础知识到Linux操作系统的核心概念,再到实际操作技能的培养,旨在帮助读者顺利...

    鸟哥的 Linux 私房菜第11章-认识与学习 BASH1

    在Linux中,Shell不仅是一个命令执行环境,它还提供了丰富的功能,如变量设定、数据流重定向、命令别名、历史命令记录等。 1. **硬件、核心与 Shell** 在计算机系统中,硬件执行实际的物理操作,而内核(Kernel)...

    2023年全国大学生英语竞赛样题(C类)样题答案及听力原文.pdf

    2023年全国大学生英语竞赛样题(C类)样题答案及听力原文

    出纳考核表.xls

    出纳考核表

    基于多种天气因素的光伏电站太阳能辐射量预测系统-采用人工神经网络与离线优化算法,MATLAB代码:考虑多种天气条件下光伏电站太阳能辐射量预测 关键词:辐射量预测 光伏预测 多种天气因素 参考文档:

    基于多种天气因素的光伏电站太阳能辐射量预测系统——采用人工神经网络与离线优化算法,MATLAB代码:考虑多种天气条件下光伏电站太阳能辐射量预测 关键词:辐射量预测 光伏预测 多种天气因素 参考文档:《Solar Radiation Prediction and Energy Allocation for Energy Harvesting Base Stations》 仿真平台:MATLAB+CPLEX 平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是如何利用预测光伏电站太阳能辐射量的问题,利用人工神经网络对对其内太阳辐射量进行预测,并对无云天气以及多云天气进行了分别讨论,与线性模型相比该模型具有更好的性能,除此之外,代码还研究了太阳能的分配问题,采用离线优化算法和四种在线启发式算法分别进行分配策略的优化,并利用太阳辐射数据评估了算法的性能。 该代码适合新手学习以及在此基础上进行拓展,代码质量非常高,出图效果极佳 ,核心关键词: 1. 光伏电站太阳能辐射量预测 2. 多种天气因素 3. 人工神经网络 4. 预测模型 5. 线性

    数据结构实验实习指导书(c语言)

    数据结构实验实习指导书(c语言)

    游戏 生存小游戏.exe

    "lyh不会打代码"生存小有戏改版

    站群系统/泛目录站群源码/泛站群cms系统【小说泛目录站群源码】

    站群系统/泛目录站群源码/泛站群cms系统【小说泛目录站群源码】 效果截图和演示https://www.lxsjfx.cn/3181.html 绿茶小说站群2.x-秒收隔天速出权重-小说流量稳定收割机-精品轻量级PHP站群系统站群系统,小说行业专用引流精品站群,绿茶小说站群为独立站群系统(无需依托CMS),独立的整篇小说优化内容库(拒绝句子拼凑),模板自适应PC端和移动端,流量一起做! 1、绿茶小说站群为独立站群系统(无需依托CMS) 2、对域名要求不高,百元域名均可操作 3、独立的首页、列表页、小说阅读页 4、独立的整篇小说优化内容库(拒绝句子拼凑) 5、可自定页面后缀(html、shtml、xml…..) 6、拒绝全站404跳转到内容页 7、还有强大的网站XML地图功能,便于链接提交 8、模板自适应PC端和移动端,流量一起做! 站群系统/泛目录站群源码/泛站群cms系统【小说泛目录站群源码】

    IQC检验员(来料检验员)绩效考核表.xls

    IQC检验员(来料检验员)绩效考核表

    2024年全球AI应用趋势年度报告

    2024年全球AI应用趋势年度报告

    安全生产绩效考核表.doc

    安全生产绩效考核表

    04-【标准制度】公司 KPI 绩效考核流程.docx

    04-【标准制度】公司 KPI 绩效考核流程

    第14讲:深入理解指针(4).pdf

    第14讲:深入理解指针(4)

    考虑用户舒适度的冷热电多能互补综合能源系统优化调度模型:结合PMV衡量与碳排放交易机制的MATLAB仿真实现,考虑用户舒适度的冷热电多能互补综合能源系统优化调度 MATLAB代码:考虑用户舒适度的冷热

    考虑用户舒适度的冷热电多能互补综合能源系统优化调度模型:结合PMV衡量与碳排放交易机制的MATLAB仿真实现,考虑用户舒适度的冷热电多能互补综合能源系统优化调度 MATLAB代码:考虑用户舒适度的冷热电多能互补综合能源系统优化调度 关键词:用户舒适度 综合能源 PMV 优化调度 参考文档:《冷热电气多能互补的微能源网鲁棒优化调度》基础模型加舒适度部分模型; 仿真平台:MATLAB+yalmip+cplex 主要内容:代码主要做的是考虑用户舒适度的冷热电多能互补综合能源系统优化调度模型,在传统的冷热电联供型综合能源系统的基础上,进一步考虑了热惯性以及用户的舒适度,并用预测平均投票数PMV对用户的舒适度进行衡量,且通过改变PMV的数值,可以对比不同舒适度要求对于综合能源系统调度结果的影响。 同时,代码还补充性的考虑了碳排放交易机制,并设置经济性最优以及碳排放最优两种对比场景,从而丰富算例,效果非常明显。 使用matlab+yalmip+cplex进行代码的 ,考虑用户舒适度; 综合能源系统; PMV; 优化调度; 冷热电多能互补; 碳排放交易机制。,考虑用户舒适度与碳排放交易的冷热电多能

    基于ANSI转义码在Xshell脚本中的光标操作与应用实例:进度条制作详解

    内容概要:本文详细阐述了利用ANSI转义码在Xshell脚本中进行光标的灵活操控方法。介绍了从光标的隐藏、定位(特定行/列)、保存位置、复位、清除以及显示控制的基本命令,重点描述了如何使用以上提到的功能构建实用的UI组件——文本模式下工作的进度条。文中提供的简单实例演示了一个完整的循环逻辑,它能动态刷新视图,在每一次迭代中根据程序实际进展更新屏幕上的表现形式,同时保持界面美观性和易读性。并且提到由于不同的终端可能有不同的兼容情况,脚本的跨环境行为可能存在细微差别。 适合人群:初学者至中级水平的技术爱好者或者软件开发者,尤其是希望深入掌握Linux环境下命令行工具使用者。 使用场景及目标:① 学习并理解Xshell脚本里涉及的ANSI转义码概念和技术点,从而增强对终端界面元素(如菜单、提示符等)的操作技能;② 掌握通过程序手段构造动态变化的CLI应用程序技巧,比如实时跟踪长时间任务的状态; 阅读建议:本文不仅包含了具体命令的学习,更展示了它们是如何组合起来创造复杂视觉反馈机制的案例研究。对于想进一步探索终端开发领域的程序员而言,这无疑提供了很好的入门指引材料。考虑到各种操作系统上支持度的问题,在测试代码之前应当确认自己的工作平台已经正确配置好。

    达梦数据库优化指南:涵盖回表问题、性能调优、SQL执行计划优化技术详解及应用场景

    内容概要:该文档详细探讨了针对达梦数据库的各种性能优化技术和处理方法。具体包括回表问题及其解决措施如覆盖索引和FAST POOL机制;变量窥探、统计数据收集优化方法,例如设置统计桶数量和采样子表数目;视图上拉、JOIN优化、EXISTS与NOT EXISTS子查询重写策略;分区裁剪和多KEY哈希等方面的深入探讨,提供了多个具体的优化技巧,旨在帮助用户有效提升SQL执行性能,并解决了多种可能导致性能下降的关键因素。 适合人群:数据库管理员、运维工程师及具有一定经验的数据开发人员等,尤其是负责使用和维护基于达梦数据库系统的技术团队成员。 使用场景及目标:适用于希望通过改善查询速度来提高系统响应时间的专业人士;需要处理大型数据库或复杂查询的任务;或是正在寻找改进现有数据库架构的方法的机构。它还特别针对那些希望确保最优硬件资源利用率的人群。 其他说明:本文档不仅介绍了理论性的背景知识和技术细节,还包括了大量的实际案例演示和参数调整建议,方便读者理解和实践这些优化方法。此外,针对每种优化策略提供了详细的指导,使得即使是对某些高级特性较为陌生的读者也能顺利掌握关键技能。

    54 -营销部经理绩效考核表1.xlsx

    54 -营销部经理绩效考核表1

Global site tag (gtag.js) - Google Analytics