8/120

김건호·2022년 2월 16일
0

vi 편집기

구조

대기 모드 : 입력 또는 명령 둘중 하나의 모드로 바뀌기 전까지 대기하는 상태

입력 모드 : 파일에 직접 입력이 가능한 상태

  • i : 현재 커서 위치에 입력이 시작
  • I : 현재 커서 위치 라인의 가장 앞으로 이동 후 출력
  • a : 현재 커서 뒤에서 입력이 시작
  • A : 현재 커서 위치 라인의 가장 뒤로 이동 후 출력
  • s : 현재 커서 위치 문자 하나 삭제하고 입력
  • S : 현재 커서 위치 라인 하나 삭제하고 입력
  • o : 현재 커서 위치 라인 아래로 공백 만들고 입력
  • O : 현재 커서 위치 라인 위로 공백 만들고 입력

command line 모드 : 맨 밑에 화면이 : 시작되면서 명령을 입력할 수 있는 상태

  • :q : 종료. 수정 후, 저장이 되지 않으면 나갈 수 없음
  • :q! : 파일 수정 후, 내용을 저장하지 않고 종료
  • :w : 파일을 저장
    :w "다른 파일 이름" : 다른 이름으로 저장
  • :wq : 파일 저장 후, 종료
  • x : 파일 저장 후, 종료
  • shift + zz : 파일 저장 후, 종료

alias 명령어로 시스템 명령어 편집하기
vim은 향상된 vi인데 보통 vi가 심볼릭 링크로 vim가 연결되어 있어서, vi를 치면 vim이 동작되어야 하는데 centos8버전 root 계정에서는 설정되어 있지 않았다. 그래서 직접 vi만쳐도 vim으로 실행되도록 바꾸어주었다.
1. 커맨드라인에 alias 설정 후, .bashrc 편집

[root@localhost ~]# alias vi='vim'
[root@localhost ~]# vi .bashrc
  1. .bashrc에 추가
# .bashrc
alias vi='vim'
  1. 아래 명령어 입력 후, 저장
[root@localhost ~]# source ~/.bashrc

복사, 붙여넣기

◼ 모두 대기모드에서 진행

복사 붙여넣기

yank의 첫 글자 y ---> 커서 이동 ---> p paste

  • yw 단어를 복사
    nymw (n,m 은 숫자 곱하기로 이루어진다.)(아래 모든 내용들에도 적용된다.)
    ex) 1y1w ==1x1 yw, 2y3w == 6yw
  • yy 라인을 복사 5yy 현재 커서가 있는 라인을 포함하여 아래로 5라인을 복사
  • y^ : 커서가 있는 앞쪽으로 복사
  • y$ : 커서가 있는 뒤쪽으로 복사
  • yH : 커서가 있는 라인 부터 화면에 보이는 윗 부분 까지 복사
  • yL : 커서가 있는 라인 부터 화면에 보이는 아랫 부분 까지 복사
  • ygg : 커서가 있는 라인 부터 파일의 가장 윗 부분 까지 복사
  • yG : 커서가 있는 라인 부터 파일의 가장 아랫 부분 까지 복사
  • :n,my : n번째라인부터 m번째 라인까지 복사 ex) :10,20y

잘라내기 붙여넣기

cut c ---> 입력모드 -> ESC --> p paste

  • cw : 단어를 잘라내기
  • cc : 라인을 잘라내기
  • c^ : 커서가 있는 앞쪽으로 잘라내기
  • c$ : 커서가 있는 뒤쪽으로 잘라내기
  • cH : 커서가 있는 라인 부터 화면에 보이는 윗 부분 까지 잘라내기
  • cL : 커서가 있는 라인 부터 화면에 보이는 아랫 부분 까지 잘라내기
  • cgg : 커서가 있는 라인 부터 파일의 가장 윗 부분 까지 잘라내기
  • cG : 커서가 있는 라인 부터 파일의 가장 아랫 부분 까지 잘라내기
  • :n,mc : n번째라인부터 m번째 라인까지 잘라내기

삭제

문자 삭제

x,X nx nX 형태 5x 5X

  • x(소문자) : 커서가 위치한 뒤로 문자를 삭제
  • X(대문자) : 커서가 위치한 앞으로 문자를 삭제

