리눅스 명령어 모음

정선호·2025년 6월 22일
0

Server

목록 보기
5/6

리눅스에서 사용하는 각종 단축키들을 정리해둔 문서
bashrc를 기준으로 작성하였다.


1. 파일 및 디렉토리 관리

파일의 종류

  • 일반 파일
  • 디렉터리 (윈도우의 폴더)
  • 심볼릭 링크 (윈도우의 바로가기)
  • 장치 파일 (키보드, 하드디스크 등도 파일로 취급)

/ 루트

  • dev : 장치 파일
  • home : 사용자 홈 디렉토리
  • root : root 계정의 홈 디렉토리
  • tmp : 임시 파일
  • usr : 기본 실행 파일, 라이브러리 등

파일 명령어

디렉토리 위치

  • pwd : 현재 작업중 위치
  • cd : 지정한 디렉토리로 이동
    • 절대 경로 (/로 시작을 한다, 절대 경로는 유일함)
    • 상대 경로 (/이외의 문자로 시작, 현재 디렉토리를 기준)
    • . : 현재 디렉토리
    • .. : 상위 디렉토리(뒤로가기)

디렉토리 내용

  • ls : 디렉토리의 내용 출력
    • -a : 숨김 파일 포함(all)
    • -l : 파일의 상세 정보 출력
    • -F : 파일의 종류 표시 (* 실행 / 디렉 @ 심볼릭)
    • -R : 하위 디렉터리 목록 표시

디렉토리 생성, 삭제

  • mkdir [절대경로/상대경로] : 디렉터리 생성
    • -p : 중간에 없는 디렉토리가 있으면 자동 생성
  • rmdir [절대경로/상대경로] : 디렉터리 삭제
    • -p : 중간에

내용 출력

  • cat : 파일 내용 전부 출력
  • more : 파일 내용을 일부 출력 (space : 다음화면 enter : 다음행 q : 종료)
  • less : 파일 내용을 일부 출력 (스크롤로 이동 등)

파일 복사, 이동, 삭제

  • cp [src] [dest] : 파일 복사
    • -r : 디렉토리 복사
  • mv [src] [dest] : 파일 이동
  • rm : 파일 삭제(복구 불가)
    • -r : 디렉토리까지 통으로 삭제

바로가기

  • ln : 바로가기 만들기(하드 링크, 어떤 파일의 다른 이름)
    • -s : 심볼릭 링크(윈도우의 바로가기 느낌)

파일 내용 검색

  • grep [옵션] [패턴] [파일] : 파일 내용 검색
    • -n 행번호 출력
    • -i 대소문자 구분 없이

파일 검색

  • find [경로] [조건] [동작] : 파일 검색
    • name [파일이름]
    • type [파일종류]
    • user [유저]

2. vi 에디터

에디터 열기

  • vi
    • 빈파일 열림(새 문서)
  • vi [파일명]
    • 존재하는 파일이면 파일 열림
    • 존재하지 않으면 새 문서

모드

  • vi 편집기의 모드는 입력 모드와 명령 모드로 나뉨
    • 명령모드 -> 입력모드 : i
    • 입력모드 -> 명령모드 : esc키
  • 파일 저장/종료 : q(quit) i(강제) w(write)
    • q : 그냥 종료
    • q! : 강제 종료 (고친 사항이 있어도 강제종료)
    • w [파일명] : 파일 저장
    • wq : 파일 저장하고 종료
  • 명령 모드 -> 입력 모드
    • i : 현재 커서 위치
    • a : 커서 뒤
    • o : 커서 기준 다음행
    • I : 커서 기준 행의 시작
    • A : 커서 기준 행의 끝
    • O : 커서 기준 이전 행

화면 이동

  • 초기 vi는 상하좌우(kjhl)
  • 통상적인 키로도 매핑 되어있음
    • 상하좌우 방향키
    • home, end : 행의 앞/끝 이동
    • pgup, pgdw : 화면 위/아래
  • 특정 행 처리
    • G or :$ : 파일의 마지막 행으로 이동
    • 행번호 + G or :행번호 : 특정 행 번호 이동
    • set nu[mber] : 행 번호 표시
    • set nonu : 행 번호 숨김

