首页 > 解决方案 > 在linux中格式化输出

问题描述

我正在尝试从教科书中提出问题来复习我的 linux 技能。

问题是 :

  1. 使用 /etc/passwd,为你的 Kali 机器上的所有用户提取用户和主目录字段,这些用户的 shell 设置为 /bin/false。确保使用 Bash one-liner 将输出打印到屏幕上。输出应该类似于下面的清单 53:
kali@kali:~$ YOUR COMMAND HERE...
The user mysql home directory is /nonexistent
The user Debian-snmp home directory is /var/lib/snmp
The user speech-dispatcher home directory is /var/run/speech-dispatcher
The user Debian-gdm home directory is /var/lib/gdm3
Listing 53 - Home directories for users with /bin/false shells

这是我目前的进展:

┌──(rootkali)-[/home/kali]
└─# cat /etc/passwd | cut -f 1 -d ":" | grep -v '/bin/false' | awk '{print "The user " $0;}' 

输出:

The user root
The user daemon
The user games
The user mail

我找不到管道/链接命令的方法,这样我就可以在后面添加“主目录”来格式化我的输出。任何人都可以帮忙吗?

标签: bashawkformat

解决方案


当您这样做时,您将丢弃文件的所有其他字段cut -f 1 -d :

没有必要使用cut,您可以通过选项告诉awk使用:作为字段分隔符-F

您也不需要grep,因为awk可以进行模式匹配。您还可以向后检查 - 您正在删除/bin/false而不是匹配它。

awk -F: '$NF == "/bin/false" { printf("The user %s home directory is %s\n", $1, $6)}' /etc/passwd

样本输出:

The user bin home directory is /bin
The user daemon home directory is /sbin
The user adm home directory is /var/adm
The user lp home directory is /var/spool/lpd
The user news home directory is /var/spool/news
The user uucp home directory is /var/spool/uucp
The user portage home directory is /var/lib/portage/home
The user nobody home directory is /var/empty
The user systemd-journal-remote home directory is /dev/null
The user systemd-coredump home directory is /dev/null
The user systemd-network home directory is /dev/null
The user systemd-resolve home directory is /dev/null
The user systemd-timesync home directory is /dev/null
The user messagebus home directory is /dev/null
The user sshd home directory is /var/empty
The user polkitd home directory is /var/lib/polkit-1
The user u_app1 home directory is /srv/app/app1
The user nagios home directory is /dev/null
The user icinga home directory is /var/lib/icinga2
The user systemd-oom home directory is /dev/null

推荐阅读