Cp невозможно создать обычный файл

Обновлено: 06.07.2024

Я написал сценарий специально для решения этой проблемы. Этот скрипт (который основан на python и D-Bus) будет подключать эмпатию к сети каждый раз, когда сеть будет в сети. Даже если соединение опустится и снова подключится, сценарий автоматически снова подключит эмпатию.

Надеюсь, вам понравится. Пожалуйста, оставьте комментарий, если вам нужны какие-либо улучшения.

4 ответа

cp -rv должен, по крайней мере, сказать вам, в каком файле он хранится.

Проблема, с которой вы столкнулись, звучит так, будто вы копируете символическую ссылку (это файл, который просто указывает на другую) в файловую систему, которая не поддерживает символические ссылки. Для этого есть три варианта:

Превратить ваш резервный том в файловую систему, которая принимает символические ссылки (например, переформатировать его из FAT или NTFS в EXT3 или EXT4). Это может быть неприятно в зависимости от того, сколько данных у вас есть (что вам, возможно, придется жонглировать, пока вы это делаете).

Просто игнорируйте символические ссылки и не копируйте их. Это может привести к поломке, если вы попытаетесь восстановить, так как в нем будут отсутствовать некоторые файлы.

Расширьте символические ссылки, чтобы они содержали копию фактических данных. Это занимает больше места.

Первый - мой выбор, но если вам нужен диск для другой системы, не поддерживающей тома EXTx, это проблема.

Независимо от того, являются ли вторые два реалистичными вариантами, я бы запустил cp с его подробным флагом, чтобы увидеть, с чем вы имеете дело. Если это один файл, возможно, простая копия будет в порядке, если это не так, и это просто бесполезный помощник, возможно, пропустить его будет хорошо.

Но, как замечание, большинство людей предпочитают использовать rsync для создания резервных копий. У этого есть много вариантов, которые делают его идеальным для работы. Вы можете прочитать версию ее справочной страницы здесь . У этого есть различные варианты (как обрисовано в общих чертах выше) о том, как обращаться с символическими ссылками.

Конфликт между исходными именами файлов и целевой файловой системой может вызвать ошибку cannot create regular file . Если вы копируете на флэш-накопитель USB, вы, вероятно, используете файловую систему vfat или fat32, на которую распространяются обычные ограничения именования Windows .

Чтобы убедиться в этом, попробуйте создать файл с именем : , который является зарезервированным символом Windows.

Чтобы увидеть ошибку Operation not permitted отдельно, попробуйте создать символическую ссылку без копирования.

Если вы видите эти ошибки, это, вероятно, является причиной вашей проблемы.

Вероятно, самый простой подход - создать архив, свободный от ограничений именования, с которыми вы столкнулись, а также сохраняющий символические ссылки. По умолчанию tar и 7z сохраняют символические ссылки. zip сохраняет символические ссылки с соответствующим флагом. Каждый из них может хранить файлы, в именах которых есть зарезервированные символы Windows. См. Также & ldquo; Как мне сжать / сжать символическую ссылку? & rdquo;

Замена файловой системы vfat чем-то более дружественным для Linux & ndash; такие как ext4 & ndash; облегчит вашу проблему, но за счет снижения мобильности. Почти любая система Linux сможет смонтировать диск, но другие распространенные системы потребуют дополнительной работы. Смотрите & ldquo; Создание раздела ext4 из консоли & rdquo; и справочную страницу mke2fs для получения подробной информации о завершении процесса создания. См. & Ldquo; Как читать разделы ext4 в Windows? & rdquo ;, & ldquo; Как мне смонтировать файловую систему ext4 в OS X? & rdquo; и & ldquo; Как подключить Ext4 с помощью OS X Fuse & rdquo; если вам нужно переместить этот диск в другие операционные системы.

Всем здравствуй. Нужна помощь гуру, help?! Столкнулся с такой проблемой fopen failed : No such file or directory Could not create “/home/andr/Desktop/“ Права стоят чтение и запись. Desktop 51мг Архив GZIP x86_64 GNU/Linux Debian


Покажи целиком команду которую запускаешь и ls -l /home/andr/ | grep Desktop

kardapoltsev ★★★ ( 21.07.21 01:52:11 )
Последнее исправление: kardapoltsev 21.07.21 01:52:29 (всего исправлений: 1)


cp /usr/share/wordlists/rockyou.txt.gz ./Desktop

cp: Невозможно создать обычный файл ‘/Desktop/‘: это не каталог

cd: Нет такого файла или каталога : Desktop

ls -l /home/andr/ | grep Desktop

-rwxrwxr-x 1 andr adnr 53357329 июл 19 21:56 Desktop

Конечно нет. Есть «

/Desktop» или «$HOME/Desktop» или «/home/andr/Desktop». Одно из этих значений и подставляй в свои команды.

andytux ★★ ( 21.07.21 08:40:43 )
Последнее исправление: andytux 21.07.21 08:41:38 (всего исправлений: 1)