수정

  • r : 커서의 글자를 다른 글자로 수정
  • s : 커서의 글자 삭제 이후 ESC를 입력할 때까지 내용 입력
  • #cw : 단어를 삭제하고 해당 위치에 입력 모드
  • #cc : 행을 삭제하고 해당 위치에 입력 모드
  • C : 커서 위치부터 행의 끝까지 수정

삭제

  • #x : 커서 위치 글자 삭제
  • #dw : 커서 위치 단어 삭제
  • #dd : 커서 위치 행 삭제
  • D : 커서 위치부터 행 끝까지 삭제

명령 취소

  • Ctrl + Z : fg로 돌아간다
  • u : 명령 취소
  • U : 행에서 한 모든 명령 취소
    • :e! : 마지막 저장 내용 이후의 모든 변경 내용 취소

복사/붙여넣기

  • #yy : 커서 위치 행 복사
  • p : 커서 위치한 행 아래에 붙임
  • P : 커서 위치한 행 위에 붙임
  • cc : dd 상태에서 p 잘라 붙이기

검색

  • /[단어] : 단어 검색(아래 방향으로)
  • ?[단어] : 단어 검색(위 방향으로)
  • n : 다음 단어 검색
  • N : 이전 단어 검색

바꾸기

  • :[범위]s/[단어1]/[단어2] : 범위 내 첫 번째 단어1->단어2

  • :[범위]s/[단어1]/[단어2]/g : 범위 내 모든 단어1->단어2

  • :s/[단어1]/[단어2] : 커서 행에서 나오는 첫 번째 단어1->단어2

  • :s/[단어1]/[단어2]/g : 커서 행에서 나오는 모든 단어1->단어2

  • :%s/[단어1]/[단어2]/g : 파일 전체의 단어1->단어2

  • :5,10s/[단어1]/[단어2]/g : 5~10줄 단어1->단어2

기타

  • . : 이전 명령 번복
  • ~ : 커서 위치의 글자 대/소문자 변경

3. 쉘

  • 사용자가 리눅스 커널과 대화(명령)하기 위한 도구
  • shell의 종류
    • /bin/sh : 본쉘(구형쉘)
    • /bin/bash : 베시쉘, 주로 사용

출력

  • echo [문자열]

특수문자

문자열 관련 특수문자

  • * : 모든 길이의 아무 문자열로 대체 가능
  • ? : 하나의 문자
  • [] : 괄호 안의 하나의 문자만

