Will I lose the wifi and have to recompile the driver?
Да
Драйвер следует перекомпилировать, так как модуль должен находиться по следующему пути:
/lib/modules/$(uname -r)/updates/dkms//rtl8821ae.ko
О старом ядре4.9.0-2
:
/lib/modules/4.9.0-2-amd64/updates/dkms//rtl8821ae.ko
На новейшем керенле4.9.0-3
:
/lib/modules/4.9.0-3-amd64/updates/dkms//rtl8821ae.ko
#!/bin/sh
snooze=$1
set -- "$HOME"/*
date +'Start: %F %T'
sleep "$snooze"
date +'End: %F %T'
for pathname do
if [ ! -e "$pathname" ]; then
printf 'Deleted from home: %s\n' "${pathname##*/}"
fi
done
Этот сценарий принимает первый аргумент командной строки $1
и присваивает его переменной snooze
. Затем он получает имена всех файлов и каталогов в домашнем каталоге (, исключая скрытые имена ), и присваивает их позиционным параметрам ($1
, $2
и т. д. )
Перед засыпанием количества времени, заданного пользователем, он печатает текущую дату и время. После пробуждения ото сна он снова печатает дату и время.
Цикл for
перебирает исходные имена, найденные в домашнем каталоге, и проверяет, остались ли они там. Если имя больше не найдено, оно печатается (с удалением пути к каталогу из его пути ).
Вот и все.
Если вы хотите обнаруживать только удаление обычных файлов(или символических ссылок на обычные файлы ), вам нужно убедиться, что список путей, которые мы получаем для вещей в домашнем каталоге содержит только пути к этим файлам:
#!/bin/sh
snooze=$1
set --
for pathname in "$HOME"/*; do
if [ -f "$pathname" ]; then
set -- "$@" "$pathname"
fi
done
date +'Start: %F %T'
sleep "$snooze"
date +'End: %F %T'
for pathname do
if [ ! -e "$pathname" ]; then
printf 'Deleted from home: %s\n' "${pathname##*/}"
fi
done
Здесь вместо того, чтобы просто сохранять все видимые имена из домашнего каталога, мы перебираем имена и сохраняем только те, которые -f
верны для (обычных файлов и символических ссылок. в обычные файлы ). Каталоги будут пропущены. В остальном сценарий такой же, как и раньше.
Обнаружение удаления скрытых файлов проще всего выполнить, переключившись наbash
(обратите внимание, что приведенные выше сценарии выполняются с/bin/sh
):
#!/bin/bash
shopt -s dotglob
snooze=$1
set --
for pathname in "$HOME"/*; do
if [ -f "$pathname" ]; then
set -- "$@" "$pathname"
fi
done
date +'Start: %F %T'
sleep "$snooze"
date +'End: %F %T'
for pathname do
if [ ! -e "$pathname" ]; then
printf 'Deleted from home: %s\n' "${pathname##*/}"
fi
done
Обратите внимание, что единственным отличием является строка #!
-, указывающая, что теперь это должно быть выполнено интерпретатором /bin/bash
, и команда shopt -s dotglob
, которая устанавливает параметр оболочки dotglob
в bash
оболочка. Эта опция оболочки заставляет шаблоны подстановки имен файлов, такие как *
, соответствовать скрытым именам, а также именам, не начинающимся с точки.
Дополнительное обнаружение удалений также в подкаталогах звучит немного сложно, но:
это не так.#!/bin/bash
shopt -s dotglob globstar
snooze=$1
set --
for pathname in "$HOME"/**; do
if [ -f "$pathname" ]; then
set -- "$@" "$pathname"
fi
done
date +'Start: %F %T'
sleep "$snooze"
date +'End: %F %T'
for pathname do
if [ ! -e "$pathname" ]; then
printf 'Deleted from home: %s\n' "${pathname#$HOME/}"
fi
done
Единственное отличие состоит в том, что мы также включаем опцию globstar
. Этот параметр оболочки дает нам доступ к шаблону глобуса **
, который соответствует точно так же, как *
, но также охватывает /
в путях. Таким образом, шаблон $HOME/**
будет соответствовать всему в вашем домашнем каталоге.
Я также немного изменил печать удаленных путей, чтобы включить немного больше, чем просто имя файла (, так как он мог быть расположен в подкаталоге, и было бы неплохо увидеть какой подкаталог был ).
Мне кажется, это университетское задание. ваш сценарий не имеет смысла, поэтому я просто попробовал то, что вы говорите.
Я предполагаю, что ваш bash-скрипт должен запускаться с таким параметром:./script 30
https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Parameters
for file in $HOME/*; do
# if it is a file
#save the value of $file on a log file placed not in your $HOME directory
#delete the file
done
http://mywiki.wooledge.org/BashPitfalls#for_f_in_.24.28ls_.2A.mp3.29
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
dateBefore="$(date)"
#sleep command here
dateAfter="$(date)"
echo "Date before sleep : $dateBefore"
echo "Date before after sleep : $dateBefore"
Я старался изо всех сил, чтобы помочь вам с этим, так что я могу предположить, что вы можете сделать этот сценарий самостоятельно сейчас. если вы все еще не можете сделать это, справочные страницы и Google — ваш друг:)
#!/usr/bin/env bash
sleep_time=$1
time_a=$(date)
mapfile -t files_a < <(find "$HOME" -type f -maxdepth 1)
sleep "$sleep_time"
mapfile -t files_b < <(find "$HOME" -type f -maxdepth 1)
comm -23 <(printf '%s\n' "${files_a[@]}" | sort) <(printf '%s\n' "${files_b[@]}" | sort)
printf '%s\n' "We started at: $time_a" "We ended at: $(date)"
sleep_time=$1
./script.sh 30
, ваш первый позиционный параметр будет равен 30
. time_a=$(date)
mapfile -t files_a < <(find "$HOME" -type f -maxdepth 1)
find "$HOME" -type f -maxdepth 1
-Будет напечатан список файлов всех типов в вашем $HOME
каталоге (, не рекурсивном ни в какие подкаталоги)sleep "$sleep_time"
mapfile -t files_b < <(find "$HOME" -type f -maxdepth 1)
comm -23 <(printf '%s\n' "${files_a[@]}" | sort) <(printf '%s\n' "${files_b[@]}" | sort)
comm
читает два файла и печатает 3 столбца:(1 )Только строки в файле 1, (2 )Только строки в файле 2, (3 )Строки в обоих файлах. Поскольку нас интересуют только строки, уникальные для файла file1, мы используем аргументы -23
для подавления столбцов 2 и 3. Затем, поскольку мы сохраняем файлы в массиве, а не в файле, мы используем Подстановку процесса для передачи массивов. на comm
, как если бы они были файлами. printf '%s\n' "We started at: $time_a" "We ended at: $(date)"