Я решил эту проблему с помощью небольшого приложения на Rust под названием escalator . Он использует исполняемый бит suid
для выполнения от имени пользователя root, затем setuid
и setgid
, чтобы действительно стать пользователем root перед выполнением того, что ему передается, заменяя себя дочерним процессом.
Со спинкой -каталожные номера:
grep -v '\(.\).*\1'
-v
означает повторно v
вместо (печатать строки, которые не соответствуют ), а регулярное выражение представляет собой \(.\)
любой захваченный символ, за которым следует любое количество символов (.*
), за которым следует тот же персонаж \1
, захваченный ранее.