특수문자 취소

  • ' ' : 문자열 안의 특수문자 모두 없앰
  • " " : 문자열 안의 특수문자 모두 없앰($ ' \ 제외)
  • \ : 특수문자 효과를 없애고 일반문자 처리

경로 관련 특수문자

  • ~ : (틸트) 작업자의 홈 디렉토리
  • - : (하이픈) 이전 작업 디렉토리

명령 관련 특수문자

  • ; : (세미콜론) 왼쪽 명령부터 차례로 실행
  • | : (파이프) 왼쪽 명령의 결과를 오른쪽으로 전달

입출력 redirection

결과를 모니터 출력이 아니라 파일로 저장하고 싶다면?

리눅스는 키보드, 모니터 장치도 파일로 관리를 한다.
파일 구분을 위해 일련번호가 붙는데, 이를 파일 디스크립터라고 한다
표준 입출력 장치

  • 0 : stdin 표준 입력
  • 1 : stdout 표준 출력
  • 2 : stderr 표준 오류

출력 리디렉션

> : 표준 출력 파일을 바꿈 (redirection)

  • 1> [파일 이름] : 해당 파일 이름에 출력 결과 저장
  • 2> [파일 이름] : 해당 파일 이름에 발생 오류 저장
  • 출력인지 오류인지 모를 때에는 둘 다 redirection 1> [파일 이름1] 2> [파일 이름2]

2> dev/null : 특수 파일(버려지는 곳)으로 리디렉션하여 오류 무시

1> [파일 이름] 2>&1 : 2>&1을 이용해 error를 out으로 리디렉션

입력 리디렉션

< : 파일 내용을 표준 입력 장치로

쉘 환경 변수

  • env 환경 변수 목록 보기
  • alias [별칭]='[명령어]' : 명령어에 별칭 붙이기
  • HISTORY : 명령 히스토리 목록을 보여줌
    • ![번호] : 해당 번호의 명령어를 재실행
    • ![문자열] : 히스토리에서 해당 문자열로 시작하는 마지막 명령 재실행

4. 파일 권한

파일 권한 확인

ls -l로 파일 권환과 관련된 부분을 확인할 수 있다.

앞에서부터 다음과 같은 정보를 가진다.

  • - 파일의 종류 (-일반파일 d디렉토리)
  • rw-rw-r--. : 파일 권한
  • 1 : 하드 링크 개수 (동일한 파일, 여러 개의 이름)
  • user1 : 파일 소유자
  • user1 : 파일이 속한 그룹
  • 93 : 파일의 크기
  • 10월 1 22:49 : 마지막 수정 날짜
  • err.txt.: 파일

groups [이름] : 모든 계정은 그룹을 가진다, 그룹별로 파일 권한을 부여할 수 있다

파일 권한을 읽는 법

소유자   그룹    나머지(소유자도 그룹도 아닌 계정)
rw-     rw-     r--
  • r : 읽기 권한
  • w : 쓰기 권한
  • x : 실행 권한
  • - : 권한 없음

접근 권한 변경

파일의 소유자 / root(관리자) 계정만 변경 가능

chmod : 접근 권한 변경 명령어

  • 기호 방식과 숫자 방식으로 변경 가능

특수 접근 권한 설정

위에서 설명한 일반적인 접근 권한 외에 다음과 같은 특수 권한을 설정할 수 있다.

  • SetUID : (4) 실행 도중에는 실행한 사용자가 아닌 파일 소유자의 권한 적용
  • SetGID : (2) 실행 도중에는 실행한 사용자가 아닌 파일 그룹 권한 적용
  • StickyBit : (1)
    • 디렉터리 전용
    • 해당 디렉터리는 누구나 파일 생성 가능
    • 파일은 파일 생성자의 소유
    • 다른 사용자는 파일 삭제 불가

5. 프로세스

프로세스는 실행중인 프로그램을 뜻한다.

리눅스 프로세스의 특징

  1. PID 고유 번호가 있음
    • systemd (1)
    • kthreadd (2)
  2. 부모-자식 관계 ex)bash shell - vi
    • 통상적으로 자식이 종료할 때 부모에게 종료 정보를 보냄
    • 부모가 종료 정보를 받아서 프로세스 테이블(실행 목록)에서 자식 제거
    • 즉 부모가 자식의 탄생/소멸을 모두 관리함
  3. 예외가 발생할 수 있음
    • 자식이 종료하기 전에 부모가 먼저 종료할 시
      • 자식 프로세스는 고아 프로세스가 된다.
      • 1번 프로세스에게 입양된 후 새 부모를 갖게 된다
    • 자식이 종료했는데 부모가 특정 이유로 자식 제거 처리를 안할 시
      • 자식 프로세스는 좀비 프로세스가 되어 리소스를 차지한다
      • 좀비 프로세스가 누적되면 리소스 낭비도 누적된다

프로세스 목록 확인

ps

  • 플래그 없음 : 현재 셸/터미널에서 실행한 사용자의 프로세스
  • -e : 실행중인 모든 프로세스 정보 출력
  • -f : 자세한 정보 출력
  • -u : 지정한 사용자에 대한 모든 프로세스 출력
  • -p : 지정한 pid의 프로세스 정보 출력

프로세스 확인 방법

  • UID : 유저ID
  • PID : 프로세스 아이디
  • PPID : 부모 프로세스 아이디
  • C : CPU 사용량
  • STIME : 프로세스 시작 시간
  • TTY : 프로세스가 실행된 터미널 종류/번호
  • TIME : 프로세스 실행 시간
  • CMD : 프로그램 이름

프로세스 종료

응답이 없거나 좀비가 된 프로세스를 종료하는 방법

  1. PID를 확인한다
  2. kill 혹은 pkill을 사용한다

이 때 강제종료가 아닌 해당 프로세스에 종료 시그널을 보내는 형식이다.

시그널 신호는 kill -l을 이용해 확인 가능

  • SIGHUP(1) : 터미널과 연결이 끊어졌을 때
  • SIGINT(2) : Ctrl + C로 사용자가 강제 종료했을 때
  • SIGKILL(9) : 강제 종료

프로세스 종료 방법

