Unix 명령어 기초 지식 (Basic commands for Unix)

Unix 📺

유닉스는 1970년대 초반, 벨 연구소의 직원들에 의하여 개발된 운영 체제이다. macOS를 사용한다면 유닉스 계열의 운영체제를 사용하는 것이기 때문에, 유닉스의 기초적인 명령어를 기록으로 남겨놓고자 포스팅을 하게 되었다.

물론 리눅스 또한 유닉스에서 파생되었기 때문에, 같은 명령어를 사용할 수 있다.

표준 스트림 🏷

표준 스트림(standard streams)은 컴퓨터 프로그램과 환경 사이에 연결된 입출력 통로를 말한다. 일반적으로 다음과 같은 세 개의 스트림을 지칭한다.

  • 표준 입력 스트림(standard input, STDIN)
  • 표준 출력 스트림(standard output, STDOUT)
  • 표준 오류 출력 스트림(standard error output, STDERR)

대부분의 명령어는 입력 데이터를 받고, 가공하고, 출력하는 3가지 단계로 동작한다. 기본적으로 표준 입력은 키보드의 입력, 표준 출력과 표준 오류 출력은 콘솔 화면으로 출력한다. 이 입력과 출력을 파일에서의 입력, 파일에서의 출력으로 변경할 수 있는데, 이를 리다이렉트(redirect)라고 한다.

# 표준 출력 리다이렉트
# 명령어의 실행 결과를 파일에 저장한다
# 명령어 > 경로 (표준 입력: 명령어 < 경로)

$ cat test
Leefillls blog
개발은 처음이라

$ cat test > test2
$ cat test2
Leefillls blog
개발은 처음이라

파이프 ⛓

파이프를 사용하게 되면, 어떤 명령어의 표준 출력을 또 다른 명령어의 표준 입력으로 전달할 수 있다.

# echo 명령어의 표준 출력을 cut 명령어의 표준 입력으로 전달

$ echo 'leefilll,개발은 처음이라,github blog' | cut -d , -f 2
개발은 처음이라

기초 명령어 💻

cat 명령어

cat 명령어는 인자로 전달된 파일을 표준 출력을 이용하여 표시한다.

# text 텍스트 파일을 읽어옴
$ cat text.txt
leefilll blog
개발은 처음이라
공부할게 너무 많은 세상

# 각 행에 번호를 붙여서 출력
$ cat -b text.txt
     1	leefilll blog
     2	개발은 처음이라
     3	공부할게 너무 많은 세상

head, tail 명령어

head 명령어는 파일의 앞 부분 10 행까지만 출력하고 tail 명령어는 파일의 마지막 10행을 출력한다.

$ head text2.txt
leefilll blog
leefilll blog
leefilll blog
leefilll blog
leefilll blog
leefilll blog
leefilll blog
leefilll blog
leefilll blog
leefilll blog

# 3행까지만 출력
$ head -n 3 text2.txt
leefilll blog
leefilll blog
leefilll blog

grep 명령어

grep 명령어는 인자로 지정한 문자열을 포함한 일부 행만 추출할 때 사용한다. 물론 인자로 정규표현식을 넣는 것도 가능하다.

# text.txt 파일에서 '개발' 문자열을 포함한 행을 출력

$ cat -n text.txt | grep 개발
     2	개발은 처음이라

cut 명령어

cut 명령어는 인자로 들어온 옵션에 따라 일부를 제거하거나 뽑아낼 때 사용한다.

$ cat text3.txt
leefilll blog 개발은 처음이라 github pages

# -c 옵션으로 글자 인덱스 지정, 콤마나 하이픈을 이용하여 범위를 지정할 수도 있다
# 이때 인덱스는 1부터 시작
$ cat text3.txt| cut -c 1
l
$ cat text3.txt| cut -c 4
f
$ cat text3.txt| cut -c 1-8 # 8번째까지
leefilll
$ cat text3.txt| cut -c 1,10 # 1번째, 10번째 문자 - 공백이 있으면 안됨
lb

# -d 옵션으로 구분자 지정하고 -f 옵션으로 열의 번호 지정
$ cat text3.txt | cut -d ' ' -f 4
처음이라

sed 명령어

sed 명령어는 특정 조건으로 필터링 하거나 제거할 때 사용한다. 원본 파일은 변현하지 않고 출력되는 결과를 변화시켜서 보여주는 역할을 한다. 인자로 정규표현식을 사용할 수도 있다.

  • d(delete) 옵션은 행을 삭제하여 출력할 때 사용한다.
$ cat text4.txt
leefilll blog
개발은 처음이라
공부할게 너무 많은 세상

# d 옵션 - 행 삭제
$ sed '2d' text4.txt
leefilll blog
공부할게 너무 많은 세상

# 마지막 행은 $를 이용
$ sed '$d' text4.txt
leefilll blog
개발은 처음이라

$ sed '/개발/d' text4.txt
leefilll blog
공부할게 너무 많은 세상
  • p(print) 옵션은 행을 출력할 때 사용한다.
# -n 옵션은 기본 출력을 생략한다
# 이 옵션을 주지 않으면 기본 출력이 나오고 해당 행이 다시 한번 출력 된다.
$ sed -n '3p' text4.txt
공부할게 너무 많은 세상

# 2번째 행부터 3번째 행까지 출력
$ sed -n '2,3p' text4.txt
개발은 처음이라
공부할게 너무 많은 세상
  • s(substitution) 옵션은 문자열을 치환할 때 사용한다. 's/{치환하고 싶은 문자 또는 정규표현식}/{치환할 문자}/{추가 옵션}' 형태로 전달하여 사용한다. 추가 옵션으로 g를 넣게 되면 한 줄에 해당 정규표현식이 여러번 나올 경우 모두 치환한다.
# 개발은 -> 블로그는 으로 치환
$ sed 's/개발은/블로그는/' text4.txt
leefilll blog
블로그는 처음이라
공부할게 너무 많은 세상

마치며 💬

catecho는 자주 사용했는데, 나머지 명령어들은 이번 포스팅을 통해 공부를 많이 했다. 코드 예시를 넣기 위해서 직접 해보기도 하고, 예시 파일도 만들면서 조금씩 적응이 되어가고 있는 듯 하다. 다음 포스팅으로는 정규표현식에 대하여 글을 써볼 예정이다. 자주 사용하지 않았어서 많이 낯설기도 하고 자세하게 공부하고 싶기도 하다.

아직까지는 글 하나를 쓸 때마다 생각보다 많은 시간을 잡아 먹는다. 조금씩 나아지겠지…?


References