Computer Science/시스템 프로그래밍

시스템 프로그래밍 Linux Tutorial

만능 엔터테이너 2024. 10. 7. 10:01
728x90
반응형
SMALL

Unix/Linux 시스템 연결방법

Linux 시스템 터미널 화면

쉘이란?

로그인 이후, Linux/Unix는 프로그램을 실행합니다.
쉘은 사용자가 입력하는 명령을 해석하고 실행 관리합니다.
- 쉘은 대부분 운영 체제 내부인 커널 통신을 하고, 인기 있는 쉘 tcsh, csh, korn, bash입니다.
쉘들 간 차이는 미묘하여 이 튜토리얼에서는 bash를 사용합니다! 이때, 쉘 명령어는 대소문자를 구분합니다.

도움말

- 명령어에 대한 도움이 필요할 때는 man을 입력 후 명령어 이름을 입력하면 됨

man(매뉴얼) 명령어 실행 예시

리눅스 명령어의 옵션은 받드시 앞에 -를 붙여 사용함! ex) -n(1가지 옵션 적용) 또는 -ne(2가지 옵션적용), q를 누르면 매뉴얼 페이지를 나갈 수 있음!

파일 시스템은 OS에서 파일과 디렉터리를 관리하는 시스템

pwd 명령어 : 현재 작업 디렉터리를 확인하는 명령어 (print working directory)

cd 명령어 : 작업 디렉터리를 변경하는 명령어 (change directory)  ex) cd ccslab

- $ cd : 나의 현재 디렉터리로 이동

- $ cd / : 나의 작업 디렉터리루트 디렉터리로 변경

" ~ " : 나의 홈 디렉터리를 나타내는 기호 ex) cd ~ (나의 홈 디렉터리로 이동하는 명령어)

" .. "현재 작업 디렉터리를 기준으로 그 디렉터리의 부모 디렉터리로 이동하는 명령어 ex) cd ..

ls 명령어 : 현재 디렉터리 내에 존재하는 파일들의 리스트를 출력하는 명령어

  • -l: 긴 목록(많은 정보를 표시) ex) 파일 이름 뿐만이 아닌 파일의 크기, 권한 등등 다양한 정보를 알 수 있음 [가장 많이 사용됨!]
  • -a : 숨김 파일까지 전부 표시하는 명령어 [많이 사용됨!] (.파일명 => 숨겨진 파일을 의미 ex) .projects)
  • -t: 수정 시간별로 정렬 (파일의 마지막 수정시간을 기준으로 정렬하여 출력)
  • -S: 크기별로 정렬
  • -h: 사람이 읽기 쉬운 형식으로 파일 크기 표시 (큰 파일일 경우 KB 등으로 바꾸고 작은 경우 MB등 바꾸어서 한 눈에 보기 쉽도록 설정 ex) 백 10개 -> 1천 1개
  • -r: 순서를 반대로

더 많은 옵션을 확인하려면 man ls로 입력을 하고 옵션 또한 조합하여 ls -ltr 이렇게 여러 가지로 적용할 수 있습니다.

-ltr의 옵션 예시

* : (General Syntax) 공통적인 특성을 가진 파일 및 스트링전부 선택하여 사용하도록 하는 명령어

ex) ls *.c : .c끝나는 모든 파일의 리스트를 확인

mkdir : 새로운 디렉터리를 생성하는 명령어 (make directory, 반드시 mkdir 새로만들 파일 및 폴더명 입력해야 됨!)

rmdir : 디렉터리를 삭제하는 명령어 (단, 반드시 빈 디렉터리만 제거할 수 있는 제약사항이 존재함!)

rm 파일명 : 파일을 삭제하는 명령어 (rm 지우고자 하는 파일명)

 

{ 파일을 표시하는 방법 }

  • cat (많이 사용하는 명령어)
  • less (대신 vi 에디터로 사용)
  • head
  • tail

cat 명령어 (짧은 파일에 유용)

- 전체 파일 내용을 한꺼번에 출력하는 기능, 짧고 간단한 파일들을 보는 경우에 유용함!

less 명령어 (긴 파일에 유용)

