- Running my program says «bash: ./program Permission denied» [closed]
- 3 Answers 3
- Ошибка bash permission denied
- Ошибка bash permission denied
- Выводы
- Ошибка «Permission denied» в Linux
- Изменение прав в терминале
- Изменение прав в файловом менеджере
- В заключение
- Linux Bash “Permission Denied” Error and Solutions
- Bash Permission Denied Error
- Set Execution Permission
- Set Execution Permission For File System
- Set Target/Directory Path Permission
Running my program says «bash: ./program Permission denied» [closed]
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
I am running Ubuntu on computer 1 and computer 2. I compiled a C++ program on computer 1, and I can execute it from the terminal using ./program_name . It runs fine. However, when I try to do this on computer 2, it says: bash: ./program_name: permission denied What’s wrong and what can I do about it?
How did you get the program from computer 1 to computer 2? Did you copy the executable or recompile the source code? What is the output of the command “ls -l program_name”?
This seems to be off topic for SO, because it is not about programming but rights management on Linux
I wrote a .sh file. It refused to execute with this error message. I would say this is definitely on-topic for StackOverflow. I’ve nominated for re-opening.
3 Answers 3
chmod u+x program_name . Then execute it.
If that does not work, copy the program from the USB device to a native volume on the system. Then chmod u+x program_name on the local copy and execute that.
Unix and Unix-like systems generally will not execute a program unless it is marked with permission to execute. The way you copied the file from one system to another (or mounted an external volume) may have turned off execute permission (as a safety feature). The command chmod u+x name adds permission for the user that owns the file to execute it.
That command only changes the permissions associated with the file; it does not change the security controls associated with the entire volume. If it is security controls on the volume that are interfering with execution (for example, a noexec option may be specified for a volume in the Unix fstab file, which says not to allow execute permission for files on the volume), then you can remount the volume with options to allow execution. However, copying the file to a local volume may be a quicker and easier solution.
Ошибка 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
Еще одно решение, призванное, упростить эту команду, добавить такой код в ~/.bashrc:
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 для системных файлов, а также несколько путей ее решения. Как видите, все достаточно просто. Надеюсь, эта информация была полезной для вас.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Ошибка «Permission denied» в Linux
Все операционные системы семейства Linux имеют четко разграниченные права доступа. В своей домашней директории пользователь может делать все, что ему угодно, до тех пор, пока укладывается в отведенные рамки. Попытка выйти за них приводит к появлению ошибки «Permission Denied».
Изменение прав в терминале
Рассмотрим вариант, в котором необходимо прочесть текстовый документ, созданный другим пользователем. Файлы TXT в Linux можно просматривать непосредственно в терминале с помощью команды «cat».
- Заходим в каталог с интересующим нас документом. Набираем команду «cat filename», подставляя вместо «filename» имя нужного файла. На скриншоте показана ошибка «Permission Denied», выглядящая в русской локализации как «Отказано в доступе».
Получаем ошибку «Permission Denied» при попытке просмотреть содержимое файла
Проверяем права доступа к документу используя команду «ls -l»
Используем команду «chmod» и административные права для получения доступа
Просматриваем содержимое текстового документа командой «cat»
Изменение прав в файловом менеджере
Разберемся, как выполнить рассмотренную выше операцию в графическом интерфейсе, используя файловый менеджер из дистрибутива.
- Как видно на скриншоте, значок файла изначально имеет дополнительные символы, указывающие на то, что доступ у нему ограничен. При попытке посмотреть содержимое получаем графический вариант ошибки «Permission Denied».
При попытке открыть текстовый документ получаем ошибку «Permission Denied»
Открываем меню «Файл» и перезапускаем файловый менеджер от имени root
Набираем пароль root в окне аутентификации
Открываем параметры файла с помощью контекстного меню
На вкладке «Права» разрешаем доступ для группы root и остальных пользователей
Открываем ранее недоступный файл в режиме чтения и изучаем содержимое
В заключение
Как видим, избавиться от ошибки Permission Denied достаточно просто. Решив изменить правда доступа к системным файлам, лишний раз убедитесь, что полностью уверены в своих действиях и понимаете последствия вносимых изменений.
Linux Bash “Permission Denied” Error and Solutions
Linux bash can be used to run and execute scripts, programs, applications, and commands in a fast and practical way. When a script, program, application, or command is tried to be executed there may be errors like “Permission Denied“. This error can be caused for different reasons. In this tutorial, we list some solutions to the permission denied error.
Bash Permission Denied Error
Linux requires different privileges and permissions in order to execute, read, write files, scripts, and commands, etc. If the required permissions are not set you may get the “Permission Denied” error.
Set Execution Permission
The first way to solve the permission denied error is settings proper permissions. In order to run an executable, program, application or script we should have the execution permission. The execution permission can be set with the chmod u+x command for the owner.
But this makes the file executable for the current owner of the executable, program, application, or script. Let’s list the owner information about the specified script.
-rwxrwxr-x 1 ismail ismail 16864 Nis 11 18:28 helloworld
We can see that the current owner of the helloworld command is the user “ismail”. We can see that the user ismail has the execution permission which is depicted in the rwxrwxr-x.
The current owner of the file can be changed with the chown command. But this operation requires the root privileges which can be provided with the sudo command. In the following example, we change the file owner user and owner group to the ahmet. The first ahmet is the owner user and the second ahmet is the owner group.
Set Execution Permission For File System
If setting execution permission and changing the owner user of the file is not solved the problem there are other things to do. The commands are stored in a disk where they are mounted to the Linux system with file systems. File systems may prevent the execution of the command, script, program, or application it mounted as with noexec option. Check the file system if it is mounted with the noexec option by using the mount command with the -l option.
After specifying the file system with the noexec option we should remount this file system with the exec option. In the following examle we remount the partition “/dev/sda3” to the “/” with the exec option.
sudo mount -o remount,exec /dev/sda3 /
Set Target/Directory Path Permission
If the permission denied error is not solved yet the last step is setting the directory permission recursively where the binary, executable, script, application file resides. This can be a bit dangerous because it may lower the security barier and may give the owner users to execute other binaries. In the following example we made all files in the /mnt/d executable for their owners.