리눅스 - 리눅스 기본 cli와 regex(정규표현식), grep, >, >>, pipe, mount

정현우·2021년 7월 10일
2

Linux Basic to Advanced

목록 보기
3/16

리눅스 기본 cli

기본적으로 사용도가 높은 linux cli를 확인하고, 정규 표현식(regex)을 활용하여 리눅스 명령어를 조금 더 고차원적으로 사용해 보자. cli는 grep, >, >>, pipe, mount 에 대해 더 자세하게 살펴포자.

정규 표현식

정규표현식이란?

  • 정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex, rational expression) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 위키바로가기
  • 한 마디로 특정한 규칙을 가진 문자열의 집합 표현 한다.
  • 검색 또는 치환할 때 사용하는 형식언어이다.
  • 어떤 규칙도 가지지 않은 문자열 집합을 표현할 수 없다. 특정한 규칙을 가진 문자열 집합만 표현할 수 있다.

정규표현식 문법

  • 문자중에 일치하는 패턴을 찾는 것이라 패턴을 찾는 문법이 중요하다.

  • 선택 패턴

    • | 문자를 이용해 A | B 의 패턴으로 매칭 가능하다.
    • alice | elice 라는 정규 표현식은 "alice"와 "elice"라는 문자열 모두 포함한다. 즉 둘 중 하나라는 의미를 가진다.
  • 수량 한정자는 수량을 한정해주는 문법 표현을 의미한다.

  • 그룹패턴과 같이 표현식을 그룹으로 묶어 다양한 형태 정규 표현식을 만들어 사용할 수 있다.

다양한 예시

  • 전화번호

    • 010 시작 ^010
    • 숫자가 아닌 문자 0개 이상 \D?
    • 가운데 자리는 4자리다 \d{4}
    • 각 자리에 구분문자가 있을 수 도 있고 없을 수 도 있다. (\D?\d{4}){2} => 표현한 그룹이 2개 존재한다
    • ^010(\D?\d{4}){2} 이 외에도 다른 형태의 정규식이 존재할 수 있다. 정규 표현식은 같은 표현을 가진 다른 형태의 식이 존재한다. 유일하지 않다!
  • 패스워드 표현식

    • 특수문자 / 문자 / 숫자 포함 형태의 8~15자리 이내의 암호
    • /^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/
    • 숫자와 문자 포함 형태의 6~12자리 이내의 암호
    • /^[A-Za-z0-9]{6,12}$/;
  • 이메일 표현식

    • 크게 아이디부분 @ 주소 부분 . 이후 부분 : 3가지 덩어리로 나눌 수 있다.
    • 각 덩어리 마다 제한 조건을 걸어주면 된다.
    • /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;

Grep

grep이란?

  • grep명령은 파일 내에서 지정한 패턴이나 문자열을 찾은 후에 그 패턴을 포함하고 있는 모든 행을 출력한다.
  • 즉 그 '패턴'에 위에서 배운 정규식 표현이 들어갈 수 있다는 것이다.

사용법

  • 실제 간단한 예시
    • grep elice hello.txt : hello.txt파일에서 'elice'라는 문자열 들어 있는 모든 행 출력 / 옵션이 없으면 패턴과 일치하는 것만 출력되는 것임.
    • grep [0-9] hello.txt : hello.txt파일에서 숫자가 존재하는 행 모두 출력.
    • grep "Elice\.The\.Rabbit" * : 현재 디렉토리의 모든 파일에서 Elice.The.Rabbit을 찾아 출력.
    • grep -v ^# somecode : somecode 파일에서 #으로 시작하지 않는 행을 모두 출력
    • grep '\<[a-z].*e\>' elice : elice 파일에서 소문자로 시작하고 공백을 포함한 여러 문자가 나오며, e로 끝나는 단어가 포함된 행을 모두 출력.

특정 파일내의 text도 찾을 수 있다


File Redirection

file redirection?

  • 표준 스트림의 흐름을 바꾸어 일반적인 표준 입력 및 출력 그리고 오류를 사용하지 않고 다른 경로인 파일로 재지정하는 것을 뜻합니다.

  • 리눅스는 표준 스트림이 3가지 존재한다.

    • cat, ls 등은 stdout
    • 해당 명령어가 높은 권한 필요하다는 에러는? stderr
    • 이렇게 3가지의 표준 입출력을 컨트롤 할 수 있다.