kill을 이용하는 방법

  • kill [-시그널번호(옵션] [PID]
  • pkill [프로세스 이름]

프로세스 관리창을 이용하는 방법

  • top명령어를 이용해 프로세스 관리창(윈도우의 작업 관리자)에 진입할 수 있다.
    • h : 도움말
    • k : 프로세스 종료
    • u : 특정 유저
    • M : 사용 메모리에 따라 정렬
    • P : CPU 사용량에 따라 정렬

백그라운드 프로세스

기본적으로 사용자가 수행하는 작업은 foreground 작업

  • Ctrl+C로 포그라운드 작업 종료 가능

대기하는 동안 다른 작업을 시키고 싶으면

  • 맨 뒤에 &를 붙이면 백그라운드에서 실행됨

다만 백그라운드에서 입출력 작업도 같이 수행시 입력창이 뒤섞일 수 있는 문제가 있다.

  • (sleep 2; echo 일어님)& 수행 시 입력창에 '일어남'이 적혀있게 된다
  • 이런 문제를 해결하기 위해 리디렉션으로 입출력 경로를 이용해 지정하는 것이 좋다.

백그라운드 작업 보기 및 전환

  • 백그라운드 작업은 jobs로 확인 가능
  • fg [%작업번호]로 백그라운드 작업을 포그라운드로 전환 가능
  • bg [%작업번호]로 포그라운드 작업을 백그라운드로 전환 가능

작업 예약

일회성 예약

at [옵션] [시간] 명령어로 특정 시간에 작업이 수행되게 예약할 수 있다.

  • l : 예약된 작업 확인
  • d : 예약된 작업 삭제

at으로 예약할 작업들을 다 설정했으면 ctrl + d로 예약 작업을 종료한다.

반복성 예약

crontab [-u 사용자][옵션][파일명]로 특정 시간마다 파일이 실행되게 할 수 있다.

  • e : 사용자의 crontab 파일 편집
  • l : 파일 목록 출력
  • r : 파일 삭제

crontab 폴더에는 다음과 같은 규격을 통해 작업을 예약할 수 있다.

분(0~59) 시(0~23) 일(1~31) 월(1~12) 요일(0~6) 작업내용

// 매 54분마다 echo hello를 실행한다
54       *        *       *        *        echo hello

6. 사용자 계정

사용자 계정의 중요 파일

사용자 계정 정보

etc/passwd : 사용자 계정 정보 확인 가능

  • hoya : 로그인 id(사용자 계정)
  • x : 초창기 유닉스에서는 암호 표시, 보안 때문에 /etc/shadow로 암호 이동
  • 1000 : UID(사용자 id), 0~999는 시스템 예약, 사용자 계정은 1000부터 시작
  • 1000 : GID(그룹 id), 지정하지 않으면 로그인 ID, /etc/group 파일 정보
  • , : 유저에 대한 설명, 코멘트 등
  • /home/hoya : 홈 디렉토리(로그인 시 홈 디렉토리 시작)
  • /bin/bash : 로그인 셸(로그인 시 기본적으로 사용하는 셸)

사용자 비밀번호 정보

etc/shaodw : 사용자 비밀번호 정보 확인 가능
다만 root계정으로만 확인 가능

앞에서부터 다음과 같은 정보를 지니고 있음

  • 로그인ID
  • 비밀번호 해쉬값
  • 암호 최종일 변경
  • 암호 변경 후 사용해야 하는 최소 기간
  • 암호 사용 최대 기간
  • 암호 만료 전 경고를 시작하는 날
  • 암호가 만료된 후에도 로그인이 가능할 일수
  • 사용자 계정이 만료되는 날
  • 추후 확장 플래그

사용자 계정 기본 설정

etc/login.defs : 파일에 사용자가 만들어질 때의 기본 환경감 확인 가능

그룹 정보

etc/group : 그룹 정보 확인 가능

  • hoya : 그룹 이름
  • x : 암호 (etc/gshadow로 이전됨)
  • 2000 : GID 그룹 식별 번호
  • 그룹 멤버 : 그룹에 속한 멤버목록

etc/gshadow : 그룹 비밀번호 확인 가능

  • hoya : 그룹 이름
  • ! : 그룹의 비밀번호
  • ? : 그룹의 관리자
  • ? : 그룹에 속한 멤버

사용자 계정 관리

사용자 추가

useradd [옵션] [로그인ID] : 유저 추가

  • u : uid
  • o : uid 중복 허용(거의 사용하지 않음)
  • g : gid 기본 그룹
  • s : 기본 쉘
  • c : tjfaud
  • e : 유효기간
  • D : 기본값 설정 확인

사용자 비밀번호 설정

passwd [사용자id] : 해당 사용자의 비밀번호 설정

사용자 계정정보 수정

usermod [옵션] [로그인ID] : 유저정보 수정

  • 옵션은 사용자 추가와 거의 유사
  • l [새id] [기존id] : 계정 이름 바꾸기

사용자 계정 삭제

userdel [옵션] [로그인id] : 사용자 계정 삭제

  • r : 홈 디렉토리도 삭제
  • f : 사용자가 로그인 중이어도 강제 삭제

그룹 관리

그룹 추가

groupadd [옵션] [그룹명]

  • g : gid 설정
  • o : 그룹명 중복 허용

그룹 설정 변경

groupmod [옵션] [그룹명]

  • g : gid 설정
  • o : 그룹명 중복 허용
  • n [이름] : name 그룹명을 다른 이름으로 교체

그룹 삭제

groupdel [그룹명]

그룹 설정

gpasswd [옵션] [그룹명]

  • a [사용자] : 사용자 계정을 그룹에 추가
  • d [사용자] : 사용자 계정을 그룹에서 제거
  • r : 그룹 암호 제거

소속 그룹 확인 및 변경

  • id : 소속 그룹 확인
  • newgrp : 소속 그룹 변경

사용자 정보 관리

who : 시스템에 로그인한 사용자 목록

  • q : 사용자 이름만 출력
  • H : 헤더도 출력
  • r : 현재 실행 레벨 출력

w [사용자명] : 사용자가 현재 무엇을 하고있는지 확인 가능

last : pc 접속 히스토리를 확인

root 권한 빌려오기

sudo를 이용해 루트 권한을 빌려올 수 있다.
이 때 루트 권한을 사용하기 위해서 루트 계정이 허락을 해야 한다.

  • /etc/sudoers 파일에 다음과 같이 허락을 한다.
// user2가 localhost로 접속했을 때 useradd를 사용할 수 있게 허가
user2 localhost=sbin/useradd

파일 및 디렉터리 소유자/그룹 변경

  • chown [옵션] [사용자] [대상 파일] : 소유자 변경
  • chgrp : 변경된 소유자가 속한 그룹으로 변경

6. 패키지

패키지의 종류

RPM

rpm (Redhat Package Manager)

  • 장점 : 바이너리 형태(컴파일 x), 간편 사용
  • 단점 : 의존성 처리를 직접 해주지 않음, 직접 패키지를 다운로드해 설치해야함

rpm의 버전체크는 --version으로

rpm 명령어로 패키지를 설치

  • -i : 패키지 설치
  • -U : 새로운 패키지는 설치, 기존 패키지는 업그레이드
  • -h : #를 이용해 설치 진척도 표시
  • -v : 자세한 사항 표시

rpm -q로 설치된 패키지 목록 출력

  • a : 전체 패키지 목록 출력
  • f [절대경로] : 파일명을 포함하고 있는 패키지
  • p : 패키지 지정
  • R : 의존성 있는 패키지 목록 추천
  • l : 패키지 내 파일 목록

rpm -e를 이용해 패킺지 삭제

dnf

CentOS에서 사용하는 것으로 yum의 업그레이드 버전
의존성을 자동으로 해결해주고, 설치 가능한 패키지 저장소도 이미 알고 있음

dnf [옵션] [명령] [패키지명]

  • install [패키지명]
  • upgrade [패키지명] : 명칭 없을시 전채 패키지 업데이트
  • check-update
  • search
  • remove
  • list
  • info

파일 압축

`tar [옵션][아카이브 파일] [파일명]

  • c : 새로운 tar 파일 만들기
  • t : tar 파일 보기
  • x : 압축 풀기
  • v : 상세 정보
  • f : 결과 파일의 이름 지정
  • z : .gz로 압축
  • j : .bz2으로 압축
profile
학습한 내용을 빠르게 다시 찾기 위한 저장소

0개의 댓글