특정 디렉토리에서 파일이나 폴더를 검색하고 보여줄 수 있는 find 명령어를 사용해보자


환경

  • Linux 기반 시스템
  • Bash shell(/bin/bash)


find란?

find

  • find: 디렉토리 계층에 있는 파일들과 폴더들을 나열해줍니다.
  • 하단 예시 참조
# Basic Usage
$ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

# Example1
$ find .
.
./test2.txt
./test_in
./test_in/another_test.txt
./pid_test_shell.sh
./test.txt
./tools

# Example2
$ find ./ -name "*.txt"
./test2.txt
./test_in/another_test.txt
./test.txt

# Example3
# -L option follow symbolic link
$ find -L ./ -name "*.sh"
./pid_test_shell.sh
./tools/upgrade_packages.sh
./tools/run_jupyter_notebook.sh
./tools/install_packages.sh


예시

grep을 이용해 원하는 파일 찾기

  • Pipe와 grep 명령어를 이용
  • find path | grep file_name
$ find . | grep test.txt
./anaconda3/pkgs/pylint-1.7.4-py36hb9d4533_0/lib/python3.6/site-packages/pylint/test/functional/using_constant_test.txt
./anaconda3/lib/python3.6/site-packages/pylint/test/functional/using_constant_test.txt
./test/test_in/another_test.txt
./test/test.txt
./.pyenv/versions/3.5.3/lib/python3.5/test/test_doctest.txt
./.pyenv/versions/3.5.2/lib/python3.5/test/test_doctest.txt
./.pyenv/versions/3.6.1/lib/python3.6/test/test_doctest.txt


파일명을 이용해 파일 찾기

  • 명령어와 함께 -name을 이용
  • find path -name file_name
$find . -name test.txt
./test/test.txt


symbolic를 따라가서 탐색하기

  • 명령어와 함께 -L 옵션을 이용
$ ls -l
total 16
-rwxrwxr-x 1 twpower twpower  119 May  6 18:36 pid_test_shell.sh
-rw-rw-r-- 1 twpower twpower    8 May  6 18:30 test2.txt
drwxrwxr-x 2 twpower twpower 4096 May 26 23:31 test_in
-rw-rw-r-- 1 twpower twpower   84 May  6 18:31 test.txt
lrwxrwxrwx 1 twpower twpower   20 May 26 14:53 tools -> /home/twpower/tools/

$ find ./ -name "*.sh"
./pid_test_shell.sh

$ find -L ./ -name "*.sh"
./pid_test_shell.sh
./tools/upgrade_packages.sh
./tools/run_jupyter_notebook.sh
./tools/install_packages.sh


xargs를 이용해 파일의 내용 검색하기

  • 다음처럼 find, pipe, xargs 그리고 grep 명령어를 이용합니다.
  • find . -name "*.txt" | xargs grep "He"
$ find . -name "*.txt" | xargs grep "He"
./test2.txt:Hello
./test2.txt:Hellot
./test2.txt:tHello


참고자료

Use find command in specific directory(path) to find file or directory


Environment and Prerequisite

  • Linux base system
  • Bash shell(/bin/bash)


What is find?

find

  • find: search for files in a directory hierarchy
  • Below are examples of find command usages
# Basic Usage
$ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

# Example1
$ find .
.
./test2.txt
./test_in
./test_in/another_test.txt
./pid_test_shell.sh
./test.txt
./tools

# Example2
$ find ./ -name "*.txt"
./test2.txt
./test_in/another_test.txt
./test.txt

# Example3
# -L option follow symbolic link
$ find -L ./ -name "*.sh"
./pid_test_shell.sh
./tools/upgrade_packages.sh
./tools/run_jupyter_notebook.sh
./tools/install_packages.sh


Examples

Find file using with grep

  • Use pipe and grep command
  • find path | grep file_name
$ find . | grep test.txt
./anaconda3/pkgs/pylint-1.7.4-py36hb9d4533_0/lib/python3.6/site-packages/pylint/test/functional/using_constant_test.txt
./anaconda3/lib/python3.6/site-packages/pylint/test/functional/using_constant_test.txt
./test/test_in/another_test.txt
./test/test.txt
./.pyenv/versions/3.5.3/lib/python3.5/test/test_doctest.txt
./.pyenv/versions/3.5.2/lib/python3.5/test/test_doctest.txt
./.pyenv/versions/3.6.1/lib/python3.6/test/test_doctest.txt


Find file using file name

  • Use command with -name
  • find path -name file_name
$find . -name test.txt
./test/test.txt


  • Use command with -L
$ ls -l
total 16
-rwxrwxr-x 1 twpower twpower  119 May  6 18:36 pid_test_shell.sh
-rw-rw-r-- 1 twpower twpower    8 May  6 18:30 test2.txt
drwxrwxr-x 2 twpower twpower 4096 May 26 23:31 test_in
-rw-rw-r-- 1 twpower twpower   84 May  6 18:31 test.txt
lrwxrwxrwx 1 twpower twpower   20 May 26 14:53 tools -> /home/twpower/tools/

$ find ./ -name "*.sh"
./pid_test_shell.sh

