Vim/Shell

vim

  • vi 이후 개발된 편집기
  • vim이라는 이름으로 시작할 수 있고 vi라고 입력해도 vim이 입력됨
  • vim 설치->sudo apt-get install vim
  • DOCKER 사용 시 설정 파일 수정하려면 호스트OS에서 파일 수정 후 볼륨기능
    이용해 파일 복사하는 방법 vs DOCKER 쉘 안에서 직접 편집하는 방법
    쉘 안에서 직접 편집하려면 편집기가 설치되어 있지 않아 직접 설치하고 수정해야

vim 동작모드

  • 명령 모드: 커서이동, 페이지이동, 글자삭제, 행삭제 명령 모드에서 입력 모드로 전환은 i, l, o, O, a, A
  • 입력 모드: 텍스트입력
    • 입력 모드에서 명령 모드로 전환은 ESC
    • 명령 모드에서 마지막 행 모드로의 전환은 : / ?
    • 마지막 행 모드에서 명령 모드로의 전환은 ESC나 ENTER
    • 명령 모드에서 저장하고 종료는 :wq나 :wq!
    • 명령 모드에서 저장하지 않고 종료는 :q나 :q!
    • 명령 모드에서 종료는 ZZ
  • 마지막 행 모드: 검색, 바꾸기

vim 시작

vim 파일경로
  • 파일이 없으면 새로 만들어지는데 저장을 해야 파일이 생성
  • 저장하지 않으면 생성 안됨
  • 파일이 존재하는 경우 열리게 되는데 수정 권한이 없으면 읽기 전용으로 열림

입력 모드 전환 시 i, a, o의 차이

  • i는 현재 위치 삽입
  • a는 다음 칸에 삽입
  • o는 아래 줄에 삽입

커서 이동 단축키: 명령모드에서 실행

  • $ 현재 행 마지막으로 이동
  • - 현재 행 맨 앞으로 이동
  • H 첫번째 행으로 이동
  • M 중간 행으로 이동
  • L 마지막 행으로 이동

원하는 행으로 바로 이동

  • 숫자G: 숫자행으로 이동
  • 숫자 엔터: 숫자 행으로 이동

내용 검색 (중요)

  • 텍스트 파일 내용 많을 때 원하는 곳으로 이동
  • 마지막 행 모드에서 수행(입력 모드에서 ESC를 눌러서 수행)
  • /문자열: 문자열을 아래 방향으로 검색
  • ?문자열: 문자열을 위 방향으로 검색
  • n: 원래 찾던 방향으로 다음 문자열을 검색
  • N: 반대 방향으로 다음 문자열을

파일 읽어오기

:r 파일경로 # 파일을 읽어서 현재 위치에 추가
:e 파일경로 # 지정한 파일로 전환(:w명령으로 저장한 후 수행)
:n # 여러 파일을 한꺼번에 연 경우 다음 파일로 전환

문서 작성 중 쉘 명령 수행

:!쉘명령 # vi작접 잠시 중단 후 쉘 명령 수행, vi로 돌아올 땐 ENTER
:sh # vi 잠시 빠져나가 쉘 명령 수행, vi로 돌아올 때 exit

vi 환경 설정 (중요)

  • 사용자 홈 디렉토리에 .exrc 파일에 설정 내용을 저장, 모든 파일에 적용 - 재부팅을 해주거나 source 명령을사용
  • 환경변수와 설정파일에 동일한 내용 작성 차이: 설정 파일은 로그인 할때 읽어서 설정, 환경 변수는 프로그램 실행할 떄 읽어서 적용
vi ~/.exrc
  • 환경변수 중 EXINIT에 지정
EXINIT='set nu'
export EXINIT
  • vi의 마지막 행 모드에서 명령으로 설정: 현재 작업 중인 파일에만 적용
set nu # 라인번호 출력
set list # 눈에 보이지 않는 특수문자 출력
set showmode # 현재 모드를 출력
set ai # 윗 라인과 들여쓰기를 맞춰줌
set si # 코딩할 때 if 나 for 같은 블럭 명령어를 사용하면 다음 라인으로 이동할 떄 들여쓰기
set paste # 붙여넣기를 발생하는 계단 현상 방지
set ts=숫자 # 탭의 간격 설정
set ic # 검색할 때 대소문자 구분않음
set no # 설정해제

SHELL

개요

  • 사용자가 입력한 명령을 해석해서 커널로 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 수행하는 구성 요소
  • OS: hw -> kernel -> shell -> util, application
  • server의 텍스트 모드나 GNOME의 터미널을 이용해 명령어를 입력하고 결과를 화면에 출력

기능

  • 명령어 해석기
  • 프로그래밍
  • 사용자 환경설정

종류

  • bourneshell: 초창기의 쉘, 현재 사용X
  • C shell
  • Korn shell
  • bash: C shell과 Korn shell 장점 혼합, 현재 리눅스 기본 shell
  • 현재 리눅스 기본 쉘: tsch, dash, zsh

