I ve a problem while updating my system. I figured out that there is a problem by updating grub during the "sudo apt upgrade".

Removing linux-image-5.4.0-42-generic (5.4.0-42.46) ...
update-initramfs: Deleting /boot/initrd.img-5.4.0-42-generic
Sourcing file `/etc/default/grub'
/usr/sbin/grub-mkconfig: 11: /etc/default/grub: : Permission denied
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 127
dpkg: error processing package linux-image-5.4.0-42-generic (--remove):
 installed linux-image-5.4.0-42-generic package post-removal script subprocess returned error exit status 1
dpkg: too many errors, stopping
Errors were encountered while processing:
Processing was halted because there were too many errors.
E: Sub-process /usr/bin/dpkg returned an error code (1)

than I tried also "sudo update-grub" and got this

Sourcing file `/etc/default/grub'
/usr/sbin/grub-mkconfig: 11: /etc/default/grub: : Permission denied

The grub file (/etc/default/grub) itself looks the following:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)

# Uncomment to disable graphical terminal (grub-pc only)

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
# Uncomment to disable generation of recovery mode menu entries

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

"ls -ldh /etc/default/grub"

-rw-r--r-- 1 root root 1,2K Nov 30 21:41 /etc/default/grub

Does anyone have an idea?

  • When you update-grub it is reading this file, so check the contents of sudo gedit /etc/default/grub and post that for us please. – darth_epoxy Nov 30 '20 at 22:31
  • @steeldriver You are correct. I tested this out and got the same error so this appears to be the answer. – mchid Nov 30 '20 at 23:22

The error is the space in the assignment in


at line 11 of the /etc/default/grub file. It causes the shell (probably /bin/sh) to parse it as "assign nothing to GRUB_CMDLINE_LINUX and then run a command with no name with GRUB_CMDLINE_LINUX in its environment".

You can replicate the format of the error as follows:

$ sh -c 'GRUB_CMDLINE_LINUX= ""'
sh: 1: : Permission denied

whereas bash reports the somewhat more helpful

$ bash -c 'GRUB_CMDLINE_LINUX= ""'
bash: : command not found

The line should read


although GRUB_CMDLINE_LINUX= should work as well.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.