User Tools

Site Tools


linux

Linux

Useful Linux commands, with no particular order

Check which program is using a particular port

sudo lsof -i:port

Kill a particular PID

sudo kill -9 PID

Check the current folder size

du -hs .

Show filesystem information

df -h

SSH

Copying local keys to a remote server

ssh-copy-id user@server

Create a remote tunnel into localhost

ssh -L local-port:localhost:remote-port user@server -N

Note: AllowTcpForwarding and PermitOpen have to be enabled in /etc/ssh/sshd_config

Forward a local port to a remote host (like ngrok)

ssh -N -T -R local-port:localhost:remote-port user@server
  • -N Do not execute a remote command. This is useful for just forwarding ports.
  • -T Disable pseudo-terminal allocation.
  • -R Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the local side.

SCP

scp -r /folder/to/upload user@server:/destination/on/server

tar & untar

tar

tar -czvf file.tar.gz file/or/folder/to/tar/
  • -c create
  • -z gzip
  • -v verbose
  • -f filename

untar

tar -xvf file.tar.gz
  • -x extract
  • -v verbose
  • -f filename

gpg encrypt/decrypt

Encrypt

gpg -c --cipher-algo AES256 file/to/encrypt

You will be asked to enter a password

Decrypt

gpg file/to/decrypt

You will be asked to enter a password

Download an entire website using wget

More: https://gist.github.com/mikecrittenden/fe02c59fed1aeebd0a9697cf7e9f5c0c

wget \
     --mirror \ # Makes (among other things) the download recursive.
     --page-requisites \ # Get all assets/elements (CSS/JS/images).
     --adjust-extension \ # Save files with .html on the end.
     --span-hosts \ # Include necessary assets from offsite as well.
     --convert-links \ # Update links to still work in the static version.
     --restrict-file-names=windows \ # Modify filenames to work in Windows as well.
     --domains yoursite.com \ # Do not follow links outside this domain.
     --no-parent \ # Don't follow links outside the directory you pass in.
         yoursite.com/whatever/path # The URL to download

Create a X.509 sha256 self signed certificate

openssl req \
  -x509 \
  -newkey rsa:4096 \
  -sha256 \
  -keyout mykeyname.key \
  -out mycertname.pem \ 
  -days 365 
  -nodes # only if you need no password

Find

Find a specific file in the specified folder

You can use:

find mypath -type f -name "myfile.extension"
  • mypath: a path in the OS to perform the search.
  • -type: type of file to look for. Most common is f, which means “Regular file”.
  • -name: the name of the file you are looking for. You can also use wildcards, for example: *.json to find all the JSON files in the current directory.

xargs

xargs is used to create new commands from the output of another command. For example, if I'm performing a find command, I could use xargs to issue a new command for each line of the output of find.

find . -type f -name \"*.json\" | xargs --verbose -I % sh -c 'cat % | jq -c || exit 255'

What's happening?

  • First, we are performing a find command. The output is going to look like this:
./folder/this_is_a_json.json
./another.json
  • Then, we pipe the output of the find command to xargs. The -I % means “replace string”, so xargs is going to replace any % it finds with the value of the current line it is processing.
  • xargs is going to run sh -c “cat % | jq -c || exit 255” (remember its going to replace % with the value of the current line it is processing) on each of the lines resulting from the find command. jq is a program that is used to format JSON. If jq fails (eg, the JSON is malformed), it's going to return exit 255, to stop the execution of xargs.

This command in particular is very usefull to check if all the JSON files in a repository are well formated in a CI/CD step.

ncdu

Ncdu is a disk usage analyzer with an ncurses interface. It is designed to find space hogs on a remote server where you don’t have an entire graphical setup available, but it is a useful tool even on regular desktop systems. Ncdu aims to be fast, simple and easy to use, and should be able to run in any minimal POSIX-like environment with ncurses installed.

Usage:

ncdu -x /

Where / is the filesystem you want to check

awk

echo "This is a string" | awk '{print ($1)}'
# Output: "This"
echo "This Is A CaPiTaLiZeD String" | awk '{print tolower($0)}'
# Output: "this is a capitalized string"
 
echo "This Is A CaPiTaLiZeD String" | awk '{print toupper($0)}'
# Output: "THIS IS A CAPITALIZED STRING"
linux.txt · Last modified: 2023/01/11 10:33 by roger