---
# System prepended metadata

title: Terminal Shortcuts
tags: [Fundamentals, Linux]

---

### Terminal Shortcuts
    Ctrl + l    Clear
    Ctrl + a    Moving to the beginning of a line
    Ctrl + e    Moving to the end of a line
    Alt  + f    Move one word forward in a line
    Alt  + b    Move one word backward in a line
    Alt  + t    Swaps two words
    Ctrl + K    Killing line to the right
    Ctrl + U    Killing line to the left
    Alt  + D    Killing a word from the cursor point.
    Ctrl + W    Killing a word to the left to the beginning of the word
    Ctrl + Y    Yanking (Kinda reviving a line/word that was killed)
    Ctrl + R    Search the history
### LINUX Commands   
#print environment vars  `printenv | grep HOME` OR ` echo $USERNAME` 
#Define custom shell variable
`variable =value // Shell variables are local. Only exists in current shell session`
#Define custom environment variable
`export <variablename> // export CONNECTIONSTRING=http://api.intetrnal.com`
#Startup files
`/etc/profile` - all users global profile
`~/etc/bash.bashrc` - Non login related . Global config for all users.
`~/.bashrc` - Each specific users home directory. We customize this for aliases, custom prompts etc for the given user.
#aliasing 
`alias pig=echo OINK` # whenever you type pig OINK will be output
`type pig` #will show what the alias is about.
#Define the above in ~/.bashrc to make it always available. 
### Date Time
```
date  # prints current date/time
## Note that the arguments are positional (Order does matter)
cal # horizontal calendar
cal july 1969
ncal #vertical calendar with current day selected
ncal july 1969
ncal 1999
```
`echo` # echos what you type after the commands
`sort <filename>` # sorts and prints the contents of the file
### Accessing Manual pages
    `man <command>`
    Press q to exit
    f to forward by one page
    b to backward by one page
    up/down arrows to line by line
    SPACE forward by one window/page
    /  -- use to search man pages
### Searching Manual
    Example : man -k dog # searches for section that contains dog
For shell built-ins you may  not find man pages. In that scenario use `help <commandname>` 
`ls` # list contents of the directory
`history`
`history | less`  # => History in pages
`Ctrl + R ` # search history.  
`head`  # Show first 10 lines
`tail` #Show last 10 lines
`tail -n 4` #Specific # of lines
`tail -f <filename>`
### Redirecting 
Numeric file descriptor for Standard Streams
    stdin  0
    stdout 1
    stderr 2
Examples
    `ls 1> list.txt`
    `ls zzz 2> error.txt`
Redirecting stdout and stderror n single statement
    `cat bees.txt ants.txt > insects.txt 2>> error.log`
Redirecting stdout and stderror to the same destination
    `ls > output.txt >2 output.txt` OR  `ls > output.txt 2>&1` (latter is just a syntactic sugar)
### Piping
Examples
    `ls -l /usr/bin | less`  # Pass the output of ls -l to less 
    `date | rev` # Pass output of date to rev command
    `ls /usr/bin -1 | wc -l` # count the number of files.
    `ls /usr/bin -lh | sort -k5h |tail -3` # List three largest files in a given folder.
`du -ha /usr/bin/ | sort -h | tail -3` # Same as above. Better
### Expansions
Pathname expansion  `echo *`
Wild Card : ?   `ls *.???` # list all files that has three char extensions.
Range Wild Card: 
   `ls app[12].css` #Result: app1.css  app2.css
    `ls [a-z]*` # Result: files that begins with lowercase alphabet filename.
    `ls [^a]*` # Result file list that does not begin with lower case a
### Finding files
    `locate` #uses a database. Requires a search pattern
    `find` # slower. But more powerful and realtime
    # find with no arguments will list every single file in the directory and sub directories.
    `find /` # willl start listing every single file in the system
    `find -type f` # find only files
    `find -type d` # find only directories
    `find ~/Desktop -name *.txt` # find pattern based
    `find ~ -type f -name "*.txt"`
    `find ~ -type f -iname "*std*"` # find with case insensitive name search. 
    `find ~/Desktop -type f -name "*[0-9]*"` # any file that contains a number in it's name.
    `find / -type f -size +1G` # find files that are bigger than 1G in size`
    `find / -user ponting` # find file that are owned by certain users
    `find ~/Desktop -empty -type d` # find empty folders
    `find -mmin +30` # find files modified 30 minutes ago.
    `find -mmin -30` # modified in 30 minutes
    `find -mmin 30` # modified exactly 30 minutes ago 
    `find -type f -not -name "*.pdf"` # Find files that are not .pdf
    `find -empty -exec ls -l '{}' ';' # ls 
### Timestamp
    mtime # modificationtime ex: ` ls -l`
    ctime # change time. Rename move etc.` ls -lm`
    atime # Last access time. ` ls -lu`
### Grep : Search inside files || text
    `grep "chicken" animals.txt`
    `grep bequeath SongOfMyself.txt`
    `grep -w "I" SongOfMyself.txt` # search for I. But will include It as well.
    `grep -w "I" SongOfMyself.txt -i` #  Case insensitive search
    `grep -w "I" SongOfMyself.txt` # Word search
    `grep -r "9198027949" ~/Desktop` # Find across files ina particular folder / recursively
    `grep "myself" SongOfMyself.txt -ic` # How many times myeslf is used
    `grep "I" SongOfMyself.txt -iwc` # How many times I is used as a word 
    `grep "wagon" SongOfMyself.txt -A2` #include two lines after
    `grep "wagon" SongOfMyself.txt -B2` #include two lines before
    `grep "grass" SongOfMyself.txt -wn` # include line number as well
    `grep "grass" SongOfMyself.txt -nC2` # show grass , 2 lines before and after and include line numbers.     
### Regular Expressions
    `.        matches any single chcaracter`
    `^        matches the start of a line`
    '$        matches the end of a line'
    '[abc]    matches any character in the set'
    '^[abc]   matches any character NOT in the set'
    '[A-Z]    matches any characters in a range'
    '*        Repeat previous expression`
    `\        Escape meta characters`
### Cron Jobs
    `crontab -e`