Linux 기본활용

김영광·2023년 9월 11일
0

Linux 기본명령어

man, 파일시스템 명령어

man

  • 원하는 명령어의 설명을 볼 수 있다. 특정 명령어의 사용방법을 확인할 수 있다.
  • 운영체제의 기본 명령어가 아닌경우, -help, --help,의 파라미터로 설명을 제공하는 명령어들도 있다.
  • 설명이 한눈에 안들어온다면, vi key로 이동, 검색을 할 수 있다.

help parameter(-help)

  • 리눅스 기본 명령어도 지원을 하는 경우가 잇다. 하지만, 기본 명령어는 man이 기본이다.

리눅스에서 경로를 표시하는 방법

  • / : root, 시스템의 가장 시작 또는 디렉토리를 구분하는 구분자
  • ~ : home,로그인한 유저의 home 경로, 환경변수로 바꿀수 있다.
  • .. : 상위 디렉토리
  • . : 현재 디렉토리
  • '-' : 이전 위치

pwd

  • print Work Directory 의 약자
  • 현재 터미널이 위치한 디렉토리 경로를 볼 수 있다.

ls

= list segments의 약자

  • 디렉토리의 모든 파일 정보를 보여줌

    ls -al : 숨김파일과 파일의 모든 정보를 표시한다.
    ll 이라는 alias로 편하게 사용하기도 한다.

    ls -il : 파일 또는 디렉토리의 inode number을 표시한다.
    inode란 리눅스에서 파일 또는 디렉토리의 고유 식별 부호, 파일 이름이 바뀌어도 유지된다.

cd

  • Change Directory의 약자
  • 지정한 디렉토리로 이동
  • 기본은 현재 위치부터 상대 경로로 이동, root(/)부터 모든 경로를 입력하면 절대 경로로 이동한다.

mkdir

= make directory의 약자

  • 새 디렉토리를 만든다
  • 기본은 상대경로로 생성된다.
  • root부터 모든 경로를 입력하면 절대 경로에 디렉토리를 생성한다.

rm

  • Remove
  • 지정한 파일 또는 디렉토리를 지운다.
  • 지울것인지 한 번 물어본다
  • -f 옵션으로 강제로 지운다.
  • -r 옵션으로 디렉토리와 디렉토리 안의 모든 내용을 지울 수 있다.

rmdir

  • remove directory
  • 디렉토리를 삭제한다.
  • rm -r 명령어로 대신할 수 있다.

df

  • disk filesystem
  • 디스크 공간에 대한 정보를 볼 수 있다.
  • -h : human readable 옵션과 함께 많이 쓴다.

du

  • Disk Usage
  • df와 반대로 디스크 사용량, 사용률을 볼 수 있다.
  • -h : human readable 옵션과 함께 많이 쓴다.
  • -s : summary 해당 경로 하위의 총합을 보여준다.
  • -d : max-depth를 지정해서 해당 depth만큼 펼쳐서 보여준다.

chmod

  • 권한을 변경하는 명령어

hmod 명령어는 디렉토리나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있다.

OS에 로그인한 사용자와 디렉토리나 파일의 소유자 같은 경우 chmod로 권한을 변경한다.

먼저, chmod로 권한을 변경하는 방법은 두 가지이다.

  • +, -, = 기호를 통해 권한 유형을 표기하여 변경하는 Symbolic method 방법

  • rwx를 3bit로 해석(8진수)하여 3자리 숫자로 표기하는 Absolute form 방법

Symbolic method 방법

이 방법은 액세스 클래스(Access class), 연산자(Operator), 액세스 타입(Access Type)으로 구분한다.

  • 액세스 클래스 : u (user), g (group), o (other), a (all)
  • 연산자 : + (add access), - (remove access), = (set exact access)
  • 액세스 타입 : r (read), w (write), x (execute)

명령어 chmod 뒤에 변경할 권한을 입력한다.

액세스 클래스, 연산자, 액세스 타입 순서로 조건에 따라 조합하여 입력한다.

