在 linux 中格式化输出
Formatting output in linux
我正在尝试教科书中的问题来复习我的 linux 技能。
问题是:
- 使用/etc/passwd,为您的 Kali 上的所有用户提取用户和主目录字段
shell 设置为 /bin/false 的机器。确保使用 Bash 单行打印
输出到屏幕。输出应类似于下面的清单 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 " [=12=];}'
输出:
The user root
The user daemon
The user games
The user mail
我找不到 pipe/chain 命令的方法,这样我就可以在后面添加“主目录”来格式化我的输出。有人可以帮忙吗?
当您执行 cut -f 1 -d :
时,您将丢弃文件的所有其他字段。
不需要使用cut
,你可以通过-F
选项告诉awk
使用:
作为字段分隔符。
您也不需要 grep
,因为 awk
可以进行模式匹配。您还可以向后检查 - 您正在删除 /bin/false
而不是匹配它。
awk -F: '$NF == "/bin/false" { printf("The user %s home directory is %s\n", , )}' /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
我正在尝试教科书中的问题来复习我的 linux 技能。
问题是:
- 使用/etc/passwd,为您的 Kali 上的所有用户提取用户和主目录字段 shell 设置为 /bin/false 的机器。确保使用 Bash 单行打印 输出到屏幕。输出应类似于下面的清单 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 " [=12=];}'
输出:
The user root
The user daemon
The user games
The user mail
我找不到 pipe/chain 命令的方法,这样我就可以在后面添加“主目录”来格式化我的输出。有人可以帮忙吗?
当您执行 cut -f 1 -d :
时,您将丢弃文件的所有其他字段。
不需要使用cut
,你可以通过-F
选项告诉awk
使用:
作为字段分隔符。
您也不需要 grep
,因为 awk
可以进行模式匹配。您还可以向后检查 - 您正在删除 /bin/false
而不是匹配它。
awk -F: '$NF == "/bin/false" { printf("The user %s home directory is %s\n", , )}' /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