- 전체 파일 내용을 한꺼번에 출력하는 기능 / 단, 보여지는 화면 크기를 텍스트가 넘어가면 줄바꿈 처리를 하여 다음 줄에서 보여지도록 수행
[ return키는 1줄씩, space bar는 1페이지씩 넘어가고(), y키를 누르면 1줄씩 넘어가고 b키를 누르면 1페이지씩 넘어감 (

head 명령어 : 파일의 전체가 아닌 앞 부분만 확인하는 명령어 (기본값 앞 10줄)

만약, -n 옵션을 사용하여 변경하면 head -n50 file.txt로 설정하면 파일의 첫 50줄이 출력이 됨!
 

tail 명령어 : 파일의 전체가 아닌 마지막 부분만 확인하는 명령어 (head와 정 반대 역할)

{ 파일 명령어 }

- cp : 파일을 복사

- mv : 파일을 이동하거나 이름을 재할당 ex) mv temp.txt / (temp.txt 파일을 루트 디렉터리로 이동)

 

- rm : 파일을 삭제

 

cp와 mv 명령어의 사용 예시 화면

 

 
rm -r : 비어 있지 않은 디렉터리를 삭제하는 명령어, 모든 현재 및 파일과 디렉터리들을 삭제가능
"rm -i 파일명" 으로 입력하면 삭제할 때 1번 묻고 제거여부에 따라 y(yes) or n(no) 선택 삭제
따라서, 중요한 파일이 삭제할 수 있기에 조심해서 사용해야 함!

{ 파일의 권한 }

" ls -l " 옵션으로 해당 파일의 권한 수준을 확인 가능합니다.

사용자의 권한에 따라 읽기/쓰기/실행하기 이렇게 3가지 동작을 지1정할 수 있도록 할 수 있습니다.

r (읽기 권한), w (쓰기 권한), x(실행 권한) 이렇게 지정 가능하며 파일의 권한을 갖는 사용자도 3명이 존재합니다.

user(사용자) group(사용자가 속한 그룹) others (2가지 사용자를 제외 나머지 모든 사용자 순서대로 권한 표시)

반드시, rwx 순서대로 권한을 지정해야 됨!

권한 여부에 따른 예시 화면

chmod 명령어 : 파일의 권한을 변경하는 명령어 (만약, 파일의 소유자라면 chmod로 파일의 권한 변경 가능)

- chmod [사용자/그룹/기타/모두] + [권한] [파일(들)] ex) go - w : 그룹과 other 사용자들의 쓰기 권한을 뺌

ps 명령어 : 실행 중인 프로세스를 확인하는 명령어 (process state)

kill 명령어 : 프로세스를 종료시키는 명령어

(프로세스 - 실행중인 프로그램, 실행x - 정적인 프로그램)

touch 명령어 : 빈파일을 생성하는 명령어 ex) touch file.txt : file.txt 파일 생성함

 

입출력 리디렉션 (파이핑)

- 프로그램을 다른 프로그램으로 출력을 보낼 수 있고 이를 파이핑이라고 부릅니다. 명령어를 연결하는 것
 

  • program_a | program_b : program_a의 출력이 program_b의 입력이 됨
  • program_a > file.txt (output 방향을 file.txt로 방향을 변경) : program_a의 출력이 file.txt라는 파일에 기록됨 ( > : (출력 리디렉션) - program_a의 출력을 file.txt라는 파일에 기록합니다. 만약 해당 파일이 없다면 새로 생성되며, 기존 파일이 있다면 덮어씁니다.)
  • program_a < input.txt  : program_a가 input.txt라는 파일로부터 입력을 받음 ( < : (입력 리디렉션) - program_a - program_a가 input.txt 파일의 내용을 입력으로 받습니다. )

grep 명령어 : 파일에서 특정 문자열을 찾을 때 사용하는 명령어

grep 명령어의 예시

gcc 명령어 : gcc는 GNU C컴파일러, g++은 GNU C++ 컴파일러

- hello.c 파일을 컴파일하는 방법:

  • 명령어: gcc hello.c
  • 출력: 실행 파일 이름은 a.out입니다.

출력 파일 이름을 'hello'로 지정하여 hello.c 파일을 컴파일하는 방법

  • 명령어: gcc hello.c -o hello
    • 출력: 실행 파일 이름은 hello입니다.

vi Editor 튜토리얼

  • vi 편집기 소개
  • vi 입력 모드 (타이핑할 수 있는 모드) :wq (저장하고 빠져나가기)
  • vi 편집 모드 (처음 vi 편집기를 열었을 때 나오는 화면)

 