$ find -L ./ -name "*.sh"
./pid_test_shell.sh
./tools/upgrade_packages.sh
./tools/run_jupyter_notebook.sh
./tools/install_packages.sh


Search file contents using with xargs

  • Use find, pipe, xargs and grep command.
  • find . -name "*.txt" | xargs grep "He"
$ find . -name "*.txt" | xargs grep "He"
./test2.txt:Hello
./test2.txt:Hellot
./test2.txt:tHello


Reference

grep 명령어에서 AND, OR 그리고 NOT(특정 패턴 제외) 조건들을 사용할 수 있는 방법을 알아보자


환경

  • Linux 기반 시스템
  • Bash shell(/bin/bash)


grep이란?

grep

  • grep: 들어오는 입력에 대해서 주어진 패턴을 포함하는 줄들을 출력해주는 명령어입니다.
# Basic Usage
$ grep [OPTIONS] PATTERN [FILE...]
$ grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
  • 파일 이름과 패턴 사용법
# Example 1
$ grep pattern filename
  • 파이프와 패턴 사용법
# Example 2
$ cat << EOF | grep example
> test
> example
> example1
> example+test
> this
> is
> EOF
example
example1
example+test


AND 조건 사용법

용도

  • 패턴들이 모두 포함된 줄들을 출력합니다.


(방법1) grep을 여러번 이용

  • Pipe를 이용해 여러번 사용합니다.
$ cat test.txt | grep pattern1 | grep pattern2


(방법2) -E 옵션을 이용

  • -E 옵션을 사용합니다.
  • Regular Expression을 이용해 grep 명령어를 사용할 수 있으며 아래와 같은 경우에 pattern1과 pattern2가 동시에 나오는 줄들을 출력하지만 순서도 pattern1 다음에 pattern2가 있는 줄들을 출력하게 됩니다.
$ grep -E grep "pattern1.*pattern2"
  • 다음 아래처럼 사용하면 순서에 상관 없이 두 패턴이 동시에 포함된 줄들을 출력합니다.
$ grep -E grep "pattern1.*pattern2|pattern2.*pattern1"


OR 조건 사용법

용도

  • 패턴들 중 하나라도 포함하고 있는 줄들을 출력합니다.


(방법1) -e 옵션을 이용

$ cat test.txt | grep -e pattern1 -e pattern2


(방법2) -E 옵션을 이용

$ cat test.txt | grep -E "pattern1|pattern2"


NOT 조건 사용법

용도

  • 특정 패턴이 포함되지 않은 줄들을 출력합니다.


(방법) -v 옵션을 이용

# Example 1
$ cat test.txt | grep -v pattern

# Example 2
$ cat test.txt | grep -v pattern1 | grep -v pattern2


참고자료

Use AND, OR, NOT condition in grep command


Environment and Prerequisite

  • Linux base system
  • Bash shell(/bin/bash)


What is grep?

grep

  • grep: Print lines that match patterns.
# Basic Usage
$ grep [OPTIONS] PATTERN [FILE...]
$ grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
  • File name and pattern usage
# Example 1
$ grep pattern filename
  • Pipe and pattern usage
# Example 2
$ cat << EOF | grep example
> test
> example
> example1
> example+test
> this
> is
> EOF
example
example1
example+test


AND Condition Usage

Purpose

  • Print lines which contain all patterns.


(Method1) Use multiple grep

  • Use multiple grep with pipe
$ cat test.txt | grep pattern1 | grep pattern2


(Method2) Use -E option

  • Use -E option.
  • You can use Regular Expression in grep with -E option. Like below, it prints lines which contain pattern1 and pattern2. However order will be pattern1 -> pattern2.
$ grep -E grep "pattern1.*pattern2"
  • Following example will print all lines which contain both pattern1 and patter2 without any order.
$ grep -E grep "pattern1.*pattern2|pattern2.*pattern1"


OR Condition Usage

Purpose

  • Print lines which contain at least one pattern.


(Method1) Use -e option

$ cat test.txt | grep -e pattern1 -e pattern2


(Method2) Use -E option

$ cat test.txt | grep -E "pattern1|pattern2"


NOT Condition Usage

Purpose

  • Print lines which does not match pattern.


(Method) Use -v option

# Example 1
$ cat test.txt | grep -v pattern

# Example 2
$ cat test.txt | grep -v pattern1 | grep -v pattern2


Reference

systemd 로그를 확인할 수 있는 journalctl에 대해 간단하게 알아보자


환경

  • Linux 기반 시스템
  • Bash shell(/bin/bash)


journalctl이란?

journalctl

  • systemd의 로그를 journal로 관리하는데 해당 journal들을 조회할 수 있는 소프트웨어를 말합니다.


예제

기본사용법

  • journalctl 명령어와 옵션을 이용해 사용합니다.
journalctl [OPTIONS...] [MATCHES...]


예제 - 추가적인 메시지(에러 혹은 이벤트)와 함께 로그의 가장 끝 부분을 확인

  • -xe 옵션을 사용
journalctl -xe


예제 - 특정 유닛의 로그를 확인

  • -u 옵션을 사용
journalctl -u [systemd unit name]


예제 - 로그를 계속 확인하며 트래킹

  • -f 옵션을 사용
journalctl -f


참고자료