использование корня к mkdir в другом пользовательском корневом каталоге

Существует очевидно что-то нечетное продолжение вокруг нечувствительного к регистру подстановочного соответствия. Согласно ls вывод, имена файлов содержат (AutoFlac), тогда как Ваш сценарий ищет (AutoFLAC). Инструменты Unix традиционно полагают, что два имен файлов то же, только если они - идентичный байт для байта; нет ничего встроенного для нечувствительного к регистру соответствия. Bash, кажется, ведет себя несовместимо в нечувствительной к регистру файловой системе, это может быть ошибкой.

Ваш сценарий был бы более устойчивым при использовании двойных кавычек вокруг подстановок переменных. Если Вы не делаете, удар (как другие оболочки) выполняет globbing на результате подстановки переменных. Это может быть источником Вашей проблемы. Всегда помещайте двойные кавычки вокруг подстановок переменных и управляйте заменами: "$foo", "$(foo)" если Вы не знаете, что хотите выполнить разделение слова и globbing на результате. Также Ваш сценарий с недостающими двойными кавычками не работал бы над некоторыми именами файлов, например, с пробельными последовательностями, которые не являются одиночным пробелом.

Я также рекомендую делать текстовую замену в оболочке, существует меньше риска искажения имен файлов тот путь.

SUFFIX="(AutoFlac)"
for entry in *"$SUFFIX"*; do
  target=${entry/ $SUFFIX/}
  mv -- "$entry" "$target"
done

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

SUFFIX="(autoflac)"
for entry in *; do
  if [[ ${entry,,} = *$SUFFIX* ]]; then
    # Remove everything from the last space to the last .
    mv -- "$entry" "${entry% *}.${entry##*.}"
  fi
done
27
26.05.2013, 14:33
3 ответа

sudo -u [username] mkdir /home/[username]/public_html/[folder_name] хорошо работает.

Из того, что я вижу полномочия, и владение является тем же, если я должен был войти в систему как тот же пользователь и создать папку под public_html.

Можно также звонить su -c "mkdir /home/[username]/public_html/[folder_name]" [username]

29
27.01.2020, 19:39
  • 1
    Когда Вы работаете sudo -u USERNAME mkdir DIRNAME, Вы выполняетесь mkdir управляйте как пользователь USERNAME. Это не точно эквивалентно входу в систему как USERNAME, потому что вход в систему также подразумевает переменные среды установки и так далее, но это - часть, которая имеет значение, а именно, выполняя процесс как конкретного пользователя. –  Gilles 'SO- stop being evil' 30.04.2013, 03:49
  • 2
    Также у того пользователя не могло бы быть разрешения. примечание –  mahemoff 23.04.2018, 13:35

Учитывая те полномочия, только владелец каталога или суперпользователь могут создать подкаталоги.

Единственным способом, которым Вы могли избежать использования дополнительные полномочия создать папку, является изменение владение себе (с sudo), создайте подкаталог и наконец возвратите владение владельцу, но не будьте похожи на хорошее решение меня.

1
27.01.2020, 19:39
  • 1
    да, жесткая это. Это - глупый вопрос, но каковы мои опции? –  maGz 28.04.2013, 23:51
  • 2
    что относительно (как корень) выполнение команды как тот пользователь?: sudo -u devuser1 mkdir /home/devuser1/public_html/test. Это не то же как создание папки с sudo это? ls -al показывает: drwxr-sr-x 2 devuser1 www-data 4096 Apr 28 23:49 test –  maGz 29.04.2013, 01:02
  • 3
    Возможно, я наивен, но я действительно не вижу, что любое зло в создает папку с sudo пока Вы изменяете владение после этого. –  RSFalcon7 29.04.2013, 01:14
  • 4
    Из того, что ls показывает на содержании пользователя public_html, появляется, как будто изменение владения не требуется, возможно, полномочия все же. –  maGz 29.04.2013, 09:31
  • 5
    я думаю, что я также наивен в размышлении этого: я не создаю папку как su, вместо этого я использую его для аутентификации меня как пользователь, который собирается создать папку..., которая имеет смысл? –  maGz 29.04.2013, 09:34

с Установить , вы можете создать каталог с определенным владельцем, группой и режимом:

install -d -o <user> -g <group> -m <mode> <path>
31
27.01.2020, 19:39

Теги

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