Эхо переменной Bash 0

La implementación de RedHat (y cualquier )NFS v3 utilizará un identificador de archivo en la mayoría de las operaciones, en lugar de un nombre. Si no ve el identificador con wireshark, siga expandiendo partes del paquete hasta que lo encuentre. Algunos paquetes contendrán un identificador para el objeto de destino y para su directorio principal, así que obsérvelo detenidamente. En las LLAMADAS NFS, la línea de "Información" de resumen de wireshark a menudo mostrará un hash que es una versión reducida del identificador. El problema es que sin "otra información" o acceso a la máquina en cuestión (, por ejemplo, si está analizando los paquetes de otra persona ), el identificador del archivo no es una información muy útil.

Puede buscar los paquetes anteriores para el identificador o su hash, y esperar que pueda encontrar algún lugar donde el mismo identificador de archivo esté presente de una manera que lo asocie con un nombre de archivo. Por ejemplo, una búsqueda dará como resultado una respuesta que contiene el identificador del archivo. O la respuesta de una operación de creación mostrará el identificador del objeto que se acaba de crear. O si está presente una secuencia "readdirplus" y los paquetes no se truncaron, es probable que pueda obtener la información desde allí.

O, por supuesto, en muchos casos, el montaje nfs ha estado en uso durante un tiempo, y la llamada original que hizo que el cliente "aprendiera" el identificador que va con el nombre podría haber desaparecido hace mucho tiempo. Entonces, si puede controlar y planificar los pasos para la reproducción de problemas y la recopilación de paquetes, puede ser útil comenzar sin el montaje nfs presente. Luego inicie tcpdump. Luego realice el montaje. Luego reproduzca el problema nfs. De esa manera, está seguro de capturar paquetes que conectarán todos los identificadores de archivos con nombres de archivos.

0
11.06.2019, 16:49
1 ответ

Потому что всегда есть ${RESULT}. Видите ли, вы помещаете ${SERVICE} в командную строку, когда ищете ее, чтобы она всегда находилась. Посмотрите, как мы можем этого избежать:

cat search.sh

SERVICE="$1"
RESULT=$(ps auxw | grep ${SERVICE} | grep -v 'grep\|search.sh' | awk '{s+=$3} END {print s}')
if [ -z "$RESULT" ]; then
   echo "-1"
else
   echo $RESULT
fi

Я добавил название скрипта в grep -v. В противном случае всегда существует процесс, называемыйsearch.sh ${SERVICE}

Однако это далеко не лучшая практика. Я так понимаю, вам нужна текущая загрузка ЦП процесса по имени? Рассмотрим следующее:

SERVICE="$1"
RESULT=`pgrep ${SERVICE}`
if [ -z "$RESULT" ]; then
   echo "-1"
else
   for proc in ${RESULT}; do ps -p ${proc} -o %cpu | tail -n +2; done
fi
3
28.01.2020, 02:22

Теги

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