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
입력 리다이렉션
- 명령어에 파일의 내용을 추가하고자 할 때 사용
- 자주 사용하는 옵션이나 인자가 있을 때 활용 가능
- < 파일경로