Ошибка: mkdir - Cannot Create Directory

Перевод: mkdir: cannot create directory

Новички в Linux часто не понимают, что делать при получении ошибки “mkdir: cannot create directory” во время работы с командной строкой. Есть несколько причин возникновения такой ошибки, и в этом переводе своей англоязычной статьи с сайта Unix Tutorial я покажу эти причины и их устрание на примерах.

mkdir: cannot create directory – File exists

В переводе с английского сообщение означает: невозможно создать каталог - файл уже существует.

ФАЙЛ существует? А при чём тут проблема создания каталога? И почему ошибка говорить “существует файл”, когда мы вообще пытаемся создавать каталог, а не файл?

На самом деле всё просто: большинство объектов в Linux являются файлами и структурами в файловой системе. Поэтому эта ошибка означает, что там, где вы пытаетесь выполнить команду создания нового каталога, уже существует другой объект с таким же именем. В данном случае - это файл, а не каталог. Но у файла такое же имя, как у желаемого каталога, так что создать второй объект с таким же именем не получится.

Например, ошибка

[email protected]:~$ mkdir /tmp/try
mkdir: cannot create directory – File exists

намекает, что у нас уже есть файл с именем /tmp/try.

Очень просто проверить эту гипотезу с помощью команды ls:

[email protected]:~$ ls -ald /tmp/try
drwxr-xr-x 2 greys root 4096 Nov 5 18:55 /tmp/try

Так и есть, у нас существует файл с таким именем.

Возможные решения проблем mkdir: cannot create directory

Сценарий file exists

Если файл с таким именем уже существует, а каталог всё же очень хочется создать, то есть решения.

Переименовать (или переместить) существующий файл

Используем команду mv для перемещения /tmp/try в другой каталог (или просто сменим имя try на другое, оставив файл в том же каталоге /tmp). Вот как можно переименовать файл в имя oldtry:

[email protected]:~$ mv /tmp/try /tmp/oldtry

Теперь давайте попробуем ту же команду mkdir:

[email protected]:~$ mkdir /tmp/try

…и всё замечательно работает! Никаких ошибок, и создался новый каталог под названием /tmp/try. Подтверждаем это с помощью команды ls:

[email protected]:~$ ls -ald /tmp/try /tmp/oldtry
drwxr-xr-x 2 greys root 4096 Nov 5 18:55 /tmp/oldtry
drwxrwxr-x 2 greys greys 4096 Nov 5 19:08 /tmp/try

Удалить существующий файл

Ещё одна опция, которая напрашивается сама собой - можно просто удалить неугодный файл, который мешает созаднию нашего нового каталога.

Для этого примера создадим новый пустой файл с названием /tmp/newtry

greys[email protected]:~$ touch /tmp/newtry
[email protected]:~$ ls -lad /tmp/newtry
-rw-rw-r-- 1 greys greys 0 Nov 5 20:50 /tmp/newtry

Если попробовать mkdir, то получится ожидаемая ошибка:

[email protected]:~$ mkdir /tmp/newtry
mkdir: cannot create directory '/tmp/newtry': File exists

А теперь мы просто удалим неугодный файл и попробуем mkdir снова:

[email protected]:~$ rm /tmp/newtry
[email protected]:~$ mkdir /tmp/newtry

В этот раз нет никаких ошибок, всё снова сработало:

[email protected]:~$ ls -lad /tmp/newtry
drwxrwxr-x 2 greys greys 4096 Nov 5 20:50 /tmp/newtry

##mkdir: cannot create directory – Permission denied

Это - ещё один распространённый сценарий при создании каталогов.

В переводе на русский, сообщение говорит: невозможно создать каталог - недостаточно прав доступа. То есть файлов с таким же именем нет, но текущий пользователь, под которым мы пытаемся создать каталог, не имеет прав в текущем месте файловой системы для создания новых каталогов (и файлов).

Основной подход к такой ошибке - проверка прав доступа в каталоге, где получена ошибка. Команда ls и здесь поможет. You should use ls command on the higher level directory to confirm permissions.

Например:

[email protected]:/tmp$ mkdir try2018
[email protected]:/tmp$ mkdir try2018/anotherone
[email protected]:/tmp$ ls -ald try2018
drwxrwxr-x 3 greys greys 4096 Nov 5 21:04 try2018

Все эти команды сработали без ошибок, и ls показывает, что у меня есть полные права доступа к каталогу try2018 - rwx для меня, rwx для моей группы и r-x для всех остальных (это я читаю фрагмент drwxrwxr-x в строке с try2018).

Теперь давайте уберём права на запись (и создание новых объектов) в каталоге try2018:

[email protected]:/tmp$ chmod a-w try2018
[email protected]:/tmp$ ls -ald try2018
dr-xr-xr-x 3 greys greys 4096 Nov 5 21:04 try2018

Теперь мои права к этому каталогу сменились с полных (rwx - read/write/execute) на только чтение (r-x - read/execute). Так что если я попробую создать в try2018 какой-то подкаталог, выйдет та самая ошибка про недостаток прав доступа:

[email protected]:/tmp$ mkdir try2018/yetanotherone
mkdir: cannot create directory 'try2018/yetanotherone': Permission denied

Чтобы исправить проблему, нужно исправить права доступа на каталоге, где мы видим ошибку. И пробуем mkdir снова:

[email protected]:/tmp$ chmod a+w try2018
[email protected]:/tmp$ mkdir try2018/yetanotherone

Вот теперь - порядок, всё создалось,

[email protected]:/tmp$ ls -ald try2018/yetanotherone
drwxrwxr-x 2 greys greys 4096 Nov 5 21:05 try2018/yetanotherone

На сегодня - всё! Будут ещё вопросы по самым основам Linux - обращайтесь!




Давайте учиться вместе!

Заходите на страницу Facebook или присоединяйтесь к чату в Telegram:
Я использую браузер Brave
Попробуйте сами: Brave Browser
IT Консалтинг
У меня есть консалтинговая компания: Tech Stack Solutions. Я помогаю планировать и создавать облачные решения на базе AWS и помогаю с развёртыванием и поддержкой сервисов на Unix/Linux. Свяжитесь со мной тут.
Последние заметки
18 Jun 2021

Вышла CentOS 8.4

28 May 2021

Клавиатура Keychron K3

11 May 2021

Изучаем tmux

Recent Tweets