Skip to main content

(Maybe) Useful commands

Some of the commands that I use daily 😄. Hope those may speed you a little up on your Linux work!

All of the commands below assume you're using the bash shell v4.

!$ ("bang dollar")​

Use !$ ("bang dollar") to refer to the last argument on the previous command: For more techniques, please refer to Directory Navigation

Quickly search previous commands, Ctrl + R (R = reverse) and Type the keyword. If you want older commands, keep pressing Ctrl + R

$ echo 1
1

$ echo 2
2

$ echo 3
3

# Ctrl + R (MacOS)
(reverse-i-search)`echo': echo 3

# Ctrl + R again`
(reverse-i-search)`echo': echo 2

# Ctrl + C

# Even `ho` keyword still works
(reverse-i-search)`ho': echo 3

Check open ports​

Telnet port without telnet or nc command. For example, if you want to check the host 1.2.3.4 port 80:

$ echo > /dev/tcp/1.2.3.4/80
# hang means you cannot access that port

$ echo > /dev/tcp/8.8.8.8/53
$ # return immediately means ok

SSH tunnel​

Forward a port from remote hosts​

We want to connect serverX port 80 from our laptop (client)

$ ssh jump-host -L 8080:serverX:80
# connection to our laptop port 8080
# will be forwarded to serverX port 80

Forward our port to a remote server​

We want our laptop port 1234 to be accessible on jump-host

$ ssh jump-host -R 1234:jump-host:5678
# connection to jump-host port 5678
# will be forwarded to our laptop port 1234

Simple web service with nc​

Sometimes we want to receive the headers and payloads from another service for further analysis. For example, the payload using the webhook method from the notification services.

while true ; do
echo -e "HTTP/1.1 200 OK\n\n $(date)" | nc -l -p 1500;
done

So in the notification service, we can just set the webhook value to our http://our-server:1500

Subshell command as files​

This is called Process Substitution

<(any command here)
info

In Linux, when a disk file is opened, it's assigned a number called a file descriptor. Process Substitution acts like a file by running a command and connecting its output to a file descriptor. This makes the output appear as a file to programs. You can view the file descriptor with echo:

$ echo <(ls)
/dev/fd/63

The standard input, standard output, and standard error are denoted by the file descriptors 0, 1, and 2.