Skip to main content

Find, Locate, and Grep

====================================================================================

FIND

Find is a linux search tool that can be used to find a variety of files based on the given criteria.

------------------------------------------------------------------------------------------------------------------------------------------------

Basic find

find targetdirectory -name stringtofind

find / -name hello.txt
wildcards
find / -name "*.txt"
Discard errors (ie permission denied)
find / -name "*.txt" 2>/dev/null

------------------------------------------------------------------------------------------------------------------------------------------------

 Find files with specific permissions

Find files with read,write, and execute permissions

find / -perm +rwx

------------------------------------------------------------------------------------------------------------------------------------------------

Find files by size

Find files that are greater than 2MB:

find / -size +2M

Find files that are less than 2MB:

find / -size -2M

Find files that are exactly 2MB:

find / -size 2M

------------------------------------------------------------------------------------------------------------------------------------------------

Find files by owner/group

Find files based on group

find / -group groupname

Find files based on owner

find / -user username

====================================================================================

LOCATE

Locate is similar to find in its functionality, however, there are some important distinctions:

  • Locate keeps it's own database of files on a system
  • Locate is less disk IO intensive since it doesn't have to scan the whole hard drive for files, instead it references it's own database.
  • Locate isn't installed by default on most systems, the package name is mlocate. Once installed, you'll need to run the updated command to update locate's database - this should really be updated every time you use the command

------------------------------------------------------------------------------------------------------------------------------------------------

Locate file based on name
locate test.txt

====================================================================================

 GREP

------------------------------------------------------------------------------------------------------------------------------------------------

-i - case insensitive

As with all of Linux, grep is case sensitive. The -i flag can be passed to ignore case type.

------------------------------------------------------------------------------------------------------------------------------------------------

-v -exclude string

The -v flag is used to exclude a string from an output.

------------------------------------------------------------------------------------------------------------------------------------------------

| - or statement

The below will search for string1 or string2 within a file.file, if both are found then both will be outputted.

grep 'string1|string2' filename

------------------------------------------------------------------------------------------------------------------------------------------------

-r - search files recursively 
grep -r hello /

------------------------------------------------------------------------------------------------------------------------------------------------

-A & -B (before and after)

Sometimes you might want to search for a string, and see the lines before/after that string.

The below will show the 2 lines following the string

grep -A2 string filename

The below will show the 2 lines before the string

grep -B2 string filename

You can also combine these to see the lines before and after

grep -A2 -B2 string filename

====================================================================================

-E or egrep - extended regular expression

Regular expression is essentially the methodology that we can use to manipulate grep to find advanced string patterns.

------------------------------------------------------------------------------------------------------------------------------------------------

Special characters

When trying to grep for special characters, you need to make sure to 'escape' those characters, this is done by proceeding special characters with a \:

grep -E year\'s

------------------------------------------------------------------------------------------------------------------------------------------------

-EBeginning orand egrepend -of extended regular expressionline

Regular expression is essentially the methodology that we can use to manipulate grep to find advanced string patterns.

line begins with

The below example would show any lines beginning with the character '1'

grep -E "^1" filename

line ends with

The below example would show any lines ending with the character '1'

grep -e "1$" filename

------------------------------------------------------------------------------------------------------------------------------------------------

Ranges

grep interprets ranges that are defined through square brackets []. 

line begins with 1 and is followed by numbers in the 0-2 range:

grep -iEE "^1[0-2]" filename

We can also search for ranges of letters

The below command would search for the letter b, proceeded by any letter in the specified range, followed by the letter g:

grep -E "b[aeiou]g" filename

We can also search a range of letters like this:

grep -E "b[a-z]g" filename

You can also combine ranges

grep -E "b[a-z,A-Z]g" filename

------------------------------------------------------------------------------------------------------------------------------------------------

Wildcards

There are a number of wildcard options available to use in egrep.

. - any single character

grep -e "c.t" filename
  • Matches: "cat", "cot", "cut", etc.
  • Does not match: "ct", "caat"

* - matches zero or more occurrences of the preceding character

grep -e "g*d" filename
  • Matches: "gd", "god", "good", "goood"
  • Does not match: "go", "goooo", "gdo", "goddy"

.* - match zero or more of any character

grep -e "a.*b" filename
  • Matches: "ab", "acb", "axyzb", "a123b"
  • Does not match: "a b", "ab ", "acbd", "a"

------------------------------------------------------------------------------------------------------------------------------------------------