chmod g-r filename    # 그룹의 읽기 권한을 제거한다.
chmod g+r filename    # 그룹의 읽기 권한을 부여한다.
chmod g-w filename    # 그룹의 쓰기 권한을 제거한다.
chmod g+w filename    # 그룹의 쓰기 권한을 부여한다.
chmod g-x filename    # 그룹의 실행 권한을 제거한다.
chmod g+x filename    # 그룹의 실행 권한을 부여한다.
chmod o-r filename    # 다른 사용자의 읽기 권한을 제거한다.
chmod o+r filename    # 다른 사용자의 읽기 권한을 부여한다.
chmod o-w filename    # 다른 사용자의 쓰기 권한을 제거한다.
chmod o+w filename    # 다른 사용자의 쓰기 권한을 부여한다.
chmod o-x filename    # 다른 사용자의 실행 권한을 제거한다.
chmod o+x filename    # 다른 사용자의 실행 권한을 부여한다.
chmod u+x filename    # 소유자의 실행 권한을 부여한다.

또한, 연산자를 사용하여 다중 권한 부여 및 제거가 가능하다.

#초기 filename의 권한이 ----------이라 가정하고 순서대로 명령을 했을 때
chmod a=rw filename # -rw-rw-rw-
chmod u= filename # ----rw-rw-
chmod a+rx filename # -r-xrwxrwx
chmod go-wx filename # -r-x-r--r--
chmod a= filename # ----------
chmod u+rwx filename # -rwx------

Absolute form 방법

소유자, 그룹, 다른 사용자의 권한을 r, w, x 순서로 8진수로 해석하여 3자리로 표현한다.

  • r (read) : 4

  • w (write) : 2

  • x (Ececute) : 1

부여하고 싶은 권한의 수를 더함으로써 표현하는 것이 쉬울 것이다.

# filename의 권한을 -rwxrwxrwx로 하고 싶다면
chmod 777 filename

# filename의 권한을 ----------로 하고 싶다면
chmod 000 filename

# filename의 권한을 -r--r--r--로 하고 싶다면
chmod 444 filename

# filename의 권한을 --w--w--w-로 하고 싶다면
chmod 222 filename

# filename의 권한을 ---x--x--x로 하고 싶다면
chmod 111 filename

# filename의 권한을 -r-x-w--wx로 하고 싶다면
chmod 523 filename

파일 관리를 위한 명령어

touch

  • touch 명령어는 파일의 생성과 파일의 날짜, 시간을 변경하는 명령어이다.
  • 옵션 없이 사용할 경우 서버의 현재시간으로 변경된다.
  • 파일이 존재하지 않을 경우 크기가 0인 파일을 생성하며, 한번에 여러개의 파일을 만들수 있다.

cat

  • 파일 내용을 출력한다.
  • 다른 명령어와 함께 사용하면 유용하다.
  • 파일 또는 파이프된 데이터의 시작점을 볼 수 있다.

tail

  • head와 반대로 마지막행부터 지정한 행까지 내용을 출력한다.
  • tail -f $filename : 실시간으로 append 되는 내용을 확인할 수 있다. 로그를 실시간으로 볼 때 자주 활용된다.

comm

  • compare의 약자
  • 두 파일을 라인별로 비교한다.
  • 옵션과 함께 사용한다.

cmp

  • 두 파일을 바이트 단위로 비교한 결과를 stdout에 프린트한다.

diff

  • differnce의 약자
  • 두 파일을 라인별로 비교해서 차이점만 보여준다.
  • symbol로 어떤 차이인지 표시한다.

    a : add
    c : change
    d : delete

less

  • 터미널 세션에 프린트하지 않고 파일 내용을 볼 수 있다.
  • vi 처럼 파일 전체를 여는것이 아니라 보고있는 부분만 열어서 파일이 큰 경우, vi에 비해 빠르게 열어 내용을 확인할 수 있다.
  • 양방향 탐색이 가능하므로 more보다 편리하다.

