(Debian 9) Почему на моей локальной машине работает сервер postgresql?

Проблема с выражением grep-. Он будет соответствовать всем именам каталогов, оканчивающимся на ., но также кажется, что он каким-то образом искажает вывод, чтобы запутать for. Есть много вещей, которые вы можете сделать по этому поводу.

  • Изменение выражения grep на grep -v "^\.$", вероятно, будет более правильным (, так как оно будет соответствовать только каталогу .)и будет работать в вашем циклеfor-

  • Как уже указывал @Jesse _b, по многим причинам лучше использовать выражение $(..)для выполнения. Это решит вашу непосредственную проблему, но не устранит потенциальную ошибку.

  • Вы можете использовать findвезде, что сделает этот скрипт немного проще:

    for dir in `find. -maxdepth 1 -type d ! -name "." -printf "%f "`
    do
       echo $dir
    done
    

Не то чтобы все эти решения вызвали проблемы, если в именах есть каталоги с пробелами ().

1
27.09.2019, 20:06
2 ответа

Похоже, вы когда-то 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, например ).

2
27.01.2020, 23:22

Если что-то работает на порту 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.

1
27.01.2020, 23:22

Теги

Похожие вопросы