cat (1) не «печатает» файлы, это инструмент, который берет последовательность входных файлов и объединяет их в выходные данные.
Что делает файл cat
сам по себе, так это берет содержимое файла
и выводит его на терминал. Если файл
содержит текст, терминал покажет его как таковой. Файлы PDF не являются текстовыми и (как и любые другие файлы) отображаются как тарабарщина. Каждому типу файла нужна определенная программа для его понятного отображения.
Сегодня принтеры часто используют входной PDF-файл для отображения на странице, или инструменты, используемые для печати, автоматически переводят во все, что принимает принтер.
Возможно, что-то вроде этого:
who | awk '{print $1}' | grep -f - /etc/passwd
awk '{print $1}'
выведет имена пользователей, которые передаются в grep с помощью опции -f -
, указывающей ему брать шаблон grep из stdin. Это выведет /etc/passwd
запись о вошедших пользователях:
aliaa@host:~$ who aliaa tty7 2015-03-10 13:02 root tty1 2015-03-10 18:19 aliaa pts/0 2015-03-10 14:39 (:0) aliaa@host:~$ who | awk '{print $1}' | grep -f - /etc/passwd root:x:0:0:root:/root:/bin/bash aliaa:x:1000:1001:Alaa Ali,,,:/home/aliaa:/bin/bash
Да, вы можете создать такой сценарий:
for who_user in $(who|cut -f1 -d' '|uniq)
do
getent passwd|grep ${who_user}
done
Если у вас достаточно прав, вы можете найти пароль в своем теневом файле следующим образом:
for who_user in $(who|cut -f1 -d' '|uniq)
do
cat /etc/passwd|grep ${who_user}
cat /etc/shadow|grep ${who_user}
done
Как упоминал @John WH Smith, grep не нужен:
for who_user in $(who|cut -f1 -d' '|uniq)
do
getent passwd ${who_user}
done
Спасибо, Джон