Nhảy tới nội dung

(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)
thông tin

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.