ln

  • 심볼릭 링크를 만든다.
  • 심볼릭 링크란?
    : 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉토리에 대한 참조를 포함하고 있는 특별한 종류의 파일
  • 개인적으로 나는 어떠한 경로를 변수로 지정한듯한 느낌을 받음

    ln -s $경로이름 $변수이름

alias

  • 다른 문자열에 대체하는 단어를 저장한다.
  • 주로 복잡한 명령어의 약어를 지칭할 때 쓰임
  • 환경변수와는 다르다.

    alias hellocmd = "echo hello $@"

cp

  • copy의 약어
  • 파일이나 디렉토리 복사
  • -r 옵션으로 디렉토리 복사
  • cp [옵션][복사 할 디렉토리/파일][복사 될 디렉토리/파일]

    -i : 복사될 파일이 이름이 이미 존재할 경우, 사용자에게 덮어 쓰기 여부를 묻는다.
    -b : 복사될 파일이 이름이 이미 존재할 경우, 백업파일을 생성한다.
    -f : 복사 될 파일이 이름이 이미 존재 할 경우, 강제로 덮어쓰기 한다.
    -r : 하위 디렉토리 까지 모두 복사한다.
    -a : 원본 파일의 속성, 링크 정보까지 모두 복사한다.
    -p : 원본 파일의 소유자, 그룹, 권한 등의 정보까지 모두 복사한다.
    -v : 복사 진행 상태를 출력한다.

mv

  • move의 약어
  • 파일이나 디렉토리를 이동
  • mv [옵션][이동시킬 디렉토리/파일] [이동 될 위치]
  • mv 명령어는 [이동시킬 디렉토리/파일][이동될 위치] 두 인자를 필수로 갖는다.
  • 경로를 지정하지 않는다면 현 위치를 디폴트로 설정한다.
  • 이동시킬 때 새로운 이름을 지정할 수 있다.
  • 현재 위치에 이름만 바꿔서 이동시키는 식으로 파일의 이름을 바꾸기로 응용할 수 있다.

-b : 이동시킬 파일이 이미 존재하면 백업파일을 만든다.
-i : 이동시킬 파일이 이미 존재하면 사용자에게 덮어쓰기 여부를 묻는다.
-f : 이동시킬 파일이 이미 존재하면 강제로 덮어쓰기 한다.
-n : 이동시킬 파일이 이미 존재하면 덮어쓰기 하지 않는다.
-r : 하위 디렉토리까지 모두 이동한다.
-v : 이동 진행 상태를 출력한다.

검색에 사용하는 명령어

find

  • 파일을 검색할때 사용

  • find . -name $filename

    현재 경로에서 $filename의 이름을 가진 파일이나 디렉토리를 찾음

    which

  • $PATH에 등록된 경로 중에서 주어진 이름의 실행 파일 위치를 찾는다.

  • 사용하고 있는 명령어가 설치된 위치를 찾는데 유용

    grep

  • 대량의 파일에서 주어진 텍스트 또는 정규표현식 패턴에 일치하는 텍스트를 찾는 명렁어

  • 파이프와 함께 다양한 명령어와 조합하여 사용한다.

    sed

  • 텍스트를 필터링하거나 변환하는 스트림 에디터

  • sed 's/old_world/new_world/g' target_file

    target_file에서 old_world 를 new_world로 모두 교체한 결과를 출력

  • vi 에서도 :%s/old_word/new_world/g 를 이용하여 string을 교체할 수 있다.

    uname

  • 이름,버전,기타 시스템 정보를 확인할 수 있다.

  • uname-a

    ps

  • 현재 실행중인 프로세스를 볼 수 있다.

  • 어떤 프로세스에 문제가 있는지, 내가 실행한 어플리케이션 프로세스의 상태를 보는데 사용할 수 있다.

    가장 중요하고 가장 많이 쓰이는 명령어니, 필요할 때마다 구글에 검색해서 보기

kill

  • process에 signal을 전달한다.
  • 프로세스를 종료하는 명령어

shutdown

  • 시스템 종료

halt

  • 시스템 강제종료

reboot

  • 시스템 재시작

네트워크 활용을 위한 명령어

