리눅스 cheatsheet

1. 시스템 정보 수집

리눅스 버전, 커널, 기타 관련 정보 수집

1-1 cat /etc/*-release

  1. CentOS Stream 8 버전
  2. 운영체제의 이름 = “CentOS Stream”
  3. CentOS Stream 의 버전 8
  4. 운영 체제의 고유 식별자는 "centos"
  5. 이 운영 체제는 Red Hat Enterprise Linux 및 Fedora 와 유사하다
  6. CentOS Stream 의 버전 ID 는 8
  7. 플랫폼 ID 는 "platform:el8"
  8. 보기 좋은 이름 "CentOS Stream 8"
  9. ANSI 색상 코드는 "0;31"
  10. Common Platform Enumeration (CPE) 이름은 "cpe:/o:centos:centos:8"
  11. CentOS 의 홈페이지 URL 은 https://centos.org/
  12. 버그 보고 URL 은 https://bugzilla.redhat.com/
  13. Red Hat 지원 제품은 "Red Hat Enterprise Linux 8"
  14. Red Hat 지원 제품의 버전은 "CentOS Stream"

1-2 cat /proc/version

리눅스 시스템에서 현재 커널의 버전 및 빌드 정보를 출력하는 명령어

Linux version 4.18.0-305.3.1.el8_4.x86_64 : 현재 사용중인 리눅스 커널의 버전

(mockbuild@mockbuild@x86-05.stream.rdu2.radhat.com) : 커널이 빌드된 호스트의 정보.

(gcc version 8.5.0 20210514 (Red Hat 8.5.0-21) (GCC)) : 사용된 GCC (GNU Compiler Collection) 버전 및 빌드
정보.

#1 SMP 날짜정보: 커널이 빌드된 시간 및 날짜

1-3 uname -a

Linux : 현재 운영 체제
localhost.localdomain: 호스트 이름.
4.18.0-529.el8.x86_64: 현재 사용 중인 Linux 커널의 버전
#1 SMP Wed Dec 6 01:03:46 UTC 2023: 커널이 빌드된 SMP (Symmetric Multiprocessing) 커널이며, 빌드된
시간 및 날짜
x86_64 x86_64 x86_64: 시스템 아키텍처. x86_64 아키텍처를 사용
GNU/Linux: 시스템의 운영 체제 유형. GNU/Linux 사용

1-4 dmidecode -t bios (관리자 권한 실행)

시스템 BIOS 에서 하드웨어 정보를 가져옴
Handle 0x0000, DMI type 0, 24 bytes: 일반적인 BIOS 정보를 제공.
BIOS 정보
Vender : 제조사
Version : BIOS 버전
Release Date : BIOS 버전 릴리즈된 날짜
Address : BIOS 메모리 주소
Runtime Size : 메모리 실행 중인 영역 크기
Rom size : BIOS 사용되는 read only memory 크기
특성(Characteristics)
BIOS 의 다양한 특성에 대한 정보로 ISA, PCI, PC Card (PCMCIA), PNP (Plug and Play), APM
(Advanced Power Management), 업그레이드 가능 여부, BIOS 셰도잉, ESCD 지원, 부팅 옵션 정보
BIOS Revision 번호, Firmware Revision 번호 포함

1-5 Free -ht

전체 주 메모리와 Swap 사용량 확인
-h 옵션으로 읽기 쉬운 숫자 표현(Gi. Mi 등), -t 옵션으로 총 합계(Total) 표시
Total : 시스템에 설치된 총 메모리 양
total: 시스템에 설치된 총 메모리 양
used: 현재 사용 중인 메모리 양
free: 사용 가능한 메모리 양
shared: 공유 메모리의 양
buff/cache: 버퍼 및 캐시로 사용 중인 메모리 양
available: 프로그램이 추가 메모리를 사용하기 위해 사용할 수 있는 메모리 양
Swap: 스왑 영역에 대한 정보로, 스왑은 메모리 부족 시 사용되는 가상 메모리 공간
Total: 총 메모리 및 스왑의 합계

1-6 ulimit -n

프로세서가 가질 수 있는 파일 디스크립터(시스템이 열 수 있는 파일이나 소켓과 같은 I/O 리소스) 수가
1024 개인 상태
ulimit -n 명령어가 아무런 결과를 보여주지 않거나 0 이라면, 제한이 설정되어 있지 않음을 의미

2. 사용자와 프로세스 작업

2-1 Who, w

현재 로그인한 사용자 뿐만 아니라 활동에 대한 정보 나열, w 명령으로 더 자세한 정보까지 출력
Who : 사용자의 로그인명, 터미널, 로그인 시간, 원격호스트 출력 /var/run/utmp 파일에서 가져온 정보
W : 사용자 로그인 정보와 현재 작업 내용을 출력, 현재 접속된 사용자와 그 프로세스에 대한 정보를 표시
헤더에는 현재 시간, 시스템 실행 시간, 현재 로그인한 사용자 수 및 지난 1, 5, 15분 동안의 시스템 로드 평균을
순서에 따라 표시.
각 사용자들에 대해 로그인 이름, tty 이름, 원격 호스트, 로그인 시간, 유휴 시간, JCPU, PCPU 및 현재 프로세스의
명령줄과 같은 항목들이 표시된다.

W 옵션

옵션설명

-h 헤더를 출력하지 않음 (--no-header)
-u 현재 프로세스와 CPU 시간 파악 시 사용자 이름 무시
-s 로그인 시간, JCPU, PCPU 시간을 제외한 짧은 형식으로 출력
-f FROM 필드의 값 (접속 IP주소 정보) 생략하여 출력 (--from)
-i FROM 필드에 호스트 이름 대신 IP 주소 표시
-v 버전 정보를 출력
-o 1분 미만의 유휴 시간 동안 빈 공간을 출력
user 구체적인 사용자의 정보만 출력

2-2 top -U SOMEUSER

특정 사용자(여기선 student)에 대해 프로세스별로 시스템 메트릭(cpu, 메모리 등)을 표시
표시 내용
시스템 정보 : 현재시간, 동작시간 로그인 사용자 수, 1, 5, 15 분 평균부하
작업정보 : 시스템 전체 작업(프로세스) 수, 현재 실행 중인 작업 수, 현재 대기 중인 작업 수, 정지된
작업 수, 좀비 상태인 작업 수
CPU 사용량

프로세스 목록

항목설명

PID 프로세스 ID
USER 사용자 이름
PR 프로세스의 우선순위
NI nice 값 (우선순위 수정 값)
VIRT 가상 메모리 크기
RES 실제 사용 중인 메모리 크기
SHR 공유 메모리 크기
S 프로세스 상태 (S는 실행 중인 것을 나타냄)
%CPU CPU 사용량 비율
%MEM 메모리 사용량 비율
TIME+ 프로세스가 실행된 총 시간
COMMAND 실행 중인 명령어 또는 프로그램

2-3 ps faux

세부 정보와 함께 모든 프로세스(모든 사용자)를 트리 형식으로 나열

항목설명

USER 프로세스를 실행한 사용자의 이름
PID 프로세스 ID
%CPU CPU 사용량의 백분율
%MEM 메모리 사용량의 백분율
VSZ 가상 메모리 크기 (킬로바이트)
RSS 실제 사용 중인 메모리 크기 (킬로바이트)
TTY 터미널 연결 또는 "?"로 나타남
STAT 프로세스 상태 (S: Sleeping, R: Running, Z: Zombie 등)
START 프로세스가 시작된 시간
TIME CPU를 사용한 총 시간
COMMAND 실행된 명령어 또는 프로그램

2-4 ps -e | grep python

특정 프로세스를 찾음 여기서는 shell

shell이라는 문자열을 포함하는 프로세스를 찾아내 출력
(shell 이라는 문자열이 포함된 모든 프로세스가 나열)

PID (프로세스 ID), TTY (터미널 연결), TIME (프로세스가 실행된 시간) 등이 표시

2-5 kill PID

PID 를 알고있을 때 프로세스 종료
Yes 명령을 실행하고 PID 14473 을 kill 해 Terminated

3. 파일 정보 수집

3-1 stat somefile

파일이나 디렉토리의 상세한 정보를 보여주는 명령

항목설명

File 파일의 이름 ("sample")
Size 파일 크기 (바이트)
Blocks 파일이 차지하는 블록 수
IO Block 파일 시스템의 I/O 블록 크기
Device 파일이 위치한 디바이스
Inode 파일의 Inode 번호
Links 파일을 가리키는 하드 링크의 수
Access 파일의 권한 정보 (0664/-rw-rw-r--)
Uid 파일 소유자의 사용자 ID (UID)
Gid 파일의 그룹 소유자의 그룹 ID (GID)
Context SELinux의 보안 컨텍스트 정보
Access 파일에 마지막으로 접근한 시간
Modify 파일을 마지막으로 수정한 시간
Change 파일 속성을 마지막으로 변경한 시간
Birth 파일이 생성된 시간 (생성 시간이 기록되지 않은 경우 "-"로 표시됨)

3-2 type somecommand

명령어의 형태 확인

Ls 명령어는 색상을 사용하여 디렉토리, 파일 등을 구분하도록 하는 옵션 적용된 상태

3-3 which somebinary

명령어의 위치를 찾아내 Alias, 현재 위치 출력

4. 파일과 디렉토리 작업

4-1 cat afile

파일의 내용을 표시하는 명령
123 이 입력된 cattest 파일을 생성하고 cat 명령으로 내용확인

4-2 ls -l /etc | wc -l

ls 명령으로 디렉토리의 내용 나열 후, 디렉토리의 파일 수 계산

4-3 find /etc -name “*.conf”

/etc 디렉토리에서 .conf 로 끝나는 파일 탐색

4-4 find . -type f -exec grep -H FINDME {} \;

Grep 명령어로 현재 및 하위 디렉토리에서 sample 문자열이 포함된 라인 탐색

4-5 diff -u somefile anotherfile

파일간의 차이점 보여주는 명령

3 줄의 문자열이 담긴 Sample 과 1234 가 담긴 sample2 비교

4-6 echo ‘Com_Acme_library’ | tr ‘_A-Z’ ‘.a-z’

글자를 바꾸는 명령
tr 명령으로 ComAcme_library 문자열의 대문자를 모두 .소문자로 바꿈

4-7 sed 명령

파일의 문자열 일부를 교체
Sample 파일에 저장된 문자열 중 welcome 을 to 로 변환

4-8 dd if=/dev/zero of=output.dat bs=1024 count=1000

0 으로채워진 output.dat 이름을 가진 1MB 크기 파일 생성

5. 재지정과 파이프 작업

5-1 command 1> file

Ls -l 의 표준 출력을 파일로 재지정

5-2 command 2> file

Ls -l 의 표준에러를 파일로 재지정
3 이라는 명령은 없기 때문에 에러발생

5-3 command &> file

존재하지 않는 디렉토리를 조회해 발생한 오류를 output.txt 에 저장

5-4 command >file 2>&1

위 명령들을 조합해 표준 출력과 에러를 동시에 저장

5-5 command > /dev/null

5-6 command < file

파일을 명령에 입력
Shell 문자열이 입력된 input.txt 파일을 grep 의 표준입력으로 재지정하여 실행

출력을 /dev/null 로 재지정하여 폐기

5-7 cmd1 | cmd2 | cmd3

|파이프를 명령어 사이에 두어 한 프로세스의 표준 출력을 다른 프로세스의 표준입력에 연결

여기서는 디렉토리 내 파일의 크기를 확인하고, 크기를 기준으로 내림차순으로 정렬한 후 상위 5 개 파일을 출력

5-8 echo ${PIPESTATUS[@]}

파이프 각 명령의 종료 코드 0 은 정상종료, 141 은 시그널 오류

6. 시간과 날짜 작업

6-1 timedatectl status

로컬시간, utc 시간, 동기화 상태와 같은 시간 관련 정보 출력

6-2 date +”%Y-%m-%d”

날짜를 출력하는 date 명령에 포맷을 YYYY-MM-DD 형식 지정하여 출력

6-3 date +%s

Date 명령에 유닉스 에포크 타임스탬프 생성

6-4 date -u +”%Y-%m-%dT%H:%M:%SZ”

ISO 8601 형식 UTC 타임스탬프를 생성

6-5 date +%FT%TZ

date -u +”%Y-%m-%dT%H:%M:%SZ” 타임스탬프 형식의 로컬시간

7. 깃 작업

7-1 git clone

깃허브에 생성되어있는 깃 저장소를 복제

7-2 git status

로컬에서 변경된 사항 확인

7-3 git add --all && git commit -m "adds a super cool feature"

모든 로컬 변경사항 추가 및 커밋

7-4 git rev-parse HEAD

현재 커밋의 커밋 ID

7-5 git tag ATAG HASH

ID HASH 커밋에 ATAG 태그 지정

7-6 git log

커밋 기록 확인

8. 시스템 성능

8-1 yes | tr \n x | head -c 450m | grep z

Y 를 끊임없이 출력하는 yes 명령을 tr 명령으로 yx 연속 스트림으로 변환했으며 head 명령은 약 450MB 에
잘라낸다.

Grep 은 존재하지 않는 z 에 대해 결과인 yx 블록을 사용해 터미널에 출력은 없지만 여전히 부하를 생성하며 다른
터미널에서 htop 명령에서 시스템 성능을 체크해 부하를 감지했다.

8-2 du -h /home

Home 디렉토리 기준으로 디렉토리의 자세한 디스크 사용량을 확인

8-3 df -h

사용 가능한 디스크 공간(전역 공간 기준) 나열

8-4 dd if=/dev/zero of=/home/some/file bs=1G count=1 oflag=direct

디스크의 로드를 테스트하고 I/O 처리량 측정

/dev/zero 에서 1GB 의 데이터를 읽어와 /home/student/input.txt 에 씀
특정 디스크의 쓰기 성능 테스트나 큰 파일을 빠르게 만들기 용이

참고도서

모던 리눅스 교과서, Michael Hausenblas 저

'Linux' 카테고리의 다른 글

permission  (1) 2024.10.01
Vi 편집기  (0) 2024.10.01