Linux系统管道命令符

  • 管道命令符“|”的作用是将前一个命令的标准输出作为后一个命令的标准输入,格式为“命令A | 命令B”

以下实例中,通过grep命令搜索关键字“/sbin/nologin”在/etc/passwd中查找所有被系统限制登录的的用户,

通常的思路是

(1) 先找出被限制的用户:grep "/sbin/nologin" /etc/passwd

(2) 计算行数:wc -l

而使用管道命令符则为:

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

实例1:
[root@localhost ~]# grep "/sbin/nologin" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
ods:x:999:998:softhsm private keys owner://var/lib/softhsm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
systemd-bus-proxy:x:998:996:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:997:995:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:996:994:User for polkitd:/:/sbin/nologin
sssd:x:995:993:User for sssd:/:/sbin/nologin
colord:x:994:991:User for colord:/var/lib/colord:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
unbound:x:993:990:Unbound DNS resolver:/etc/unbound:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
saslauth:x:992:76:Saslauthd user:/run/saslauthd:/sbin/nologin
libstoragemgmt:x:991:988:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
geoclue:x:990:987:User for geoclue:/var/lib/geoclue:/sbin/nologin
memcached:x:989:986:Memcached daemon:/run/memcached:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
setroubleshoot:x:988:985::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
chrony:x:987:984::/var/lib/chrony:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
pcp:x:986:983:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
pkiuser:x:17:17:Certificate System:/usr/share/pki:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:985:980::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:984:979:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

现在用管道|合并执行计算符合条件的行数:
[root@localhost
~]# grep "/sbin/nologin" /etc/passwd | wc -l 51 [root@localhost ~]#

 

实例2: 用翻页的形式查看/etc下有哪些目录和文件

[root@localhost ~]# ls -l /etc/ | more 

total 1672
drwxr-xr-x. 3 root root 97 Sep 6 16:24 abrt
-rw-r--r--. 1 root root 16 Sep 6 22:02 adjtime
drwxr-xr-x. 2 root root 112 Sep 6 21:55 akonadi
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Sep 6 13:07 aliases.db
drwxr-xr-x. 2 root root 49 Sep 6 21:51 alsa
drwxr-xr-x. 2 root root 4096 Sep 6 16:28 alternatives
drwxr-xr-x. 3 root root 43 Sep 6 21:56 amanda
-rw-------. 1 root root 541 Mar 31 23:09 anacrontab
-rw-r--r--. 1 root root 391 Jan 22 2014 ant.conf
drwxr-xr-x. 2 root root 6 Jan 22 2014 ant.d
-rw-r--r--. 1 root root 55 Sep 16 2014 asound.conf
-rw-r--r--. 1 root root 1 Jun 22 2015 at.deny
drwxr-xr-x. 2 root root 31 Sep 6 21:54 at-spi2
drwxr-x---. 3 root root 41 Sep 6 21:51 audisp
drwxr-x---. 3 root root 79 Sep 6 22:07 audit
-rw-r--r--. 1 root root 12706 Sep 17 2015 autofs.conf
-rw-------. 1 root root 232 Sep 17 2015 autofs_ldap_auth.conf
-rw-r--r--. 1 root root 795 Sep 17 2015 auto.master
drwxr-xr-x. 2 root root 6 Sep 17 2015 auto.master.d
-rw-r--r--. 1 root root 524 Sep 17 2015 auto.misc
-rwxr-xr-x. 1 root root 1260 Sep 17 2015 auto.net
-rwxr-xr-x. 1 root root 687 Sep 17 2015 auto.smb
drwxr-xr-x. 4 root root 94 Sep 6 16:24 avahi
drwxr-xr-x. 2 root root 4096 Sep 6 16:25 bash_completion.d
-rw-r--r--. 1 root root 2835 May 24 2015 bashrc
drwxr-xr-x. 2 root root 6 Aug 3 01:08 binfmt.d
drwxr-xr-x. 2 root root 41 Sep 6 21:47 bonobo-activation
drwxr-xr-x. 2 root root 12288 Sep 6 21:52 brltty
-rw-r--r--. 1 root root 21929 Oct 30 2014 brltty.conf
drwxr-xr-x. 2 root root 28 Sep 6 21:50 certmonger
-rw-r--r--. 1 root root 676 Sep 21 2014 cgconfig.conf
drwxr-xr-x. 2 root root 6 Sep 21 2014 cgconfig.d
-rw-r--r--. 1 root root 265 Sep 6 21:56 cgrules.conf
-rw-r--r--. 1 root root 131 Sep 21 2014 cgsnapshot_blacklist.conf

--more--

实例3:向pentest用户发一封邮件

[root@localhost ~]# echo "test content" | mail -s "testmail" pentest
[root@localhost ~]# su - pentest
[pentest@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/pentest": 1 message 1 new
>N  1 root                  Thu Sep  8 10:56  18/624   "testmail"
& 1
Message  1:
From root@localhost.localdomain  Thu Sep  8 10:56:32 2016
Return-Path: <root@localhost.localdomain>
X-Original-To: pentest
Delivered-To: pentest@localhost.localdomain
Date: Thu, 08 Sep 2016 10:56:32 +0800
To: pentest@localhost.localdomain
Subject: testmail
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R

test content

& 

实例4:使用非交互式方式更改pentest用户密码为toor

[root@localhost ~]# echo "toor" | passwd --stdin pentest
Changing password for user pentest.
passwd: all authentication tokens updated successfully.

 

### Linux 管道命令符的功能 Linux 管道命令符 `|` 是一种用于连接多个命令的机制,允许前一个命令的标准输出(stdout)作为后一个命令的标准输入(stdin)。这种特性显著增强了 Linux 命令行的灵活性和功能性[^1]。通过管道,用户可以将多个简单命令组合成复杂的操作流,从而实现高效的数据处理[^2]。 ### 错误处理与注意事项 需要注意的是,管道本身并不直接处理命令执行中的错误。如果管道中的某个命令失败,可能会导致整个命令序列中断,或者后续命令接收到无效或不可预测的数据。因此,在使用管道时,需要仔细考虑错误处理策略[^3]。 ### 使用示例 以下是一些常见的 `|` 管道使用示例: #### 示例 1:显示文件内容并分页 ```bash cat student.txt | more ``` 此命令首先使用 `cat` 显示 `student.txt` 文件的内容,然后通过 `more` 指令对内容进行分页处理[^5]。 #### 示例 2:过滤包含特定关键字的行 ```bash ls -l /etc | grep "passwd" ``` 此命令列出 `/etc` 目录下的所有文件,并通过 `grep` 过滤出包含关键字 `passwd` 的行[^5]。 #### 示例 3:统计目录中文件的数量 ```bash ls -1 | wc -l ``` 此命令列出当前目录中的所有文件,并通过 `wc -l` 统计文件的总行数,即文件数量。 #### 示例 4:提取特定字段 ```bash cat /etc/passwd | cut -d: -f1 ``` 此命令读取 `/etc/passwd` 文件的内容,并通过 `cut` 提取以冒号 `:` 分隔的第一列数据,通常是用户名[^5]。 #### 示例 5:结合 `xargs` 执行复杂操作 ```bash echo "file1 file2 file3" | xargs -n 1 cp /destination/ ``` 此命令将字中的每个文件名传递给 `cp` 命令,逐一复制到目标目录 `/destination/` 中[^4]。 ### 注意事项 - 管道连接的命令必须能够接受标准输入和输出。 - 如果命令链中某一步失败,可能会影响后续步骤的结果。 - 在设计命令链时,建议考虑错误处理逻辑,确保数据流的完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值