vi Editor 들어가는 명령어

  • vi 파일명 : 존재하는 파일을 편집 및 파일이 없으면 새로 생성 [가장 많이 사용함!]
  • vi -r 파일명 : ,파일명.swp 입력으로 파일을 복구하고 사용 후 rm.filename.swp 명령으로 해당 파일을 삭제해야 함
  • vi -R 파일명 : 읽기 전용 모드파일을 열어 파일 수정이 불가능
  • vi +/pattern 파일명 : pattern이 포함된 줄부터 파일 편집을 시작

vi 편집기에서 파일 상호작용 명령어

 

  • :w : 현재 편집 중인 파일을 종료하지 않고 저장합니다. 중간 저장에 유용
  • :w def : 새로운 파일 def에 저장하지만, 현재 파일은 그대로 유지됩니다. [다른 이름으로 저장]
  • :w! def : 기존 파일 def에 강제로 저장하며, 현재 파일은 그대로 유지됩니다.
  • :r def : 파일 def의 내용현재 파일에 읽어와 추가합니다.
  • :f : 현재 편집 중인 파일에 대한 정보를 제공합니다. 여기에는 현재 줄 번호파일수정되었는지 여부가 포함됩니다.

vi 편집기 종료 명령어

 

  • :q : 변경 사항 없이 종료합니다. 변경이 없다고 가정합니다.
  • :q! : 변경 사항이 있어도 저장하지 않고 강제로 종료합니다.
  • ZZ 또는 :x : 변경 사항이 있을 경우 파일을 저장하고 종료합니다.
  • :wq : 파일을 저장하고 종료합니다. 변경이 없더라도 파일을 저장한 후 종료합니다.

vi 편집기 - 문제가 발생할 때

  • Caps Lock 오류: vi 편집기는 대소문자를 구분하므로, Caps Lock이 켜져 있으면 명령어가 제대로 작동하지 않을 수 있습니다.
  • 잘못된 모드 오류: 입력 모드가 아닌 상태에서 데이터를 입력하면 아무 일도 일어나지 않으며, 입력 모드로 전환해야 합니다.
  • 입력 모드 종료 누락: 입력 모드를 종료하지 않고 편집 명령을 시도하면 문제가 발생할 수 있으므로, Esc 키로 입력 모드를 먼저 종료해야 합니다.

 

vi 모드

 

  • 편집 모드 (edit – command line mode): 기본 모드이고 기존 텍스트의 효율적인 탐색 및 편집이 가능합니다.
  • 입력 모드 (insert): 파일에 텍스트를 입력할 때 사용되고 여러 가지 방법으로 입력 모드에 진입가능하며 탐색 및 편집에는 비효율적입니다.

입력 모드 명령어 (Insert Commands)

  • i, <esc>: 현재 위치에서 입력 모드로 전환하고, Esc 키를 눌러 입력 모드를 종료합니다.
  • o, O: 현재 줄 아래(o) 또는 위(O)새로운 줄을 삽입합니다.
  • a, A: 커서 뒤(a) 또는 현재 줄의 끝(A)에 텍스트를 추가합니다.
  • I (대문자 i): 현재 줄의 시작 부분에서 텍스트를 삽입합니다.

편집 모드 (edit mode)

  • 기본 편집 모드두 가지 하위 모드를 포함합니다:
    • 인라인 모드 (in line): 커서가 텍스트 내에서 이동하는 모드입니다.
    • ex 명령어 모드 (ex commands): 커서가 화면 하단으로 이동합니다.
      • ex 명령어는 콜론(:), 슬래시(/), 또는 물음표(?)로 시작합니다.

편집 모드 일반 명령어 구문 (Edit mode General Command Syntax)

  • 명령어의 일반적인 형식은 ncm입니다.

여기서:

  • n은 선택적인 배수 값 (optional multiplier value)입니다. n자리에 3키를 누르면 3번 반복지정
  • c는 명령어 (command)입니다.
  • m은 선택적인 범위 수정자 (optional scale modifier)입니다.

예시:

  • 3dw: 특수 문자가 구분단어 3개를 삭제합니다. (소문자 w)
  • dW: 공백으로 구분단어 하나를 삭제합니다. (대문자 W)

삭제 명령어 (Delete Commands)

  • d: 이 줄을 삭제합니다.
  • w: 특수 문자로 구분된 단어를 삭제합니다.
  • W: 공백으로 구분된 단어를 삭제합니다.
  • }: 다음 단락까지 삭제합니다.
  • ^: 줄의 시작 부분까지 삭제합니다.
  • /pattern: 첫 번째로 나타나는 패턴까지 삭제합니다.
  • n: 다음 패턴이 나타나는 위치까지 삭제합니다.
  • fa: 이 줄에서 'a'를 포함하여 그 전까지 삭제합니다.
  • ta: 이 줄에서 'a' 전까지 (a는 포함하지 않고) 삭제합니다.

