Все устройства имеют a major, minor
пара числа. major
число является большим, больше универсальной категории (например, жесткие диски, устройства ввода-вывода и т.д....) в то время как minor
число более конкретно (т.е. говорит то, что соединяет шиной устройство, подключен с).
Проверьте документацию ядра на большее количество примеров.
ifplugd предназначен для обнаружения удаления или повторного подключения разъема Ethernet. Связанный каталог / etc / ifplugd / action.d / hosts скрипты, которые вызываются, например, когда коннектор вставлен (или удален).
Шаг 2 в вашем процессе приведет к (повторному) согласованию соединения wpa, когда соединитель вставлен (или удален), и предполагается, что соединение является WPA. Процесс переименования / копирования, который вы описываете, отключит любую ранее существующую обработку, выполняемую в уже существующем сценарии ifupdown, что может быть незначительным или нет. Вы можете просто вызвать /etc/wpa_supplicant/ifupdown.sh, добавив его к существующему сценарию ifupdown (например, в конце), но это зависит от понимания того, что уже есть в существующем сценарии (что часто бывает просто).
Если вы просто хотите повторно согласовать подключение Wi-Fi в случае его разрыва, вместо того, чтобы обрабатывать физическое отключение коннектора, вы можете использовать следующее:
https://raw.githubusercontent.com/dweeber/WiFi_Check/ master / WiFi_Check
Этот сценарий надежен, в основном безвреден и должен надежно справиться с задачей.
Уже ответил dudek; этот каталог используется для сценариев, которые сообщают вашей системе, как обрабатывать вещи, которые подключаются к ней или отключаются от нее.
См. «Расширенная версия», чтобы объяснить, как я пришел к пониманию рассматриваемого сценария. Обычно после выполнения некоторых проверок и загрузки некоторых внешних функций он проверяет, следует ли запускать последовательность команд start
, или stop
, либо ошибку и выход.
О да, это вполне может заблокировать вам удаленный доступ, если вы коснетесь сетевых конфигураций так, как это не очень нравится RPi. В прошлом я так грубо касался своих сетевых конфигураций на моем RPi, что было проще начать с новой установки. Будьте осторожны и рассмотрите возможность переноса темперамента RPi в такое место, где проще войти в систему.
Просматривая этот файл на моем RPi, он кажется хорошо прокомментирован и не используется для многих вызовов внешних функций.Но вы просили об условиях непрофессионала, поэтому я сделаю все возможное, чтобы объяснить, как я подхожу к пониманию таких сценариев, хотя, похоже, вы пользователь RPi, как и я (установка удаленного сервера без головы) ya Я мог бы проверить то, что я уже писал на RPi StackExchange для автоматического повторного подключения к скрытым сетям Wi-Fi, поскольку у него могут быть другие уловки, полезные для требований вашего сервера.
Чтобы помочь в ответе на ваши вопросы, вот небольшое объяснение синтаксиса сценариев оболочки:
В сценариях оболочки ~ .sh
обычно можно найти функции, определенные таким образом;
function_name () {
echo "doing stuff for function_name"
}
, а затем вызывается через имя_функции
последнее в скрипте, иногда в других функциях. Функции, файлы сценариев и статусы if - это просто списки выполняемых команд. В случае функций выполняется содержимое между {
и }
, а в случае , если
устанавливает содержимое между , затем
и fi
и в инстанциях, где else
или elif
используются в if
состояниях условно.
Для файла, который мы открываем, есть функции с именами do_start
, do_stop
и некоторые функции, определенные в других файлах ... «Какие файлы определены этими другими функциями?» или "Как узнать, загружает ли сценарий a функции из файла b?" это два вопроса, на которые нам нужно ответить в первую очередь.
Вокруг строки 48
в / etc / wpa_supplicant / ifdown.sh
есть закомментированная строка (то есть строка, начинающаяся с #
simble; они игнорируются взломщиком сценария ... в основном) с исходными функциями
, условно помечающими следующие несколько строк perpos ~
# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
. /etc/wpa_supplicant/functions.sh
else
exit
fi
Обратите внимание, что это хороший пример поведения сценария; проверка наличия файла перед тем, как предположить, что он есть.
Первый бит , если [-f
проверяет наличие файла по заданному пути к файлу. И если присутствует , то
загружает содержимое файла через источник
(сокращение команды source
- .
, но я избегаю использовать ее в своих сценарии, потому что он может быть ошибочно введен cp
и другими командами, но я отвлекся) файл, определенный путем. Затем выполняется проверка else
, что, если этот файл не был найден, exit 0
завершает сценарий со статусом 0
. Затем шаг if
заканчивается на fi
, чтобы закрыть действия, которые необходимо предпринять, если первое условие не прошло. Или, другими словами, если /etc/wpa_supplicant/functions.sh не не exsist, то выйдите, иначе загрузите эти функции и продолжите обработку.Этот вид двойной проверки наличия значения или файла - это то, что вы будете повторять в рассматриваемом скрипте, а также в других скриптах, -f
проверяет файлы, -n
проверяет длину строки, -x
проверяет не только наличие файла, но также наличие у пользователя, запускающего сценарий, разрешений на выполнение для указанного файла, -s
проверяет, является ли файл пусто, -n
проверяет, не является ли строка пустой или нулевым
значением, а =
сравнивает строки (или значения) в if
состояниях. Что-то еще вы увидите в сценариях оболочки и bash в Linux с if
statments elif
, но это на другой день.В этом скрипте есть другие уловки , используемые в дополнение к if
статам, такие как ||
"or", &&
"и", и !
операторы «не», например в строке 55
~
# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
exit 0
fi
~, которые просто помещают состояния, если файл, определенный в $ WPA_SUP_BIN
, является не исполняемым или файл, определенный параметром $ WPA_CLI_BIN
, является не исполняемым, тогда выйдите со статусом 0
без дальнейшей обработки. Сначала они могут показаться сложными, но их чтение вслух с использованием более человеческого синтаксиса может помочь при первом обучении для простых, а добавление комментариев с помощью #
для сложных действительно полезно при обучении или возвращении к тема последняя.
Файл, полученный из внутреннего источника, также следует проверить, если вы не уверены в том, что что-то вызвало в файле ifupdown.sh
. Я бы предложил nano /etc/wpa_supplicant/functions.sh
, а затем использовать ^ w
или Ctrl + w
для поиска нужного имени функции. чтобы узнать больше о. Потому что между тем, что когда-либо задача вызывает этот сценарий, и контекстом functions.sh
будет обнаружено большинство элементов головоломки.
Теперь дело доходит до повторения немного отличающейся круглой строки 135
, где запускается case
статус, у этих типов статусов есть определенная структура, которую мы можем использовать, чтобы помочь декодировать операции.
case $some_variable in
start)
echo "The word [start] was detected in \$some_variable"
;;
stop)
echo "The word [stop] was detected in \$some_variable"
;;
*)
echo "The word [$some_variable] was detected in \$some_variable but not understood"
;;
esac
В приведенном выше примере, как и в других case
статусах, мы, по сути, ищем в содержимом $ some_variable
ключевые слова, которые были определены, то есть start
или stop
, и если ключевое слово найдено, то выдают команды, найденные между отслеживанием )
и предварительным вводом ;;
, которые действуют для разделения различных действий, выполняемых для различных найденных ключевых слов. Обратите внимание, что в некоторых сценариях вы можете найти эти case
состояния в для
циклов, но это тоже на другой день.
В случае операторов case
в скрипте ifupdown.sh
мы сначала сопоставляем статус start
или stop
в переменная $ MODE
и использование значения $ PHASE
для сопоставления, если последовательность команд pre-up
или post-up
должна быть вызвана ] или , если вместо этого следует вызывать последовательность команд pre-down
или post-down
. Если ни start
, ни stop
, где обнаружены, то ошибка регистрируется, печатается и сценарий завершается со статусом 1
ошибка.