- Ошибка: mkdir — Cannot Create Directory
- mkdir: cannot create directory – File exists
- Возможные решения проблем mkdir: cannot create directory
- Сценарий file exists
- Переименовать (или переместить) существующий файл
- Удалить существующий файл
- Thread: mkdir: permission denied help
- mkdir: permission denied help
- Re: mkdir: permission denied help
- Re: mkdir: permission denied help
- Re: mkdir: permission denied help
- mkdir: cannot create directory ‘a’: Permission denied #4836
- Comments
- xzn commented Jan 22, 2020
- sirredbeard commented Feb 15, 2020
- xzn commented Feb 16, 2020
- sirredbeard commented Feb 18, 2020
- xzn commented Feb 18, 2020
- sirredbeard commented Feb 18, 2020
- xzn commented Feb 18, 2020
- ikastro commented Mar 3, 2020
- WMLHUST commented May 8, 2020
- kudaba commented Jun 1, 2020
- kudaba commented Sep 25, 2020
- stu85010 commented Oct 15, 2020
- kudaba commented Dec 4, 2020
- EmilySeville7cfg commented Apr 16, 2021 •
- PHP: mkdir, почему permission denied при 0777?
- Ошибка bash permission denied
- Ошибка bash permission denied
- Выводы
Ошибка: mkdir — Cannot Create Directory
Новички в Linux часто не понимают, что делать при получении ошибки “mkdir: cannot create directory” во время работы с командной строкой. Есть несколько причин возникновения такой ошибки, и в этом переводе своей англоязычной статьи с сайта Unix Tutorial я покажу эти причины и их устрание на примерах.
mkdir: cannot create directory – File exists
В переводе с английского сообщение означает: невозможно создать каталог — файл уже существует.
ФАЙЛ существует? А при чём тут проблема создания каталога? И почему ошибка говорить “существует файл”, когда мы вообще пытаемся создавать каталог, а не файл?
На самом деле всё просто: большинство объектов в Linux являются файлами и структурами в файловой системе. Поэтому эта ошибка означает, что там, где вы пытаетесь выполнить команду создания нового каталога, уже существует другой объект с таким же именем. В данном случае — это файл, а не каталог. Но у файла такое же имя, как у желаемого каталога, так что создать второй объект с таким же именем не получится.
намекает, что у нас уже есть файл с именем /tmp/try.
Очень просто проверить эту гипотезу с помощью команды ls:
Так и есть, у нас существует файл с таким именем.
Возможные решения проблем mkdir: cannot create directory
Сценарий file exists
Если файл с таким именем уже существует, а каталог всё же очень хочется создать, то есть решения.
Переименовать (или переместить) существующий файл
Используем команду mv для перемещения /tmp/try в другой каталог (или просто сменим имя try на другое, оставив файл в том же каталоге /tmp). Вот как можно переименовать файл в имя oldtry:
Теперь давайте попробуем ту же команду mkdir:
…и всё замечательно работает! Никаких ошибок, и создался новый каталог под названием /tmp/try. Подтверждаем это с помощью команды ls:
Удалить существующий файл
Ещё одна опция, которая напрашивается сама собой — можно просто удалить неугодный файл, который мешает созаднию нашего нового каталога.
Для этого примера создадим новый пустой файл с названием /tmp/newtry
Если попробовать mkdir, то получится ожидаемая ошибка:
А теперь мы просто удалим неугодный файл и попробуем mkdir снова:
В этот раз нет никаких ошибок, всё снова сработало:
##mkdir: cannot create directory – Permission denied
Это — ещё один распространённый сценарий при создании каталогов.
В переводе на русский, сообщение говорит: невозможно создать каталог — недостаточно прав доступа. То есть файлов с таким же именем нет, но текущий пользователь, под которым мы пытаемся создать каталог, не имеет прав в текущем месте файловой системы для создания новых каталогов (и файлов).
Основной подход к такой ошибке — проверка прав доступа в каталоге, где получена ошибка. Команда ls и здесь поможет. You should use ls command on the higher level directory to confirm permissions.
Все эти команды сработали без ошибок, и ls показывает, что у меня есть полные права доступа к каталогу try2018 — rwx для меня, rwx для моей группы и r-x для всех остальных (это я читаю фрагмент drwxrwxr-x в строке с try2018).
Теперь давайте уберём права на запись (и создание новых объектов) в каталоге try2018:
Теперь мои права к этому каталогу сменились с полных (rwx — read/write/execute) на только чтение (r-x — read/execute). Так что если я попробую создать в try2018 какой-то подкаталог, выйдет та самая ошибка про недостаток прав доступа:
Чтобы исправить проблему, нужно исправить права доступа на каталоге, где мы видим ошибку. И пробуем mkdir снова:
Вот теперь — порядок, всё создалось,
На сегодня — всё! Будут ещё вопросы по самым основам Linux — обращайтесь!
Источник
Thread: mkdir: permission denied help
Thread Tools
Display
mkdir: permission denied help
Hello everyone, scrub here,
I’m having issues regarding permissions when I try to create a directory from /home.
user@ubuntu:/home$ mkdir playground
mkdir: cannot create directory ‘playground’: Permission denied
I’ve changed my user settings to admin and i still can’t create a directory, I would really appreciate it if i can get some info on how I could resolve this problem.
Thanks.
Re: mkdir: permission denied help
Unless you are in your home direrctory:
you will need to create the direcroty using ‘sudo’:
Look at all those flashing lights! I’ll take one!
The Ubuntu Forums — our little Global Village
Re: mkdir: permission denied help
This question is best responded to by asking you a question — why would you want to create a directory directly in /home? This is for user’s home directories. If you want to make a folder for yourself to access, you should create it in your own personal home directory, e.g. in «/home/dmster».
Now you have «/home/dmster/playground».
Re: mkdir: permission denied help
Hello everyone, scrub here,
I’m having issues regarding permissions when I try to create a directory from /home.
user@ubuntu:/home$ mkdir playground
mkdir: cannot create directory ‘playground’: Permission denied
I’ve changed my user settings to admin and i still can’t create a directory, I would really appreciate it if i can get some info on how I could resolve this problem.
Thanks.
Источник
mkdir: cannot create directory ‘a’: Permission denied #4836
Comments
xzn commented Jan 22, 2020
Cannot create directory with mkdir even though touch , rm , rmdir , mv all works fine.
Microsoft Windows [Version 10.0.19546.1000]
Arch Linux distro created with
wsl —export Arch D:\arch.tar
wsl —import Arch2 D:\WSL\Arch2 D:\arch.tar —version 2
cd /mnt/d/
mkdir a
gives
mkdir: cannot create directory ‘a’: Permission denied
Works fine at home directory though
cd /mnt/c/Users/user
mkdir a
no problem here.
Where should I start to look for a solution for this?
The text was updated successfully, but these errors were encountered:
sirredbeard commented Feb 15, 2020
Can you reproduce this when using C:\ instead?
xzn commented Feb 16, 2020
sirredbeard commented Feb 18, 2020
Where did you get your Arch image?
I have tried the one at https://github.com/yuk7/ArchWSL/releases and except for some issues with permissions on the package GPG signatures it worked well for me.
xzn commented Feb 18, 2020
WSL works fine, exporting it to WSL2 and I have trouble with mkdir .
Will try your link for now.
sirredbeard commented Feb 18, 2020
Give the other Arch image a try, I know it’s a good image.
What are the permissions in the folder what you are trying to create a folder?
Have you tried chown?
xzn commented Feb 18, 2020
chown, chmod all works alongside touch, rm, rmdir, mv, etc. I just noticed mkdir wouldn’t work when git clone gives me permission denied.
Thanks for helping btw! Will try a clean image instead of exporting from one I currently have.
ikastro commented Mar 3, 2020
I have the same issue, I am trying to create a directory so that I can mount the drive
WMLHUST commented May 8, 2020
I delete a git dict in windows explorer, then mkdir failed in WSL terminal.
kudaba commented Jun 1, 2020
I just upgraded to ubuntu version 2 and I’m getting the same issue. I can’t mkdir on my drives in /mnt/c and /mnt/d, but it works fine in my home folder and other areas. All other operations work fine. Even running with sudo doesn’t help. My app that I’m working on also can’t create folders.
kudaba commented Sep 25, 2020
In my case it was a mount issue, or at least changing the mount options fixed it. Running the following command from https://devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/ worked for me:
sudo umount /mnt/c && sudo mount -t drvfs C: /mnt/c -o metadata
It’s unclear but the command seems to be permanent. I’m not sure what happened during the upgrade from WSL 1 to 2 that affected this.
stu85010 commented Oct 15, 2020
In my case, this issue was solved by: giving the Full control permission to your Windows account for this directory with Security tab
Said, I’d created a directory at /c/src and trying to develop there, but the «User» group doesn’t have Full control permission at that path, so the folder creation is failed in WSL in my case.
Then I was added the Full control permission to my Windows account at that folder, and the mkdir worked perfectly in that directory.
kudaba commented Dec 4, 2020
Turns out my mount solution didn’t last through a reboot, but the Full Control to users fixed it, thanks @stu85010.
EmilySeville7cfg commented Apr 16, 2021 •
I have the same issue on Ubuntu 20.04.2 LTS. Besides other commands like touch and I/O redirection fail with the same error. Why it happens?
Источник
PHP: mkdir, почему permission denied при 0777?
Warning: mkdir(): Permission denied in /var/www/www-root/data/www/xndaasdqfjqwm7b.xn--p1ai/vendor/yiisoft/yii2/helpers/BaseFileHelper.php on line 488
SELinux Policy — не включен «SELinux status: disabled»
Что делать
- Вопрос задан более трёх лет назад
- 8781 просмотр
В этой ошибке указано, что php скрипт, расположенный тут:
/var/www/www-root/data/www/xndaasdqfjqwm7b.xn--p1ai/vendor/yiisoft/yii2/helpers/BaseFileHelper.php
видимо пытается создать папку ( mkdir() line 488)
Так какой именно папке вы права задаете?
Посмотрите в коде/логах, какую папку он пытается создать и где и вот там уже и назначайте права.
в 99% случаях это не понимание всей системы прав линукс
В вашем случае это скорее всего владельцы файлов и группы
По мима 777 так же у файла есть владелец и группа
1. отвечает что этот юзер попадет в первую семерку
вторая за вторую
3 соотваетственно все левые
права на файлы выгледят реально так
index.php root:root 777
В вашем случае вы оперируете самой маской 777
но не забываете что вы даже не тот пользователь.
А апачь может например не иметь прав создавать в этой директории.
Так что сделайте ls — l
посмотрите права
Далее поменяйте владельца на правильного
так
В вашем случае скорее всего это www-data:www-data или apache:apache
-R -рекурсивно
Команда потенциально опасная и пишите ее всегда с полным путем а не «.» уж больно шустро она меняет права.
ДАлее если все решилось то не работайте от рута а от того полльзователя от кооторого работает сайт.
Ну или меняйте права постоянно.
А вот если не заработало то нужно знать еще о нескольких моментах
Есть еще дополнительные права и даже утилиты ограничивающие скажем специфические вещи, например разрешающие только дописывать. Или запрещающие удалять что-либо в этом каталоге но разрешающие создавать . это отдельная история.
В любом случае с вас ls -la текущей директории и такой же список с работоающей валидно
Так же есть специфические моды представления php которые запрещяют все что кроме 644 755, вплоть до 777 ;).
А опечатки нет?
Права 777 или 0777?
Должны быть с нулём, в восьмеричной системе )
Еще, как вариант, может быть, на родительской папке висят какие-то ACL? Что говорит такая команда:
getfacl ?
Источник
Ошибка bash permission denied
Многие новички пытаются выполнить запись определенных значений в системные файлы с помощью операторов перенаправления ввода и вывода и получают ошибку bash permission denied. Эта ошибка выводится, даже если вы использовали sudo.
Казалось бы, sudo есть, значит права суперпользователя получены и все должно работать но тут все не так просто. В этой статье мы рассмотрим почему возникает ошибка bash permission denied и как ее обойти.
Ошибка bash permission denied
Допустим, вы выполняете команду:
sudo echo «nameserver 8.8.8.8» >> /etc/resolv.conf
А в результате вместо записи строчки в /etc/resolv.conf получаете ошибку:
bash: /etc/resolv.conf permission denied
В русской локализации это будет отказано в доступе bash linux. Так происходит потому что вы запускаете с правами суперпользователя утилиту echo и она честно выводит вашу строку в стандартный вывод bash с правами суперпользователя. Но bash запущен от обычного пользователя, и когда интерпретатор bash пытается записать полученную строчку в системный файл, естественно, что вы получите ошибку.
Но существует несколько способов обойти это ограничение, вы можете, например, использовать команду tee, которая записывает стандартный вывод в файл или запустить саму оболочку от имени суперпользователя. Рассмотрим сначала вариант с tee:
echo ‘текст’ | sudo tee -a /путь/к/файлу
echo ‘nameserver 8.8.8.8’ | sudo tee -a /etc/resolv.conf
Это очень простое решение, но, кроме того, вы можете запустить оболочку bash с правами суперпользователя, чтобы дать ей доступ на запись:
sudo sh -c ‘echo текст >> /путь/к/файлу’
sudo bash -c ‘echo текст >> /путь/к/файлу’
sudo bash -c ‘echo nameserver 8.8.8.8 >> /etc/resolv.conf
Еще одно решение, призванное, упростить эту команду, добавить такой код в
sudoe() <
[[ «$#» -ne 2 ]] && echo «Usage: sudoe
» && return 1
echo «$1» | sudo tee —append «$2» > /dev/null
>
Дальше для вывода строки в файл выполняйте:
sudoe ‘текст’ >> /путь/к/файлу
sudoe «nameserver 8.8.8.8» > /etc/resolv.conf
Теперь все будет работать, как и ожидалось, и ошибка bash отказано в доступе не появится. Еще можно поменять права на файл, а потом уже выводить в него строку. Но это очень неправильное решение. И даже не потому, что это небезопасно, а больше потому что там намного больше действий.
Выводы
В этой небольшой статье мы разобрали почему возникает ошибка bash permission denied при использовании команды echo для системных файлов, а также несколько путей ее решения. Как видите, все достаточно просто. Надеюсь, эта информация была полезной для вас.
Источник