Как разрешить Netcat выполнить команду после завершения передачи файла ?

Этот раздел имеет тип «Linux LVM», поэтому предположительно это физический том LVM. Для проверки используйте файл -s / dev / sdd1 .

Запустите команду pvs , чтобы увидеть сводку физических томов, доступных в вашей системе, или pvdisplay , чтобы увидеть более подробную информацию. Если вы считаете, что некоторые физические тома присутствуют, но не обнаружены, запустите pvscan , чтобы просканировать все подключенные диски на предмет потенциальных томов LVM.

В столбце VG вывода pvs вы видите группу томов, к которой принадлежит физический том. Если группа томов распределена по нескольким физическим томам, должны присутствовать все физические тома (кроме соответствующих конфигураций RAID). Запустите vgs , чтобы просмотреть сводку доступных групп томов, или vgdisplay , чтобы просмотреть более подробную информацию.

Доступ к содержимому областей LVM осуществляется через логические тома. Запустите lvs , чтобы увидеть сводку доступных групп томов, или lvdisplay , чтобы увидеть более подробную информацию.Для доступа к логическому тому он должен быть активным, о чем lvs сообщает с помощью a в столбце «Attr». Если том не был активирован автоматически, сделайте это с помощью lvchange -ay mygroup / myvolume , где mygroup - имя группы томов, а ] myvolume - имя логического тома. Вы также можете использовать vgchange -ay mygroup , чтобы активировать все логические тома в группе.

Чтобы смонтировать активный логический том, обратитесь к нему по пути к устройству: / dev / mapper / mygroup - myvolume или / dev / mygroup / myvolume .

5
27.05.2018, 15:24
1 ответ

Necesita alguna forma para que el extremo receptor reconozca el final del archivo transferido. Con cat file - | ncen el lado de envío, el flujo de datos a través de la canalización no hará ninguna separación entre los contenidos del archivo, y todo lo que el usuario escriba en la terminal(cat -lee la terminal ). Además, por defecto, netcat no reacciona a un EOF en su entrada, pero podemos usar -qpara que envíe el EOF.

Entonces, el script de recepción podría ser algo como esto:

#!/bin/bash
filename=$1
cat > "$filename"

hash=$(shasum "$filename" |sed -e 's/.*//')
printf "received file \"%s\" with SHA-1 hash %s\n" "$filename" "$hash"

El catlee la entrada hasta EOF, guardando el archivo. Lo que sigue, se ejecuta después de recibir el archivo. Aquí, el script devuelve el hash SHA -256 de los datos que recibió.

Luego, en el lado receptor, ejecute:

$ nc.traditional -l -p 12345 -c "./receivefile.sh somefilename"

y en el lado emisor:

$ cat sourcefile | nc.traditional -q 9999 localhost 12345
received file "somefilename" with SHA-1 hash 3e8a7989ab68c8ae4a9cb0d64de6b8e37a7a42e5

La secuencia de comandos anterior toma el nombre del archivo como argumento, por lo que usé -cen lugar de -e, pero, por supuesto, también puede redirigir la salida de ncal archivo de destino, como lo hizo en la pregunta.


Si también desea enviar el nombre del archivo desde el lado de envío, puede hacer algo como esto en el lado de recepción:

#!/bin/bash
read -r filename
[[ $filename = */* ]] && exit 1       # exit if the filename contains slashes
cat > "$filename"
echo "received $filename"

y luego enviar con (echo filename; cat filename) | nc -q 9999 localhost 12345. (Es posible que desee tener mucho más cuidado con el nombre de archivo remoto -proporcionado, aquí. O simplemente use algo diseñado para la transferencia de archivos, como scp.)

En lugar de usar nc, podría hacer esto de manera similar con SSH:

cat filename | ssh user@somehost receive.sh
4
27.01.2020, 20:40

Теги

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