cp /usr/share/wordlists/rockyou.txt.gz ./Desktop

cp: Невозможно создать обычный файл ‘/Desktop/‘: это не каталог


Ты эту команду из какой директории запускаешь? Запись ./Desktop предполагает что ты должен находиться в домашней директории своего юзера. Иначе используй абсолютный путь /home/user/Desktop

-rwxrwxr-x 1 andr adnr 53357329 июл 19 21:56 Desktop

Эмм, это не каталог. Юзер и группа тоже различаются.

-rwxrwxr-x 1 andr andr 53357329 июл 19 21:56 Desktop

Вот такое он выдаёт


Это не каталог. Это файл. Что говорит потом команда ls -l

Что это за файл и откуда он там взялся, уже другой вопрос. Попробуй команду file Desktop

Для начала нам нужна база паролей для брута. В Кали уже есть база из 14 миллионов паролей и она называется «rockyou». Давайте её найдём, перенесём и распакуем на рабочий стол. Команда locate rockyou.txt.gz ищет файл «rockyou.txt.gz» по всей системе. Вот, на скриншоте видно, что путь до файла/usr/share/wordlists/rockyou.txt.gz.Теперь давайте перенесём файл на рабочий стол командой cp/usr/share/wordlists/rockyou.txt.gz./Desktop/. Осталось только распаковать архив командой gunzip -f /Desktop/rockyou.txt.gz.

Здесь прекрасно все: кали, инструкция из вк и ТС, не понимающий, что делает, но уже крутой хакер.


Любой, даже начинающий линуксятник, как правило знаком со многими штатными, консольными утилитами Linux.
Не исключение и консольная утлилита - cp, которая позволяет в консоли/терминале производить копирование файлов и папок из одной директории/каталога в любую другую.
В этой статье мы с Вами научимся научить её делать то, что она изначально делать просто не умеет, а именно создавать новые директории/каталоги/папки/файлы при рекурсивном копировании.
И в результате мы с вами получим удобный инструмент - 2 (два) в одном - утилиты mkdir и cp, что весьма улучшит функционал утилиты cp.

Т.к. утилита cp консольная, то для работы с ней нам понадобится, естественно Терминал (Ctrl+Alt+T).

Открываем его и, для эксперимента, давайте попробуем выполнить копирование содержимого какой-либо папки или самой папки, например содержимое папки: applications
из .local/share/ - Домашняя папка (/home)
Полный путь:
.local/share/applications/ или

/.local/share/applications/
например в каталог Документы и пропишем при копировании создание в нём новой папки Проба и подпапки в ней 14 , куда будет скопировано содержимое папки applications и посмотрим, что у нас в результате получится.

