/usr/bin/ptx: Можно ли обеспечить вариант использования или два?

Следующий сценарий создает случайный файл (вокруг 100M) в общей памяти, вычисляет ее контрольную сумму, затем скопируйте его в данное блочное устройство несколько раз так, чтобы целое устройство было заполнено копиями случайных данных при чтении его снова и вычисления его контрольной суммы, чтобы проверить, соответствует ли это действительно исходному.

Это производит вывод как:

We will create a test data file /dev/shm/testsource with size 100000000.
We will fill the device /dev/sdb (of size 16001036288) with this data (in 160 blocks) and then will check if the data is not corrupted.
This will erase all data in /dev/sdb.
Do you want to continue?
1) yes
2) no
#? 1
Creating test source file... (100000000)
Calculating source checksum...
9f4c31858b3bb1122974a5c9d8ec28c6f71b3367
Writing block 0 ...
Checking block 0 ... ok
Writing block 1 ...
Checking block 1 ... ok
Writing block 2 ...
Checking block 2 ... ok

Это требует dd, blockdev, сокращения, sha1sum,/dev/urandom и/dev/shm. Это требует доступа к устройству (обычно корень). Это было протестировано на Linux 2.6.3x. Это медленно. Можно изменить его, чтобы сделать несколько передач или делать все записи затем вся проверка или ожидать когда-то прежде, чем проверить ("исчезнуть" тест).

#!/bin/bash
TARGETDEVICE=$1
TESTFILE="/dev/shm/testsource"
BLOCKSIZE="100000000"
if [ -b "$1" ]; then
    TARGETSIZE=$(blockdev --getsize64 $TARGETDEVICE)
    if [ "$TARGETSIZE" -gt 0 ] ; then
      let "BLOCKS=$TARGETSIZE / $BLOCKSIZE"
      if [ "$BLOCKS" -lt 2 ] ; then
        BLOCKSIZE=$TARGETSIZE
        BLOCKS=1
      fi
    fi
    echo "We will create a test data file $TESTFILE with size $BLOCKSIZE."
    echo "We will fill the device $TARGETDEVICE (of size $TARGETSIZE) with this data (in $BLOCKS blocks) and then will check if the data is not corrupted."
    echo "This will erase all data in $TARGETDEVICE."
    echo "Do you want to continue?"
    select choice in yes no ; do
      if [ "$choice" == "yes" ] ; then

        echo "Creating test source file... ($BLOCKSIZE)"
        dd if=/dev/urandom of=$TESTFILE bs=$BLOCKSIZE count=1 status=noxfer 2> /dev/null

        echo "Calculating source checksum..."
        CHECKSUM=$(sha1sum $TESTFILE | cut -d " " -f 1)
        echo $CHECKSUM

        for ((y=0 ; y<$BLOCKS ; y++)) ; do
          echo "Writing block $y ..."
          dd if=$TESTFILE of=$TARGETDEVICE bs=$BLOCKSIZE count=1 seek=$y status=noxfer 2> /dev/null
          echo -n "Checking block $y ... "
          TESTCHECKSUM=$(dd if=$TARGETDEVICE bs=$BLOCKSIZE count=1 skip=$y status=noxfer 2> /dev/null | sha1sum | cut -d " " -f 1)
          if [ "$CHECKSUM" == "$TESTCHECKSUM" ] ; then
            echo "ok"
          else
            echo "MISMATCH"
            echo "(found $TESTCHECKSUM)"
          fi
        done
        rm -f $TESTFILE
        break

      fi
      if [ "$choice" == "no" ] ; then
        echo
        echo "Operation cancelled"
        echo
        break
      fi

    done

else 
    echo
    echo "Missing or wrong target device"
    echo "Usage: $0 /dev/device"
    echo
fi
20
19.11.2013, 00:01
5 ответов

По-видимому, это использовалось для индексации Справочника Unix в былые дни.

В Ссылках ниже, статья Wikipedia объясняет, что переставленный индекс (также назван KWIC, или "Ключевым словом в контексте") и заканчивается загадочным:

Книги, состоявшие из многих коротких разделов с их собственными описательными заголовками, прежде всего наборы страниц руководства, часто заканчиваемых переставленным индексным разделом, позволяя читателю легко найти раздел любым словом из его заголовка. Эта практика больше не является обычной.

Больше поиска показывает остающиеся статьи в Ссылках, которые объясняют больше о том, как страницы справочника Unix использовали переставленный индекс. Это кажется основным вопросом, с которым они имели дело, то, что страницы справочника не имели никакой непрерывной нумерации.

Из того, что я собираюсь, практика использования переставленного индекса является теперь тайной и устаревшей.

Ссылки

10
27.01.2020, 19:44

Вы можете увидеть (старый) пример интернет-пробного индекса здесь (Нажмите на ссылку Printeed Index в верхнем левом раме).

Как упомянул кто-то еще, это больше не распространено из-за возможностей поисковых систем и пользовательских поисковых приложений.

1
27.01.2020, 19:44

Также известен как конкорданс. И они по-прежнему актуальны и весьма полезны. Хороший пример - быстрое определение библейских стихов, когда вы знаете только несколько слов. Другой пример - индексация всех сонетов Шекспира, чтобы обеспечить аналогичный быстрый поиск по ключевому слову.

1
27.01.2020, 19:44

Принятый ответ @Joseph R. с историей - это хорошо, но давайте посмотрим, как его можно использовать.

ptx генерирует индекс переставленных терминов («ptx») из текста.Самый простой для понимания пример:

$ cat input
a
b
c

$ ptx -A -w 25 input
:1:            a b c
:2:        a   b c
:3:      a b   c

         ^^^^  ^ ^^^^-words to the input's right
         |     +-here is the actual input
         +-words to the input's left

Внизу справа вы видите разные слова из ввода и окружающие их левый и правый контекст . Первое слово - «а». Он встречается в первой строке, за ним справа следуют «b» и «c». Второе слово - «b», которое встречается во второй строке, где «a» слева и «c» справа. Наконец, «c» встречается в третьей строке, после нее идут «a» и «b».

Используя это, вы можете найти номер строки и окружающие слова для любого слова в тексте. Это очень похоже на grep , а? Разница в том, что ptx понимает структуру текста в логических единицах слов и предложений. Это делает контекстный вывод ptx более актуальным при работе с английским текстом, чем с grep.

Давайте сравним ptx и grep , используя первый абзац американского таблоида Джеймса Эллроя :

$ cat text
America was never innocent. We popped our cherry on the boat over and looked back with no regrets. You can’t ascribe our fall from grace to any single event or set of circumstances. You can’t lose what you lacked at conception.

Вот grep (с соответствие цветов вручную изменено, чтобы быть окруженным // ):

$ grep -ni you text
1:America was never innocent. We popped our cherry on the boat over and looked back with no regrets. /You/ can’t ascribe our fall from grace to any single event or set of circumstances. /You/ can’t lose what /you/ lacked at conception.

Вот ptx :

$ ptx -Afo <(echo you) text
text:1:        /back with no regrets.   You can’t ascribe our fall/
text:1:     /or set of circumstances.   You can’t lose what you/
text:1:      /. You can’t lose what   you lacked at conception.

Потому что grep ориентирован на линию, а этот абзац - всего одна строка, вывод grep не такой краткий и полезный, как вывод из ptx .

5
27.01.2020, 19:44

Теги

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