"Operation not permitted" Error on macOS

This section provides a tutorial example showing 'Operation not permitted' error when executing a shell script file on macOS system.

On macOS systems, you may get the "Operation not permitted" when accessing a file with a command in the "Terminal" window. Here is my experience on my Mac computer.

1. Download a package in ZIP file format.

2. Unzip the package, I see a shell script file, start.sh.

3. Run the script file, I see the error, "Operation not permitted".

herong$ ls -l *.sh
  -rwxr-xr-x@ 1 herong  staff  3922  start.sh

herong$ ./start.sh
  -bash: ./start.sh: Operation not permitted

4. Copy the script file and replace the content with one line. I still get the same error.

herong$ cp -p start.sh s.sh

herong$ echo 'echo "Hello world!"' > s.sh

herong$ ./s.sh
  -bash: ./s.sh: Operation not permitted

5. Create a new script file. I can run it no problem.

herong$ echo 'echo "Hello world!"' > n.sh

herong$ chmod +x n.sh

herong$ ./n.sh
  Hello world!

6. Compare both script files with "ls" and "diff" commands. I see no differences.

herong$ diff s.sh n.sh

herong$ ls -l *.sh
  -rwxr-xr-x@ 1 herong  staff    20  n.sh
  -rwxr-xr-x@ 1 herong  staff    20  s.sh
  -rwxr-xr-x@ 1 herong  staff  3922  start.sh

The easier solution is to clone "start.sh" by taking its content only.

herong$ cat start.sh > start-2.sh

herong$ chmod +x start-2.sh

herong$ ./start-2.sh
  ...

So there must be a hidden attribute on "start.sh" that prevents the shell command to execute it.

On the Internet, I see articles relating the "Operation not permitted" error to 2 possible root causes. But I don't think they apply to my issue presented above.

Table of Contents

 About This Book

 Introduction to Linux Systems

 Cockpit - Web Portal for Administrator

 Process Management

Files and Directories

 "find" - Search for Files

 "more", "head" and "cat" - Read Files

 "split" and "cat" - Split and Join Files

 Truncate Log Files

 "compress/uncompress" - Compressed *.Z Files

 "gzip/gunzip" - Compressed *.gz Files

 "xz/unxz" - Compressed *.xz or *.lzma Files

 "tar -c" and "tar -x" - Create and Extract Archive Files

 "zip" and "unzip" - Create and Extract ZIP Files

"Operation not permitted" Error on macOS

 Users and Groups

 File Systems

 Block Devices and Partitions

 LVM (Logical Volume Manager)

 Installing CentOS

 SELinux - Security-Enhanced Linux

 Network Connection on CentOS

 Internet Networking Tools

 SSH Protocol and ssh/scp Commands

 Software Package Manager on CentOS - DNF and YUM

 vsftpd - Very Secure FTP Daemon

 LDAP (Lightweight Directory Access Protocol)

 Administrative Tasks

 References

 Full Version in PDF/EPUB