단어와 라인삭제

  • dw : 단어를 삭제
  • dd : 라인을 삭제
  • d^ : 커서가 있는 앞쪽으로 삭제
  • d$ : 커서가 있는 뒤쪽으로 삭제
  • dH : 커서가 있는 라인 부터 화면에 보이는 윗 부분 까지 삭제
  • dL : 커서가 있는 라인 부터 화면에 보이는 아랫 부분 까지 삭제
  • dgg : 커서가 있는 라인 부터 파일의 가장 윗 부분 까지 삭제
  • dG : 커서가 있는 라인 부터 파일의 가장 아랫 부분 까지 삭제
  • :n,md : n번째라인부터 m번째 라인까지 삭제

되돌리기

u(undo) : 이전으로 되돌리기
U 바로 한칸 앞으로 되돌리기

이동

ㅤㅤㅤㅤk(위로)
h(왼쪽) j(아래) l(오른쪽) 이동 방향키

  • ^, $ : 라인의 앞 , 뒤로 이동
  • gg, G : 파일의 가장 처음, 마지막 라인으로 이동
  • :n : command line 모드에서 숫자를 지정하면 해당 라인으로 이동

검색

  • :/ 커서의 아래로 검색
  • :? 커서의 위로 검색
  • :/단어(정규화 표현식 가능) n next 아래로 검색된 내용 확인 N 위로 검색된 내용 확인
  • :?단어(정규화 표현식 가능) n next 위로 검색된 내용 확인 N 아래로 검색된 내용 확인

치환

  • :n,ms/찾고자하는 단어(정규화표현식 가능)/바꾸고자하는 단어(정규화표현식 가능)/g
    :10,20s/nologin/hahaha/g <--한번에 모두 변경
    :10,20s/nologin/hahaha/gc <--선택해서 변경가능

    (y/n/a/q/l/^E/^Y)? gc 옵션 사용 시 뜨는 알림
    y : 바꾼다.
    n : 안바꾼다.
    a : 나머지 모두 바꾼다.
    q : 커서 위치의 문자를 바꾸지 않고 종료한다.
    l : 커서 위치의 문자까지만 바꾸고 종료한다.
    ^E ^Y : 변경을 하다가 아래 위로 변경하고자 하는 부분을 찾아볼때
    (ctrl + 대문자 E Y)

다중 편집

[root@localhost ~]# ls -l ccc
ls: cannot access 'ccc': 그런 파일이나 디렉터리가 없습니다
[root@localhost ~]# vim aaa ccc
  • : n(next) : 다음 파일로 이동 가능
  • : N : 이전 파일로 이동 가능
  • :2n, :2N : 3개 이상의 파일 편집 시, 2개 이상의 파일을 넘어서 이동 가능
  • :b숫자 : 확인된 파일 별 숫자를 확인 하여 파일이동 시 사용가능
  • :ls : ls 명령을 통해 현재 열린 파일 목록 및 번호 확인

파일의 수정이 발생한 경우 저장이 되지 않은 상태로는 이동이 불가
반드시 w로 저장을 해주거나 :N! 와 같이 !를 붙여주면 저장 하지 않고 이동 가능

환경 세팅

vim의 환경 세팅은 .vimrc라는 파일을 만들어 설정 가능

Syntax를 가진 파일이라면 활성화 시켜주는 세팅

" Syntax Highlighting
if has ("syntax")
        syntax on
endif

자동 인덴트

