Linux 기본 명령어

Violet_Evgadn·2023년 4월 26일
0

Linux

목록 보기
3/34

들어가기 앞서

Linux 명령어는 절대로 외우는 것이 아니다.

Linux 명령어 개수만 아무리 적게 잡아도 몇백 개 될 것이고 여기에 Option까지 포함시키면 사실상 무한하다고도 볼 수 있다. 이 모든 걸 다 외운다는 건 말이 안 되는 것이다.

단지 Linux 명령어로 뭘 할 수 있는지는 알아야 명령어를 검색해 사용할 수 있기에 명령어가 어떤 기능을 하는지 정도는 알아두고 나중에 필요할 때마다 찾아서 활용하도록 하자.(그리고 자주 활용하는 것은 자연스럽게 외워질 것이다.)


Linux 명령 중단 및 종료

Linux는 명령 중단을 위해선 Ctrl + c, 명령 종료를 위해선 Ctrl + d를 사용한다.

명령 중단인 Ctrl + c는 Process 자체를 종료시키는 키이다. 커널에 사용자 입력으로 인터럽트를 주어 프로세스를 종료시킨다.

명령 종료인 Ctrl + d인 Standard Input의 종료를 알리는 것이다.

쉽게 말하자면 Ctrl + c는 Process가 어떤 상태인지는 관심 없고 강제 종료시키는 것이며 Ctrl + d는 Process가 지금 처리하고 있는 일까지는 모두 수행한 뒤 종료시키라는 의미를 가진다.

예시를 들어보자.

어떤 실행 파일은 사용자에게 숫자를 입력 받고 입력받은 수인 N초 후 다음 입력을 받는다. 예를 들어 2를 입력했을 경우 2초가 지난 뒤 다음 숫자 입력값을 받는 것이다.

만약 초기에 1000을 주입했다고 가정하자. 그리고 2초 후 이 Process를 종료시킬 것이다.

Ctrl + c는 Process를 죽이는 것이기 때문에 998초를 기다리는 과정이 남았음에도 불구하고 해당 Process를 바로 종료시킨다.

하지만 Ctrl + d는 입력값을 더 이상 받지 않을 뿐 현재 Process가 처리하고 있는 일은 수행시켜야 한다.

따라서 998초 후 이 Process는 정상적으로 종료될 것이다.


Linux 정규 표현식

Linux에서도 정규 표현식을 통해 여러 개의 파일을 동시에 선택할 수 있다.

Linux 정규 표현식에는 기본 정규 표현식(Basic Regular Expression), 간격 정규 표현식(Interval Regular Expressions), 확장 정규 표현식(Extended Regular Expression)이 존재한다.

하지만 (필자가 느끼기엔) 거의 기본 정규 표현식, 그것도 .과 *만 사용하는 것 같아서 기본 정규표현식만 어느 정도 알아두고 나머지는 이런게 있다 정도로만 알고 넘어가자.

기본 정규 표현식

  • . : 점의 개수만큼 아무 문자로 대체 가능
  • * : 모든 문자열로 대체 가능(빈 문자도 가능)
  • ^ : 문자열 처음 시작 부분 매칭
  • $ : 문자열 끝 부분 매칭

간격 정규 표현식

  • {n} : 앞의 문자와 n번 매칭
  • {n,m} : 앞의 문자와 n번 이상 m번 이하로 매칭
  • {n,} : 앞의 문자와 n번 이상 매칭

확장 정규 표현식

  • + : + 앞의 문자가 한 번 이상 출현한 파일명의 파일과 매칭
  • \? : \? 앞의 문자가 1번 이하로 출현한 파일명의 파일과 매칭

man

Manual의 약자로써 명령어에 대한 사용 방법 및 정보를 알고 싶을 때 활용하는 명령어이다.

man 명령어를 공부하기 전 man 명령어에 대한 사전 지식을 알고 있어야 한다.

man 명령어는 9개의 Section으로 구성되어 있다.

