터미널로 배우는 리눅스 운영 체제

1. pwd


echo : 뒤이어 입력한 내용을 출력한다.

$ echo hello World
hello World

pwd : 'print working directory' 의 약자로 현재 작업 중인 디렉토리를 출력한다.

$ pwd
/aiffel

2. ls


ls 현재 디렉토리 내의 파일 및 폴더들을 출력 합니다.

$ ls
aiffel data

ls 대신 ls -al 을 입력하면 밑에 그림처럼 출력된다.
. 는 현재 폴더를, ..는 바로 위의 상위 폴더를 카리킨다.
리눅스는 .으로 시작하는 이름의 파일은 숨김 파일이다.
하지만ls -al 명령어를 입력하면 김 파일도 전부 확인할 수 있다.

대부분의 명령어들은 --help라는 인자를 기본으로 제공해준다.
ls --help를 입력해보면

처럼 출력이 되는데,
Ctrl+Shift+↑/↓로 한줄씩 위/아래로 스크롤하거나, Shift+PageUp/PageDown로 한 페이지씩 위/아래로 스크롤 할 수 있다.

다른 인자들도 있다.

  • -l : 각 파일 및 폴더의 권한, 소유자, 크기, 수정일시 등 자세한 정보를 출력합니다.
  • -h : 파일 크기를 바이트 수 대신 사람이 알아볼 수 있는 단위(1K, 234M, 2G 등)로 표시합니다.
  • -t : 파일 수정시간 순으로 정렬해서 출력합니다. 최신 파일이 위쪽으로 표시됩니다.
  • -r : 정렬 순서를 뒤집어 출력합니다. -rt의 형태로 쓰면 최신 파일이 아래쪽으로 표시되어 유용할 때가 있습니다.

한 글자 인자들은 ls -l -a -h 이렇게 쓸수도 있지만 ls -lah 처럼 묶어서 사용 가능하다.

ls 뒤에 폴더 명을 넣어서 해당 폴더 안을 볼 수도 있다.

3. cd


cd : 'Change Directory'의 약자로, 뒤에 폴더명을 입력하면 해당 폴더로 위치를 이동한다.

$ pwd
/aiffel
$ ls
aiffel data
$ cd aiffel
$ pwd
/aiffel/aiffel

cd / 를 입력하면 root경로로 이동이 되는데 최상단의 경로이다.

  • /home: 사용자별 홈 디렉토리들이 있는 곳
  • /root: 최고 관리자 계정의 홈 디렉토리
  • /mnt: 저장장치(HDD, SSD)가 붙는 위치
  • /media: 이동식 미디어(USB 드라이브)가 붙는 위치
  • /tmp: 재부팅 시 삭제될 임시 파일들을 저장하는 폴더
  • /dev: 컴퓨터에 연결된 하드웨어 및 가상 기기(device)들을 가리키는 파일들
  • /proc: 현재 실행 중인 프로세스들을 가리키는 파일들
  • /etc: 각종 설정 파일들
  • /bin: 실행 가능한 프로그램(binary)들
  • /sbin: 시스템 관리용 프로그램들
  • /usr: 다중 사용자 모드에서 사용 가능한 파일 및 프로그램들 (root 계정만 있는 단일 사용자 모드에서는 사용 불가)
  • /var: 캐시, 로그 등 시스템 구동 간 계속 내용이 바뀌는 파일들

4. 운영체제(Operating System) 일반 개론


  • 운영체제란?

    시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어이다. 최근에는 가상화 기술의 발전에 힘입어 실제 하드웨어가 아닌 하이퍼바이저(가상 머신) 위에서 실행되기도 한다.

  • 커널? 쉘? 터미널?

    • 커널(Kernel) : 운영체제 내부에 있는 것으로 컴퓨터의 하드웨어를 제어한다. 운영체제의 90%를 차지한다.
    • 쉘(Shell) : 커널만으로는 운영체제가 완성되지 않는다. 우리가 커널에 명령을 내리기 위해서는 커널이 이해할 수 있는 언어로 전달해야 하는데 그것은 쉽지 않다. 우리는 그저 영어로(표준) 타이핑을 하여 명령을 전달한다. 이때 우리가 전달한 스크립트를 커널이 이해하기 쉽게 해석해주는 역할이 바로 쉘이다. 윈도의 cmd, linux/unix의 bash 가 대표적인 예이다.
    • 터미널(Terminal) : 인간과 컴퓨터가 소통하게 해주는 통로, 인터페이스라고 생각하면 쉽다.
      터미널은 크게 gui 기반 터미널과 텍스트 기반 터미널이 두 가지가 있는데 그중 리눅스 터미널은 텍스트 기반 터미널이다. 터미널은 주로 shell을 이용한다.
  • 프로세스와 스레드

    • 프로그램 : 컴퓨터가 수행할 작업을 기록해 놓은 것
    • 프로세스 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
    • 스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로그램과 환경 변수

    • 명령어들의 진짜 정체는 두가지로 구분 할 수 있다
      • 실제 프로그램
      • 셸에서 제공하는 셸 명령어

which 명령어의 전체 경로를 출력한다.

$ which ls
/bin/ls
$ which bash
/bin/bash

셸에 명령어를 입력하면 셸은 셸 내에서 정의된 명령인지 확인하고 있으면, 해당 명령을 실행한다.
정의된 명령이 아니라면 설치된 프로그램 중 해당이름을 가진 프로그램이 있는지 확인 후 실행한다.

셸 단어앞에 $가 붙으면 환경변수를 의미한다.
PATH 환경 변수는 셸이 프로그램을 실행할 때 참조할 경로들을 나타낸다.
값을 보면 :로 구분되어 있는데, PATH내 같은 경로의 이름이 있다면, 순서 상 앞에 있는 디렉토리의 프로그램을 실행한다.

export 는 셸 변수나 함수를 현재환경으로 내보낸다.

export PATH=/aiffel:$PATHJ

이렇게 PATH 환경변수에 디렉토리를 추가하면 셸이 특정 프로그램을 실행할 떄 참조할 수 있게 된다.

5. 셸 심화

  • 이름이 -all인 폴더를 만들어 보자.
$ mkdir ./--add
$ tail -n +2  train.csv | cut -d"," -f6 | sort | uniq -c
$ tail -n 891 train.csv | cut -d"," -f6 | sort | uniq -c
314 female
577 male
  • train.csv에서 성이 Brown인 사람이 몇 명인지 세어봅시다. 성이 아닌 나머지 이름에 Brown이 들어가는 경우도 있으니 조심해야 합니다.
$ cat train.csv | grep -o Brown, | wc -l
$ cat train.csv | cut -d"," -f4 | grep "Brown" | wc -l
4

좋은 웹페이지 즐겨찾기