Linux Basics: Common Commands

Quick reference for frequently used Linux CLI commands.

Navigation

$ pwd            # print working directory
$ ls             # list files
$ ls -la         # detailed list incl. hidden
$ cd /path/to    # change directory

Files and Directories

$ touch file.txt        # create file
$ mkdir mydir           # create directory
$ cp src dst            # copy file
$ mv old new            # move/rename
$ rm file.txt           # remove file
$ rm -r mydir           # remove directory recursively

Viewing Content

$ cat file.txt          # print file
$ less file.txt         # paged view (q to quit)
$ head -n 20 file.txt   # first 20 lines
$ tail -f app.log       # follow log

Search

$ grep -R "pattern" .        # recursive search
$ grep -Rni "error" logs/     # case-insensitive with line numbers
$ find . -name "*.go"         # find files by name

Permissions

$ chmod +x script.sh     # make executable
$ chown user:group file  # change owner
$ sudo command           # run as root

Networking

$ curl -I https://example.com  # http headers
$ ping -c 4 8.8.8.8            # ping 4 times
$ ss -tulpn                    # listening sockets

System

$ uname -a          # kernel/system info
$ df -h             # disk usage
$ free -h           # memory
$ top               # processes (q to quit)

Processes and Ports

$ sudo kill -9 $(sudo lsof -t -i :3000)  # kill process using port 3000
$ sudo fuser -k 3000/tcp                 # kill by port via fuser

Ubuntu Package Management (APT)

$ sudo apt update                          # refresh package indexes
$ sudo apt upgrade -y                      # upgrade installed packages
$ sudo apt install nginx -y                # install package
$ sudo apt remove PACKAGE -y               # remove package
$ apt list --installed | grep PACKAGE      # find installed package

Services (systemd)

$ sudo systemctl status nginx              # service status
$ sudo systemctl start nginx               # start service
$ sudo systemctl stop nginx                # stop service
$ sudo systemctl restart nginx             # restart service
$ sudo systemctl enable nginx              # start on boot
$ sudo journalctl -u nginx -f              # follow service logs

Firewall (UFW)

$ sudo ufw status                          # firewall status
$ sudo ufw allow 22/tcp                    # allow SSH
$ sudo ufw allow 80,443/tcp                # allow HTTP/HTTPS
$ sudo ufw delete allow 3000/tcp           # remove rule
$ sudo ufw enable                          # enable firewall

Users and Permissions

$ sudo adduser deploy                      # create user
$ sudo usermod -aG sudo deploy             # add to sudo group
$ sudo chown -R $USER:$USER /var/www/app   # change ownership
$ sudo chmod -R 755 /var/www/app           # set permissions

Git Basics

$ git clone https://github.com/org/repo.git  # clone repo
$ git checkout -b feature/branch             # new branch
$ git add . && git commit -m "msg"          # stage + commit
$ git push -u origin feature/branch          # push branch

SSH Keys

$ ssh-keygen -t ed25519 -C "your_email@example.com"   # generate key
$ eval "$(ssh-agent -s)"                               # start agent
$ ssh-add ~/.ssh/id_ed25519                             # add key to agent
$ ssh-copy-id user@server                               # copy pub key to server

Node.js and npm

$ node -v && npm -v                         # verify versions
$ npm init -y                               # init project
$ npm install                               # install deps from package.json
$ npm run build                             # run build script
$ npx serve -s build                        # serve static build

Python and pip

$ python3 -V && pip3 -V                     # verify versions
$ python3 -m venv .venv                     # create virtual env
$ source .venv/bin/activate                 # activate
$ pip install -r requirements.txt           # install deps

Nginx Reverse Proxy (basic)

# /etc/nginx/sites-available/app
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

$ sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
$ sudo nginx -t && sudo systemctl reload nginx

Let's Encrypt (Certbot) for Nginx

$ sudo apt install certbot python3-certbot-nginx -y
$ sudo certbot --nginx -d example.com -d www.example.com
$ sudo systemctl status certbot.timer   # auto-renew timer

Docker Basics

$ docker ps                                  # running containers
$ docker compose up -d                       # start services (compose)
$ docker logs -f SERVICE                     # follow logs
$ docker exec -it CONTAINER bash             # enter container