ls :использовать разные цвета для столбцов «пользователь» и «группа», если файл принадлежит пользователю root

Это друг. Это очень, очень хороший друг. Типа, которого вы приглашаете в свой дом и позволяете им оставить для вас копию ваших ключей. Команда/bin/rmявляется одним из основных инструментов операционной системы и командой по умолчанию, используемой, когда вы хотите удалить файл. Его удаление, скорее всего, сломает вашу систему, так как обязательно будут различные программы, которые предполагают, что он существует, и используют его 1 .

Я предполагаю (и подчеркиваю, что это предположение, я не знаю, как работает Bitdefender ), что Bitdefender что-то заблокировал, возможно вредоносное ПО, пытающееся удалить файл с вашего компьютера. Предположительно, он пытался удалить его с помощью /bin/rm, поэтому битдефендер заблокировал /bin/rm.

Однако полное отключение этой важной утилиты похоже на объявление камней незаконными, потому что кто-то однажды бросил в вас один из них. Утилита rm— это инструмент, который можно использовать безопасно или опасно, в зависимости от того, как он используется.


1На самом деле я только что попробовал это на виртуальной машине Ubuntu. К моему удивлению, удаление /bin/rmне помешало машине нормально завершить работу и перезагрузиться. Я также могу удалять файлы из файлового менеджера с графическим интерфейсом. Тем не менее,удаление такой базовой утилиты — не очень хорошая идея, и я все еще ожидаю, что в какой-то момент это вызовет проблемы.

1
17.11.2019, 04:39
2 ответа

Следующая функция окрашивает rootв красный цвет везде, где он появляется в выводе lsс последующим пробелом:

ls() {
    if [ -t 1 ]; then
        command ls --color=always "$@"| sed "s/root /$(tput setaf 1)root$(tput sgr0) /g"
    else
        command ls "$@"
    fi
}

Это будет соответствовать rootв столбцах пользователя и группы, а также в файлах, содержащих «root» (с пробелом ), так что это может быть не совсем то, что вам нужно. Принудительный вывод цвета, по крайней мере, гарантирует, что он не будет соответствовать файлам с именем «root».

Вызов sedможет использовать специальные функции Zsh -вместоtput:

  • echoti:sed "s/root /$(echoti setaf 1)root$(echoti sgr0) /g"
  • быстрое расширение:sed "s/root /${(%):-%F{red}root${(%):-%f} /g"(да, первая скоба разбалансирована)
  • colors(autoload colors; colors):sed "s/root /${fg[red]}root${reset_color} /g"

Если ваш терминал поддерживает более 16 цветов, вы можете использовать более высокие значения с помощью setaf. %F{red}также может использовать числовые значения. Модуль nearcolorпредоставляет простой способ найти наиболее близкий цвет, соответствующий желаемому значению RGB.

Если у вас есть существующийlsпсевдоним , настройка --color=tty, вам необходимо его отключить, иначе --color=ttyбудет стоять после --color=alwaysв вызове lsи ls' собственная окраска будет отключена.

2
27.01.2020, 23:22

Быстрое и грязное решение:

function ls {
  command ls "$@" | grep -E --color=always "^|root "
}

Для простоты это также будет окрашивать слово rootв любых именах файлов.

Я не добавлял проверку использования конвейера, но вы можете увидеть это в других ответах здесь.

1
27.01.2020, 23:22

Теги

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