ss

  • socket status의 약어
  • 네트워크, 소켓의 사용을 쉽게 확인할 수 있다. 주로 열려있는 포트를 확인할 때 사용
  • 내용이 긴 경우 pipe() 해서 less 또는 grep 등과 함께 사용

I/O관련 명령어

echo

  • 터미널 콘솔에 텍스트를 출력한다.
  • echo $(command)로 다른 명령어의 결과를 확인할 수 있다.

history

  • 지나간 터미널 명령어 기록을 보여준다
  • 로그아웃 하거나 세션을 종료하면 다시 볼 수 없다.
  • history 에서 확인한 명령어의 숫자를 !number 형태로 다시 불러올 수 있다.

redirection

stdout, stderror

Vi 명령어

vi에서 이동하기

  • 이동모드
    -- > 커서가 어디에 있던지, esc를 누르면 이동 모드가 됨. 편집할 수 없음
    -- > vi를 쓰면 수시로 esc를 누르는 습관이 필요

  • 라인 숫자 같이보기
    -- > set number 입력
    -- > set nonumber 로 number 모드해체

  • 커서 이동 명령키
    h : 한문자 왼쪽으로 커서이동
    j : 한문자 아래쪽으러 커서이동
    k : 한문자 위쪽으로 커서이동
    l : 한문자 오른쪽으로 커서이동
    w : 다음 단어 첫 문자로 커서이동
    b : 이전단어 첫 문자로 커서이동

  • 행 이동 명령키
    gg : 첫 행으로 이동
    g : 마지막 행으로 이동
    ^ : 현재 행의 첫 문자로 이동
    $ : 현재 행의 마지막 문자로 이동
    :n 타이핑한 숫자n에 해당하는 행으로 이동
    숫자 n 누르고 g : 해당 숫자만큼 아래로 행 이동
    숫자 n 하고 엔터 : 현재커서의 행으로 부터 +n만큼 행이동

  • 문자 검색을 이용한 이동(정규식 이용가능)
    /문자열 : 커서 다음부터 문자열 검색, enter 누르면 커서이동
    ?문자열 : 커서 이전으로 문자열 검색, enter 누르면 커서 이동
    n : 검색반복
    N : 역방향으로 검색반복

vi에서 편집하기

  • 입력관련된 명령어
    i : 현재 커서 위치에 글자 삽입 가능. i 를 누르고 난 이후에 쓰는 글은 커서 위치에 쓰여짐
    I : 현재 줄 처음 글자에 삽입
    a : 현재 커서 다음위치에 추가
    A : 현재 줄 마지막 글자에 추가
    o : 아랫 줄에 추가
    O : 윗 줄에 추가
    s : 현재 커서 글자 지우고 입력 모드로 전환
    r : 현재 커서 글자지우고 한글자 입력받아 바꾼뒤 명령모드로 들어감

  • 삭제 관련된 명령어
    x : 현재 커서 위치 문자 삭제
    X : 현재 커서 위치 이전 문자 삭제
    dw : 현재 커서 위치 단어 삭제, 숫자 dw로 쓰면 숫자만큼의 단어가 삭제됨
    db : 현재 커서 위치 이전 단어 삭제
    dd : 현재 커서 위치 줄 삭제, 숫자 dd 로 쓰면 숫자만큼의 줄이 삭제됨
    d^ : 현재 줄에서 현재 커서 위치 이전 문자열을 마지막 문자까지 삭제
    d0 : 현재 줄에서 현재 커서 위치 이전 문자열을 긑까지 삭제
    d$ : 현재 줄에서 현재 커서 위치 이전까지 삭제

  • 복사 붙여넣기
    y : 복사, w,b,^,0,$ 등 다른 이동 표현과 함께 쓰면 그만큼 복사가 됨
    yw : 현재 커서 이후 단어 복사, 숫자 yw로 쓰면 숫자만큼의 단어가 복사됨
    yb : 현재 커서 이전단어 복사, 숫자 yb로 쓰면 숫자만큼의 단어가 복사됨
    yy : 현재 줄 복사, 숫자 yy로 쓰면 숫자만큼의 줄이 복사됨
    p : 복사된 항목을 현재 커서 위치 이후에 붙여 넣기, 삭제된 항목도 붙여넣기 가능
    P : 복사된 항목을 현재 커서 위치 이전에 붙여 넣기, 삭제된 항목도 붙여넣기 가능

  • undo, redo
    u : esc를 누른 명령모드에서 누르면, undo
    Ctrl + r : esc를 누른 명령모드에서 누르면, redo

