Проблема с выражением grep
-. Он будет соответствовать всем именам каталогов, оканчивающимся на .
, но также кажется, что он каким-то образом искажает вывод, чтобы запутать for
. Есть много вещей, которые вы можете сделать по этому поводу.
Изменение выражения grep на grep -v "^\.$"
, вероятно, будет более правильным (, так как оно будет соответствовать только каталогу .
)и будет работать в вашем циклеfor
-
Как уже указывал @Jesse _b, по многим причинам лучше использовать выражение $(..)
для выполнения. Это решит вашу непосредственную проблему, но не устранит потенциальную ошибку.
Вы можете использовать find
везде, что сделает этот скрипт немного проще:
for dir in `find. -maxdepth 1 -type d ! -name "." -printf "%f "`
do
echo $dir
done
Не то чтобы все эти решения вызвали проблемы, если в именах есть каталоги с пробелами ().
Похоже, вы когда-то apt-get install postgresql
бежали. В этом случае у вас, вероятно, установлена установка PostgreSQL по умолчанию для Debian. Некоторая информация об этом доступна на вики Debian , а некоторая — в /usr/share/doc/postgresql-common/README.Debian.gz
.
Установка Debian поддерживает несколько «кластеров» (, на которых запущены экземпляры PostgreSQL, а также несколько разных версий PostgreSQL ). Чтобы узнать, какие из них находятся на вашем компьютере, запуститеpg_lsclusters
:
$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
Настройка по умолчанию для аутентификации (проверка /etc/postgresql/«version»/«cluster-name»/pg_hba.conf
— скорее всего/etc/postgresql/9.6/main/pg_hba.conf
)для локальных пользователей используется «идентификация» аутентификации, т. е. аутентификация под своим именем пользователя Unix, без запроса пароля, путем проверки того, какой пользователь работает psql
. Итак, чтобы попасть в базу данных, это должно сработать:
$ sudo -u postgres psql template1
Ваша команда не сработала, потому что вы заставили ее использовать TCP-соединение вместо локального сокета Unix (вы по-прежнему можете использовать параметр -p
, но -p 5432
используется по умолчанию, поэтому я его пропустил ). И аутентификация по умолчанию работает только через сокет Unix.
PS :Установка Debian PostgreSQL довольно удобна. Я лично использую его и рекомендую придерживаться его вместо того, чтобы пытаться удалить его и установить вышестоящие пакеты, если вам действительно не нужно (для получения определенной версии PostgreSQL, например ).
Если что-то работает на порту 5432, это не значит, что это postgres. Это может быть что угодно. Если и почему работает postgresql? Бог знает. Это может быть необходимо для какого-то приложения, которое вы установили ранее.
Запустите (как root или sudo):netstat -tlnp
и найдите порт 5432. Если вы видите на вкладке PID/Program name
что-то вроде этого 1361/postgres
, это, скорее всего, postgresql.
Когда был создан пользователь postgres
? Когда постгрес был установлен. Просмотрите файлы истории APT и, возможно, вы сможете найти точный файл для дальнейшего изучения и получить дату -время.
for i in $(ls /var/log/apt/history.log*); do echo $i && zcat $i | grep --color postgresql; done
Как сбросить пароль postgres:ССЫЛКА
РЕДАКТИРОВАНО :Скорее всего вам нужно:sudo -u postgres psql.