我不明白此代码的含义,您能帮我吗?

时间:2019-04-26 10:38:34

标签: linux awk

awk '/\$1|\$6/{print $1}' /etc/shadow   
awk '/$1|$6/{print $1}' /etc/shadow

中文版

awk '/$1|$6/{print $1}' /etc/shadow 查询远程登录的用户信息

enter image description here

1 个答案:

答案 0 :(得分:3)

awk中的运算符用于引用字段。像$expr这样的表达式引用expr返回的字段号。因此,动作{print $1}将打印第一个字段。 (请参见awk POSIX standard

在扩展的正则表达式中使用时,失去了其作为awk运算符的含义,并用作字符串末尾的锚点。 (请参见Regular Expressions POSIX standard

  • ef$将匹配字符串abcdef,但不匹配字符串abcdefgh
  • ef$g永远不会匹配任何内容,因为结尾后无法匹配g

同样,当以\$转义时,在正则表达式中失去其含义。在OP的awk示例中,此规则和上述规则明确区分了/\$1|\$6//$1|$6/

  • /\$1|\$6/将匹配$1$6
  • /$1|$6/永远不会匹配任何内容

/etc/shadow是一个文件,其中包含系统帐户的密码信息和可选的老化信息。该文件的每一行包含9个字段,以冒号(:)分隔。在第一个字段代表用户名的情况下,此处是第二个字段。第二个字段包含以下格式的加密密码(分隔):

$id$salt$encrypted

此处$id告诉您密码使用哪种加密方式:

ID  | Method
─────────────────────────────────────────────────────────
1   | MD5
2a  | Blowfish (not in mainline glibc; added in some
    | Linux distributions)
5   | SHA-256 (since glibc 2.7)
6   | SHA-512 (since glibc 2.7)
     

来源:man crypt 3man shadow 5

从本质上讲,awk行

awk '/\$1|\$6/{print $1}' /etc/shadow

将搜索MD5或SHA-512编码的帐户。

但是生产线有问题。 saltencrypted中的字符来自集合[a–zA–Z0–9./]。这意味着如果$1$6salt开头(1的同上),则可以在字符串中遇到6encrypted。该行应显示为:

awk -F:  '$2 ~ /^\$[1,6]/{print $1}' /etc/shadow

有关此信息的更多信息,