Два ответа:
Короткий: Вы хотите использовать сценарий энергии AnsiEsc.vim. Это будет скрывать фактические escape-последовательности ANSI в Вашем файле и использовать подсветку синтаксиса для окраски текста соответственно. Проблема с использованием этого в пейджере состоит в том, что необходимо будет заставить энергию распознать, когда использовать это. Я не уверен, можно ли просто всегда загружать его, или если это будет конфликтовать с другими файлами синтаксиса. Необходимо будет экспериментировать с ним.
Длинный ответ: лучшим, на которое можно надеяться, является частичное непортативное решение. Меньше на самом деле не понимает терминальные escape-последовательности, так как это в основном терминальный зависимый, но меньше может распознать (подмножество) их и будет знать для передачи их до терминала, если Вы используете -r
(или -R
) опция. Терминал будет интерпретировать escape-последовательности и изменяет атрибуты текста (цвет, полужирный, подчеркивание...). Vim, будучи редактором, а не пейджером, просто не передает необработанные управляющие символы терминалу. Это должно отобразить их в некотором роде, таким образом, можно на самом деле отредактировать их. Можно использовать другие функции энергии, такие как укрывательство и подсветка синтаксиса, чтобы скрыть последовательности и использовать их для того, чтобы выбрать цвета текста, однако, это будет всегда обрабатывать только подмножество терминальных последовательностей и не будет, вероятно, работать над некоторыми терминалами.
Это - действительно только одна из многих проблем, с которыми Вы столкнетесь, когда Вы попытаетесь использовать текстовый редактор в качестве пейджера.
user2
потребности выйти из системы и въехать задним ходом. Полномочия группы прокладывают себе путь:
/etc/passwd
, плюс все группы, где Ваш пользователь упоминается в /etc/group
. (Более точно, pw_gid
поле в getpw(your_uid)
, плюс все группы, которых Ваш пользователь является явным членом. Вне /etc/passwd
и /etc/group
, информация может прибыть из других видов пользовательских баз данных, таких как NIS или LDAP.) Основная группа становится эффективным идентификатором группы процесса, и другие группы становятся его дополнительными идентификаторами группы.Как Вы видите, Ваше изменение в составе группы пользователя только вступает в силу, когда пользователь входит в систему. Для выполнения процессов слишком поздно. Таким образом, пользователь должен выйти из системы и въехать задним ходом. Если это - слишком много проблемы, пользователь может войти в систему отдельной сессии (например, на другой консоли, или с ssh localhost
).
Под капотом процесс может только когда-либо терять полномочия (идентификаторы пользователей, идентификаторы группы, возможности). Ядро запускается init
процесс (первый процесс после начальной загрузки) работающий как корень и каждый процесс в конечном счете происходит от того процесса ¹. login
процесс (или sshd
, или часть Вашей среды рабочего стола, которая регистрирует Вас в), все еще работает как корень. Часть его задания должна отбросить полномочия пользователя root и переключиться на надлежащего пользователя и группы.
Существует одно единственное исключение: выполнение setuid или setgid программы. Та программа получает дополнительные полномочия: это может принять решение действовать под различными подмножествами членств родительского процесса плюс дополнительное членство в пользователе или группе, которая владеет setxid исполняемым файлом. В частности, корневая программа setuid имеет корневые полномочия, следовательно может сделать все ²; это то, как программы как su
и sudo
может сделать их задание.
¹ иногда существуют процессы, которые не получены из init (initrd, udev), но принцип является тем же: запустите как корень и теряйте полномочия со временем.
² Запрет многоуровневых концепций безопасности, таких как SELinux.
Вы, возможно, должны были бы иметь user2, выходят из системы и въезжают задним ходом (или просто попробуйте ssh'ing в создать новую сессию входа в систему). Проверьте вывод id --groups
показать числовые идентификаторы группы для пользователя.
sudo su $(whoami)
По сути тот же обходной путь, что и ssh localhost
, но его можно использовать без установки ssh-сервера.
Пока у вас есть root. Но если вы только что добавили новую группу и изменили разрешения, вы, скорее всего, так и сделаете.
Существует случай, когда выход пользователя из системы не помогает -, если вы используете директиву ControlMaster ssh для хоста. Если вы добавите свою учетную запись в группу, выйдете из системы и снова войдете в нее в рамках того же соединения ControlMaster, сеанс по-прежнему не будет показывать вам нового членства. Вам придется принудительно разорвать соединение с Мастером с помощью
ssh -O exit hostname
перед повторным входом в систему.
Вам необходимо "перезагрузить" группы текущего пользователя. Если вы хотите сделать это без запуска новой оболочки, используйте следующую команду:
exec su -l $USER
exec
заменяет текущий образ процесса новым образом процесса, определяемым командой su -l $USER
, которая представляет собой новую оболочку для текущего пользователя