다시 시작하는 리눅스 #7 파일 검색 및 명령어

최동민·2022년 12월 28일
0

Linux

목록 보기
16/25

파일을 찾는 명령어로는 findlocate가 있다.

find : 디렉터리 트리에서 파일 찾기

find <검색할 디렉터리> <검색 조건> <액션>

find 명령어를 실행하면 인자로 지정한 <검색할 디렉터리>를 기점으로 <검색 조건>을 만족하는 파일을 찾아서 <액션>을 실행한다.
여기서 <검색 조건>에 아무런 조건도 지정하지 않으면 지정한 디렉터리 안의 모든 파일과 디렉터리를 대상으로 액션이 실행된다.

find-1.txt를 찾아서 경로를 출력한다.
이처럼 find 명령어는 지정한 디렉터리 트리를 내려가면서 검색 조건에 일치하는 파일을 검색한다. 따라서 디렉터리가 깊게 중첩되어 있어도 파일을 쉽게 찾을 수 있다.

사용 가능한 검색 조건

  • -name, -iname
    파일 이름으로 검색하려면 사용한다. -name은 대소문자를 구별하지만 -iname은 구별하지 않는다.
    파일 이름에는 와일드카드로 *?로 사용할 수 있으며 경로 확장처럼 *는 임의의 문자열을, ?는 임의의 한 문자를 의미한다.
    -name으로 이름을 지정할 때 와일드카드를 사용한다면 반드시 ' (작은따옴표)로 감싸주어야 한다. 그래야 배시의 경로 확장이 적용되지 않는다.
    만약 작은따옴표로 감싸지 않으면 *가 배시에 의해 확장되어 find명령어에 전달된다.
    find 뿐만 아니라 모든 명령어를 실행할 때 *와 같이 셸이 변환되는 문자(메타 문자)를 인자로 지정할 때는 주의를 기울여야 한다.
  • 파일 형식으로 찾기 -type
    -type f : 보통 파일, type d : 디렉터리, type l : 심볼릭 링크
    -a(AND)를 사용하여 검색 조건을 여러 개 지정할 수 있다. (생략 가능)
    1.find . -type f -a -name '*.txt' -print
    2.find . -type f -name '*.txt' -print
  • locate : 데이터베이스에서 파일 찾기
    경로의 일부를 지정하여 파일을 찾을 때 사용하는 명령어.
    이때 전용 데이터베이스에서 검색하므로 그 자리에서 디스크를 스캔해서 파일을 찾는 find보다 훨씬 빠르다.
    별도로 설치를 해주어야 하는데, locate 명령어는 mlocate라는 패키지에 포함되어 있기에 우분투에서는 apt-get명령어로 다음과 같이 설치한다.

    다음으로는 파일 경로 목록을 데이터베이스에 등록해야 한다. 다음과 같이 슈퍼 사용자 권한으로 updatedb 명령어를 실행하면 데이터베이스가 만들어진다.
    locate를 설치하면 updatedb가 주기적으로 실행되도록 설정.
    앞서 소개한 find는 실행할 때마다 디렉터리 트리를 탐색해서 많은 파일이 저장된 디스크를 검색할 때는 시간이 오래 걸린다. 하지만 locate는 사전에 만든 데이터베이스를 활용하기 때문에 검색 속도가 빠르다. find로 몇 분 걸릴 만한 검색도 locate로는 몇 초만에 끝나는 것.
    locate 명령어는 기본적으로 데이터베이스를 하루에 한 번 만들도록 설정.
    1.locate로 검색된 파일이 실제로는 디스크에 존재하지 않을 수 있다.
    2.locate로 검색되지 않았지만 실제로는 존재할 수 있다.
    즉, 방금 전에 만든 파일은 locate 명령어로 검색되지 않는다.
    따라서 locate 명령어는 시스템에 원래부터 있었던 파일이나 며칠 전에 만든 파일을 빠르게 검색할 때 사용한다고 생각하면 된다.
    • 대소문자 상관없이 검색을 원한다면 i 혹은 --ignore-case 옵션을 지정한다.
      파일 이름만으로 검색할 때는 -b 혹은 --basename 옵션을 지정한다.
      locate는 지정한 문자열 패턴이 파일 경로에 있으면 전부 출력한다. 예를 들어 /usr/share/python3라는 디렉터리 아래에 있는 파일은 디렉터리에 이미 python이란 문자열을 포함하므로 전부 출력된다.
      이때 -b 옵션을 지정하면, 이를테면 /usr/share/python3'debian_defaults와 같은 파일은 출력되지 않는다. 즉, 파일 경로가 아니라 이름에 python이 포함되어야 출력된다.
      검색 패턴 여러 개를 지정하게 되면 OR 조건으로 검색한다.
      ex) locate docs document : docs혹은 document를 포함하는 파일 검색
      여러 검색 패턴을 모두 만족하는 파일을 검색할 때에는 -A 혹은 -all 옵션(AND)을 사용한다.
      ex) locate -A bash doc : bashdoc를 포함하는 파일 검색