문자 삭제 명령어 (Delete Character Commands)

  • nx: 현재 문자와 그 뒤의 [n-1]개의 문자를 삭제합니다. (delete 키 역할)
  • nX: 이전의 n개의 문자를 삭제합니다. (backspace 키 역할)

교체 명령어 (Replace Commands)

  • rx: 현재 문자를 x로 교체합니다.
  • Rtext: 커서 위치부터 텍스트를 교체합니다.
  • cd: 특정 범위(d)에 따라 교체합니다 (예: cw는 현재위치부터의 단어를 교체). 교체를 종료하려면 Esc를 사용합니다.

줄 나누기:

  • 커서를 나누고 싶은 위치에 두고 r을 입력 후 엔터를 누릅니다.

줄 합치기:

  • 커서를 합칠 줄에 두고 J를 입력합니다.

탐색 명령어 (Navigation Commands)

  • h, j, k, l: 커서를 왼쪽, 아래, 위, 오른쪽으로 이동시킵니다. (화살표 키 대신 사용)
  • w, W: 특수 문자로 구분된 단어 또는 공백으로 구분된 단어의 시작으로 이동합니다. (현재 커서의 오른쪽)
  • e, E: 특수 문자로 구분된 단어 또는 공백으로 구분된 단어의 끝으로 이동합니다. (현재 커서의 오른쪽)
  • b, B: 특수 문자로 구분된 단어 또는 공백으로 구분된 단어의 시작으로 되돌아갑니다. (현재 커서의 왼쪽)
  • (, ): 여는 또는 닫는 괄호로 문장 사이이동합니다.
  • {, }: 여는 또는 닫는 중괄호로 단락 사이이동합니다.

현재 줄 탐색 명령어 (Current Line Navigation Commands)

  • 0, $: 줄의 처음마지막 위치로 이동(blank 위치로)
  • ^: 첫 번째 비어 있지 않은 문자이동
  • n|: n번째 열로 이동합니다 (여기서 |는 파이프 기호입니다)

검색 명령어 (Search Commands)

  • /text: 텍스트를 앞으로 검색 (끝까지 가면 처음으로 돌아갑니다)
  • ?text: 텍스트를 뒤로 검색
  • n: 같은 텍스트를 다시 검색
  • N: 처음 검색한 방향의 반대 방향으로 텍스트를 검색

복사/붙여넣기 명령어 (Copy/Paste Commands)

  • [n]Y 또는 [n]y: n 줄을 복사(얽어내기)합니다.
  • [n]ym: 파일의 일부를 복사합니다. 범위는 측정값에 따라 결정됩니다. 예: 2yW는 공백으로 구분된 단어 2개를 복사합니다.
  • P, p: 복사되거나 삭제된 데이터를 붙여넣습니다. P는 커서 앞에, p는 커서 뒤에 붙여넣습니다.

참고: 자르기붙여넣기를 하려면 dm 명령어로 삭제 후, p 또는 P붙여넣기를 합니다.

교체/대체 명령어 (Substitute/Replace Command)

형식: :[주소] s /old/new/[g]
주소(address)의 의미:

  • n: 특정 줄 번호
  • n,m: n번 줄에서 m번 줄까지
  • 1,.: 첫 번째 줄에서 현재 줄까지
  • .,$: 현재 줄에서 파일의 마지막 줄까지
  • 1,$ 또는 %: 전체 파일

g: 선택적인 글로벌 옵션으로 모든 발생을 변경합니다.

알아두면 좋은 기능 (Some "nice to know" features)

  • 줄 번호를 켜고 끄는 명령어:
    :set nu (켜기) 및 :set nu! (끄기)
  • vi 편집기 내에서 단일 Unix 명령을 실행하려면:
    :!cmd
  • 임시로 셸로 돌아가려면:
    :sh (셸에서 다시 편집기로 돌아가려면 exit 입력)
  • 이전에 입력한 콜론 명령을 반복하거나 이전 콜론 명령으로 돌아가려면:
    위/아래 화살표 (↑ 또는 ↓)
  • 현재 파일 이름을 확인하려면:
    :f

 
 
 
 

728x90
반응형
LIST