1.哪些是linux管线:一个命令的输出(标准输出)被直接“用管线输送”到另一个命令的输入(标准输入)中,因而构成了linux(unix)的管线(pipe)——--摘自Redhatlinux用户基础。
2.怎样创建管线:为了用bash创建管线,用一个垂直的小节线|把这两个命令联接上去.
3.进程组:联接在管线的所有进程被称为进程组.
4.几个事例
例1.用户r正在找寻/etc目录下最大的文件,他先编撰了find命令,列举所有大小超过100k字节的文件red hat linux 下载,如下:
find /etc -size +100k 2> /dev/null
直接结果如下:
/etc/ImageMagick-6/mime.xml
/etc/timidity/timgm6mb.cfg
/etc/ssl/certs/ca-certificates.crt
/etc/brltty/Contraction/zh-tw.ctb
/etc/brltty/Contraction/zh-tw-ucb.ctb
/etc/brltty/Contraction/ko.ctb
/etc/cups/ppd/CUPS-BRF-Printer.ppd.O
/etc/cups/ppd/CUPS-BRF-Printer.ppd
/etc/yozoXpack/902CCC39-02E3-4814-AF71-C25E6C685CB2/dispose.jar
find没有依照特定的次序列举文件,如今用户r要对昨天的输出结果根据英语字母表排序——把find命令的输出用管线输出到sort命令的标准输入中,执行如下
r@r:~$ find /etc/ -size +100k 2> /dev/null | sort
/etc/brltty/Contraction/ko.ctb
/etc/brltty/Contraction/zh-tw.ctb
/etc/brltty/Contraction/zh-tw-ucb.ctb
/etc/cups/ppd/CUPS-BRF-Printer.ppd
/etc/cups/ppd/CUPS-BRF-Printer.ppd.O
/etc/ImageMagick-6/mime.xml
/etc/ssl/certs/ca-certificates.crt

