System administration
Contents
System administration¶
Recipes and writeups of solutions from problems on different *nix operating systems.
Table of Contents¶
Users and groups¶
Listing all known users and groups
cat /etc/group
cat /etc/passwd
Creating new users¶
Creating a new user, managing startup shell and directory
sudo useradd -d /home/[homedir] [username]
# -u for custom user id
sudo passwd [username]
# to change the password
sudo chsh -s /bin/bash [username]
# set startup shell
NB: The whole user creation process is also streamlined with the
sudo adduser [username]
interactive program.
For managing primary groups
sudo usermod -g [groupname] [username]
For managing secondary groups
sudo usermod -a -G [group1],[group2],[...] [username]
Removing a user from a group
sudo gpasswd -d user group
Deleting users
sudo userdel -r [username]
# -r removes home directory aswell
Configuring shells¶
You can discover what shell your terminal is currently running by examining the $SHELL environment variable.
To see the available shells on your machine, use
cat /etc/shells
You can then change the default shell using
chsh
ran as the user you wish to change the shell for, or, alternatively
sudo chsh -s /bin/zsh someUser
to change the shell of someUser to zsh.
bindkey¶
Bindkey controls how keyboard shortcuts on the terminal are mapped. This can be set in the relevant shell ~/.*rc file. Common mappings are
bindkey -v
for vi-like map, and
bindkey -e
for emacs mapping.
NB: new and alternative shells may be installed via the relevant package managers.
Execute as user¶
We can run commands as another user or with another group ID using su. For example, to run a command as another user
su someuser -c whoami
# someuser
Sometimes a user will not have a login shell defined, in which case su can spawn a specific shell as needed
su someuser -s /bin/bash -c "echo $SHELL"
# /bin/bash
The command can also be used to switch user. For example, to become root
su -
Useful commands¶
In this section I will document useful commands, which, for brevity, don’t merit a full chapter of their own.
STOP and CONT a process¶
As an example, consider you wanted to use Wireshark to capture packets of a specific program, however other programs were being very chatty, and working out exactly what Wireshark filter to craft is proving tedious. A quick and dirty solution to this is just to halt the execution of the chatty program
find the
pid: We can find the process ID of any program using
ps aux | grep [name]
send a
STOPsignal Interrupt and halt the program using
kill -STOP [pid]
resume with a
CONTsignal Using a very similar command, we run
kill -CONT [pid]
SSL with curl¶
https://stackoverflow.com/questions/10079707/https-connection-using-curl-from-command-line
curl proxies¶
You can either set the environment variables
export http_proxy="http://uname:pw@addr:port"
export https_proxy="https://uname:pw@addr:port"
which curl automatically uses, or, pass in the flag -x http://uname:pw@addr:port.
Package management¶
With dpkg, you can install with
dpkg -i [package].deb
list installations with
dpkg -l | grep [package_name]
Uninstall
dpkg -r [package_name]
and purge with -P instead of -r. Purge will also delete all configuration files.
Path alternatives¶
You can adjust the priority of conflicting program versions, commonly python3 vs python2 using the update-alternatives command. The program linked with the highest priority will become the default
update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
You can check the configuration with
update-alternatives --config python
Versions¶
All sorts of valuable version information can be obtained with different commands, most of which are listed on linuxconfig.
Debian¶
lsb_release -cs
# buster
cat /etc/issue
# Debian GNU/Linux 10 \n \l
cat /etc/os-release
# PRETTY_NAME="Debian GNU/Linux 10 (buster)"
# NAME="Debian GNU/Linux"
# VERSION_ID="10"
# VERSION="10 (buster)"
# VERSION_CODENAME=buster
# ID=debian
# HOME_URL="https://www.debian.org/"
# SUPPORT_URL="https://www.debian.org/support"
# BUG_REPORT_URL="https://bugs.debian.org/"
Useful tools
neofetchfor graphical system overview
The default tool for printing system information is uname. The most common use is probably for printing the machine hardware name (similar to arch)
uname -m
# x86_64
Another flag to remember is -a, which prints all information.
Debian minor versioning¶
Although minor versions are a convenience measure (and thus, not included in e.g. uname or /etc/os-release), it can still be useful to know. The full debian version can be found with
cat /etc/debian_version
Modifying keymaps with xmodmap¶
I don’t like specific default dead keys, such as the backtick symbol. To modify the behaviour of keys, we use xmodmap.
For my case, first identify the keycode using
xmodmap -pke | grep grave
and look for the output like
keycode 21 = dead_circumflex dead_grave equal plus dead_tilde dead_ogonek dead_cedilla dead_ogonek
This will commonly be 21 or 49, depending on the nationality of your Keyboard.
We then copy the line, remove the dead_ prefix from grave, and configure the mapping with
xmodmap -e 'keycode 21 = dead_circumflex grave equal plus dead_tilde dead_ogonek dead_cedilla dead_ogonek'
To make this change permanent, we create a ~/.Xmodmap dotfile with our modifications. Alternatively, to save an entire configuration, use
xmodmap -pke >> ~/.Xmodmap
We load the changes with
xmodmap ~/.Xmodmap
or to ensure the changes are ran when the X server inits, use
echo 'xmodmap ~/.Xmodmap' >> ~/.xinitrc
To undo a keyboard mapping, use
setxkbmap -option
Modifying GNOME¶
Changing the overlay toggle key (default: super):
gsettings set org.gnome.mutter overlay-key 'XF86LaunchB'