Команда last
дает несколько вывод колонки; вы должны извлечь только первый столбец (используя awk
или cut
) и отсортировать данные так, чтобы uniq
мог выполнять свою работу. Использование обоих uniq -c
и wc -l
является избыточным (выберите один):
uniqueUsers=$(last |cut -f1 -d ' ' | grep -v -e '^\(\|reboot\|wtmp\)$' |sort -u | wc -l)
Если в вашей системе есть strace
, вы можете вывести список файлов, открытых оболочкой, например, используя
echo exit | strace bash -li |& grep '^open'
(-li
означает login shell interactive; используйте только -i
для interactive non-login shell.)
Это покажет список файлов, которые оболочка открыла или пыталась открыть. В моей системе они следующие:
/etc/profile
/etc/profile.d/*
(различные скрипты в /etc/profile.d/
)/home//. bash_profile
(это не удается, у меня нет такого файла)/home//.bash_login
(это не удается, у меня нет такого файла)/home//.profile
/home//. bashrc
/home//.bash_history
(история командных строк; это не скрипт)/usr/share/bash-completion/bash_completion
/etc/bash_completion. d/*
(различные сценарии, обеспечивающие функциональность автозавершения)/etc/inputrc
(определяет привязки клавиш; это не сценарий)Для получения дополнительной информации используйте man strace
.
Возрождение этого вопроса, потому что strace
здесь излишне.
Выполнить bash и вырезать его из вывода. -li
— это интерактивный вход в систему, -x
выводит информацию о внутренних действиях bash, а -c exit
сообщает bash о немедленном завершении работы. Использование sed
для фильтрации команды source
или псевдонима .
.
/bin/bash -lixc exit 2>&1 | sed -n 's/^+* \(source\|\.\) //p'