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.
Environment:
- 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.
Absolute Basics
If you need help use the “man” or “help” commands:
man
man ls
help ls
type ls
Some shortcuts:
history # show your command history
[up] # show last command
[tab] # auto complete a command or path
Show your current directory:
pwd
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
Copying Files:
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 )
Moving files:
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.
Links:
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:
echo "hello world"
Viewing Files:
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 |
q | Quit |
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
~ home
Intermediate Commands
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 )
top
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
nice renice
sar
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
NOTE:
- .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
/etc/passwd /etc/shadow
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
permissions …..
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
Users:
root
diff file1 file2 uniq …..
exit [ctrl-d]
Package Management:
dpkg apt-get rpm yum more….
================
ping ifconfig -a ip a tcp dump
wget curl
/ /etc /home /var /usr …..
/etc/passwd /etc/sudoers …..
alias cls=clear alias ll=”ls -l”
.bashrc .profile
cron at
system calls
ssh sshd telnet /etc/services
traceroute host nslookup
single line for loop
References: