[부트캠프 - 12일차] 1/7.수 - Linux

developowl·2026년 1월 12일

부트캠프

목록 보기
3/24
post-thumbnail

2. vim

특정 행으로 이동

내용 수정

내용 삭제

명령 취소

편집

  • 이름을 만들어서 사용
    • 복사를 할 때 버퍼이름+yy를 사용하면 현재 행의 내용을 버퍼이름으로 저장
    • 붙여넣을 때는 버퍼이름+p를 이용

내용 검색

  • 검색은 명령어 입력 줄인 마지막 행으로 이동해서 입력
  • 명령어가 아닌 /이나 ?를 눌러서 검색할 키워드를 입력

치환

  • 대소문자 가리지 않고 바꾸기 수행(검색어 뒤에 /c 를 붙여도 됨)
    • :set ignorecase
  • 대문자를 소문자로 변경할 때
    • :%s/.*/\L&/g
  • 소문자를 대문자로 변경할 때
    • :%s/.*/\U&/g

파일 읽어오기

Shell 명령 수행

기타 명령

vi의 환경설정 방법

  • 사용자 홈 디렉터리에 .exrc 파일에 설정 내용을 작성
  • 환경 변수 EXINIT 에 지정
  • vi의 마지막 행 모드에서 명령으로 설정

환경 설정 옵션

  • :set ai (autoindeant)
    • 윗라인과 같이 자동으로 들여쓰기.
  • :set si
    • 코딩 할때 if, for 같은 것을 입력 하고 다음 라인으로 이동시 자동으로 들여쓰기
  • :set paste
    • set ai, set si 같은 옵션을 사용할 경우 붙여 넣기를 하면 계단 현상이 발생함으로 붙여넣기를 사용할 경우에 이 옵션을 켜주면 계단 현상을 방지할 수 있음
  • :set ts=4 (tabstop)
    • [tab] 키를 입력 하였을때 이동하는 크기를 조정 합니다.
  • :set sw=4 (shiftwidth)
    • set si 했을 경우 들여쓰기 하는 깊이를 설정
  • :set et (expandtab)
    • [tab] 키를 입력 하였을 때 tab에 해당하는 space 만큼 이동
  • :set encoding=cp949 or utf8
    • 작업하는 컴퓨터 또는 개발 언어에서 기본 인코딩 타입을 설정
  • :set fenc=cp949 or utf8
    • 다른 인코딩으로 저장 하고 싶을때 명령을 내리고 저장하면 해당 인코딩으로 저장
  • :set t_ti= t_te=
    • 터미널 환경에서 vi를 종료 할 때 편집 하던 화면이 그대로 남도록 하는 것으로 BSD에서는 기본값인데 Linux 에서는 화면이 지워짐
  • :set ruler
    • 우측 하단에 라인 및 컬럼 위치 표시및 전체 문서의 위치를 %로 표시
  • :set ff=unix (dos, mac)
    • 라인변경 문자를 변경합니다.
  • :set key=<password>, set key=
    • 문서를 암호화 시키고 암호를 풀 수 있음
  • :set ic (ignorecase)
    • 검색 패턴 사용시 대소문자를 구별 하지 않음
  • :set wam
    • 저장하지 않고 종료시에 경고메시지 출력
  • :set sm (showmatch)
    • 괄호를 닫을 때 열기 괄호를 보여줌
  • :set noai
    • 모든 명령의 취소는 no를 앞에 추가

vi의 환경 설정

  • 환경 변수를 이용한 설정 설정
adam@help:~$ EXINIT='set nu'
adam@help:~$ export EXINIT

nano

  • 명령줄에서 작업할 때 텍스트 파일을 생성하거나 편집해야 하는 경우가 많은데 가장 강력하고 인기 있는 명령줄 편집자는 Vim과 Emacs
  • GNU nano는 유닉스 및 리눅스의 메뉴 기반의 명령 줄 텍스트 편집기
  • 구문 강조 표시, 다중 버퍼, 검색 및 정규식 지원으로 대체, 맞춤법 검사, UTF-8 인코딩 등과 같은 일반 텍스트 편집기에서 기대할 수 있는 모든 기본 기능이 포함되어 있음
  • 나노 텍스트 편집기는 macOS 및 대부분의 Linux 배포판에 미리 설치되어 있음

3. Shell

사용자가 입력한 명령을 해석해 커널로 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 수행

기능

  • 명령어 해석기
    • 사용자가 입력한 명령이나 파일에서 읽어 들인 명령을 해석하고 적절한
      프로그램을 찾아서 실행
  • 프로그래밍
  • 사용자 환경 설정
    • 사용자 환경을 설정할 수 있도록 초기화 파일 기능을 제공
    • 초기화 파일에는 명령을 찾아오는 경로를 설정하거나 파일과 디렉터리를 새로 생성할 때 적용하는 기본 권한을 설정하거나 다양한 환경 변수 등을 설정할 수 있음
    • 사용자가 로그인할 때 이 초기화 파일이 실행됨.

종류

  • 본쉘(sh)
    • 최초의 쉘, 지금은 베시쉘로 대체
  • C쉘(csh)
    • 2BSD 유닉스에서 발표
    • 콘쉘(ksh)AT&T 에서 개발해서 SVR4 유닉스에서 발표
  • bsh
    • 본 쉘과 호환성을 유지하고 C쉘과 콘쉘의 편리한 기능 모두 포함
    • 리눅스이 기본 쉘로 제공
  • tsch
    • csh에 이어서 개발된 c쉘 계열의 쉘
  • zsh
    • 최근에 개발된 쉘로 bash와 tsch의 기능에 독자적인 기능을 추가
    • 다양한 기능을 제공

로그인 쉘, 서브 쉘

  • login shell
    • 리눅스에 접속했을 때 보여지는 쉘
  • sub shell
    • 사용자가 프롬프트에서 다른 쉘을 실행할 수 있는데 이 쉘이 sub shell
    • 종료하는 명령은 CTRL + d or exit
    • sub shell이 종료되면 이전 쉘 환경으로 돌아가지만 로그인 쉘을 종료하면 터미널이 종료되거나 원격접속이 해제됨.

bash shell

  • 우분투 기본 제공 쉘
  • 특징
    • alias (명령 단축 가능)
    • history
    • 연산
    • Job Control
    • 자동 이름 완성
    • 프롬프트 제어
    • 명령 편집

지원하는 Shell 확인

cat /etc/shells

Shell 변경

  • shell 확인: 특정 사용자의 정보를 찾아서 확인

    grep developowl /etc/passwd

    developowl:x:1000:1000:developowl:/home/developowl:/bin/bash

    • 가장 앞의 정보가 로그인 ID이고 가장 마지막에 나온 /bin/bash 가 사용자의 기본 Shell
    • 사용자가 로그인하면 자동으로 실행되는 기본 Shell → Login Shell
  • C shell 설치

    sudo apt-get install csh
    
    # check
    cat /etc/shells
  • shell 변경
    chsh [options] [username]
    • options
      • -s shell 경로
        • 지정하는 쉘(절대 경로)로 로그인 쉘을 변경
      • -l
        • /etc/shells. 파일에 지정된 쉘을 출력
[shell name] -s sh [username]
  • 쉘을 변경한 경우 다시 접속해야 반영됨
  • 절대경로
    • 루트로부터의 경로, 불변
  • 상대경로
    • 현재 위치로부터의 경로(./는 현재 디렉토리를 나타내는 것인데 생략해도 되고, ../는 상위 디렉토리를 의미

Shell 내장 명령

  • 쉘은 자체적으로 내장 명령을 가지고 있는데 일반적인 리눅스 명령들이 /bin이나 /usr/bin 디렉터리에 별도의 실행 파일로 있는 것과 달리 쉘 명령은 별도의 실행 파일이 없이 쉘 안에 내장되어 있음.
  • 쉘 내장 명령은 cd

출력 명령

  • echo
    echo [-n] [문자열 또는 변수]
    • -n 을 입력하면 줄 바꿈을 하지 않음
  • printf

특수 문자

  • 편리하게 명령을 입력하고 실행할 수 있도록 다양한 특수 문자를 제공

  • 사용법은 거의 모든 쉘에서 비슷

  • 사용자가 명령을 입력하면 쉘은 먼저 입력한 내용 중에 특수문자가 있는지 확인하고 이를 해독해서 적절한 형태로 변경한 후 명령을 실행함

  • *

    • 임의의 문자열을 의미 - 글자수 상관 없음
  • ?[ ]

    • 하나의 문자를 의미

      • ?
        • 하나의 글자와 매칭
          • ls t??
            • t로 시작하는 3글자
      • [ ]
        • 대괄호 안의 문자 하나와 매칭
          • 소문자: a-z
          • 대문자: A-Z
          • ls -l tmp[1 3 5].txt
            • tmp1.txt
            • tmp2.txt
            • tmp3.txt
          • ls [A-Za-z][0-9]
            • 영문으로 시작하고 두번째 글자는 숫자
            • 한글은 [가-힣]
  • ~

    • 사용자의 홈 디렉토리를 의미하는 특수문자
  • -

    • 현재 디렉토리로 이동하기 직전의 디렉토리
  • `(백틱)

    • 문자열에서 명령을 수행해서 명령의 결과로 대체
    • echo “Today is date" -> date 라는 명령을 수행해서 출력
  • ; - ⭐️

    • 여러 개의 명령을 순차적으로 실행할 때 사용하는데, 앞의 명령어가 실패해도 다음 명령어를 수행
    • date , ls , pws 명령을 순차적으로 전부 수행
  • && - ⭐️

    • 앞의 명령어가 성공했을 때 뒤의 명령어 수행
  • | - ⭐️

    • 앞 쪽 명령의 실행 결과를 뒤에 전달(Pipe)
    • 앞의 명령이 출력일 때 그 안에서 검색을 하는 경우 많이 사용하고, 앞의 내용을 출력할 때 내용이 너무 많은 경우 more 같은 명령으로 페이지 단위로 출력되도록 할 때 많이 사용
    • ls -al / | more
  • \(역슬래시)

    • 특수 문자의 효과 무력화
  • ‘ ‘“ “

    • ‘ ‘ 안에 명령어를 기재하면 모든 특수문자의 기능 무력화
    • “ ” 안에 명령어를 기재하면 $, ₩(), ${ }, { } 는 원래대로 처리

표준 입출력 장치

  • 0 - stdin - 표준 입력(기본: 키보드)
  • 1 - stdout - 표준 출력(기본: 모니터)
  • 2 - stderr - 표준 에러(기본: 모니터)

출력 redirection - 출력 방향을 변경하는 것

  • >
    • 파일 방향을 변경하는 명령

    • 파일의 내용을 전부 변경

      # makefile
      명령 1 > 파일 경로 // date 1 > a.txt
      명령 > 파일 경로   // date > a.txt
  • >>
    • 출력 방향을 변경하는 것으로 출력 방향의 뒤에 출력

      # makefile
      명령 >> 파일 경로 // date >> b.txt

에러 redirection

  • 2>
    • 명령 2> 출력 경로 를 이용하면 에러가 발생했을 때 에러 내용을 리다이렉션 함

오류 메시지 버리기

  • ls /abc 2>/dev/null

표준 출력과 에러를 하나의 파일에 redirection

  • ls . /abc > ls.out 2>&1

입력 redirection

  • 표준 입력을 바꾸는 기능
    명령 0< 경로
    명령 < 경로
    • 매개변수가 없는 명령어에 매개변수를 설정할 수 있음

변수

  • 종류
    • 쉘 변수: 현재 쉘(터미널)에서만 사용 가능한 변수
    • 환경 변수: 시스템 전체에 적용되는 변수
  • 변수 확인
    • echo $변수
    • env: 환경 변수 전부 출력
    • set: 모든 변수와 함수를 출력
  • 변수 수정(공백이 있으면 안 됨!!!)
    • 쉘 변수 생성 및 수정: 변수명=값
    • 환경 변수 생성 및 수정: export 변수명=값
    • 환경 변수를 로컬 변수로 수정: export -n 변수명
  • 변수 삭제
    • unset 변수명

프롬프트 설정

  • PS1 이라는 환경 변수를 이용해서 가능

PATH

  • 명령어의 위치를 찾는 디렉토리를 저장하고 있는 변수
  • 명령어를 찾을 위치를 ; 으로 구분해서 설정
  • 추가하는 방법
    PATH="$PATH;경로"  # 주로 사용하는 방식
    PATH="경로;$PATH"
  • 리눅스에서는 프로그램을 설치할 때 압축 파일을 다운로드 받아서 압축을 해제하는 것만으로 하는 경우가 있음

  • 이때 압축이 해제된 디렉토리의 실행 파일을 명령어 만으로 실행하고자 하는 경우 이를 구현하는 방법은

    • (잘 사용하지 않음) 전체 경로를 alias 로 만들어서 사용
    • 전체 경로를 PATH에 추가
    • 추가된 디렉토리에 실행하고자 하는 명령어나 파일을 복사함
  • 홈 디렉토리 안의 bin 이라는 디렉토리를 PATH에 추가

    PATH="$PATH:~/bin"
  • 환경변수를 편집할 때는 번거롭더라도 다른 변수에 복사를 해두고 편집을 하는 것이 좋음

LANG

  • 로케일 정보를 저장하고 있는 환경변수
  • 현재 사용 중인 로케일 확인
    echo $LANG
  • 시스템에서 지원하는 로케일 확인
    locale -a
  • 로케일 설정
    LANG = 로케일
  • 한국어 사용할 수 있도록 설정
    sudo apt update
    sudo apt install language-pack-ko
    sudo locale-gen ko_KR.UTF-8

기타 환경 변수

  • HISTFILE: 커맨드 라인 이력을 저장할 파일 이름으로 기본값은 ~/bash_history
  • HISTFILESIZE: 파일에 저장할 커맨드 라인 이력의 최대 개수
  • HISTSIZE: 메모리에 저장할 커맨드 라인 이력의 최대 개수
  • HOME: 홈 디렉터리
  • SHELL: 로그인 쉘의 경로
  • PWD: 현재 작업 디렉터리

환경 설정 파일

  • 시스템을 사용하는 사용자의 환경을 설정하는 파일로 로그인할 때마다 무조건 실행되는 파일

시스템 환경 설정 파일

  • 유저와 상관없이 수행되는 파일

사용자 환경 설정 파일

  • 각 사용자의 홈 디렉토리에 숨김 파일로 존재하고 사용자가 내용을 수정하고 관리하는데 로그인을 하면 시스템 환경 설정 파일이 실행돼서 시스템 공통 환경을 만들고 이후 사용자 환경 설정 파일을 순서대로 실행하여 사용자별 환경을 설정

  • 우분투에서 .profile.bashrc 파일이 있으면 실행시키고 환경 변수 PATH 에 기본 경로를 설정

  • .bash_logout 파일에는 콘솔 화면을 클리어 하는 코드가 설정되어 있음

  • 로그아웃을 하고 로그인을 다시 해야 적용이 되는데 . 이나 source 명령을 이용해서 현재 상태에서 적용 가능

  • 별명 관련 환경 설정 파일 만들기 및 적용

    • sudo vi .bash_aliases
    • 내용 작성
      alias rm = 'rm-i'
      alias h = history
      alias c = clear
    • source .bash_aliases
    • h 또는 c 명령 수행

bash 옵션

  • set 명령

    • -o 나 +o를 지정하여 옵션 기능을 활성화하거나 비활성화 할 수 있음
    • -o를 지정하면 기능이 활성화되고 +o를 지정하면 비활성
    • ignoreeof(쉘을 빠져나가는 기능인 eof를 무시하는 기능) 활성화: CTRL + D를 눌러도 쉘을 빠져나가지 않음
  • set -o noclobber

    • 덮어쓰기 방지 기능 활성화

4. File System

1) 디렉토리와 파일

  • 리눅스는 유닉스의 많은 부분을 그대로 사용
  • 시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리
  • 리눅스에서는 언제나 시스탬 전체에 하나의 트리만 가짐(물리적인 디스크가 2개 이상이어도)
    • windows 는 HDD C: 와 D: 간의 결합 혹은 공유가 안 된다. 늘릴 수가 없음.(파일 저장 경로의 시작이 다르기 때문에)
    • 클라우드 환경에서는 가급적이면 windows는 사용하지 않는다. → 확장성이 안 좋기 때문이다.

파일의 종류

  • 일반 파일
    • 일반적인 파일
    • 문서 파일
      • 해석할 때 문자로 변경해서 해석
    • 바이너리 파일
      • 바이트 코드 그대로 해석 - 실행(바이너리) 파일
  • 디렉터리 파일
    • 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보를 소유
    • 파일에 액세스 하기 위한 정보를 저장
  • 링크 파일
    • 시스템 사용자에게 편리성을 제공하기 위한 파일
    • 하드 링크
      • 원본 파일을 복사해서 동일한 내용의 다른 사본 파일을 만드는 것
      • 원본 파일과 링크 파일이 서로 다른 파일로 취급되기 때문에 하나가 삭제되어도 나머지 하나는 그대로 남아 있음
      • 하나의 파일을 수정하면 다른 하나도 수정됨
      • 백업의 용도로 가장 좋음
      • i-node(파일에 대한 정보를 가짐)를 공유하기 때문에
    • 심볼릭 링크(소프트 링크)
      • 바로가기 기능처럼 원본 파일의 위치를 기억해서 이 파일을 실행하면 원본 파일을 찾아서 실행하도록 만들어진 링크 파일
      • 원본 파일이 삭제되면 동작하지 않음
  • 장치(특수) 파일
    • 리눅스 시스템에 부착된 장치들을 관리하기 위한 특수 파일
    • /dev 디렉토리 하단에 위치

파일의 종류 확인

  • file <파일명>
    file .profile
    # >> 일반 텍스트 파일
    
    file ./usr/bin/pwd
    # >> 바이너리 파일 - 실행 파일
    
    file /usr/bin
    # >> 디렉토리

profile
Don’t get mad at the computer.

0개의 댓글