예를 들어 passwd 같은 경우 명령어 passwd일 수도 있고 Password를 저장하고 있는 파일을 의미할 수도 있다.

1 : 명령어, 5 : Password File

이런 경우에는 Section을 입력하지 않으면 가장 낮은 번호의 Section 명령어로 간주하여 Manual을 출력해 준다.

man 명령어가 제공하는 9개의 Section은 아래와 같다.

  • man1 : 실행 가능한 프로그램 혹은 쉘 명령어
  • man2 : 시스템 호출(System Call)
  • man3 : C 표준 라이브러리 함수들
  • man4 : Device와 관련된 내용(장치 파일이나 드라이버)
  • man5 : File Format & Convention
  • man6 : 게임과 화면 보호기
  • man7 : 기타(리눅스 시스템 파일 관련 표준, 규칙, 프로토콜, 시그널 목록 등)
  • man8 : 시스템 관리 명령어 및 Daemon
  • man9 : Linux Kernel 설명
    • Section 9은 존재하지 않을 수도 있다.

man1 ~ man9는 '/usr/share/man'에 Directory 형태로 존재하며 디렉터리 안에는 각 Section에 해당하는 명령어 및 설명들이 .gz 형태로 저장되어 있다.

사용법 & Option

man [Option] [알고싶은 Keyword]
# Option은 필수 값 X

Option

  • -k : 키워드를 포함한 명령어들을 모두 보여줌

참고로 위 사진을 보면 (8)처럼 숫자가 기입된 것을 볼 수 있는데 이 값이 Section을 의미한다.

  • -f : 키워드와 정말 일치하는 명령어들을 보여줌

  • -w, --path : man [Keyword] 입력 시 출력되는 Manual File 경로를 보여줌

"man passwd"를 입력하면 위에서 설명한 "가장 낮은 Section Manual을 보여준다"라는 조건에 의거 passwd (1)의 Manual을 보여줄 것이다. 따라서 Path를 보면 man1의 Passwd를 보여줌을 알 수 있다.

  • -s, -S, --sections [Section Num] : Keyword의 특정 Section Manual을 확인할 때 사용

만약 passwd (5)를 보고 싶다면 "man -s 5 passwd"를 입력하면 된다.

Manual 읽는 방법

  • q : 나가기(quit)
  • 엔터, 아래 화살표 키 : 한 줄 아래로 넘기기
  • 위 화살표 키 : 한 줄 위로 올리기
  • Page Up : 한 페이지 올리기
  • Page Down, 스페이스바 : 한 페이지 아래로 넘기기
  • h : man 사용법 확인(Help). Windows의 F1과 비슷하며 많이는 활용되지 않는 기능
  • [숫자] G : 특정 라인(입력한 숫자 라인)으로 이동

매뉴얼 중 단어 검색

/[키워드]
  • n : 다음 검색 결과로 이동
  • N : 이전 검색 결과로 이동

Manual 읽는 방법이나 단어 검색은 VI Editor 사용법과 동일하기 때문에 알아두면 좋다.


Login 관련 명령어들

passwd

passwd [Option] [Username]
# Option, Username은 필수 값이 아님

계정의 Password를 변경하는 명령어이다.

일반적인 로그인과 마찬가지로 기존 비밀번호를 알고 있어야 비밀번호 변경이 가능하다.

Username

Username을 입력하지 않을 경우 현재 로그인하고 있는 계정의 패스워드를 수정한다.

Username을 입력한다면 해당 Username을 가진 계정이 존재할 경우 해당 계정의 비밀번호를 수정하는 단계로 넘어간다.

Option

  • -e
    • 입력한 Username 계정의 패스워드를 만료시켜 해당 계정이 다음에 로그인할 때 새로운 Password를 입력하도록 함
    • Root 권한의 사용자만 사용할 수 있는 Option

whoami

현재 로그인한 사용자 Username을 출력하는 명령어이다.

users, who

현재 서버에 로그인한 모든 사용자들의 정보를 볼 수 있는 명령어들이다.

