Решение 1:
Вы можете модуль PAM pam_homecheck
Все, что это делает, проверить, существует ли корневой каталог пользователя и отказывается от сессии, если ни один не найден.
проблема, это только доступно в openSUSE, но можно поместить pam_homecheck.so
от загруженных пакетов и зависимости от установки со справкой ldd pam_homecheck.so
.
Решение 2: можно добавить ниже содержания в /etc/bashrc
но Только применимый для входа в систему оболочки/шпаклевки
[[ $HOME == / ]] && { echo "Error: Home Dir not define.."; exit 1; }
Решение 3:
Отклоните, если домашний dir не установил (протестированный и работающий ниже шагов в Ubuntu)
Отклонять WinScp
aptitude install libpam-script
Открытый"/etc/pam.d/common-auth
"с Вашим faorite редактором и добавляют ниже записей
auth optional pam_script.so # add at the last
Открытый"/usr/share/libpam-script/pam_script_auth
"с Вашим любимым редактором и добавляют ниже записей
#!/bin/bash
Pam_home=$(awk -v u=$PAM_USER -F: '($1 == u ){print $6}' /etc/passwd)
if [[ $Pam_home == / ]]; then
echo "Error: Home Dir not define.."
kill -9 $PPID # Force fully kill winscp pid
else
/usr/lib/openssh/sftp-server
fi
Отклонять от входа в систему Shell/шпаклевки
Это отошлет и запустит тот же скрипт от местоположения по умолчанию т.е."/usr/share/libpam-script/pam_script_auth
"Или можно проверить в журналах"tail -f /var/log/auth.log
"
Ваш grep
печатает все строки, содержащие символы без пунктуации. Это не то же самое, что печатать все строки, не содержащие знаков препинания.
Для последнего вам нужен переключатель -v
(печатать строки, не соответствующие шаблону):
grep -v '[[:punct:]]' file.txt
Если по какой-то причине вы не хотите использовать -v
, вы должны убедиться, что вся строка состоит из непунктуационных символов:
grep '^[^[:punct:]]\+$' file.txt
В sed можно сделать что-то вроде:
sed '/[:punct:]]/!d'
В awk можно сделать:
awk '!/[[:punct:]]/'
A Perl
единицы:
perl -nle 'print unless /\p{XPosixPunct}/' file
Это будет соответствовать -!"#$%&'()*+,./:;<=>?@[\]^_`{|}~, которые юникод считает пунктуацией и символами.
или:
perl -nle 'print unless /\p{Punct}/' file
\p{Punct}
только в одном случае совпадает -!"#%&'()*,./:;?@[\]_{}, пропустив $+<=>^`COPY14~, которые юникод считает символами.
perl
по умолчанию используют POSIX-локаль. Если вы не используете perl
, вы должны все установить так LC_ALL=POSIX
, потому что разные локали могут иметь разные знаки препинания, как SAA C
имеет ¢
.