Могу ли я проанализировать тип переменной bash?

Ни один из этих учебников или видео в интернете не работает. Потому что они копируют друг друга и они неправильные или у них разные ситуации. Для всех тех, у кого есть проблемы с использованием режима постоянства Kali USB, у меня есть решение, и после многих часов упорных попыток я наконец-то сделал это, и все получилось.

Выполните следующие шаги, если вы уже установили Kali weekly edition на USB-накопитель или hdd, используя программное обеспечение win32, как указано на сайте документации Kali. После установки Kali на USB убедитесь, что у вас есть раздел подкачки Linux.

Решение заключается в следующем

1) не форматируйте раздел постоянства с помощью программы windows в операционной системе windows. Отформатируйте его с помощью Gparted из Kali. Он выдаст вам ошибки. Не обращайте на них внимания. Чтобы найти gparted, просто запустите его из терминала или из приложений и введите gparted, затем запустите его. Найдите ваш USB-раздел, щелкните на нем правой кнопкой мыши и отформатируйте его, используя тип первичного раздела файловой системы ext4, и переименуйте его в persistence, без заглавных букв.

2) перезагрузите ноутбук, и вы увидите диск persistence на рабочем столе.

3) запустите терминал и нажмите эту команду, как мы все уже привыкли делать в статьях и видео. Итак,

mkdir -p /mnt/usb

mount /dev/sdc3 /mnt/usb

echo "/ union" > /mnt/usb/persistence.conf

umount /dev/sdc3

4) если диск персистентности все еще там, выполняйте команду umount, пока он не исчезнет с рабочего стола и из проводника

5) перезагрузитесь

6) создайте папку на рабочем столе и теперь все должно сохраняться после каждого перезапуска, включая настройки Kali.

Легенда:

Обратите внимание, что sdc3 - это мой раздел ext 4, ваш может быть другим. Как это выяснить:

Откройте терминал и введите fdisk -l, найдите свой USB-накопитель и замените sdc3 соответствующим образом.

Fdisk показывает ваши диски, а -l перечисляет их все.

Mkdir создает новый каталог папок с именем и местоположением, которое вы укажете после него.

Mount монтирует диск, который Linux не делает автоматически

Echo командная строка создает текст с содержимым / union и с именем persistence.conf в пути к папке, указанном пользователем.

Umount размонтирует указанный раздел.

Последнее замечание. Если вы не отформатируете раздел persistence в Linux Debian или Kali, это никогда не сработает. Кроме того, persistence должно быть полностью строчным, без пропусков в написании, так как Kali настроена на работу с определенными командами. Ext4 - файловая система, читаемая Debian Kali Linux

2
13.04.2017, 06:18
2 ответа

Мне кажется, что вы можете разрешить своей функции передавать любые параметры командной строки непосредственно в GNU date, при этом специально обрабатывая числовой параметр, отличный от -:

argdates () {
    local -a opts
    local timestamp

    while [ "$#" -gt 0 ] && [ "$1" != '--' ] && [[ "$1" != [0-9]* ]]; do
        opts+=( "$1" )
        shift
    done
    [ "$1" = '--' ] && shift

    for timestamp do
        date "${opts[@]}" -d "@$timestamp"
    done

    # or, with a single invocation of "date":
    # printf '@%s\n' "$@" | date "${opts[@]}" -f -
}

Эта bashфункция просматривает свои аргументы командной строки и сохраняет их в массиве optsдо тех пор, пока не найдет аргумент, который является--(стандартным способом сигнализации об окончании опций )или с цифрой. Каждый аргумент, сохраненный в opts, удаляется из списка аргументов командной строки.

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

Пример вызова:

$ argdates 1476395008 1493172224
Thu Oct 13 23:43:28 CEST 2016
Wed Apr 26 04:03:44 CEST 2017
$ argdates -- 1476395008 1493172224
Thu Oct 13 23:43:28 CEST 2016
Wed Apr 26 04:03:44 CEST 2017
$ argdates +%D 1476395008 1493172224
10/13/16
04/26/17
$ argdates +%F 1476395008 1493172224
2016-10-13
2017-04-26
$ argdates -u 1476395008 1493172224
Thu Oct 13 21:43:28 UTC 2016
Wed Apr 26 02:03:44 UTC 2017
$ argdates -u -Iseconds 1476395008 1493172224
2016-10-13T21:43:28+00:00
2017-04-26T02:03:44+00:00
1
27.01.2020, 22:18

Вы могли бы сделать это намного проще, отказавшись от использования массивов и позволив пользователю указать DATE_ARGSпросто как строку, которая должна быть вставлена ​​в командную строкуdate:

$ argdates(){
    for d; do printf %s "$DATE_ARGS" | xargs date -d "@$d"; done
}
$ DATE_ARGS='-u "+%y/%U, %I%p %a"' argdates 1476395008 1493172224
16/41, 09PM Thu
17/17, 02AM Wed
$ DATE_ARGS='-u -Iseconds' argdates 1476395008 1493172224
2016-10-13T21:43:28+00:00
2017-04-26T02:03:44+00:00
0
27.01.2020, 22:18

Теги

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