"users" 명령어는 서버에 접속한 유저들의 Username만 출력하며 "who" 명령어는 서버에 접속해 있는 유저들의 Username, Terminal, 접속 시간 및 접속 서버 정보 같은 세부 정보까지 확인할 수 있다.


파일/디렉터리 관리

ls

List의 줄임말로써 현재 위치나 특정 경로에 있는 디렉터리들을 리스트 형식으로 출력하는 것이다.

매우 많이 활용하는 기본 명령어로써 다양한 옵션들을 통해 디렉터리 및 파일들에 대한 자세한 정보도 확인할 수 있다.

ls [Option] [Directory 경로]
# Option 및 Directory 경로는 필수 값 X
# Directory 경로 입력하지 않을 경우 현재 Directory 입력으로 간주함

Option

  • -a : all의 줄임말로 모든 파일(숨김 파일 및 디렉터리)을 출력
  • -h : human의 줄임말로 사용자가 보기 좋은 형태의 단위로 출력(K - 킬로바이트, M - 메가바이트, G - 기가바이트)
  • -l : Long의 줄임말로 긴 목록 형식으로 파일 정보를 출력
  • -S : 파일을 크기별로 내림차순 정렬하여 출력
  • -r : 파일 출력 순서를 거꾸로 함

ls의 옵션은 다수의 옵션을 1개로 합치며 많이 활용한다.

예를 들어 숨김 파일 및 디렉터리까지 모두 긴 목록 형식으로 출력하고 싶을 경우 "-a -l" 혹은 "-al"으로 Option을 줌으로써 1번 실행 과정에 2개의 Option을 줄 수 있다.

(참고로 -al 같이 1개의 -에 Option 여러 개를 붙일 경우 순서는 상관이 없다)

몇 가지 예시를 통해 Option 사용법을 익혀보자.

-al : 모든 파일 및 디렉터리를 긴 목록 형식으로 출력

-Srlh : 파일을 Size 기준 오름차순 정렬하여 긴 목록 형식으로 사람이 보기 편하게 출력

cp

파일이나 디렉터리를 복사할 때 사용하는 명령어이다.

# 파일 1개를 복사할 경우
cp [Option] [복사할 원본 대상] [복사 될 디렉터리 경로 or 파일 이름]

# 파일 여러개를 복사할 경우
cp [Option] [복사할 원본 대상 1] [복사할 원본 대상 2] ... [복사할 원본 대상 n] [복사 될 디렉터리]

cp를 통해 파일 1개를 복사할 때는 파일이나 디렉터리의 이름까지 지정해 줄 수 있다.

하지만 파일 여러 개를 한 번에 복사시키기 위해선 파일이 복사될 디렉터리 위치만 명시해 줄 수 있고 복사된 파일의 이름은 기존 원본 파일 이름으로 고정된다.

예를 들어 A.txt를 dir/B.txt로 복사하고 싶을 경우 "cp A.txt dir/B.txt"를 통해 복사할 수 있다.

하지만 A.txt, A1.txt, A2.txt를 dir/B.txt, dir/B2.txt, dir/B3.txt로 한 번에 복사할 수는 없고 "cp A.txt A1.txt A2.txt dir/"을 입력하면 dir/A.txt, dir/A1.txt, dir/A3.txt로 복사되는 것이다.

Option

  • -i : 복사될 파일이 이름이 이미 존재할 경우 사용자에게 덮어쓰기 여부를 물음

    • 덮어쓰기 함 : Yes, yes, y, Y 입력
    • 덮어쓰기 안 함: No, no, n, N 입
  • -b : 복사될 파일 이름이 이미

    • 존재할 경우 목적지에 존재하던 기존 파일의 백업 생성

A.txt~라는 백업 파일이 dir 디렉터리에 생성되었음을 볼 수 있다.

  • -f : 복사될 파일이 존재할 경우 강제로 덮어쓰기 함
  • -r : 하위 디렉터리까지 모두 복사
    • -r Option을 활용하지 않을 경우 Directory 복사는 사실상 불가능하다.
  • -a : 원본 파일의 속성, 링크 정보까지 모두 복사
  • -p : 원본 파일의 소유자, 그룹, 권한등 모든 정보를 복사함
  • -v : 복사 진행 상태를 출력

Directory를 복사하는 과정을 출력했음

mv

파일 및 디렉터리를 원하는 위치로 이동시킬 때 사용하는 명령어로 파일이나 디렉토리 이름을 변경시킬 때도 사용한다.

어떻게 이동 명령어가 이름 변경 작업을 수행할 수 있는지 의아할 수도 있을 것이다.

mv란 부모 디렉터리와 해당 디렉터리(혹은 파일)에 대한 링크를 끊고 이동시킬 공간의 부모 디렉터리에 링크를 새로 연결하는 개념이다.

즉, 이동 전과 이동 후의 부모 디렉터리가 동일하다면 그곳에 기존 디렉터리(파일)를 잠깐 없앴다 새로운 이름을 가진 똑같은 디렉터리를 다시 붙여 넣는 것으로 이름을 바꾸는 것과 동일한 효과가 나타나는 것이다.

# 파일 1개만 옮길 경우
mv [Option] [원본 파일] [이동 될 Directory or File Name]
# 만약 원본 파일이 존재하는 Directory와 이동 시킬 목적지의 Directory가 동일할 경우 이름 변경 메서드가 됨

# 파일 여러 개를 옮길 경우
mv [Option] [원본 파일 1 경로] [원본 파일 2 경로] ... [원본 파일 n 경로] [이동 될 위치]

Option

  • -i : 이동될 파일의 이름이 이미 존재할 경우 덮어쓰기 여부를 사용자에게 물음
  • -b : 이동될 파일의 이름이 이미 존재할 경우 기존에 있던 파일의 백업 파일을 생성
  • -f : 이동될 파일이 이름이 이미 존재할 경우 강제로 덮어씀
  • -n : 이동될 파일의 이름이 존재할 경우 덮어쓰기를 하지 않음(mv 명령어가 실행되지 않음)
  • -r : 하위 디렉터리까지 모두 이동함
  • -v : 이동 상태를 출력함

rm

디렉터리 및 파일을 삭제하는 명령어이다.

Linux의 경우 한 번 지우면 복구가 어렵기 때문에 꼭 사용에 주의하자.

rm [Option] [삭제할 디렉터리/파일 1] [삭제할 디렉터리/파일 2] ... [삭제할 디렉터리/파일 n]

Option

  • -f : 강제로 파일이나 디렉터리를 삭제하고 대상이 없는 경우 메시지를 출력하지 않음
  • -r : 디렉토리 내부 모든 내용을 삭제함
  • -d : 비어 있는 디렉터리만 제거
  • -i : 삭제할 때마다 사용자에게 삭제할지 물어봄

비어 있지 않은 디렉터리는 -r 옵션 없이는 삭제할 수 없다.

rm 명령어의 경우 가장 많이 활용하는 옵션은 "-rf"로써 모든 파일 및 디렉터리를 묻지도 따지지도 않고 무조건 삭제시켜 버리는 것이다.

편하기는 하지만 위험성도 높기 때문에 주의해서 사용하자.

mkdir

Directory를 새로 생성할 때 사용하는 명령어이다.

mkdir [Option] [생성할 디렉토리 이름]

Option

  • -m : 디렉터리를 생성할 때 권한을 설정(Default : 775)


test는 -m 없이 만들었으므로 권한이 775로 설정되었지만 test2는 -m 777에 의해 777로 설정되었음을 볼 수 있다.


경로 관련 메서드

pwd

현재 경로를 출력한다.

cd

지정한 경로로 이동한다.

cd [이동할 디렉토리 경로]

기본적으로 알아야 하는 명령은 이와 같다.

다음 Section에는 큰 범주로 묶기는 어려우나 알아두면 좋은 명령어들을 알아보겠다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글