bash 쉘 특징

  • alias 기능 제공
  • history 기능 제공
  • 명령어 자동완성 기능 제공
  • 연산 기능 제공
  • Job control 기능 제공

쉘 변경

  • 지원하는 쉘 확인
cat /etc/shells
  • 사용자의 로그인 쉘 확인
grep 사용자계정 /etc/passwd
  • C shell 설치
sudo apt-get install csh
  • 로그인 쉘 변경
chsh 옵션 쉘의경로 사용자계정 # 쉘의경로는 절대경로
chsh -s /usr/bin/csh dh # C shell로 변경
chsh -s /usr/bin/dash dh # dash shell로 변경
  • C shell 예전 설치 시 /bin/csh에 설치 -> 지금은 /usr/bin/csh에 설치

  • 충돌 방지 위해 예전 경로와 지금 경로 바로가기 연결

  • source파일: 코드, 바이너리파일: 컴파일, 매뉴얼파일: 묶어놈

  • dash 쉘은 프롬프트가 $이고 bash쉘은 유저이름과 호스트이름이 같이 출력

  • C shell로 변경 시 프롬프트가 #으로 변경

  • 서브 쉘 생성

    • exit하면 이전쉘로 돌아감
쉘이름 -s sh 사용자계정
  • 현재 사용자 쉘 확인
echo $SHELL
  • 로그아웃
exit

쉘 내장 명령

  • 별도의 실행 파일을 가지지 않고 쉘이 내장하고 있는 명령어
  • 쉘 별로 이 명령어가 다를 수 있음
  • pwd는 쉘 내장명령이 아니고 cd는 쉘 내장명령임
  • echo 변수나 문자열을 출력
echo [-n] 문자열 또는 변수 # -n은 출력하고 마지막에 줄바꿈 않음
  • shell에서 변수는 앞에 $가 붙음
  • printf C언어의 printf와 동일
    • %로 시작하는 형식하된 서식 사용가능
    • 내장하고 있는 쉘도 있고 없는 쉘도 있음
 printf "%d + %d = %d\n" 100 200 300

특수문자

  • 쉘에서는 사용자가 편리하게 명령을 입력하고 실행할 수 있도록 특수문자를 제공
  • 거의 모드 쉘에서 특수문자의 기능은 동일
  • *
    • 임의의 문자열을 의미, 글자수와 상관없이 매핑
    • ls * 현재 디렉토리 및 서브디렉토리 내용 모두 출력
    • *.txt, cp *, t*.
  • ?
    • 한 글자
    • SQL: %->* _->?
    • 여러 개 중 한글자 선택할 때
    • -를 이용해 범위 설정 가능
    • 범위는 코드값을 기준으로 함
    • 숫자 0은 48, 9는 57, A는 65, Z는 90, a는 97, z는 122
    • A-Z: 대문자, a-z: 소문자, 0-9: 숫자, 가-힣: 한글, a-zA-z: 영문자
    • 현대 디렉토리에서 대문자로 시작하는 파일만 /tmp로 복사
  • ~
    • 사용자 홈 디렉토리
  • -
    • 현대 디렉토리로 이동하기 전의 디렉토리
  • `
    • 문자열에서 백틱으로 명령을 묶으면 명령을 수행해서 문자열 안에 포함
echo "Today is `date`"
Today is Tue Sep  3 15:41:44 KST 2024
  • ;
    • 여러 개의 명령을 사용할 때 순서대로 실행하고자 하는 경우 사용
date;ls;
  • |
    • 앞 명령의 결과를 뒤 명령에 전달해서 수행
    • 루트 디렉토리의 모든 내용을 출력해서 페이지 단위로 확인
ls -al / | cat
  • \
    • 에스케이프
    • 특수문자를 포함하는 데이터를 ‘‘로 묶어도 특수문자 기능 무시
    • ““로 묶으면 $;,{},[]는 원래대로 처리하고 나머지 무시

입출력 리다이렉션

  • 표준입출력

    • 표준 입력은 일반적으로 키보드 입력
    • 표준 출력은 모니터를 의미
  • 리다이렉션

    • 입출력의 방향을 변경
    • 파일로 변경
  • >

    • 출력을 뒤에 있는 장치(리눅스는 하드웨어도 파일로 간주)로 변경
    • 출력하는 장치를 매번 새로만듬
  • >>

    • 출력을 뒤에 있는 장치(리눅스는 하드웨어도 파일로 간주)로 변경
    • 출력하는 장치 뒤에 추가
    • >, >> 는 출력의 결과를 특정 파일에 기록하기 위해 사용
  • 에러 출력 리다이렉션

    • 명령 다음에 2를 추가하고 출력 리다이렉션을 이용하면 표준
ls /abc 2> ls.err

입력 리다이렉션

  • 명령어에 파일의 내용을 추가하고자 할 때 사용
  • 자주 사용하는 옵션이나 인자가 있을 때 활용 가능
  • < 파일경로