Вводим в Терминале (Ctrl+Alt+T) следующий код и жмём на Ентер на клавиатуре:
cp -R .local/share/applications/* Документы/Проба/14
или
cp -R



показывающую и кричащую нам, как раз о том, что утилита cp не умеет создавать при копировании новые директории/каталоги/папки, а значит у нас нет другого выхода, как сначала воспользоваться консольной утилитой по созданию новых директорий/каталогов/папок:
- mkdir
- или в Графическом режиме (GUI) в вашем файловом менеджере (ФМ) и только после этого копировать содержимое папки applications в заранее созданные в каталоге Документы новые папку Проба и подпапку в ней 14 !

Не очень удобно, правда ведь?!
Что же делать?!
Как же всё таки нам сделать, чтобы она (утилита cp) всё же могла выполнить нашу задачу?

На самом деле, всё очень просто!
Нам всего лишь надо добавить в файл .bashrc (можно в самый его конец, с новой строки) в Домашней папке (/home) следующий код/функцию, обязательно сохраняя отступы, как в нём:
Но такай код/функция будет работать только при копировании в пределах Домашнего каталога (/home).
Поэтому, если вы планируете копировать что-либо с созданием каталогов/папок не только в пределах Домашнего каталога (/home), а и в системной директории / (например в /opt/ ), то тогда уже нужен другой код/функция:
Но при её выполнении нужно уже будет вводить свой пароль Пользователя.

Cделать это можно и в Терминале (Ctrl+Alt+T) с помощью того же консольного редактора nano, выполнив команду:
(напоминаю, после внесения изменений в файл в редакторе nano, для сохранения изменений жмёте на клавиатуре на Ctrl+O (буква O)+Enter и на Ctrl+X для выхода в консоль/терминал)
nano .bashrc
или
nano

Выглядеть это должно так:


и активировать этот файл .bashrc в данной сессии консоли/терминала командой:
(если этого не сделать, то введёный код/функция работать не будет, а только после закрытия консоли/терминала и заново её/его запуска, что в данном случае не очень удобно)
. .bashrc
или
.

Ну, и, для ленивых, сделать всё это одной командой в Терминале (Ctrl+Alt+T):
echo -e 'mkcp() " || mkdir -p "$"\n cp "$@"\n>' >> .bashrc; . .bashrc
или
echo -e 'mkcp() " || mkdir -p "$"\n cp "$@"\n>' >>


Если с созданием каталогов/папок в системной директории / (например в /opt/ ), то:
echo -e 'mkcp() " || sudo mkdir -p "$"\n sudo cp "$@"\n>' >> .bashrc; . .bashrc
или
echo -e 'mkcp() " || sudo mkdir -p "$"\n sudo cp "$@"\n>' >>

Давайте вкратце, чтобы простому пользователю было понятно, мы с вами разберём, что же мы в этом коде/функции такого понаписали?

А написали мы с вами фактически "новую" утилиту!
И "назвали" мы её - mkcp.
Вернее, мы с вами объединили вместе 2 (две) утилиты - mkdir и cp.

Ну, и теперь давайте снова выполним в Терминале (Ctrl+Alt+T) копирование, но только вместо cp мы с вами в коде напишем - mkcp, т.е. то, что мы с вами "создали", в результате чего, мы с вами видим, что всё прошло успешно, без каких-либо ошибок:
mkcp -R .local/share/applications/* Документы/Проба/14
или
mkcp -R


Чтобы убедиться, что всё прошло на УРА, давайте проверим, действительно ли всё отработало и в каталоге Документы создались новые папка Проба и подпапка в ней 14 поочерди командами ls:
ls Документы
ls Документы/Проба
ls Документы/Проба/14
в результате чего мы получим выводы, подтверждающих, что всё создалось и всё скопировалось:




То же самое мы видим и в Графическом режиме (GUI) в вашем файловом менеджере (ФМ):




Для сравнения, чтобы убедиться, что мы скопировали в созданные нами при копировании папки именно то, что мы хотели, сделаем вывод ls .local/share/applications/ командой в Терминале (Ctrl+Alt+T):
ls .local/share/applications
или
ls


где видим, что все файлы и папки из это директории соответствуют всем файлам и папкам в созданной нами при копировании папке 14 - полный путь: Документы/Проба/14

Те же папки и файлы и в Графическом режиме (GUI) в нашем файловом менеджере (ФМ):


А значит, мы с вами всё сделали правильно и всё работает должным образом!

Anonim

Я всегда делал резервную копию моего домашнего каталога на внешний жесткий диск с помощью cp -r команда.

я пытался sudo cp -r но проблема не устранена. Что я делаю неправильно?

  • Какая файловая система у внешнего жесткого диска.

cp -rv должен хотя бы сказать вам, на каком файле он запирается.

Проблема, с которой вы столкнулись, звучит так, будто вы копируете символическую ссылку (то есть файл, который просто указывает на другой) в файловую систему, которая не поддерживает символические ссылки. Для этого есть три варианта:

Превратите резервный том в файловую систему, которая принимает символические ссылки (например, переформатируйте ее из FAT или NTFS в EXT3 или EXT4). Может быть больно в зависимости от того, сколько у вас данных (что вам, возможно, придется передергивать, пока вы это делаете).

Просто игнорируйте символические ссылки и не копируйте их. Это может привести к поломке, если вы попытаетесь восстановить, так как некоторые файлы будут отсутствовать.

Разверните символические ссылки, чтобы они содержали копию фактических данных. Это занимает больше места.

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

Независимо от того, являются ли вторые два реалистичными вариантами, я бы побежал cp с его подробным флагом, чтобы увидеть, с чем вы имеете дело. Если это один файл, возможно, подойдет обычная копия, если нет, и это просто бесполезный помощник, возможно, его можно пропустить.

Но в качестве примечания: большинство людей предпочитают использовать rsync делать резервные копии. Он имеет множество опций, которые делают его идеальным для работы. Вы можете прочитать версию его справочной страницы здесь. Он имеет различные варианты (как описано выше) о том, как обрабатывать символические ссылки.

Конфликт между именами исходных файлов и файловой системой назначения может вызвать cannot create regular file ошибка. Если вы копируете на USB-накопитель, вы, вероятно, используете файловую систему vfat или fat32, на которую распространяются обычные ограничения Windows на именование.

Чтобы увидеть это, попробуйте создать файл с именем : , который является зарезервированным символом Windows.

Чтобы увидеть Operation not permitted ошибка отдельно, попробуйте создать символическую ссылку без копирования.

Если вы видите эти ошибки, вероятно, это причина вашей проблемы.

Увидеть ваш dmesg . Обычная проблема - это либо проблема файловой системы, либо отказ жесткого диска (и, следовательно, проблема файловой системы).

Вы можете размонтировать внешний диск, а затем запустить fsck . Например

Я просто столкнулся с той же проблемой (на самом деле в Cent OS через VirtualBox), и проблема была связана с разрешениями. У меня был общий каталог с моим локальным компьютером (Mac на OSX Mavericks), я попытался cp и он отказался Protocol error . На моем локальном компьютере я сменил владельца каталога на обычного пользователя (меня) (с root ) и группу к чему-то более общему, чем wheel . Итак, оказалась основная проблема с разрешениями.

Читайте также: