linux-管道


简洁一句话概括: 把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入

命令 A | 命令 B
// 也可以多次使用
命令 A | 命令 B | 命令 C  

管道概念简单,但是用法却又很多种,还需要在实践中不断的积累

管道使用实例:

1. 修改密码

在修改用户密码时,一般需要输入两次密码以确认,但是这在编写自动化修改密码脚本的时候将成为一个非常致命的缺陷,通过吧管道符和passwd命令的–stdin参数相结合,就可以用 一条命令来完成密码重置操作

# useraccount为账户名
echo "useraccount" | passwd --stdin root

把echo返回的字符useraccount设置为用户root的密码
输出如下:

Changing password for user root.
passwd: all authentication tokens updated successfully

passwd 作为普通用户和超级权限用户都可以运行,
但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;
如果root用户运行passwd ,可以设置或修改任何用户的密码;
Linux passwd命令的 --stdin :这个选项用于 从标准输入 管道读入新的密码
注:这种方式虽然简单,但是通过history命令可以查到用户的密码,所以不安全

2.文件内容转化

例如;将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中

cat /etc/issue |tr [a-z] [A-Z] > /tmp/issue.out

3. 将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中

who | tr 'a-z' 'A-Z' > /tmp/who.out

类似的将用户最近操作所执行的语句(转为大写)保存在 historyExecute.txt 文件中。

history | tr 'a-z' 'A-Z' > /tmp/who.out

4. 发送邮件

echo –e会对后面的\n进行解释,不然只会当成字符处理。字符要加单引号,避免出现问题。$USER不能加引号,\n必须在引号里。Uname –a是个命令,所以我们要加反引号。

给root发邮件

echo -e 'Hello, I am '$USER ',The system version is here,please help me to check it,thanks!\n' `uname -a`|mail -s "help" root

5. 计算1+2+3+…+99+100的总和

linux 中有个计算器,叫bc

  1. 终端下 输入bc 即可进入计算模式如下:
    linux-管道
  2. 利用管道将计算的式子 传给 bc (bc会直接计算),如下:
    linux-管道
    所以 bc 是可以直接计算传给他的字符串的。
    故:
    第一步: 用echo {1…100} 生成1到100个数 (中间空格隔开的)
    linux-管道
    第二步: 用tr 将上述得出的结果 把空格换为 +(加号)
 echo {1..100} | tr ' ' '+'

得到如下:
linux-管道
第三部: 将上步的结果 传给bc即可

echo {1..100} | tr ' ' '+' | bc

得到最终结果:
linux-管道
管道使用例子待续, 实践中 如有好的例子继续补充。。