Chmod не является внутренней или внешней командой исполняемой программой или пакетным файлом
Хотел выставить для папки рекурсивно права 644 и ввел команду chmod -R 644 /.
Спохватился поздно, но выполнение команды прервал.
Посоветуйте, как минимизировать ущерб. И реально ли восстановить систему. Или теперь придется ставить с нуля?
- Вопрос задан более трёх лет назад
- 12033 просмотра
Оценить 5 комментариев
У меня все еще запущен mc. Поставил права на запуск для приложений из bin, но команды все равно выдают permission denied, хотя chmod нормальный. Что еще может мешать запуску (chmod какого файла)?
На bin — да. Но на корень — нет. Через mc нельзя выбрать корень насколько я понимаю. Если на корень нет прав выполнения, то вложенные команды выполняться тоже не будут?
можно изловчиться в mc
C-x s — создать символическую ссылку /zzz на /
C-x c — установить права на эту ссылку, тем самым на корень
Насколько я понимаю, если на корень нет прав выполнения, то нельзя перейти ни в один каталог, в т.ч. текущий для mc.
Да, бывает и такое =(
Ух, знатный выстрел в собственную ногу.
Я бы загрузился с livecd, скопировал конфиги/данные и переустановил бы ОС. Все остальные варианты не дадут 100% уверенности, а нафиг нужен сервер с кучей скелетов в шкафу.
я раз дал 777 всей системе… тогда тоже ничего больше не работало :)
грузимся в «сингл моде» и мы можем выполнять любые команды для восстановления прав
Ммм… Иногда rm -rf / помогает, но не уверен, что в этом случае спасёт, тут всё запущено уже давно и глубоко…
Я попробовал. Говорит «rm: невозможно удалить корневой каталог «/»». У меня Ubuntu 10.04. Это баг или фича?
Опечататься легко, достаточно точку пропустить. Сам так ошибался, но правда с chown и был доступ к Recovery Mode.
Скопировать нормальный chmod через scp -p /bin/chmod user@hostname: , затем /home/user/chmod +x /bin/* не получается? (Вместо «user», конечно, правильное имя поставить надо.)
Все команды выдают permission denied. При этом у меня все еще запущен mc и я могу вводить команду. Поставил права на запуск для приложений из bin, но команды все равно выдают permission denied, хотя chmod нормальный.
Ничего не работает. Все команды выдает ошибку доступа. Все что пока работает (пока не разорвалась сессия) — mc (и соответственно доступные в нем внутренние команды).
если бы это была gentoo, я бы восстановил build environment и пересобрал мир.
соотвественно можно попробовать сделать нечто похожее и в бинарном дистрибутиве, сгенерировав список пакетов установленных в системе и накатить эти пакеты заного с флагом force или что-то вроде, при этом не забыв сказать, что конфиги не трогать.
это общие соображения.
частное решение будет зависеть от конкретного дистрибутива пакетного менеджера и здравого смысла.
здравый смысл заключается в том, что если не хочется потом еще в течении n-ного времени вычищать
подземные стуки, а они будут, нужно переставить систему с нуля.
Но конфиги-то тогда у человека все рано слетят? Не говоря уж о том, что build environment — тоже, поди, команда?
А у него ни одна команда не работает.
Ну у вас ежели mc запущен, то выставьте 755 на содержимое /lib, /usr/lib и /bin, должно хватать для запуска chmod
Ещё никто не добавил руководство по использованию для метки chmod, но есть описание этой метки.
- Конкурсные 0
- Неотвеченные
- Цитируемые
- Рейтинг
- Неотвеченные (мои метки)
Как написать команду chmod для этого случая?
Мне нужно создать директиву company/users И не разрешать никому делать изменений . Я делаю это так chmod u+rx,g+rx,o+rx company/users. Но когда пытаюсь создать текстовый файл не получаю permission .
Запрет пользователем сайта доступа к файлам .php .js и т.д. по адресу
Столкнулся со следующей проблемой. На сайте есть форма, обрабатывается с помощью файла mail.php При переходе по адресу //:сайт/code/mail.php происходит отправка пустой формы. UPD:Возможно решения для .
Как запустить exe файл?
Невозможно удалить папку с атрибутом "Для чтения" Python
Хочу удалить папку, в которой есть файлы с атрибутом "Только для чтения". При этом, я пытаюсь убрать у папки этот атрибут, но не выходит. Даже при помощи итерации и поэтапным изменением типа .
Как сделать так что бы git создавал файлы от имени пользователя www-data в linux
Доброго времени суток. До git pull владельцем всех файлов является пользователь www-data После git pull владельцем обновлённых файлов является пользователь под которым я зашел в систему Before pull : .
Как через execl сделать файл исполняемым?
Необходимо через execl сделать файл исполняемым, к сожалению компилятор ругается execl(“/bin/bash”,"chmod +x”,1.txt, NULL)
Установка GDevelop на ubuntu 18.04
Захотел посмотреть что такое GDevelop 5 - скачал файл с офиц. сайта. Выпольнил команду chmod a+x GDevelop-5-5.0.0-beta97.AppImage , как сказано на офиц. сайте. После этого выполнил ./GDevelop-5-5.0.0-.
PHP ZipArchive 600
Допустимо ли использовать для chmod синтаксис с указанием символов +- перед каждым знаком rwx?
Как в консоли Open Server поменять права на папку?
Как в консоли Open Server поменять права на папку? При вводе команды chmod -r 777 art-code Выдает: "chmod" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. В .
Как преобразовать строку с правами доступа обратно в число?
Есть такая замечательная функция stat.filemode, которая преобразует мутное число, описывающее права доступа к файлу, в простую и понятную строку: >>> os.stat('test.txt').st_mode 35248 >&.
Изменить права на файл во всех подпапках Linux
Есть множество папок. В каждой есть файл example.php. Права на этот файл в количестве 200+ шт -r--r--r-- Задача - изменить на всех файлах, рассованным по подпапкам установить права -rwxr-xr-x
Создание папки в скрипте и назначение прав на запись
Имеется скрипт, который запускается из под рута, но при этом создает некоторые папки и файлы в домашней директории пользователя. Из-за этого папки оказыватся недоступны для пользователя (точнее .
Как группе выдать права доступа к папке в Linux?
У меня имеются 2 пользователя: usr1 и usr2 Выполняя команду: id usr1 Мы получаем: uid=1(usr1) gid=1(usr1) groups=1(usr1),3(groups_test) Выполняя команду: id usr2 Мы получаем: uid=2(usr2) gid=2(usr2) .
Корректные права на ссылку папки
есть папка web в ней находится ссылка на папку ~uploads, внутри нее есть так же куча папок и подпапок, права на нее ставил так: sudo chmod -R 0777 web/uploads, и это вроде как работает, картинки .
Всем привет, простите, что приходится возиться с новичком)) В общем, учу Python по книге A Byte of Python (Russian) Версия 2.01 Swaroop C H (Translated by Vladimir Smolyar). При написании простой программы, которая создает резервные копии файлов у меня вывелась такая вот ошибка. Архиватор стоит у меня WinRAR. Проверил переменную Path, путь к папке этого архиватора там тоже есть. Прошу помочь!
А вы уверены, что в вашей WinRAR папке лежит исполняемый файл zip.exe? Поскольку ваша программа пытается вызвать этот самый исполняемый файл.
3 ответа 3
Пишу пост впервые, поэтому сильно не ругайте, сам только учусь (стаж - 1 неделя :D ). Я смог заставить работать WinRar за место Zip'а, но немного изменил код, у меня он получился таким:
В 3 и 4 строчке изменил путь, предыдущий меня не устраивал, пускай не так красиво, но вроде работает.
В переменной zip_command (7 строка) изменил zip на rar (Гениально) аргумент поставил "а", то бишь создать архив, по факту это все изменения.
В переменную path добавил путь к WinRar, у меня он такой:
После в терминале (использую Visual Studio Code) нужно указать путь к папке, (команда вызова rar не работает, выдает ту же самую ошибку что нет такой команды. Подскажите кто в теме, я в силу отсутствия опыта и знаний сказать точно не могу :) ) путь таков:
После запуска программы все работает:
Надеюсь у Вас тоже заработает, пишите если что-то не так.
UPD: Понял причину почему rar не работает через path, хотя путь добавлен был верно, проверил догадку на счет пути к самой директории WinRar, он был: C:\Program Files\WinRAR\rar.exe Видимо из-за пробела в Program Files (А может из-за еще чего) было невозможно вызвать rar из командной строки. Перенес директорию WinRar в другое место (чтобы путь директории был без пробелов), поставил новый путь:
и вуаля - rar вызывается, программа работает без костыля с указанием папки в терминале.
Причины ошибки «Не является внутренней или внешней командой» при выполнении команд в командной строке Windows 10 и Windows 11
Для того, чтобы понять суть ошибки, давайте рассмотрим, что происходит при выполнении команды в командной строке, в качестве примера будем использовать такой код:
- В случае, если «команда» является собственной встроенной командой консоли (в качестве примера — cls), она выполняется с заданными параметрами.
- Если «команда» — это какой-то файл .exe, .cmd, .bat или иной, например, pip, python или adb, выполняется попытка его запуска из расположения, где запущена командная строка (выделено на изображении ниже) или из расположений, добавленных в системную переменную PATH (о которой поговорим подробнее далее). При удачном запуске и правильно переданных параметрах команда выполняется.
Отсюда следуют наиболее распространённые причины появления ошибки при выполнении команды:
- Самая распространённая причина — отсутствие исполняемого файла в папке, где запущена командная строка и в папках, содержащихся в PATH.
- Ошибки при написании команды: при ошибке в имени файла, он не будет найден, что и приведёт к указанной ошибке.
- Файл отсутствует где-либо, например, вы пробуете использовать telnet, в то время, когда соответствующий компонент Windows не установлен.
- Редко — запускаемый через командную строку файл действительно не является исполняемой программой: изначально сам по себе или из-за повреждений.
Теперь о том, что делать в рассматриваемой ситуации.
Для исправления ошибки «Не является внутренней или внешней командой, исполняемой программой или пакетным файлом» в зависимости от ситуации можно использовать следующие подходы.
Переход к папке с исполняемым файлом в командной строке
Если выполнение команды требуется не на регулярной основе, достаточно перейти в командной строке в папку, содержащую нужный файл, делается это следующим образом:
- Например, мы знаем, что python.exe для последней версии Python на момент написания этой статьи располагается в папкеpip.exe — там же во вложенной папке Scripts (если окажется не ясным, как попасть в эту папку, процесс показан в видео ниже), adb.exe — где-то в папке с platform-tools и так далее. Скопируйте этот путь, сделать это можно из адресной строки проводника.
- Если командная строка запущена на том же диске, где находится нужный исполняемый файл, введите команду вида:
- Если командная строка запущена на диске C:, а исполняемый файл находится на другом диске, то перед 2-м шагом используйте команду вида (здесь D меняем на нужную букву диска) D: с последующим нажатием Enter.
- Введите нужную команду, которая ранее сообщала об ошибке — теперь она должна выполниться успешно.
Добавление папки с программой в системную переменную среды PATH
В случае, когда использование команд требуется регулярно, например, для git, разумным будет добавить папку с этим исполняемым файлом в PATH, чтобы затем в любой момент времени выполнять команды, независимо от того, в какой папке открыта командная строка:
Примечание: если ошибка возникает при использовании команд python, обратите внимание, что при первоначальной установке вам предложат добавить необходимые пути в PATH (отметка Add Python to PATH), то же самое часто бывает и при установке других программ:
Установка недостающих компонентов
Иногда проблема возникает из-за того, что нужный файл попросту отсутствует на компьютере:
- Вы пробуете использовать команды telnet, но не зашли в Панель управления —Программы и компоненты — Включение или отключение компонентов Windows и не включили «Клиент Telnet».
- Запускаете команды pyinstaller, но предварительно не установили его командой pip install pyinstaller
- Пробуете использовать команды adb.exe, но не установили необходимые компоненты Android SDK Platform Tools.
Аналогичная ситуация может быть и для многих других, не входящих в стандартную поставку Windows 10 и Windows 11 компонентов, например, java.
Если ошибка возникает при запуске системных инструментов Windows
Видео инструкция
Надеюсь, статья и видео помогли разобраться с проблемой и помогли в её решении. Остаются вопросы? — задавайте их в комментариях, я постараюсь ответить.
Всем доброго дня, такая ситуация - хочу из линукса, Убунта 20.04, подключится в Windows 10 20H2 удаленно по SSH
всё настроил, и на Убунте и на винде служба sshd работает порт слушает, сгенерил и на винде и на убунте ключи,
пробовал для начала подключится без авторизации по ключам - только по паролю, всё ОК, из убунты к винде подключился выполнил
ввёл пароль и всё, я в винде, но нужна авторизация по ключам,
В /etc/ssh/sshd_config строчку PubkeyAuthentication yes выставил
Также и в винде в файле c:\windows\system32\openssh\sshd_config
sshd и там и там перезапустил
получаю вот такой вывод:
$ssh-copy-id user@ipaddress &> ~/ssh_log (Кстати где SSH вёдёт свои логи? в /var/log/ ненашел ничего)
смотрю в ~/ssh_log, там следующее:
- Вопрос задан 23 дек. 2021
- 344 просмотра
Простой 9 комментариев
про венду вообще ничего не знаю, но логировать клиента нет смысла, просто сделать -vvv
но опять же, в клиентских логах инфы практически никакой, надо на сёрвере смотреть, почему не пускает
я бы забыл про ssh-copy-id, нагуглил где ключ должен в винде лежать и с какими правами, и тупо записал руками
FanatPHP, также в папке юзера в .ssh, с правами только юзера, т.е. c:\users\user\.ssh
Вручную тоже закидывал и туда делал еще и в папке .ssh делал папку authorized_keys и туда закидывал, бесполезно,
А в инете больше статей о том как из винды в линукс заходить по ссх, но не наоборот
FanatPHP, вроде же ясно написал
закинул октрытый ключ в папку c:\users\user\.ssh - ssh не коннектится
сделал папку c:\users\user\.ssh\authorized_keys закинул еще и туда, все равно не коннектится
Nordman99, попробуйте вот что, на винде удалите папку authorized_keys, затем с вашей убунты выполните команду:
Нужно полистать конфигурацию вашего sshd сервере на винде и посмотреть где он считает должны быть публичные ключи пользователя.
Это может быть и $USERHOME/.ssh/authorized_keys и $USERHOME/.ssh/authorized_keys2 и что-нибудь еще.
ssh-copy-id может не знать про то, где должны лежать публичные ключи в винде, его нет смысла использовать в данном случае.
Прочитайте документацию к sshd серверу под виндой чтобы понять где он ищет публичные ключи пользователя.
Нужно полистать конфигурацию вашего sshd сервере на винде и посмотреть где он считает должны быть публичные ключи пользователя
PasswordAuthentication no
PubkeyAuthentication yes
Прописал путь к authorized_keys таким образом:
Было: AuthorizedKeysFile .ssh/authorized_keys
Прописал: AuthorizedKeysFile __USERPROFILE__/.ssh/authorized_keys
Кстати странно что было AuthorizedKeysFile .ssh/authorized_keys (в линуксовом конфиге эта строчка такая же) - что подразумевается под расположением .ssh/authorized_keys ? Если папка пользователя то где путь к ней перед .ssh?
вообщем полистав виндовый конфиг ниже можно увидеть такие строчки:
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Отсюда делаю вывод - в виндовом конфиге к переменным окружения обращаться нужно также через __ до и после, т.к. PROGRAMDATA это системная переменная окружения, обычно - c:\Programdata
поэтому путь к authorized_keys я и прописал как _USERPROFILE__/.ssh
т.к. USERPROFILE в винде это путь к папке профиля текущего пользователя, в моем случае - c:\Users\мояпапка
По совету uvelichitel прописал также в конфиге
Match User Me
AuthorizedKeysFile __USERPROFILE__/.ssh/authorized_keys
а оригинальные строчки
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
закомментировал
sshd ессно перезапускал, не коннектится по ключу все равно,
Кстати пробовал коннектися из убунты и через putty, сгенерил в патти ключи (т.к. с ключами openssh он не работает, вернее работает но если их сконвертировать формат патти но я не стал), также закинул открытый ключ на сервер в файл authorized_keys - и патти не коннектится, выдаёт тоже самое
Permission denied (publickey,keyboard-interactive).
Кстати странно что было AuthorizedKeysFile .ssh/authorized_keys (в линуксовом конфиге эта строчка такая же) - что подразумевается под расположением .ssh/authorized_keys ? Если папка пользователя то где путь к ней перед .ssh?
Подразумевается относительный путь. У пользователя по умолчанию рабочая папка равна его домашней папке. Тем более что в Линукс домашняя папка пользователя может быть где угодно (/home/user1 или /root или /opt/user2 или /var/www) поэтому для линукса это правильный путь.
В Windows по идее должно работать %USERPROFILE%/.ssh/authorized_keys
но я тут вычитал, что если у тебя пользователь - администратор, но такая штука не сработает. Надо добавлять публичный ключ в %PROGRAMDATA%/ssh/administrators_authorized_keys
Вот из оригинальной инструкции:
Note that if you are setting up keys for an administrator user, putting the public key to %USERPROFILE%/.ssh/authorized_keys will not work. You must append the public key to %PROGRAMDATA%/ssh/administrators_authorized_keys instead.
И дополнительно нужно еще и права доступа к этому файлику защитить, для этого можно выполнить повешелл скрипт, который добавит нужные ACL:
Читайте также: