Ready to talk shop?

Drop us a line. We can't wait to learn more about your business.


    Cheatsheet for SSH & Linux Shell commands

    Let's face it, SSH is one of the most important tools any good web developer has. If efficiency is important to you (as it should be), SSH should be your primary means of interacting with your servers, whether working locally or...

    Let’s face it, SSH is one of the most important tools any good web developer has. If efficiency is important to you (as it should be), SSH should be your primary means of interacting with your servers, whether working locally or…

    Let’s face it, SSH is one of the most important tools any good web developer has. If efficiency is important to you (as it should be), SSH should be your primary means of interacting with your servers, whether working locally or on a remote server. Linux Shell commands allow you to quickly and easily perform system-wide tasks such as installing & updating software, executing GIT commands, site deployment , etc. SSH allows you to remotely connect to your server and command it via the shell. This page designed to help beginners starting out with SSH, by providing a usable SSH cheatsheet of common commands you will use commonly while working with your server.

    Basic SSH Commands

    ls : list files/directories in a directory.
    ls -al : shows all files including hidden files, directories and details for each file.

    cd : change directory
    cd /path/to/directory : go to /path/to/directory
    cd ~ : go to your home directory
    cd - : go to the last directory you were in
    cd .. : go up a directory

    cat : print file contents to the screen
    cat filename.txt : cat the contents of filename.txt to your screen

    tail : like cat, but only reads the end of the file
    tail /var/log/messages : see the last 20 (by default) lines of /var/log/messages
    tail -f /var/log/messages : watch the file continuously, while it’s being updated
    tail -200 /var/log/messages : print the last 200 lines of the file to the screen

    more : like cat, but opens the file one screen at a time rather than all at once
    more /etc/userdomains : browse through the userdomains file.


    more : hit space to go to the next page, q to quit

    File Editing via SSH commands

    pico : friendly, easy to use file editor
    pico /home/burst/public_html/index.html : edit the index page for the user’s website.

    vi : another editor, tons of features
    vi /home/burst/public_html/index.html : edit the index page for the user’s website.

    grep : looks for patterns in files
    grep root /etc/passwd : shows all matches of root in /etc/passwd
    grep -v root /etc/passwd : shows all lines that do not match root

    touch : create an empty file
    touch /home/burst/public_html/404.html : create an empty file called 404.html in the directory /home/burst/public_html/

    rm : delete a file
    rm filename.txt : deletes filename.txt, will more than likely ask if you really want to delete it
    rm -f filename.txt : deletes filename.txt, will not ask for confirmation before deleting.
    rm -rf tmp/ : recursively deletes the directory tmp, and all files in it, including subdirectories.


    Use extreme caution with rm. important content can be deleted that can never be recovered.

    cp : copy a file
    cp sample sample.backup : copies sample to sample.backup
    cp -a /home/backup/* /home/public_html/ : copies all files ∓ permissions to another directory.
    find * -type d|xargs -i cp --verbose php.ini {} : copies php.ini into all directories recursively.

    wc : word count
    wc -l filename.txt : tells how many lines are in filename.txt

    last : shows who logged in and when
    last -20 : shows only the last 20 logins
    last -20 -a : shows last 20 logins, with the hostname in the last field

    ln : create’s “links” between files and directories
    ln -s /home/username/tmp/webalizer webstats : Now you can display https://www.yourdomain.com/webstats to show your webalizer stats online.


    ln : you can delete the symlink (webstats) and it will not delete the original stats on the server

    Permissions and Ownership via SSH

    chmod: changes file access permissions (USER – GROUP – EVERYONE)

    0 = —    No permission
    1 = –X   Execute only
    2 = -W-  Write only
    3 = -WX  Write and execute
    4 = R–   Read only
    5 = R-X  Read and execute
    6 = RW-  Read and write
    7 = RWX  Read, write and execute

    chmod 000 : No one can access
    chmod 644 : Usually for files, such as HTML, PHP
    chmod 755 : Usually for Directories and CGI scripts

    chown : changes file ownership permissions (USER – GROUP)
    chown root myfile.txt : Changes the owner of the file to root
    chown root.root myfile.txt : Changes the owner and group of the file to root

    Server Utilities via SSH

    w : shows who is currently logged in and where they are logged in from.

    netstat : shows all current network connections.
    netstat -an : shows all connections to the server, the source and destination ips and ports.
    netstat -rn : shows routing table for all ips bound to the server.

    top : shows live system processes in a nice table, memory information, uptime and other useful info.
    top Shift + M : sort by memory usage
    top Shift + P : sort by CPU usage/p>

    ps : ps is short for process status. It’s used to show currently running processes and their PID.
    ps U username : shows processes for a certain user
    ps aux : shows all system processes
    ps aux --forest : shows all system processes but organizes into a very useful hierarchy

    file : attempts to guess what type of file a file is by looking at it’s content.
    file * : prints out a list of all files/directories in a directory

    du : shows disk usage.
    du -sh : shows readable summary of total disk space used in current directory, including subdirectories.
    du -sh * : same thing, but for each file and directory. helpful when finding large files taking up space.

    kill : terminate a system process
    kill -9 PID EG : kill -9 431
    kill PID EG : kill 10550

    Copying & Moving Files via SSH

    Often you will need to move one or more files/folders or copy them to a different location. You can do so easily using an SSH connection. The commands which you would need to use are mv (short for ‘move’) and cp (short for ‘copy’).

    The mv command syntax looks like this:

    mv configuration.php-dist configuration.php

    By issuing the above command we will move (rename) the file configuration.php-dist to configuration.php.

    You can also use mv to move a whole directory and its content:

    mv includes/* ./

    This will move all files (and folders) in the includes/ directory to the current working directory.

    In some cases however, we will need to only update the files and move only files that were changed, which we can do by passing ‘-u’ as argument to the command:

    mv -u includes/* admin/includes

    The copy cp command works the same way as mv, but instead of moving the files/folders it copies them. For example:

    cp configuration.php-dist configuration.php

    The command will copy the configuration.php-dist file to configuration.php and will preserve the original file (the file will NOT be removed after it is copied).

    cp also accepts various arguments:

    cp -R includes/ includes_backup/

    -R instructs cp to copy files recursively (for example, a whole directory). To overwrite already existing files you should use the -f argument:

    cp -Rf includes/ admin/includes/

    Putting SSH Commands Together

    Often you will find you need to use different commands on the same line. Here are some examples. Note that the | character is called a pipe, it takes date from one program and pipes it to another.
    >   : means create a new file, overwriting any content already there.
    >> : means tp append data to a file, creating a newone if it doesn not already exist.
    <   : send input from a file back into a command.

    grep User /usr/local/apache/conf/httpd.conf | more

    This will dump all lines that match User from the httpd.conf, then print the results to your screen one page at a time.

    last -a > /root/lastlogins.tmp

    This will print all the current login history to a file called lastlogins.tmp in /root/

    tail -10000 /var/log/exim_mainlog | grep domain.com | more

    This will grab the last 10,000 lines from /var/log/exim_mainlog, find all occurances of domain.com 
    (the period represents ‘anything’, comment it out with a so it will be interpretted literally), then send it to your screen page by page.

    netstat -an | grep :80 | wc -l

    Show how many active connections there are to apache (httpd runs on port 80)

    mysqladmin processlist | wc -l

    Show how many current open connections there are to mysql

    mysqldump -u username -p dbname > file.sql

    MySQL Dump

    mysql -u username -p database_name <file.sql

    Importing MySQL database

    tar -zxvf file.tar.gz

    UnTAR file

    Ready to talk shop?

    Let's connect. We can take your website to the next level.

    Get A Quote
    Let's Talk