Я не пробовал mongodb. Но из этого ответа здесь я вижу варианты ps
, как вы упомянули в своем вопросе. Кроме того, вы упомянули только статус службы mongodb
. Однако вы также можете попробовать /etc/init.d/mongod status
.
проверьте либо:
ps -edaf | grep mongo # "ps" flags may differ on your OS
, либо
/etc/init.d/mongod status
, или
service mongodb status
, чтобы узнать, запущен ли mongod.
проверьте файл журнала /var/log/mongo/mongo.log
, чтобы убедиться, что сообщалось о каких-либо проблемах
Вы не сказали,но вы должны вызывать функцию вот так:
find -name *.c
Но подстановка еще не отключена, поэтому оболочка расширяет *.c
перед вызовом. Таким образом, команда find
видит «-имя», за которым следуют три аргумента, таким образом, сообщение об ошибке.
Вы можете использовать обратную косую черту вместо кавычек.
find -name \*.c
Ваша функция отключает подстановку имен файлов, но вы вызываете ее с подстановкой, которую расширяет оболочка (подстановка имен файлов не отключена в оболочке, из которой вы ее вызываете ).
Другими словами, шар в вашей команде
find -name *c
раскрывается перед вызовом вашей функции find
. Это приводит к вызову find
внутри функции, которую утилита не может понять.
Это можно решить, вызвав функцию с аргументом в кавычках:
find -name "*c"
но обратите внимание, что теперь эта функция совершенно бесполезна, поскольку она просто копирует команду, которую вы уже набрали.
В вдобавок к тому, что он бесполезен, это тоже неправильно. Поскольку $@
не заключен в кавычки в вашем коде, он будет разделять аргументы на пробелы (по умолчанию ). Это означает, что вы не можете использовать, например.
find -name "* *"
, чтобы найти имена с пробелами в них.
Также обратите внимание, что из-за eval
оболочка будет выполнять раскрытие содержимого $@
. Это означает, что
find -name '$(echo hello)'
не найдет файлы с именем $(echo hello)
, но hello
.
Другое дело, что если вызывающая оболочка уже использует set -f
, то это будет отключено функцией.
Давайте вместо этого создадим полезную функцию. Функция, которая ищет количество шаблонов имен файлов, например:
myfind "*.c" "*.txt" "* *"
Мы хотим, чтобы приведенная выше команда возвращала пути, которые заканчиваются на .c
или .txt
или содержат пробелы.
Вот функция:
myfind () {
# Replace each positional parameter "$pattern"
# with -o -name "$pattern"
for pattern do
set -- "$@" -o -name "$pattern"
shift
done
shift # shift off the initial "-o"
find. "$@"
}
Учитывая приведенный выше вызов функции, она завершится выполнением
find. -name '*.c' -o -name '*.txt' -o -name '* *'
Если вам удобнее использовать bash
массивы для списков, и вы не возражаете против того, чтобы печатать еще немного:
myfind () {
local -a args
# Build the argument list for find by adding
# -o -name "$pattern"
# for each positional parameter
for pattern do
args+=( -o -name "$pattern" )
done
args=( "${args[@]:1}" ) # remove the initial "-o"
find. "${args[@]}"
}