# Linux Commands
## Useful Links
| Descriptoin |Link |
| -------- | -------- |
| Crontab Guru|https://crontab.guru/|
| Example Bash|https://github.com/alexanderepstein/Bash-Snippets/blob/master/todo/todo|
|Popular Bash Aliases|https://www.digitalocean.com/community/questions/what-are-your-favorite-bash-aliases|
|Regex|https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url/3809435#3809435 https://regexone.com/
|List Of Countries|https://gist.github.com/kalinchernev/486393efcca01623b18d|
|OS Family Tree| https://eylenburg.github.io/os_familytree.htm|
## Folder Structure
```
\ => This is the root directory
- bin => Binaries. Executable programs.
- home =>
- jayaraj
- Desktop
- Pictures
- Downloads
- Documents
- Music
- priya
- sarang
- root => home directory for the super user root.
- dev
- usr =>
- etc => Configuration files.
- media => removable media. CD ROM etc.
- var => Logging, cache etc
```
## Permissions
### Understanding
| Permissions| Owner | Group Owner | Size | Last Modified | File Name|
| --------| -------- | -------- | -------- | --------| --------|
|drwxr-xr-x 2| ricky |ponting | 92K |May 3 2021 |Cases|
|-rw-r--r-- 1| ricky |ponting | 12M |Mar 11 14:52 |02_Command_Basics.pdf|
|-rw-r--r-- 1| ricky |ponting |2.1M |Mar 11 14:52 |01_Linux_Introduction.pdf|
|-rw-r--r-- 1| ricky |ponting |2.3M |Mar 11 14:54 |03_Getting_Help.pdf|
|-rw-r--r-- 1| ricky |ponting |2.5M |Mar 11 22:10 |05_Creating_Files_And_Folders.pdf|
|-rw-r--r-- 1| ricky |ponting |5.7M |Mar 11 22:20 |04_Navigation.pdf|
|-rw-r--r-- 1| ricky |ponting |864K |Mar 12 14:29 |06_Nano.pdf|
| Attributes | Description| Comments |
| -------- | -------- | -------- |
| - | regular file | |
| b | Block Files | Associated with a device |
| c | Character | Associated with a device |
| l | Symlink | Symbolic Link |
| d | directory | |
> 10 Char Permission Set
> r - Read
> w - Write
> x - Execute
> - - Cannot read write or execute.
| x |xxx| xxx |xxx|
| -------- | -------- | -------- | -------- |
| Type: File/Folder | Owner's Permissions | Group's Permissions | World |
| d | rwx | r-x| r- - |
| - | rwx | r-x| r- - |
### Manipulating
`chmod` # Changing permission
chmod mode file
**Who**
u - user
g - group
o - others (World)
a - everyone (All the above)
**What**
- removes permission
+ grants permission
= set a permission and remove others
**Which**
r - read
w - write
x - execute
`su` # substitute user.
`chown` # change owner or group owner of a file or directory `sudo chown <user> <file/dir>`
`sudo` # run commands as the root user.
`addgroup`
`adduser`
## LINUX Commands
## Environment
#print environment vars
`printenv`
#Parameter expansion
Example: `printenv | grep HOME`
` echo $USERNAME`
Example: ` echo $PWD or echo $PATH`
#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
type <command> # Prints the type of command
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 Standar 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`