set autoindent
set cindent
  • set nu : 라인 넘버 표시 <-> set nonu
  • set mouse=a : 마우스를 클릭하는 곳으로 커서를 옮김
  • set smartindent : 문법에 맞게 자동으로 indent를 삽입(ex 괄호 다음줄에 자동으로 indent 적용
  • autocmd FileType c,cpp,java :set cindent : 지정된 filetype에 대해 cindent를 적용
  • set cinoptions=g0,t0 : switch~case문 등 세부 indent를 정의
  • set tabstop=4 : Tab의 크기를 결정
  • set shiftwidth=4 : indent의 크기를 결정
  • set expandtab : Tab을 공백(space)으로 자동 전환
  • set ignorecase : 검색할 때 대소문자 구분을 하지 않음
  • set smartcase : 검색할 때 대문자를 섞어 사용하면 대소문자 구분하여 검색, 소문자로만 쓰면 대소문자 구분을 하지 않음
  • set incsearch : 검색시 단어 전체를 입력하지 않아도, 입력된 글자까지 순차적으로 검색한다
  • set hlsearch : 검색된 단어를 highlight 한다
  • set title : 상단에 파일 이름을 표시
  • set ruler : 하단에 현재 커서의 위치를 표시
  • colo default : color set을 결정
  • set textwidth=90 : 라인에 입력 가능한 최대 글자
  • set colorcolumn=+1 : 91번째줄 색을 바꾼다(line length 맞추기 위한 guideline)
  • hi ColorColumn ctermbg=235 : 세로줄 색깔 설정

permission

리눅스 시스템에서 권한은 각 파일, 디렉토리 별로 설정 되는데 => 디렉토리의 읽기 권한이 없어도 파일의 읽기 권한이 있다면 디렉토리 내의 파일을 읽을 수 있음
3비트로 표현하여 총 8가지의 경우를 나타낼 수 있음
user(파일의 소유자), group(파일을 다룰 수 있는 그룹), other(그 외 나머지) 총 세가지의 경우가 있음

[root@localhost ~]# ls -l aaa
-rw-r--r--. 2 root root 2616  2월 15 22:42 aaa

위 결과에서 2번째 비트부터 3비트 씩 user, group, other로 구분

  • 각 비트의 이해
r(2^2)w(2^1)x(2^0)
읽기권한쓰기권한실행권한

권한과 관련된 명령어

파일의 읽기 : cat, more, less, head, tail, grep, vi
파일의 쓰기 : vi >, >>
파일의 실행 : 파일의 내용에 접근한다는 의미

디렉토리의 읽기 : ls
디렉토리의 쓰기 : touch, >, >>, mkdir, rmdir, cp, mv, rm
디렉토리의 실행 : cd, 디렉토리의 내용에 접근한다는 의미

❓vi는 읽기, 쓰기 권한이 모두 필요한 이유 : 파일의 편집은 파일을 읽고, 쓰는 것이기 때문에 w권한만 있다면 내용을 추가 할 수는 있지만 파일의 내용을 알지 못한채 수정해야하고, r권한만 있다면 파일을 읽을 수는 있지만 수정할 수 없음

권한 부여

chmod

파일, 디렉토리에 권한을 부여하는 명령어
두 가지 방법으로 부여 가능

  • 심볼릭 : 권한 비트를 문자로 표현(a u g o +- r w x s t)
  • 넘버릭 : 권한 비트를 8진수로 표현(644 = rw-r--r--)

special permission

setuid

other 유저에 실행권이 있는 상태에서 setuid 선언하면 other 유저 실행 시 상속받는 EUID가 파일의 소유자 권한에 set 되어 실행됨

설정방법

4xxx나 user의 실행권한 위치에 s로 표현(S는 setuid는 설정되어 있지만 실행권한은 없다는 뜻)

//user01이 cat 명령어를 통해서 /etc/shadow 내용을 볼 수 있도록 설정하시오.
[root@localhost ~]# chmod u+s /bin/cat

사용하는 이유

  1. 슈퍼유저, root만 접근할 수 있는 파일이나 명령에 대해, 일반 사용자로 접근하는 것이 필요한 경우가 있기 때문
  2. 매번 슈퍼유저, root가 일반 사용자에게 매번 root권한을 주지 않아도 되기 때문에 시스템 운영면에서 효율적임(ex 비밀번호 변경 시 일반사용자가 접근할 수 없는 파일을 수정해야하는데 setuid가 설정되어 있기때문에 사용하는 순간만 소유자 권한으로 실행되어 파일에 접근할 수 있게되어 비밀번호 변경 가능)

주의점

소유주가 root로 되어 있고 setuid가 설정되는 경우 보안상으로 매우 취약
setuid 프로그램 수는 최소화 되어야야 함

setgid

other 유저에 실행권이 있는 상태에서 setgid 선언하면 other 유저 실행 시 상속받는 EGID가 파일의 그룹 권한에 set 되어 실행됨

설정방법

2xxx나 group의 실행권한 위치에 s로 표현(S는 setuid는 설정되어 있지만 실행권한은 없다는 뜻)

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글