/etc/timidity/timgm6mb.cfg
/etc/yozoXpack/902CCC39-02E3-4814-AF71-C25E6C685CB2/dispose.jar
r@r:~$
注意:sort命令默认是从标准输入读取数据的,此处借助了管线|,致使别的程序的标准输出传递给sort,作为sort的输入,充分体验了,管线|就是把一个程序的标准输出输送到另一个程序的标准输入中。
5.grep:grep拿来搜索和提取富含指定文本串的行。
grep命令的第一个参数是被搜索的字符串red hat linux用户基础,假如grep只有一个参数(被搜索的字符串),这么grep将把标准输入当作要操作的数据源。
例如用户r要复印/etc/passwd所有富含”root“的行,
比如:
r@r:~$ grep root
today ,i have learned that root can do much more things than general guest
today ,i have learned that root can do much more things than general guest
ok ,root is a super guest.
ok ,root is a super guest.
也可以指定搜索的文件取代标准输入,比如
r@r:~$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:118:124:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
grep很重要的应用是和管线结合嵌入式linux培训,用grep过滤查找结果(促使查找结果中查找和提取富含指定文本的行,也就是从查找结果中只复印富含指定文本的行)
比如,从计算机中查找富含字符串sales的文件,再从结果中过滤出富含data的行,如下
r@r:~$ find / -name *sales* 2> /dev/null | grep data
/home/r/coml/c++/11/11.3/11.3.1/5/sales_data.h
/home/r/coml/c++/11/11.3/11.3.1/5/sales_data.h.gch
注:前面的这句red hat linux用户基础,由于没有给grep指定搜索的文件,所以grep把标准输入当作数据源,刚好是find的结果用管线传递给他了
再例如,用户r想晓得root出现在系统配置文件的什么地方,所以他执行如下命令:
r@r:~$ grep root /etc/* 2> /dev/null
/etc/anacrontab:HOME=/root
/etc/anacrontab:LOGNAME=root
/etc/bash.bashrc:# set variable identifying the chroot you work in (used in the prompt below)
/etc/bash.bashrc:if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
/etc/bash.bashrc: debian_chroot=$(cat /etc/debian_chroot)
/etc/bash.bashrc: PS1='${debian_chroot:+($debian_chroot)}u@h:w$ '
/etc/bash.bashrc: To run a command as administrator (user "root"), use "sudo
follow is snip......
....................
....................
....................
结果太多了,他只想要结果中富含conf的行,所以对结果用管线和grep进行过滤:
r@r:~$ grep root /etc/* 2> /dev/null | grep conf
/etc/ca-certificates.conf:mozilla/Comodo_AAA_Services_root.crt
/etc/ca-certificates.conf.dpkg-old:mozilla/Comodo_AAA_Services_root.crt
/etc/e2scrub.conf:# recipient=root
/etc/fuse.conf:# Set the maximum number of FUSE mounts allowed to non-root users.
/etc/fuse.conf:# Allow non-root users to specify the allow_other or allow_root mount options.
/etc/hdparm.conf:## the keyword 'command_line' are not run until after the root filesystem
/etc/hdparm.conf:## to run hdparm to set parameters for your root disk, please use the

/etc/logrotate.conf:su root adm
/etc/ltrace.conf:int SYS_chroot(string);
/etc/updatedb.conf:PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
/etc/xattr.conf:xfsroot.* skip # xfs specific; obsolete
6.有效搜索历史记录:
在历史记录中查询富含find的命令:
r@r:~$ history | grep find
1892 find / -name 'sales_data*' >& 1.cc
1894 find / -name "sales_data*" >& 1.cc
1898 find / -name *sales_data* >& 1.cc
1900 find / -name *sales_data* 2>1.cc
1901 find / -name *sales_data* 2> 1.cc
1902 find / -name *sales_data* 2>&1 1.cc
1903 find / -name *sales_data* 2>&1
1904 find / -name *sales_data* 1>&2
1905 find / -name *sales_data* 2>1.cc
1906 find / -name *sales_data* 1>1.cc
1909 find / -name *sales_data* 1>1.cc
1911 find / -name *sales_data* 2>1.cc
1912 find / -name *sales_data* >Y1.cc
1913 find / -name *sales_data* >&1.cc
1914 find / -name *sales_data* 2>1.cc 2>&1
1915 find / -name *sales_data* 2>1.cc 1>&2
1917 find / -name *sales_data* 1>1.cc 2>&1

1920 find / -name *sales_data* 1>1.cc 2>2.cc
1924 find / -name *sales_data* > 1.cc 2>&1
1925 find / -name *sales_data* > 1.cc 2>1
1928 find / -name *sales_data* > 1.cc 2>&1
1930 find /var -user r
1931 find /var -user r 2>/dev/null
1932 find /var -user r 2>/dev/null ls{}
1933 find /var -user r 2>/dev/null exec ls{}
1934 find /var -user r 2>/dev/null;exec ls{}
1935 find /var -user r 2>/dev/null;exec ls -l {}
1936 find /var -user r 2>/dev/null exec ls -l {}
1961 find /etc
1962 find /
1963 find ~
1964 find ~ >>& 1.c
1965 find ~ >& 1.c
1971 find / -name *sales_data* 2> /dev/null | sort
1972 find ~ -user r 2> /dev/null | sort
1973 find ~ -user r -name "*保险*" 2> /dev/null | sort
1998 find /etc -size +100k
1999 find /etc -size +100k 2> /dev/null
2000 find /etc/ -size +100k 2> /dev/null | sort
2001 find /etc/ | grep root
2022 find / -name r | grep r
2023 find / -name r *sale* | grep data

2024 find / -name *sale* | grep data
2025 find / -name *sale* 2> /dev/null | grep data
2026 find / -name *sales* 2> /dev/null | grep data
2035 history | grep find
7.unit哲学,联合使用简单的工具
Linux和Unix一样,基本上以这条基础定理为基础:复杂的系统应当由简单的、专门的、互操作简单的组建构成。根据这条基本定理,许多标准的Linux程序被设计成过滤器,从一个标准源读取数据,操作那些数据,并把结果传送到一个标准的目的地。
用户想瞧瞧/var/log下什么文件富含DHCP这个字符串,所以他执行
r@r:/var/log$ grep DHCP /var/log/* 2>/dev/null
/var/log/syslog.1:Feb 16 17:41:28 r NetworkManager[799]: [1613468488.0950] dhcp-init: Using DHCP client 'internal'
/var/log/syslog.1:Feb 17 11:33:45 r NetworkManager[817]: [1613532825.9667] dhcp-init: Using DHCP client 'internal'
他找到了,原先在syslog.1中,他在syslog.1中继续搜索富含root的字符串,命令如下:
r@r:/var/log$ grep root /var/log/syslog.1
Feb 16 19:50:03 r rtkit-daemon[1176]: Successfully called chroot.
Feb 16 19:50:05 r eks.daemon-controller-manager[930]: --root-ca-file=${SNAP_DATA}/certs/ca.crt
Feb 16 19:50:05 r eks.daemon-controller-manager[930]: + exec /snap/eks/4/kube-controller-manager --kubeconfig=/var/snap/eks/4/credentials/controller.config --service-account-private-key-file=/var/snap/eks/4/certs/serviceaccount.key --root-ca-file=/var/snap/eks/4/certs/ca.crt --cluster-signing-cert-file=/var/snap/eks/4/certs/ca.crt --cluster-signing-key-file=/var/snap/eks/4/certs/ca.key --address=127.0.0.1 --use-service-account-credentials
Feb 16 19:50:06 r eks.daemon-containerd[928]: --root ${
以下省略
snip
..............................
..............................
linux管理员应当熟悉grep,sed,awk,sort和unique,这几个,而且我似乎只晓得一点sort和grep,grep还有更难的部份。本节只是最简单的部份。grep简单查询和利用管线过滤查询信息。