I'm a brand new user so I'm not sure of my way around the system yet. I want to change my computer's name, so I tried to edit the name in /etc/hostname
, but it is a read-only file. Adding the !
character didn't help. I'm using vim
to edit the file.
6 Answers
Changing system settings requires superuser permissions. From a terminal, do
sudo <editor> <filename>
where could be vim or nano or any other editor command, and is the one you need to edit.
You could also usegksudo gedit <filename>
.
In either case you will be prompted for password of a user with superuser permissions - in a normal Ubuntu installation this would be the first user created during installation.
-
-
-
2
-
If you are editing a file without sudo
, and you need sudo
in order to save, simply use this vim command:
:w !sudo tee %
Credit to Dr Beco. Note that vim will notice the file change and ask you if you want to (L)oad the changes, press L.
-
thanks! this works even when the file's permissions are 400 or 440, with no one having write permission!– YogaNov 11, 2017 at 3:32
-
This doesn't work for me, running as sudo or even logged in as root. I get a message "Read-only file system" when I try this, and "Shel returned 1", with no change and no ability to save the file. -----EDIT: indeed, this can't be done when you're in a read-only filesystem (my example was an app installed with snap; I was trying to modify the .desktop file). However, there are alternative locations for the .desktop files, e.g: /var/lib/snap/desktop/applications– MarsesApr 10, 2020 at 13:41
Very Short Answer:
You can modify a file (even if it's read-only) if you own it.
Short Answer:
Even if the user which you are logged in as (in this case navid
) has administrative privileges, you won't be able to modify /etc/hostname
, because the root
user owns that file. Consequently, you should log in as the root user.
Long Answer
Assuming that you want to change your computer name from oldName
to newName
, here are the steps that you should follow:
Log in as the root user:
navid@oldName:~$ sudo su -
Open hostname:
root@oldName:~# vi /etc/hostname
You will see
oldName
. Press i to go to the insert mode then change it tonewName
. Then press Esc + : + w + q + Enter to save and exit.Open hosts:
root@oldName:~# vi /etc/hosts
The top 2 lines look like this:
127.0.0.1 localhost 127.0.1.1 oldName
Similarly to what you did in step 3, change the computer name from
oldName
tonewName
. Then save and exit.Exit the root user:
root@oldName:~# exit
Save all of your unsaved work and restart your computer:
navid@oldName:~$ reboot
Open your terminal, and you will see that your computer name has successfully been changed! :-)
navid@newName:~$
Note: Although you may achieve what you want by skipping steps 4 and 5, I strongly recommend doing them as well, to avoid potential errors in the future.
See also:
sudo -H gedit <path to file>
eg :
sudo -H gedit /etc/environment
or
sudo nano /etc/environment
Ctrl + X and Ctrl + Y and hit Enter(for nano)
You might not have access to the file to change it.
In order to get access you need to get super user privileges and that is sudo
.
Open terminal, type:
sudo -H gedit "your file name "
If you use any other text editor type that in.
By default you have wight permission to hosts file to root user only, as shown below:
-rw-r--r-- 1 root root 252 Dec 16 08:40 /etc/hosts
Hence you have to use sudo to edit this or else you can use below command to become root
sudo su -
however this is not recommended at all.
safest and recommended it you use below command to edit the file
sudo vim /etc/hosts
then press "Esc" on keyboard and then type ":w!" to write the changes to the hosts file then agin type ":q" or ":q!", this should shall do the trick for you.
sudo nano /etc/ansible/ansible.cfg
and paste the following line[defaults]
# Human-readable output
stdout_callback = yaml
shellhacks.com/ansible-human-readable-output-format