여러 파일 한번에 열고, 파일을 이동하기

  • vi file1 file2 file3 명령을 사용하면 동시에 여러 소스코드 파일을 열 수 있음
    :n : 다음 버퍼 파일로 이동
    :N : 이전 버퍼 파일로 이동
    :ls : 현재 열려있는 버퍼의 리스트를 보여줌
    :b숫자 : 숫자에 해당하는 버퍼로 이동
    :bd숫자 : 숫자에 해당하는 버퍼를 삭제
    :bw : 현재 버퍼를 삭제

  • vi 안에서 새로운 파일 열기
    :e [tab] 또는 $filename : 해당 파일을 현재 vi 창에서 새로운 버퍼로 연다
    :cd [tab] 또는 $filename : 해당 디렉토리로 이동한다. :e로 다음 파일을 찾을 때 적용

  • 화면 분할해서 보기
    :split : 현재 열린 파일과 같은 파일을 수평으로 분할해서 하나 더 연다.
    :split $file : 새로운 파일을 현재 위치에 열고 현재 열린 파일은 수평으로 분할해서 연다.
    :vsplit : 현재 열린 파일과 같은 파일을 수직으로 분할해서 하나 더 연다
    :vsplit $filename : 새로운 파일을 현재 위치에 열고 현재 열린 파일은 수직으로 분할해서 연다.

  • 화면 분할 상태에서 윈도우 이동하기
    Ctrl+w,j : 아래 윈도우로 이동
    Ctrl+w,k : 위 윈도우로 이동
    Ctrl+w,l : 오른쪽 윈도우로 이동
    Ctrl+w,h : 왼쪽 윈도우로 이동

  • 화면 분할 상태에서 창 크기 조절하기 - 좌우
    Ctrl+w,= : 모두 균일한 상태로 이동
    Ctrl+w,> : 오른쪽으로 1칸 확장
    Ctrl+w,$num> : 오른쪽으로 $num칸 확장
    Ctrl+w,< : 왼쪽으로 1칸 확장
    Ctrl+w,$num< 왼쪽으로 $num 칸 확장

  • 화면 분할 상태에서 창 크기 조절하기 - 위아래
    Ctrl+w,= : 모든 균일한 상태로 이동
    Ctrl+w,+ : 위로 1칸 확장
    Ctrl+w,$num+ : 위로 num칸 확장
    Ctrl+w,- : 아래로 1칸 확장
    Ctrl+w,$num- : 아래로 num칸 확장
    Ctrl+w,_ : 해당 윈도우가 위아래로 모든 칸을 차지

환경변수의 이해

  • 환경변수
    : 운영체제 수준에서 선언하는 변수
    운영체제 해당 환경에서 실행되는 프로세스가 모두 참조할 수 있다.
    대표적으로 다음과 같은 경우에 사용한다.
  1. 변수에 자주 사용하는 경로를 지정한다.
  2. 기존에 있는 변수를 이용한 새로운 변수를 저장한다.
  3. 프로세스가 구동중에 참조할 값을 미리 환경변수에 할당하고 프로세스를 실행한다.
  • 환경변수를 임시로 선언하는법
    export 환경변수명=값 : 값을 환경변수로 임시 선언

    이 경우 시스템 재부팅 또는 로그아웃을 하면 환경 변수 값이 사라지게 된다.

  • 환경변수를 유저레벨로 선언하는 법
    환경변수를 특정 유저에게만 영구적으로 적용하고 싶은 경우에는 ~/.bash_profile 파일을 수정한다.
    ~/.bash_profile은 user가 처음 login 할 때 수행된다.
    단, bash shell로 접속했을 때만 동작한다. sh 또는 zsh로 접속하면 동작하지 않는다.

