Как переименовать файлы, используя имя каталога?

Когда выполняется «сценарий оболочки», он выполняется с разрешениями пользователя, выполнившего этот сценарий. Большинство сервисов (kafka, redis, nginx и т. Д.), Установленных с использованием диспетчера пакетов (yum, apt и т. Д.), Устанавливают вспомогательные скрипты для облегчения управления этими сервисами и создания уникальных пользователей сервисов, связанных с этими сервисами (apache, redis, nginx, и т. д.) Почти все эти вспомогательные сценарии сначала выполняются от имени пользователя root, а затем отбрасывают привилегии пользователю службы, назначенному для этой службы. Это гарантирует, что только авторизованные пользователи (т. Е. Пользователи, которым разрешено выполнять «sudo service kafka start») могут эффективно контролировать эти службы. Это означает, что системный администратор Салли может запускать, останавливать и перезапускать kafka и nginx, в то время как разработчик Джим может быть ограничен только запуском и остановкой kafka (или чего-то подобного). Хотя администратор может создать пользователя java, это не то, что я видно на практике, не больше, чем пользователь Ruby или пользователь Python. Скорее, право собственности на службу чаще закрепляется за пользователем службы, имеющим отношение к этой конкретной службе.

Некоторые процессы зависят от того, что они запускаются от имени root (обычно демон ssh-сервера запускается от имени root). Другие процессы откажутся запускаться от имени root (postgresql - один.)

Если вы просмотрите вспомогательный сценарий для службы на /etc/init.d/someservice (или / etc / init / someservice.conf) там закодированы фактические сценарии, которые вызывают повышение или отбрасывание привилегий. В качестве альтернативы, если вы вошли в систему как пользователь stephan и выполните что-то вроде / usr / sbin / redis-server -c /etc/redis.conf, а затем проверьте этот процесс из другого окна, вы увидите, что redis принадлежит Автор: Стефан.

Надеюсь, что это поможет.

2
13.01.2016, 00:05
2 ответа

Чтобы заменить один / (экранированный \) на _:

for i in */pre.nii; do echo mv "$i" "${i/\//_}"; done

Если все выглядит нормально, удалите echo.

4
27.01.2020, 21:56

Я обычно использую sed для замены и тестирования перед внесением изменений:

for i in */pre.nii;
do 
   j=$(echo $i | sed 's/\//_/')
   echo $j
done

затем запускаю

for i in */pre.nii;
do 
   j=$(echo $i | sed 's/\//_/')
   mv -v $i $j
done
1
27.01.2020, 21:56

Теги

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