Это не идеально, но будет работать во многих системах. Обратите внимание, что подход pgrep
неоптимален, поскольку имя может немного отличаться, или вы можете передать имя, являющееся подстрокой другого имени, но это только начало.
#!/usr/bin/sh
if systemctl is-active --quiet "$1" > /dev/null 2>&1; then
echo "Running! (systemctl)"
elif service "$1" status 2>&1 | grep -Eq 'is running|: active (running)'; then
echo "Running! (service)"
elif pgrep "$1" > /dev/null 2>&1 ; then
echo "Running (pgrep)"
else
echo "Not running"
fi
Сохраните это как checkIfRunning
и запустите так:
checkIfRunning mongod
В системах, производных от Debian -, таких как Ubuntu, статические библиотеки, поставляемые с системой (, установленные apt
/ dpkg
, а не вручную ), обычно входят в /usr/lib/<target-triplet>/
и имеют суффикс .a
.
Пример на моей системе x86 -64 Debian:
$ ls /usr/lib/x86_64-linux-gnu/*.a
/usr/lib/x86_64-linux-gnu/libBrokenLocale.a
/usr/lib/x86_64-linux-gnu/libFS.a
/usr/lib/x86_64-linux-gnu/libGLU.a
/usr/lib/x86_64-linux-gnu/libICE.a
/usr/lib/x86_64-linux-gnu/libImlib2.a
...
apt-get install <package>-dev
обычно устанавливает такие библиотеки в дополнение к динамическим *.so
.
Однако существуют пакеты, которые устанавливают свои библиотеки непосредственно в /usr/lib
, например. libgraphicsmagick1 -dev .
Компиляторы, такие как gcc
и clang
, также будут устанавливать некоторые «внутренние» библиотеки(libstdc++
и т. д. )в /usr/lib/<compiler-name>/...
, например:
/usr/lib/gcc/x86_64-linux-gnu/6.3.0/libgcc.a
Другие дистрибутивы могут следовать другим соглашениям; например, в rhel/centos все библиотеки разработки относятся к /usr/lib64/
или /usr/lib32/
и предоставляются <package>-devel-*
. При компиляции файла с gcc -v
вы всегда узнаете, где именно компилятор ищет библиотеки, будь то статические или динамические.