vi ~/.bash_profile
exprot LECTURE="fastcampus"
exho $LECTURE

  • 환경변수를 영구히 선언하는 법
    환경변수를 모든 유저에게만 영구적으로 적용하고 싶은 경우에는 /etc/profile 파일을 수정한다.

    sudo vi /etc/profile
    export LECTURE='data'
    echo $LETURE

    운영체제가 명령어의 실행파일을 찾는 경로
    절대/상대 경로 없이, 단독으로 명령어를 수행할 수 있다는 것은 해당 명령어의 실행파일이 운영체제의 $PATH에 등록된 디렉토리들 중에 포함되어 있다는 의미이다.

shell script 활용하기

  • shell script란?
    Shell script는 unix shell의 command line interpreter가 실행할 수 있는 명령어를 의미한다.

파일 맨 위에 다음과 같은 표시가 있다면 shell script 파일이라고 할 수 있다.

#!/bin/sh : /bin/sh(bourne shell)를 사용하는 shell script
#!/bin/bash : /bin/bash를 사용하는 bash shell script
#!/bin/zsh : /bin/zsh 를 사용하는 zshell shell script
#!는 shebang(쉬뱅) 이라고 읽는다

  • shell script 실행하는 법
    ./$FILENAME을 이용하여 실행
    실행이 안된다면? -> 로그인한 user에게 +x 권한이 있는지 확인한다.

shell script 실습

변수

  • 영문,숫자,_만 사용가능
  • Unix shell 의 변수 명은 대문자로 작성하는 것이 convention 이다.
  • 변수명 = 변수값 으로 변수 선언 가능

    $변수명 : 변수사용
    readonly 변수명 : 읽기전용 변수로 선언 (읽기 전용 변수 값을 바꾸려고 시도하면 에러발생)
    unset 변수명 : 변수할당해제

  • Script 내에서 선언한 변수 뿐만 아니라, 환경변수, 쉘별수(접속한 shell에서 export로 선언한 변수)도 $변수로 읽어올수있다.

특수목적 변수

$$ : 현재 shell의 프로세스 아이디
$0 : 현재 Script의 파일이름
$n : Script실행시 넘겨준 n번째 인자
$# : Script에 넣어준 인자의 개수
$* : 모든 인자를 ""로 감싸서 반환
$@ : 각 인자를 ""로 감싸서 반환
$? : 마지막으로 실행된 명령어의 종료상태
$! : 마지막 백그라운드의 명령어의 프로세스 아이디

조건문 - if

  • if 는 expression을 이용해서 자유롭게 조건을 넣는다.
if[condition]; then
	${script}
elif[condition]; then
	${elif script}
else[condition]; then
	${script}
fi
  • if는 항상 fi로 닫는다
  • 조건 뒤에는 ;then 으로 다음 수행을 알려준다.
  • elif, else는 선택적으로 사용한다.
OPTION="${1}"
case ${OPTION} in
        -f) FILE="${2}"
                echo "FILE name is $FILE"
                ;;
        -d) DIR="${2}"
                echo "Dir name is $DIR"
                ;;
        [0-9]) NUM="${1}"
                echo "num is $NUM"
                ;;
        *)
                echo "`basename ${0}`: usage: [-f file] | [-d directory]"
                exit  1
                ;;
esac
  • case는 항상 esac로 닫는다
  • 예시에 넣은 OPTION은 상관 x
  • *)는 defalut, 위의 어떤 조건도 아닐 때 수행한다.

연산자

  • 기본연산자
    연산을 위해서는 외부 프로그램을 이용해야 한다.
    대표적으로 awk/expr 이 있다

val = expr 2 + 2
echo "Total value : $val"
> Total Value : 4

  • 산술연산자
  • 관계 연산자

  • 부울 연산자

  • 반복문

Quoting Mechanism

  • Metacharacters

Shell Substitution

funtion

profile
힘들더라도 꾸준히!

0개의 댓글