Practical Commands
This guide has all the *nix commands you can practically use.
By Omkaram - Dec 14, 2024
Page 1
of 2
Rsync
Useful to copy or transfer files locally or via a network. Add --dry-run for dry run
# Display progress while transferring and exclude list of file or folders from transferring
$ rsync -rahuv --info=progress2 --stats --exclude-from=exclude-files-folders-list.txt [source] [target]
SCP
Secure Copy. Helps to transfer files especially over a SSH tunnel network.
# Recursively copy files from Remote to local
$ scp -i "yourkey.pem" -r [username]@[IP]:~/[folder on the server]/* [your local destination]
# Recursively copy files from local to Remote
$ scp -r [your local destination] [username]@[IP]:~/[folder on the server]/*
Process Monitoring
Secure Copy. Helps to transfer files especially over a SSH tunnel network.
# Prints the processes Start time, PID, CPU%, MEMORY%, MEMORY, COMMAND
$ ps aux | gawk '{mem[$11]+=int($6/1024)}; {time[$11]=$9; cpuper[$11]+=int($3)}; {memper[$11]+=int($4)}; {id[$11]=$2}; END {for (i in id) {print strftime("%Y-%m-%d %T") "\t" time[i] "\t" id[i] "\t" cpuper[i]"% \t",memper[i]"%\t",mem[i]" MB\t",i,"\t\t"}}'
====
# results
2024-12-13 21:14:39 18:54 1994 0% 0% 20 MB /usr/libexec/xdg-desktop-portal-gtk
2024-12-13 21:14:39 18:52 659 0% 0% 0 MB [zvol]
2024-12-13 21:14:39 18:51 6 0% 0% 0 MB [netns]
2024-12-13 21:14:39 18:52 1055 7% 0% 113 MB /usr/lib/xorg/Xorg
2024-12-13 21:14:39 18:51 112 0% 0% 0 MB [vfio-irqfd-clea]
2024-12-13 21:14:39 18:54 1788 0% 0% 23 MB /usr/bin/xembedsniproxy
2024-12-13 21:14:39 18:51 136 0% 0% 0 MB [kworker/u33:0-hci0]
2024-12-13 21:14:39 18:51 25 0% 0% 0 MB [cpuhp/2]
2024-12-13 21:14:39 18:51 22 0% 0% 0 MB [ksoftirqd/1]
===
# You can use the same in a loop every 10 mins to monitor your processes
in my example "openjdk" in a detaches state and write it to a file
# create a file name "process-mon.sh" and place this below in it and run nohup ./process-mon.sh &
while true;
do
sleep 600
ps aux | gawk '{mem[$11]+=int($6/1024)}; {time[$11]=$9; cpuper[$11]+=int($3)}; \
{memper[$11]+=int($4)}; {id[$11]=$2}; END {for (i in id) {print strftime("%Y-%m-%d %T") "\t" time[i] "\t" id[i] "\t" cpuper[i]"% \t",memper[i]"%\t",mem[i]" MB\t",i,"\t\t"}}' \
sort -k3nr | grep "openjdk" | tee -a "mule-memory.log"
done
Find
This command is useful to find files and can be used in conjunction with AWK and SED
# Looks for the word linuxmule.com in all the files of current directory
# and print the file name, number and match
$ find ./ -type f -exec awk '/linuxmule.com/ { printf "%s *** %s *** %s\n\n",FILENAME,FNR,$0 }' '{}' +
====
# Result of the above
/articles/index.php *** 24 *** link rel=alternate hreflang=en href="https://linuxmule.com/" /
./index.php *** 8 *** link rel=alternate hreflang=x-default href="https://linuxmule.com/" /
./index.php *** 9 *** link rel=alternate hreflang=en href="https://linuxmule.com/" /
./work/index.php *** 8 *** link rel=alternate hreflang=x-default href="https://linuxmule.com/" /
./work/index.php *** 9 *** link rel=alternate hreflang=en href="https://linuxmule.com/" /
# If you want to work on multiple files in the same folder and subsequent folders,
# then either one or both of the two commands given below must work
$ sed -i 's/abc/omkaram/g' *
$ find ./ -type f -exec sed -i 's/Hello world/Omkaram Venkatesh/g' {} \;
====
# But what if you do not want to replace a string with another string, instead just what to find the matching words in a file? Like our AWK example?$_COOKIE
$ find ./ -type f -exec sed -n 's/.*\(omkaram\).*/\1/p' {} \;
lsof
LSOF list open files. Helpful to find open files.
# To check total files opened by top 4 processes
$ lsof | awk '{printf "Files open | Program: %s | PID: %s\n", $1, $2}' | sort | uniq -c | sort -rn | head -n 4 | column -t
====
# Result of the above
68706 Files open | Program: firefox-b | PID: 4889
31174 Files open | Program: plasmashe | PID: 1785
14760 Files open | Program: code | PID: 3613
10051 Files open | Program: krunner | PID: 2693
# To check files opened by a user OR specific directory
$ lsof -u [USER_NAME] +D [location]
---
# To check files opened by a user AND IN a specific directory
$ lsof -u [USER_NAME] -a +D [location]
---
# To check files not open by a user AND IN a specific directory
$ lsof -u ^[USER_NAME] -a +D [location]
---
# To check all files opened by a user and TCP and UDP connections
$ lsof -u [USER_NAME] -i TCP -i UDP
---
# To check all files NOT opened by a user and TCP and UDP connections
$ lsof -u ^[USER_NAME] -i TCP -i UDP
---
# To check all files NOT opened by a user and TCP and UDP connections, without hostnames(-n) (i for ipv[46] files)
$ lsof -u ^[USER_NAME] -i TCP -i UDP -n
---
# To check all files NOT opened by a user and TCP connections, without hostnames and no portnames (want port numbers with -P)
# and then filter for TCP Listening connections
$ lsof -u ^[USER_NAME] -i TCP -nP -s TCP:LISTEN
---
# To check all LISTEN and ESTABLISHED conns on port range
$ lsof -n -i:80-4431
---
# To check all LISTEN and ESTABLISHED conns by a PID (-a means AND)
$ lsof -Pan -p 1077 -i
---
# To check all LISTEN and ESTABLISHED conns by a USER
$ lsof -u mysql -Pan -i
Page 1
of 2