명령어 사용법 확인하기

리눅스 시스템에 내장된 메뉴얼 확인

--help

리눅스의 명령어는 대부분 --help라는 옵션을 제공. 명령어에 대한 도움말이 출력된다.

출력되는 내용은 명령어마다 다르지만 대부분 다음과 같은 내용을 포함한다

  • 사용 방법(옵션과 인자 지정 방법)
  • 명령어에 대한 개요
  • 지정할 수 있는 옵션 목록과 그 의미
  • 그 외 참고 자료

man : 메뉴얼 출력

지정한 명령어의 온라인 메뉴얼을 출력한다.
전통적인 리눅스의 기본 메뉴얼로서 대부분의 명령어에 대해 --help 옵션보다 훨씬 자세한 내용을 담고 있다. 또한 리눅스의 설정 파일이나 라이브러리에 대한 설명도 포함하고 있다.
보통 다음과 같은 항목을 포함한다.

  • 이름 : 명령어 이름과 간단한 설명
  • 서식 : 옵션이나 인자 지정 방법
  • 설명 : 명령어의 상세 설명
  • 옵션 : 지정할 수 있는 옵션 목록과 사용 방법
  • 예 : 대표적인 사용 방법 예시
  • 환경 변수 : 동작을 바꾸는 변수에 대한 설명
  • 파일 : 설정 파일이나 관련 파일
  • 관련 항목 : 관련된 명령어 혹은 동작이 비슷한 명령어
  • 버그 : 알려진 버그

명령어 이름을 모르는 경우에는 -k를 사용하여 키워드로 메뉴얼을 검색할 수 있다.

그리고 명령어 뒤에 붙은 괄호 안의 숫자는 섹션 번호를 의미한다.

섹션
번호 1 : 명령어
번호 2 : 시스템콜
번호 3 : 라이브러리 함수
번호 4 : 디바이스 파일
번호 5 : 파일 서식
번호 6 : 게임
번호 7 : 기타
번호 8 : 시스템 관리 명령어
번호 9 : 커널 루틴
man <섹션 번호> <이름>
섹션 번호를 생략하면 섹션 번호의 값이 제일 작은 메뉴얼이 출력된다.
ex)
man 1 crontab : 섹션 1 (명령어) crontab 메뉴얼 표시
man 5 crontab : 섹션 5 (파일 서식) crontab 메뉴얼 표시
man crontab : 번호가 작은 섹션1(명령어) crontab 메뉴얼 표시
특정 명령어가 어떤 섹션에 포함되어 있는지를 확인하려면 다음과 같이 -wa 옵션을 사용한다.
다음과 같이 메뉴얼 페이지의 실제 파일 경로가 출력된다. 파일 경로를 보면 해당 메뉴얼이 어떤 섹션에 속하는지 확인할 수 있다.

명령어 검색

which : 명령어의 전체 경로 표시

리눅스 명령어의 실체는 파일이다. 예를 들어 cat 명령어의 실체는 /bin 디렉터리 아래에 /bin/car이라는 파일이다.

하지만 우리가 cat을 사용할 때는 /bin/cat이라고 입력하지 않고 cat이라고 입력한다. 이는 셸이 $PATH라는 환경 변수에 저장된 장소에서 명령어를 찾도록 되어 있기 때문이다.
다음과 같이 셸이 명령어를 찾는 위치가 어딘가에 기록되어 있다고 생각하자.

위에서 출력된 문자열은 디렉터리를 :으로 연결한 것이다. cat 명령어를 실행하면 다음 그림과 같이 $PATH로 지정한 디렉터리에서 명령어를 찾는다.
$PATH에서 설정된 디렉터리를 패스(path)라고 한다. 패스를 설정해 두면 명령어가 실제 어디에 있든 명령어의 이름만으로 실행하는 것이 가능해진다.
명령어 파일의 실제 위치는 which 명령어를 사용해 확인할 수 있다.

profile
코드를 두드리면 문이 열린다

0개의 댓글