>, >>

  • ls > ls.txtls >> ls.txt
    • ls > ls.txt => ls.txt에 home elice 등이 찍혀 있다.
    • ls >> ls.txt => 파일이 존재하지 않으면 파일을 생성하고 존재한다면 파일내용을 지우지 않고 이어서 작성
  • 표준 오류는 연산자를 사용하지 않고 파일디스크립터 번호를 > 앞에 작성해서 사용한다.
    • 0 표준입력 1 표준출력 2 표준에러
    • cd helloeclice > err.txt 와 ``cd helloeclice 2> err.txt ```
  • 사용 예시
  • python hello.py < input.txt >> result.txt
    • hello.py의 stdin이 input.txt로 변경, input.txt파일에 존재하는 데이터가 result.txt에 입력된다.

Piping commands

Linux Pipe

  • Pipe는 둘 이상의 명령어를 묶어 출력의 결과를 다른 명령으로 전환할 수 있는 기능
  • 명령어의 표준 출력을 또 다른 명령어의 표준 입력으로 연결
  • | (세로줄, 쉽프트 ) 사용해 명령어와 명령어를 연결 -> grep을 사용하기 위해 많이 사용 한다
  • 이렇게 File Redirection, Pipe를 조합해 더욱 다양하고 효율적인 작업을 수행할 수 있다.
  • 위 예시를 head a.txt | grep [0-9] > result.txt로 바꾸는 것을 생각해보자.
  • cat input.txt | python add.py > output.txt는 어떻게 수행하는 걸까?

Mount

마운트?

  • 윈도우에서는 하드, USB등의 보조기억장치를 연결하면 자동으로 폴더(디렉토리)에 연결된다. 이것을 PnP(Plug and Play)라고 한다.
  • 리눅스의 경우 PnP 기능이 X -> 직접 연결해야 한다. 즉, 보조 기억 장치를 설치했을시 mount를 작업해야 사용가능하다는 것.

간단한 예시

  • mount /dev/sdb3 /tmp/usb
  • 옵션을 생략했다. 파일 시스템 명은 fdisk -l로 확인이 가능하다.
  • /dev/sdb3 파일 시스템을 /tmp/usb 디렉토리로 마운트 했다.
  • 자세히 알아보기1
  • 자세히 알아보기2

E.T.C

Alias

  • 리눅스의 기본 명령어와 긴 명령어를 다른 이름으로 간단히 줄여서 사용할 수 있는 별칭 명령어
  • Alias는 명령어를 간소화하여 다른 이름으로 사용할 수 있도록 해주는 쉘내부 명령어이다. 즉 복잡한 명령어나 여러 옵션을 사용하는 명령어를 간단한 이름으로 사용할 수 있도록 하는 명령어이다.다시 말하면  alias 기능을 이용하면 어떤 명령이든지, 명령의 길이가 얼마이든지 상관없이, 내가 사용하기 편한 형태로 바꾸어서 사용할 수 있는 것이다.
alias # 별칭 리스트 출력
unalias lsd # 해당 별칭 해제
unalias -a # 모든 별칭 해제

######

alias lsd='ls -l | grep "^d"' # ls 의 결과에서 디렉토리만 출력
alias apachestart='/usr/local/apache/bin/apachectl start' # 아파치 시작
...
  • 위와 같이 사용자 지정으로 다양하게 사용이 가능하다.
  • 하지만 재부팅하면 초기화되므로 .bashrc 에 맨 하단에 작성하여 저장해둬야 한다.

.bashrc?

  • Bash는 Bourne Again Shell의 축약어다. 리눅스에서 가장 널리 사용되는 쉘이다. 

  • bash는 다섯 개의 공통된 설정 파일들을 가지고 있다. 모든 리눅스 배포본에서 이들을 찾아볼 수 있지는 않지만, 이 파일들을 만드는 것은 어렵지 않다. 이 설정  파일들은 다음과 같다: (bash는 5개의 설정 파일을 갖는다.)

    /etc/profile
    /etc/bashrc
    /.bashrc
    ~/.bash_profile
    ~/.bash_logout

  • 각 디렉토리가 어떤 설정을 가지는지 자세하게 알아보자 출처

profile
도메인 중심의 개발, 깊이의 가치를 이해하고 “문제 해결” 에 몰두하는 개발자가 되고싶습니다. 그러기 위해 항상 새로운 것에 도전하고 노력하는 개발자가 되고 싶습니다!

0개의 댓글