# Useful shell command

* commands

```shell
// add a user to root group
$ visudo

# User privilege specification
root    ALL=(ALL:ALL) ALL
newuser ALL=(ALL:ALL)ALL

hold `ctrl` and press `x` to save and exit

// list all running process
$ ps aux
```



* run as root

```shell
user@host$ sudo su -

// prompt will show root login
root@host$ 
```



* add a user to a group

```shell
// create docker group
$ sudo groupadd docker

// add current user to group
$ sudo usermod -aG docker ${USER}

// restart to take effect
```



* change file permission

```shell

// excecute, read, write
$ chmod 777 filename

// made executable
$ chmod +x envtest.sh
```

## node version manager [nvm](https://github.com/nvm-sh/nvm)

* For proper installing, using version manager for nodejs to install nodejs/npm
* use nvm 
  * to avoid npm version conflict installation with nodejs
  * to install / switch to lower / newer version on any version ubuntu
* ubuntu 20.10 default support node 12
* ubuntu 19.10 default support node 10

```shell
// installation

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

$ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"

# This loads nvm
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 

// to install node version 10.10.0
$ nvm install 10.10.0

// remove node to solve conflicting version
$ sudo apt-get remove nodejs
$ sudo apt autoremove
```

* ssh id

```shell
$ ssh-keygen

// copy ssh public key to host .ssh/authorized_keys to allow passwordless ssh
$ ssh-copy-id -i abc@host

// alternatively, copy local .ssh/rsa_id.pub content into target server authorized_keys


```

* environments

```shell
// add global variable
// method1 : cli
$ export VARNAME="value"
$ set VARNAME="Value"

// add local variable
$ VARNAME=Value

// remove
$ unset VARNAME
$ VARNAME=''

// user wide env
$ sudo vi ~/.bashrc

..
export NAME=Value
...

// system wide ENV file
$ nano /etc/environment

// reload a file
$ source /etc/bash.bashrc

// show a variable
$ echo $VARNAME

// show all variables
$ printenv | sort | less
$ env | grep GNOME

$ myvar=(first second third)
$ echo ${myvar[2]}
third
$ echo ${myvar[*]}
first second third

```

* startup file execution order from login shell
  * `/etc/profile`
  * `$HOME/.bash_login`
  * `$HOME/.bash_profile`
  * `$HOME/.profile`

* startup file from interactive shell
  * `.bashrc` instead of `/etc/profile`



## Rebuild HOME

* Repair fstab

  ```sh
  // find the new UUID
  $ blkid
  
  // update the UUID
  $ nano /etc/fstab
  ```

  

* login as su

  ```sh
  $ sudo su
  
  //
  $ mkhomedir_helper <username>
  ```

  
