My personal quicklist of Linux server commands.
FYI, these commands are mostly for Apache/LiteSpeed servers on RHEL Linux distro. I don’t work as much with NGINX servers and Debian distro. Will add more over time.
Last updated Apr 1, 2026.
OS:
hostnamectl– see operating system and version, reference linkhostname– see current temporary hostname (I recommend not to use this, and to usehostnamectlinstead.)hostnamectl set-hostname server.domain.com– change hostname to any desired domain. You may also have to edit hostname in files/etc/hostsand/etc/sysconfig/network, and possibly/etc/sysconfig/network-scripts/*networkdevicename*(if you manually set it here).whoami– shows your user name (useful for knowing if you’re executing commands as root user or another user)su,su -,sudo -i– switch to root user if you haven’t already. “su -” is probably more proper since it creates a login shell with new environment.passwd– change password for current userlogout– log out of current useruname -r– see Linux kernel version,lsb_release -ato see distro version.yum update– update server packages for RHEL distros (useful before doing new software installs).apt update– update server packages for Debian distros (useful before doing new software installs). There are other variations useapt-get updateandapt-get upgrade. Issues: install all updates before, packages held back.- Auto completion – press [TAB] key while typing commands to auto-complete file/directory names.
sudo dmesg -n 1– suppress annoying kernel messages every 10 seconds. Add this command toetc/rc.local(or its equivalent) to run it at boot. More info
SSH:
- Connect to ssh
ssh user@ip -p 2222(-p& port number not needed if using default port 22) /etc/ssh/sshd_config– editing SSHD, changing SSH port number, allowing/disabling SSH or password authenthication, etc.- getting SSH port
grep Port /etc/ssh/sshd_config(may need “sudo” in front) systemctl restart sshd.service– restart sshd. Link.cat ~/.ssh/authorized_keys– lists authorized SSH keys, add more public SSH keys here to give access other admins or support staff. The location might also be/root/.ssh/authorized_keys.
SSH key – generate on Macbook terminal:
- generate SSH key
ssh-keygen -t rsa - choose private key save location or leave empty for default
/Users/username/.ssh/id_rsa, choose passphrase for private key if you want (I usually leave empty) cat /Users/username/.ssh/id_rsa.pubto see public key, copy and import it to where you need. TIP: sometimes when copying off the command line, it adds line-breaks that you need to delete when pasting elsewhere.ssh-add /Users/user/.ssh/id_rsato load private key in terminalssh-keygen -R 123.123.123.123– solves the “known host issue” by removing a known host. Useful for when you rebuild a server but keep the same IP.
SSH key – generate on Linux:
- generate SSH key
ssh-keygen -t rsa -b 4096, and press enter through all the prompts (about 3). cat /root/.ssh/id_rsa.pubto see public key.cat /root/.ssh/id_rsato see private key.
Navigating around command line (full guide):
ls,ls -a– list files in directory, usels -Sto sort by size orls -Srto reverse order, show hidden filesls -l– list files but also show permissions, # of hardlinks, file owner and group, size and modification time. You can combine togetherls -lals *.php– lists only files with .php extension.cd– goes to user home directory.cd /– goes to root directory.cdorcd ~goes to user home directory (of whichever user is logged in).cdreturns to default working directory in linux (ideally, the root but often not the case)cd [directoryname]is relative whereascd /directoryis absolutecd ..– goes up to parent directorycd -– goes to previous directorypwd– shows path to current directoryclearor CTRL+L to clear the screen
Files & Directories (create, delete, move, copy, archive):
mkdir test– make directory called “test”,rmdir testremoves itrm test– delete file or directory called “test”rm -rf test– deletes “test” directory without prompting you for every filerm -rf *test*– deletes all files/directories with the string “test” in the name.rm -fv *.txtremoves all files in current directory with “.txt” extension.find . -name *.ext -type f -deletedeletes all files with “ext” extension including within subdirectories. Other options.cp test /location– copy “test” file or directory to “/location” directory. Other options.cp oldname.txt newname.txtcopies file to new name in same directory.'cp' -R -rf file locationuse this to do recursive overwrite without any prompt.cp -avr /path/dir1 /path/dir2copies one directory (and contents) to another.mv test /location– move “test” to “/location” directory. Usemv -fto force overwrites. Other options.mv oldname.txt newname.txt– renames the file.mvcommand also used for renaming directories as well.tar -czvf folder.tar.gz folder– archive “folder” directory into folder.tar.gz file. Other compression commands.tar -xzvf folder.tar.gz– extract archive in current working directory. Other options.gzip -d database.sql.gz– extract sql.gz files.zip -r folder.zip folderarchives the “folder” directory into zip format. You don’t actually need to put “.zip” but I find it makes the command easier to remember. (Don’t forget the-roption as it makes the command recursive and includes every file within subdirectories as well.)unzip folder.zipunzips archive to current directory.- Hide files and show hidden files
Files & Directories (ownership, permissions):
- Change file ownership –
chown USER:GROUP FILEorchown -R USER:GROUP FILEfor recursive. Useful after migrating files from another server and they don’t work. Another link. chmod -R 755 /path/to/file.phpchanges that file permission to 755. For more explanations about change permissions and recursively change permissions (symbolic vs numeric method).find /path/to/dir -type d -exec chmod 755 {} \;andfind /path/to/dir -type f -exec chmod 644 {} \;are much betters ways to recursively set all directory permissions to 755 and file permissions to 644 (as common web practice).- save command output to a file https://askubuntu.com/questions/420981/how-do-i-save-terminal-output-to-a-file
Files (searching & hack detection):
grep -r "string" /home/user– (recursively) searches all instances of “string” for all files within/home/user directory. Can also dogrep -r -l 'pattern' /path/to/dirto list only the files. Example patterns.find /home/user -type f -name "something.php"– searches/home/userdirectory for all files named “something.php”.find /home/user -type f -ctime -7– searches all files within/home/userdirectory changed within 7 days or less. (Change to + sign if you want to search for changes older…usually uncommon.)find /home/user -type f -name "*.php" -ctime -30– finds all files with .php extension changed within past 30 days. More find examples.find /etc -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort– finds most recently changed files, listed in order of less recent to most recent. More find examples.zgrep -Eo "string" /path/to/gzippedfile.gz– searches for the text “string” within an archive. Can use all grep options.find . -type f | wc -l– counts number of total files in current directory and subdirectories
File Transfer:
wget https://address.com/to/file.zip– download external file to current working directorycurl -0 https://addres.com/to/file.zipcan also work if wget doesn’t (other alternatives to wget)rsync -a [email protected]:/remote/dir /local/dircopies (pulls) remote directory to local directory.rsync -a /local/dir [email protected]:/remote/dircopies (pushes) local directory to remote directory.rsync -avz --rsh='ssh -p2220' /local/dir [email protected]:/remote/dirpushes to remote site using specified ssh port 2220.sftp user@IPorhostname:/path/to/file /local/dirdownloads remote file via SFTP to specific directory. This command will ask you for SFTP password. Can also try this command with “scp -r” instead of “sftp” if you need recursive copy.
SFTP:
sftp user@serverIP_or_hostname– do this from destination server. (Usesftp -oPort=1234 user@serverIP_or_hostnameif there’s a custom SFTP port other than 22.)- Use
cdandlscommands to navigate around the remote computer. get filename.zip– to download file local.- Reference link
VI/vim text editor:
vi filename.txt– opens file in vi editor, this command also creates file if it doesn’t exist:enters normal mode (aka “command mode” by some documentation. Vi starts in this mode already.- to enter “insert” mode (aka editing) from normal mode:
ienters text before cursor,Ienters at beginning of lineaenters after cursor,Aenters at end of lineostarts new line above current line,Ostarts new line after current line
press[ESC]after editing – to switch back to normal modedd(from normal mode) – deletes current line behind cursor. Other delete commands.G(normal mode) – skips to last line:q!(normal mode) – quit without saving:wq(normal mode) – quit with saving,:wsaves but doesn’t quitcat /path/to/file– prints the file.cat /path/to/file | more– prints file but showing full lines.grep database wp-config.php– prints only lines with the string “database” in wp-config.php.grep -A 1 "database" wp-config.php– prints all lines with “database” (but also INCLUDING 1 line after). Can use-B 1to show 1 line before, or-C 1to show both one line before and after.
Disks, usage & space:
- Check available space –
df(default),df -h(friendly KB/MB/GB format),df -l(local size only) du -sh *– check sizes within current directorydf -kdf -k /tmp– checks free space of “/tmp” directorysudo du -a /home/ | sort -n -r | head -n 20– lists largest files in “/home” directory.- find large files
- mount
- unmount –
umount /path/to/mount(removes from /etc/fstab) - view mounts –
cat /etc/fstab - disk space commands and more du commands
du -hsx /* | sort -rh | head -10
Ports:
- Check for listening ports
sudo lsof -i -P -n | grep LISTEN
Processes:
- kill processes –
pkill 12345, replacing “12345” with actual process ID
Databases (MySQL & MariaDB):
- restart MariaDB –
systemctl start mariadb - export (aka “dump”) mysql database into a file –
mysqldump -u dbuser -p dbname > dbfile.sql, you will be prompted for password - import sql file into db (assuming db’s and users already created) –
mysql -u dbuser -p dbname < dbfile.sql, you will be prompted for password. (Add-fflag after the “-p” to force an import to skip errors.) cat /root/.my.cnf– recover mysql root pass, or reset it- managing databases and users from SSH, nice video and explanation
- creating databases and users from SSH
- curious about trying non-default mysql configs? Try this.
MySQL commands (for MySQL/MariaDB shell/prompt):
mysql -u user -plogs you in,exitlogs you outSHOW DATABASES;list all databasesCREATE DATABASE database_name;– creates DBDROP DATABASE database_name;– drops DBSELECT user, host FROM mysql.user;– list all DB usersCREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';– creates DB userDROP USER 'database_user'@'localhost';– deletes DB userGRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';– grant all privileges to specified user for specified databaseGRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';– grant all privileges to specified user for all databasesREVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';– revoke privilegesSHOW GRANTS FOR 'database_user'@'localhost';– see all user privilegesshow global variables like 'log_error'– show location of error log file.
LiteSpeed web server:
- installing LS
- reset LS console pass –
cd /usr/local/lsws/admin/miscand then./admpass.sh - version check –
/usr/local/lsws/bin/lshttpd -v - start LS –
/usr/local/lsws/bin/lswsctrl start - restart LS –
/usr/local/lsws/bin/lswsctrl reload - upgrade OLS –
yum update', then 'yum upgrade openlitespeed - enable crawler (cPanel) –
vi /etc/apache2/conf.d/includes/pre_main_global.confand add - view logs
/tmp/lshttpd/.status - More LS license commands
WHM/cPanel:
- refresh disk quota
- license check
- force run backups –
/usr/local/cpanel/bin/backup --force(more info) - update WHM
/scripts/upcpor/scripts/upcp --force(if it’s already updated) - Reset max deferred email limit – delete `rm /var/cpanel/email_send_limits/max_deferfail_thedomain.com`
CyberPanel:
- Error logs –
cat /home/cyberpanel/error-logs.txt(log files on CyberPanel) - Cron schedules –
/etc/crontabclear out unnecessary cronjobs eating up server resources (backups)
Security:
- CSF firewall – CSF firewall installation and basic commands
- opening port 1234 –
iptables -I INPUT -p tcp --dport 1234 -j ACCEPT - closing ports 111 –
iptables -I INPUT 1 -m tcp -p tcp --dport 111 -j DROP,iptables -I INPUT 1 -m udp -p udp --dport 111 -j DROP sudo dmesg -n 1– disable annoying kernel messages- Security log-scanning commands, please see Recovering from HACKED server
Firewalld:
systemctl status firewalld– check statussystemctl start firewalld– start itsystemctl enable firewalld– enables itfirewall-cmd --list-all,firewall-cmd --list-ports
– see open ports, alternate:for s in firewall-cmd --list-services; do firewall-cmd --permanent --service "$s" --get-ports; done;`- open port,
firewall-cmd --permanent --add-port=1234/tcp(using whichever port number you need) , thenfirewall-cmd --reload systemctl stop firewalld– stops itsystemctl disable firewalld– disables it
Configuration files (common locations):
Logs (locations, common commands, hack detection):
tail /path/to/logshows last 10 lines of log filetail -n 100 /path/to/logshows last 100 linestail -f /path/to/logkeeps watching last 10 lines of log file- You can also use “less +F” (but generally not for big files)
grep "abc" /file/nameto find lines with the string “abc” in them. See other grep examples. Using Tail, Grep, Journalctl.grep -i "xmlrpc" access_log– searches all instances of “xmlrpc” in log file,ioption means case-insensitive.sudo truncate -s 0 /var/log/*or>/var/log/*(if root user) to truncate log files instead of deleting them (which causes problems when services try to recreate them, and may require service reinstall). Helpful option if you didn’t want to install/configure logrotate.
Disks (format, partition, mount):
df -Thshow mounted disks/partitions and file systemslsblkshow attached storage disks- Partition & format disk –
sudo fdisk /dev/disknamereplace “diskname” with what you want (usually sda1/vdb1). From partition command line,nfollow defaults, thenato make it bootable (if needed),pto check that it partitioned correctly, andwto write these partition changes. Trylsblkafterwards to check everything worked. sudo mkfs.ext4 /dev/partitionnamepartition name is usually disk name with a partition number (sda1, sda2, etc). You can also switchext4file system to something else likexfs.- Mount new disk –
sudo mkdir /disk1to create new “disk1” directory in your root (use another name if you want).sudo mount /dev/partitionname /disk1mounts partition to the directory. - https://upcloud.com/community/tutorials/adding-removing-storage-devices/ for more info on automatically mounting at boot, etc.
Scripts:
bash scriptname.shto run the script,sh scriptname.shis another option
Leave a Reply