Linux / Unix Commands
Here we will cover most of the basic Unix/Linux commands so you can start to feel at home in a Unix environment. Many, many commands exist and will vary based on the exact system you are using and what packages are installed.
After covering this you should feel comfortable working in a Unix / Linux command line environment. This does not cover every tool that exists. This guide will not cover every skill you need to be a good admin.
This guide is meant to be somewhat concise. It doesn’t go into detail or cover all of the nuances of each command.
- This guide assumes that you are using the BASH shell. Other shells will behave similarly but your mileage may vary.
- Anything after the character ‘#’ is a comment and not part of the command. It will not actually be executed.
- The “*” is usually the wildcard character and will match anything.
If you need help use the “man” or “help” commands:
man man ls help ls type ls
history # show your command history [up] # show last command [tab] # auto complete a command or path
Show your current directory:
List of files in a directory:
ls # files in current dir ls -a # show hidden files ls -l # file details ls -lh # file details human readable ls -ltr # details, by time, in reverse ls -l *.txt # files matchiung *.txt ls -l *abc* # all files containing "abc" ls mydir1 # all files in mydir1
Change your directory:
cd mydir # change to mydir cd /home/user1/mydir # use absolute path cd . # move to current dir cd .. # move 1 dir up cd ../../dir1 # 2 dirs up, then into dir1 cd My\ Music # move to dir with a space cd ~ # home directory cd ~user2 # home directory of user2 cd - # previous directory
This shows how to Create and delete files and directories.
file file1.txt # check file type touch file1.txt # create file or change last # written time if it exists mkdir testdir1 # create dir testdir1 mkdir newdir/subdir # won't work if "newdir" doesn't exist yet mkdir -p newdir/subdir # -p makes it work recursively rm file1.txt # delete file rmdir testdir1 # delete dir, only works if empty rm -rf testdir1 # recursively and force delete # works for files and directories
cp file1.txt file2.txt # copy to a new file cp file1.txt dir1 # copy into a directory cp -R dir1 dir2 # copy dir ( needs -R )
mv file1.txt file2.txt # move file ( basically renames it ) mv file1.txt dir1/sub3 # move into a directory ( keep file name ) mv file1.txt dir1/sub3/file2.txt # move move into a directory with new name
NOTE - to rename a file, just use the ‘mv’ command to move the file to a different name.
ln original.txt othername.txt # create a hard link ln -s original.txt othername.txt # create a soft link
Soft Links vs Hard Links
- A soft link, also called a symbolic link, is really just a pointer to the original file. If you delete the link, the file will still be there. If you delete the original file, the link will be broken and won’t refer to anything.
- A hard link is actually a pointer to the same data that the original file points to. If you delete either one, the other will continue to work.
echo "hello world"
cat mytextfile.txt # output contents of this file cat file1.txt file2.txt # concatenate these two files together and output the content cat > filename [ctrl]-data head myfile.txt # print first 10 lines of file head -n 1000 myfile.txt # print first 1000 lines of file tail myfile.txt # print last 10 lines of file tail -n 1000 myfile.txt # print last 1000 lines of file tail -n 1000 -f myfile.txt # print last 1000 lines of file and follow # good for log files, shows updates to file as they come in more myfile.txt # page through a file ( press space to see more ) less myfile.txt # same as more but better ( more features like going back )
Commands to navigate through a file while using the “less” command:
|[Page Up]||Scroll back one page|
|b||Scroll back one page|
|[Page Down]||Scroll forward one page|
|[space]||Scroll forward one page|
|G||Go to the end of the text file|
|1G||Go to the beginning of the text file|
|/characters||Search forward in the text file for an occurrence of the specified characters|
|n||Repeat the previous search|
|h||Display a complete list less commands and options|
grep someinfo test.txt # search for a string in a file grep -i someinfo test.txt # case insensitive grep -v someinfo test.txt # exclude instead of include grep "abc\|xyz" test.txt # match "abc" or "xyz" grep -r someinfo * # recursivly search all files grep -r someinfo # same but location is optional
Sort the lines in a file and output them:
sort test.txt # sort in order sort -r test.txt # sort in revers sort -n test.txt # sort in string numerical order
Pipes and Redirects
Pipes and redirects allow output to be either piped to another command or redirected to a file.
||||Pipe output from one command to another|
|>||Redirect output and overwrite destination file.|
|>>||Redirect output and append to end of destination file.|
The output of one command can be sent to another using a pipe “|”. For example we can pipe the output of the ls command to the sort command.
ls | sort -r # list files, then sort them
When you pipe output to grep, it will search this instead of a file. This becomes even more useful with some of the commands that we will learn later on in this guide.
ls | grep someText
clear bc jobs / bg cal chgrp md5sum dd if=/home/tecmint/kali-linux-1.0.4-i386.iso of=/dev/sdc1 bs=512M; sync eject /dev/cdrom env hwinfo ifconfig / other network commands route arp etc. netstat / iostat / lsof / fuser ionice lscpu lspci lsblk lsusb lshw nc nice pidof init pstree ssh scp sleep stat touch tac talk time tr watch which whereis xargs yes
adduser/useradd …. cron anacron at
locate newFile.txt locate -i newFile.txt # case insensitive locate -i *something*blah* # anything that matches these two words
find ..... find . -name *ones* find . -type f -name *ones* find . -iname *wild*
nano # a popular text editor these days pico # also popular jed # another editor vi # traditional Unix text editor, on almost every system that exists, tricky if you aren’t familiar with it emacs # similar to vi but with completely different commands, some people like this better
free -m free -h
su - user2 # become user2 ( need user2's password unless you are root ) su - # become root user ( need root passwd ) sudo somecommand # run a command as root ( if you have permissions ) sudo su - # use sudo to become root ( use your own password )
ps ps -ef ps -aux
NOTE about output ( user PID PPID )
e.... p ....
us: value is the CPU time the CPU spends executing processes for users, in “user space” sy: value is the CPU time spent on running system “kernel space” processes ni: value is the CPU time spent on executing processes with a manually set nice value id: is the amount of CPU idle time wa: value is the time the CPU spends waiting for I/O to complete hi: The CPU time spent servicing hardware interrupts si: The CPU time spent servicing software interrupts st: The CPU time lost due to running virtual machines (“steal time”)
PID: Process ID USER: Name of the owner of the process PR: Process priority NI: The nice value of the process VIRT: Virtual memory used by the process RES: Resident memory used by the process SHR: Shared memory used by the process S: Status of the process. See the list below of the values this field can take %CPU: the share of CPU time used by the process since last update %MEM: share of physical memory used TIME+: total CPU time used by the task in hundredths of a second COMMAND: command name or command line (name + options)
D: Uninterruptible sleep R: Running S: Sleeping T: Traced (stopped) Z: Zombie
commands to sort output
kill 1692 # kill a process with pid 1692
df df -k df -h df -h /var du data du data | sort -nr
- .gz is a gzipped file
- .tar is a tar file ( tape archive ) …..
- .tar.gz is a gzipped tape archive
- .tar.bz2 is a bzipped file ( smaller than gzip )
tar xvf myPackage.tar # extract, verbose, file tar xvfz myPackage.tar.gz # extract, verbose, file, ungzip tar xvfj myPackage.tar.gz # extract, verbose, file, unbzip tar -cvf myarchive.tar myfolder/ # create a tar file tar -cvfz myarchive.tar.gz myfolder/ # create a tar.gz file tar -cvfj myarchive.tar.gz myfolder/ # create a tar.bz2 file gzip somefile.txt gzip -k somefile.txt # keep original zip unzip
uname uname -a uname -s # kernel name uname -r # kernel release uname -v # kernel version hostname uptime # how long the system has been up and the load factor
w # who is logged in who # who is logged in last # show history of logins whoami # show your username getent passwd user1 # get account info id # show your username, group, etc. finger user1 # user info if installed
shutdown # shutdown in 1 min shutdown now # shutdown now shutdown +10 Warning, the system will be shutting down in 10 minutes shutdown 23:00 Warning, the system will be shutting down at 23:00 shutdown -c # cancel a pending shutdown
reboot ..... halt
cut sed awk pr lp
0: No permission 1: Execute permission 2: Write permission 3: Write and execute permissions 4: Read permission 5: Read and execute permissions 6: Read and write permissions 7: Read, write and execute permissions
user / group / owner
chmod 765 example.txt chmod -R 765 example.txt chmod 755 file.py chmod u+rx file.py chmod og-rwx file.py .... chown user1:group1 file.py ....
passwd user1 # change passwd passwd # change root password by default sudo passwd user2 # change someone else's password sudo passwd # change root's password ( when you're not root ) groups user1 # show groups user1 is in
diff file1 file2 uniq …..
dpkg apt-get rpm yum more….
ping ifconfig -a ip a tcp dump
/ /etc /home /var /usr …..
/etc/passwd /etc/sudoers …..
alias cls=clear alias ll=”ls -l”
ssh sshd telnet /etc/services
traceroute host nslookup
single line for loop