Frequently command & directroy by use to linux engineer

명상록·2023년 3월 29일
0

<목차>

1. 주요 설정 파일/디렉터리 경로

2. 리소스, 프로세스 확인 명령어

3. 하드웨어 작업, 상태 명령어

4. 네트워크 설정, 사용량 명령어

5. 네트워크 연결, 원격 명령어

6. 서비스 관련 명령어

7. 부팅 관련 명령어

8. 권한, 소유권, 계정관련 명령어

9. 압축 관련 명령어

10. Binary File Library 적용 유무 확인

11. 파일, 폴더, 검색 관련 명령어

12. 패키지 관리/설치, 다운로드 및 접근

13. 출력, 편집, 필터 명령어

14. 편집기 내 명령어

15. 시간 관련 명령어

16. Linux 환경설정 관련 명령어

17. 스케줄 관련 명령어

18. 계정, 로그인, 로그 확인 명령어

19. SWAP 파일 생성 및 적용 명령어

20. 보안 정책, 방화벽

21. 원격지에 파일 전송 및 복사

22. LVM

23. FTP


주요 설정 파일/디렉터리 경로

{유저 정보 및 시스템}

  • /etc/passwd : Linux 계정 정보가 저장된 파일 (Shell 항목)

  • /bin/bash : bash Shell을 사용하며 보통의 활성화된 계정에서 사용하는 Shell을 의미. 통상 정상적 사용

  • /sbin/nologin : 로그인 불가능하고 메세지들만 반환. SSH는 사용 불가능하며 FTP의 경우는 사용 가능함.

  • /bin/false : 시스템의 로그인 불가능. FTP 서버같은 프로그램도 사용 불가능. SSH과 Telnet 등의 원격 연결과 홈 디렉토리 사용 불가

  • /etc/shadow : passwd에 저장된 계정의 패스워드가 암호화될 경우 암호화 방식, 암호화된 패스워드 등이 저장된 파일

  • /etc/sbin : 네트워크 인터페이스 설정 명령, 커널 모듈 관리 등 시스템 전반적인 관리 명령어들이 바이너리 형태로 저장된 폴더 (CentOS 이전에는 /sbin)

  • /etc/bin : 외부 명령어의 위치. 파일 처리, 네트워크 처리 등 여러 시스템 명령어들이 실행파일 형태로 저장 (CentOS 7 이전에는 /bin)

  • /etc/profile : OS 자체 환경 설정, 환경 변수 등을 설정하는 공통 설정 파일 (모든 계정)

  • /etc/group : 존재하는 Group의 목록, 상태 정보, 연결된 유저명

{PAM}

  • /etc/pam.d/ : PAM 설정 파일이 있는 폴더

  • /etc/pam.d/system-auth : 인증 설정

  • /etc/pam.d/su : su 명령어 관련 인증 설정

  • /usr/lib64/security 또는 /usr/lib/security 또는 /lib/security : 인증 모듈

  • /etc/security : 추가 설정

  • /etc/securetty : Telnet root 접근 제한 용도


{SSH}

  • /etc/ssh/sshd_config : SSH 원격 접속 제한 용도 및 SSH와 관련된 설정들이 저장된 설정 파일

{SYSLOG}

  • /etc/syslog.conf 또는 /etc/rsyslog.conf : 리눅스 시스템 로그는 이 설정 파일을 통해 지정한 로그를 기록(경로,수준 등 지정가능)

{LOGROTATE}

  • /etc/logrotate.conf : 로그 파일 순환 기능 설정 파일

  • /etc/logroate.d/ : 개별 설정 파일 디렉터리

{Security Policy}

  • /etc/login.defs : 패스워드 보안 정책 설정 파일(패스워드 만료, 패스워드 최대 사용시간, 패스워드 최소 변경 기간 등)

  • /etc/selinux/config : Linux 시스템용 보안 아키텍처(모듈,커널). 시스템의 애플리케이션, 프로세스, 파일에 대한 엑세스 제어를 정의

SELINUX = [enforcing, permissive, disabled]

enforcing : SELINUX 보안정책이 수행됩니다.
permissive : enforcing과는 다르게 경고메시지만 프린팅 됩니다.
disabled : 보안정책이 수행되지 않습니다.(비활성화)

{DNS}

  • /etc/resolv.conf : 시스템 기본 네임서버 설정 정보 보관 및 DNS 서버 등록

  • /etc/named.conf : 네임서버 관리

  • /etc/hosts : 도메인/호스트명과 IP 주소의 매핑 정보를 담고 있는 파일

{NETWORK}

  • /etc/defaultrouter : Default route 경로를 설정하는 파일

  • /etc/sysconfig/network-scripts/ : 해당 운영체제에서 소유하고 있는 네트워크 인터페이스들의 설정들이 저장된 공간

  • /etc/network/ : network-scripts 와 동일(Ubuntu 전용)

{FTP}

  • /etc/ftpusers : 유저에 대한 FTP 직접 접근 제어 설정 목록이 담긴 파일

  • /etc/vsftpd/vsftpd.conf : tcp_wrapper에서 tcp_wrappers=yes 로 설정되었을 때 관련 제어 옵션을 담은 설정 파일

{DHCP}

  • /etc/dhcp/dhcpd.conf : DHCP 역할을 수행할 때 사용되는 설정 파일

{Sendmail}

  • /etc/mail/access : 메일 서비스 기능 이용 시 접근 및 송수신에 대한 접근 권한 등을 부여하는 설정 파일

{Web}

  • /etc/php.ini : Apache 혹은 php 언어기반 Web Server에서 php 언어에 영향이 주는 설정파일 설정

  • /etc/httpd/conf/httpd.conf 또는 /usr/local/apache/conf/httpd.conf : 설치된 웹 서버 ex. apache) 설정파일

{DB}

  • /etc/my.cnf : 설치된 Mysql 설정파일

{NTP}

  • /etc/ntp.conf : NTP 데몬 설정파일
  • /etc/chrony.conf : chrony 데몬 설정 파일

{Super}

  • /etc/xinetd.conf : standalone으로 수행되는 서비스가 아닌 inetd 데몬에 의해 서비스들에 대해 적용하기 위한 설정 파일

{Service, Protocols}

  • /etc/protocols : 프로토콜 및 프로토콜 식별 정보 정의

  • /etc/services : 다양한 서비스에 대한 포트/프로토콜 정보 정의

{mount}

  • /etc/fstab : mount/umount는 재부팅 시 값이 초기화되므로 영구적으로 mount 하기 위해 사용되는 설정 파일

{proc}

  • /proc : 메모리 영역에 존재하는 파일 시스템, 현재 실행 중인 개별 프로세스의 PID를 의미하는 파일을 숫자 형식으로 생성 (매 부팅마다 새로운 번호로 생성됨)

  • /proc/pid/exe : 프로세스의 실행 파일명 및 경로 확인이 가능한 심볼릭 링크 파일

  • /proc/pid/cmdline : 프로세스를 실행한 명령어 및 전달인자 정보를 담고 있는 파일

{CPU}

/proc/cpuinfo : CPU 관련 정보 확인 명령어

$grep ^processor /proc/cpuinfo |wc -l : 물리 CPU 수 확인 명령어
$grep 'cpu cores' /proc/cpuinfo |tail -1 : CPU당 물리 코어 수 확인 명령어
$grep -c processor /proc/cpuinfo 또는 $ll -d /sys/devices/system/cpu/cpu? |wc -l : CPU 코어 전체 수 확인 명령어


리소스, 프로세스 확인 명령어


  • $top

    전체 리소스 모니터링 및 사용 프로세스 점유율 확인

[option]
top 화면 접속 후 'Shift + m' 을 입력하면, 메모리 사용량 기준 순서로 출력됨.
$top -d 1 | egrep "프로세스명" : 특정 프로세스의 메모리 사용량을 1초마다 확인할 수 있다.

[ex]
$top -H -p $(pgrep [process-name] |head -[출력 line 수] | tr "\n" "," | sed 's/,$//')
해당 프로세스명을 포함하는 리소스 상황 출력
( $(...) 은 해당 명령어에서 출력되는 값을 return하여 가져옴.)

$top -H -p $(pgrep a |head -20 | tr "\n" "," | sed 's/,$//')
프로세스명에서 문자 a를 포함한 프로세스의 PID를 바탕으로 20줄 출력

  • $free

    메모리 사용률 확인

[ex]
$free -m : 메모리를 MB단위 기준으로 표기

  • $vmstat

    프로세스 정보, 메모리 사용량, 입출력 상태, CPU 사용률 등 정보 출력

  • $df

    현재 '마운트'된 디스크의 크기, 사용량, 남아있는 용량에 대해 출력

[ex]

$df -Th : 각 파티션에 대한 파일 시스템 유형 및 용량 단위까지해서 df 명령에 대한 출력을 해줌.

  • $du

    파일이나 디렉터리들이 차지하고 있는 크기를 출력

[options]

-a : 모든 파일의 정보를 출력

-c : 모든 파일의 디스크 사용 정보 및 합계출력 (검색 로직이 -a에 비해 빠름)

(-a와 -c를 쓰지않는다면 폴더는 폴더 자체의 용량 4.0K 로만 표기됩니다.)

-s : 지정된 디렉토리 내 존재하는 모든 파일 및 하위 디렉토리의 용량을 합친 용량 출력

-h : Byte 단위로 출력 (Byte, Kbyte, Mbyte, Gbyte)

[부가 조건 : 텍스트 필터 명령어]

|tail -10 : 출력 값 중 마지막 출력값 10줄만 표기

|sort -h : 글자별 분류가 아닌 용량별 분류

--max-depth=2 : 폴더 및 파일을 필터 시에 최대 2개의 기준까지 표현

-mindepth 4 : 폴더 및 파일을 필터 시에 최소 2개부터 된 값들만 표현

[ex]

$du -ch [경로] |sort -n : 해당 [경로] 혹은 폴더 하위항목까지, 파일과 폴더 중 가장 용량이 큰 순으로 표현

$du -ch [경로] | sort -n |tail -15 : 위 결과에서 출력값 최대 15줄만 표기

$du -ch [경로] --max-depth=2 | sort -n : 해당 경로 내 폴더를 총 용량을 기준으로 분류하여 표현 (디렉토리 최대 2개범위 내)

#du -ch [경로1][경로2] |awk -F ' ' '{print $2,$1}' |sort -h : 해당 경로1, 2에 있는 폴더를 이름 기준으로 나열하고, 2번째 열에 용량 표시

  • $ps

    현재 사용 중인 프로세스 확인

[column]

user : 프로세스 실행한 유저명

pid : 현재 프로세스

ppid : 부모 프로세스

rss : 프로세스의 실제 메모리(내재 세트) 크기(KB)

size : 페이징 공간에서 프로세스 데이터 섹션의 가상 크기(KB, 다른 플래그에서는 SZ로 표시됨)

vsize : 가상 메모리 크기

%mem : 마지막 1분동안 사용한 메모리 사용량 (전체비율 % 단위)

%cpu : 마지막 1분동안 사용한 CPU 사용량 (전체비율 % 단위)

time : 프로세스가 실행된 시간

cmd : 프로세스의 실행 명령행

[options]

-eo [컬럼명] : 원하는 컬럼 값만 선택하여 표시.
-ef [컬럼명] : 모든 프로세스를 풀 포맷으로 출력.
--sort [(-)컬럼명] : 위 컬럼값을 오름차순으로 나열 (-를 붙이면 내림차순)

[ex]

$ps -ef |grep awk '{print $(N)}' : 프로세스 정보 확인 중 N번째 속성에 대한 값만 출력

$ps -ef --sort -rss : 현재 실행중인 모든 프로세스의 메모리 사용량 기준 정렬 출력

$ps -ef |grep '필터값' |grep -v grep : 해당 스크립트를 실행시키는 프로세스는 감지되지않는다.

$ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 5 : 현재 실행중인 모든 프로세스의 메모리 사용량 기준 정렬하여 출력(head 뒤 값에 따라 갯수제한 출력). PID 및 메모리 사용률, 프로세스를 상세 표기

  • $pstree

    시스템의 모든 프로세스들을 트리 구조로 확인할 수 있음.

  • $jobs

    백그라운드에서 실행되고 있는 모든 프로세스를 확인, 프로세스 앞에 순서를 함께 출력
    ( + : 최근 추가된 프로세스, - : 기존에 있던 프로세스)
    (stopped : 중지된 것이 아닌 백그라운드에서 대기 중 || running : 백그라운드에서 계속 실행 중)

    format

    $jobs [option]

[options]

-l : 해당 작업의 pid 확인

-p : PID만 출력

[ex]

$[Command] & : 해당 작업을 백그라운드로 실행

Ctrl + Z : 현재 포어그라운드에서 작동 중인 작업을 백그라운드로 보내며 Stopped 상태로 만듦.

$fg %[value] : 백그라운드에서 작업 중인 value 값의 작업을 포어그라운드로 가져와서 실행

$bg %[value] :

+value 표시가 된 작업이라면 해당 작업을 포어그라운드에서 실행.
-value 표시가 된 작업은 백그라운드에서 running 상태로 변경하고 백그라운드에서 실행

$kill %[value] : jobs 명령어 사용 시, value 값에 해당하는 작업을 종료 (목록에서 제거)

  • &nohup [Command or Script] &

    터미널이 끊기는 경우에도 (종료 포함) 실행 중인 프로세스를 중단하지 않고 백그라운드로 동작하도록 명령 내림 (종료하려면 $kill -9 [PID] 를 통해 강제 종료)
    실행 후 출력화면에서 탈출이 불가한 일회성 실행 프로세스(서비스)의 경우 &을 입력하여 증상을 예방할 수 있음.

  • $kill

    특정 프로세스를 종료. 프로세스 PID를 기준으로 종료 진행 (옵션이 별도로 없으면 -15 옵션으로 정상 종료)

    format

    $kill [option][PID]

[options]

-l : 시그널로 사용가능한 리스트 출력

-9 : 해당 PID의 프로세스 강제종료

-15 : 프로세스와 관련된 파일 정리 후 종료절차 진행 (-9는 강제종료, -15는 정상종료)

  • $killall

    같은 데몬의 프로세스를 한 번에 종료. 프로세스 이름을 기준으로 종료 진행 (옵션이 별도로 없으면 -15 옵션으로 정상 종료)

    format

    $killall [option][프로세스 이름]

[options]

-v : 상세한 버전 정보 출력

-w : 모든 프로세스들이 종료될때까지 대기

-l : 시그널 전체 목록 확인

-g : 프로세스가 속한 그룹을 지정하여 프로세스를 종료

-I : 시그널로 사용가능한 리스트 출력

  • $nice

    프로세스의 우선 순위를 설정하여 실행. -20이 우선 순위가 가장 높고 19가 가장 낮다.
    (nice 값은 보통 0으로 시작하며 -20~-19까지 우선 순위 조정가능하다.)

    format

    $nice -n [조정 수치 값][프로세스]

  • $renice

    실행 중인 프로세스의 우선 순위를 변경함.
    (root만 우선 순위를 renice를 통해 바로 감소시킬 수 있다.)

    format

    $renice [option][변경할 NI값] [PID]

  • $fuser

    파일이나 파일 구조를 이용한 프로세스 식별 및 통제

    format

    $fuser [option][filename]

[options]

-m : 파일 시스템이나 블록 디바이스를 사용하고 있는 모든 프로세스 출력 (-c : POSIX 호환용으로 사용)

-u : 유저 ID 출력

-a : 명령행에서 사용하지 않은 파일도 출력

-v : 상세정보 출력

-s : 간략정보 출력

-V : 버전 출력

-4 : IPv4 소켓만 찾음



하드웨어 작업, 상태 명령어


$cat /etc/redhat-release : 운영체제 버전 확인

$uname -a : 현재 운영체제와 관련된 정보 전부 표기

$uname -s -r : 현재 운영체제 간략히 설명

  • $fdisk

    현재 연결된 모든 파티션 표현

[options]

$fdisk -l : 현재 연결된(설치된) 모든 파티션 정보를 리스트화하여 보여줌.

$fdisk -s [partition value] : 해당 파티션 크기 확인

  • $mkfs

파일 시스템 생성 관련 명령어. 생성된 파티션을 포맷하여 파일 시스템 생성. mkfs로 파일 시스템 생성을 위해서는 fdisk를 통한 사전 파티션 생성이 필요하다.

format

$ mkfs [option][파티션명 또는 Device 명]
$ mkfs.[파일 시스템][파티션명 또는 Device 명]

[options]

-t [파일 시스템] : 파일 시스템 종류 (ext4, ext3, xfs 등)

-v : 파일 시스템 생성과정 상세보기

-c : 파일 시스템 생성할 때 배드블록 파악

-b [bytes] : 블럭크기

-T : usagetype으로 사용량 단위 지정가능

-i [bytes] : 노드당 바이트 값

  • $mke2fs

    파일 시스템 생성 관련 명령어. mkfs 생성 방식의 확장 개념. 생성된 파티션을 포맷하여 파일 시스템 생성. 리눅스에서 주로 사용되는 ext3, ext4 지원

    format

    $ mke2fs [option][파티션명 또는 Device 명]
    $ mke2fs.[파일 시스템][파티션명 또는 Device 명]

! 두 방식의 큰 차이점은 없고 파일 시스템 생성을 위해 2가지 방식이 있다고 이해하면 될 것으로 보인다.

[options]

-t [파일 시스템] : 파일 시스템 종류. ext3을 제외한 나머지 ext 포맷 가능(ex. mke2fs -t ext4 /dev/sda3)

-v : 파일 시스템 생성 과정 상세 보기

-c : 파일 시스템 생성할 때 배드 블록 파악

-b [bytes] : 블럭크기

-T : usagetype으로 사용량 단위 지정 가능

-j : ext3 형식으로 포맷 (ex. $mke2fs -j /dev/sda4)

-i [bytes] : 노드당 바이트 값

-F : 강제 mke2fs 실행

  • $fsck

    파일 시스템을 점검 및 복구하는 명령어

    format

    $fsck [option] [파일 시스템]

[options]

-A : /etc/fstab에 등록된 내용 참고해서 모든 파일 시스템을 다 검사

-V : 자세한 정보 출력

-f : 강제적으로 검사 진행

-y : 파일 문제 있을 때 자동 수정

-n : 파일 시스템에 문제가 발생하면 수정 없이 내용 출력

-t [파일 시스템] : 점검할 파일 시스템 지정

  • $e2fsck

    리눅스에서 사용하는 모든 파일 시스템을 점검 및 복구하며 fsck에서 파생

    format

    $e2fsck [option] [파일 시스템]

[options]

-p : 파일 시스템 검사 후 자동 복구

-n : 질문에 대한 응답 no로 설정

-y : 질문에 대한 응답 yes로 설정

-f : 정상적 파일 시스템도 포함하여 체크

[result]

0 : 에러 없음

1 : 파일 시스템 복구

2 : 파일 시스템 복구 후 재부팅

4 : 문제 발견했으나 복구하지 않음

8 : 실행 에러

! quota용 파일 시스템 적용 후에는 다음 부팅에도 적용될 수 있도록 /etc/fstab에 quota용 파티션(디렉터리)을 설정해 줘야 합니다. (4번째 필드에 usrquota 또는 grpquota 입력 (유저용 혹은 그룹용))

!작업 전 사전에 생성한 quota 전용 파일 시스템 내 폴더에 들어가서 아래 작업을 수행

!설정 순서 

  1. quota 패키지 설치 //유저나 그룹에 사용 가능한 용량을 제한할 수 있는 명령어 집합체

  2. /etc/fstab에 quota용 파티션 등록(+재부팅) 

  3. quota 파티션의 최상위 디렉터리에 쿼터 설정파일 생성 (quota.user 또는 quota.group)

  4. $quotacheck (설정값 반영 전에 quotaoff 명령을 꼭 실행)

  5. $quotaon

  6. $edquota 

  • $quotaoff

    quota를 off한다.

    format

    $quotaoff [option] [디렉터리명]

[options]
-a : 모든 파일 시스템 체크
-u : 유저 쿼터 관련 체크
-g : 그룹 쿼터 관련 체크
-v : 파일 시스템의 상태를 확인

  • $quotaon

    quota를 on한다

    format

    $quotaon [option] [디렉터리명]

[options]

-a : 모든 파일 시스템 체크
-u : 유저 쿼터 관련 체크
-g : 그룹 쿼터 관련 체크
-v : 파일 시스템의 상태를 확인

  • $quotacheck

    실제로 설정할 내용 반영을 위한 사전 체크 작업

    format

    $quotacheck [option] [디렉터리명]

[options]

-a : 모든 유저 및 그룹의 quota 체크 (/etc/fstab의 4번째 필드에 quota로 설정되어 있는지 유무까지 확인)
-c : 디스크 사용량 할당 quota 파일 생성
-u : 유저의 quota 정보 출력
-g : 그룹의 quota 파일 출력
-v : 자세한 내용 출력

  • $edquota

    유저별 디스크 사용 용량 및 inode 수 제한 값에 대한 편집 명령어
    (해당 명령어를 실행하면 편집기처럼 사용 가능하고 값을 편집할 수 있다.)

    format

    $edquota [option] [유저명 or 그룹명]

[options]

-u [유저명] : 해당 유저의 quota가 존재하면 값을 편집

-g [그룹명] : 그룹의 quota가 존재하면 값을 편집

-p [계정1][계정2]... : 다중 인원의 quota가 존재하면 값을 편집

-t : 유예기간 설정

[참조]

Filesystem : 입력한 유저의 quota 할당을 사용하는 파일 시스템을 의미

blocks : 현재 유저가 사용하는 블록의 한도를 의미 (용량)

soft : soft 값부터 블록을 넘으면 경고 (유예기간이 있다면 soft 값을 넘겼을때를 기준으로 하며 유예기간이 지나면 데이터 삭제)

hard : hard 값 기준의 블록을 넘으면 제한 (절대 못넘김)

inodes : 현재 유저가 사용하는 inode의 한도를 의미 (갯수)

soft : soft 값부터 inode을 넘으면 경고 (유예기간이 있다면 soft 값을 넘겼을 때를 기준으로 하며 유예기간이 지나면 데이터 삭제)

hard : hard 값 기준의 inode을 넘으면 제한 (절대 못넘김)

  • $blkid [partition value]

    block partition ID 확인

  • $mount

    타 포스트에 자세히 기술 예정
$mount [partition value] [directory for mount] : 해당 파티션을 현재 실행한 OS에 Link

$umount [partition value] : 해당 파티션을 현재 실행한 OS에 Unlink

$vim /etc/fstab : mount/umount는 재부팅 시 값이 초기화되므로 영구적으로 mount 하기위해 사용되는 설정 파일(수정)

  • $ethtool

    네트워크 인터페이스 상태 확인

    format

    $ethtool [option][인터페이스명]

[options]

-i : 해당 인터페이스 세부정보 확인 (Link detected : yes로 되어있으면 물리적으로 연결되었다는 얘기)

-p : 서버 장비에서 해당 인터페이스 주위의 불빛이 점등이 됨.(물리 인터페이스 위치 파악)



네트워크 설정, 사용량 명령어


  • $route

    라우팅 테이블 확인 //ip route 명령을 통해서도 확인 가능

[ex]

$route add default gw [GW 주소] : 디폴트 게이트웨이 추가

$route del default gw [GW 주소] : 디폴트 게이트웨이 삭제

$route add -net [네트워크 대역] netmask [Subnetmask] gw [GW 주소] : 네트워크 경로 추가

$route del -net [네트워크 대역] netmask [Subnetmask] gw [GW 주소] : 네트워크 경로 삭제

$route add -host [호스트 IP] dev [interface명] : 호스트 경로 추가

$route del -host [호스트 IP] dev [interface명] : 호스트 경로 삭제

  • NetworkManager

$systemctl start/stop NetworkManager : network 데몬 시작/종료 (Redhat 7, CentOS 7 이상)

[참조]
$vim /etc/sysconfig/network-scripts/ifcfg-[interface명] : (Redhat기반 OS) 네트워크 인터페이스 설정값 변경

$vim /etc/network/interfaces : (Debian기반 OS) 네트워크 인터페이스 설정값 변경

$nmtui : ip 셋팅에 대해 network-scripts 내 파일을 수동으로 하는 것을 대체하는 UI 데몬 (CentOS 7버전 이상 지원)

$nmcli : nmtui와 같은 역할을 수행하며 명령어 기반 CUI  Network 설정 프로그램

[options]

c : 등록된 현재 인터페이스의 UUID, TYPE, DEVICE 정보를 확인할 수 있음.

d : 등록된 현재 인터페이스의 TYPE, 연결 상태, 연결 유무를 확인할 수 있음.

$ifup [interface명] : 해당 인터페이스를 활성화

$ifdown [interface명] : 해당 인터페이스를 비활성화



네트워크 연결, 원격 명령어

  • $ifconfig

    네트워크 인터페이스 확인

    format

    $ifconfig -a : 네트워크 인터페이스 전체 확인, -a 대신 [interface명]으로 특정 인터페이스 정보 확인

[options]

promisc : promiscuous(무차별 모드) 모드 설정

-promisc : promiscuous(무차별 모드) 모드 해제

  • 해당 인터페이스 MAC 주소 확인

    format

    $ip link show [interface명] : 해당 인터페이스의 물리 맥 주소 확인

  • $traceroute

    목적지와의 연결을 시도하며 거쳐가는 구간별 통신 상태와 목적지까지 가는 경로를 확인하기 위해 사용

    format

    $traceroute [대상서버 IP]

  • $netstat

    시스템의 네트워크 관련 다양한 상태 정보를 관리 및 확인할 수 있는 명령어

    format

    $netstat [option]

[options]

-a : 모든 소켓정보

-i : 네트워크 인터페이스 정보

-r : 시스템 라우팅 정보

-s : 각 프로토콜 통계 정보

-p : 해당 소켓의 프로세스/pid 출력

-t : 연결 상태 정보 출력

-n : 네트워크 주소를 숫자 형식으로 출력

  • $nc

    리눅스 포트 체크 프로그램 ncat (별도 설치 필요없음)

[ex]

$nc [대상서버 IP][대상 Port] : 해당 서버의 포트가 listen 모드, 접근사용 가능한 상태인지 확인

$nc -v [대상서버 IP][대상 Port] : 해당 서버의 포트가 listen 모드, 접근사용 가능한 상태인지 확인 (위 옵션에 비해 더 상세함)

  • $nmap

    포트 체크 프로그램, 대상 서버 IP에 대한 모든 포트를 확인하여 열린 포트를 확인할 수 있음.
    (별도 설치 요망, yum 등에서 nmap에 대한 패키지 설치)

    [format]

    $nmap [스캔 종류] [대상 서버 IP] [option]

[스캔 종류]

-sT [대상 서버 IP] : TCP Connect(open) Scan (Open 스캔)

-sS [대상 서버 IP] : TCP Syn(half-open) Scan (스탤스 스캔) (연결을 완벽하게 수행하지 않으며 시스템 로그가 남지않음)

-sU [대상 서버 IP] : UDP Scan

-sF [대상 서버 IP] : TCP FIN SCAN (닫혀있어도 응답이 옴. RST+ASK)

-sX [대상 서버 IP] : TCP Xmas Scan : FIN,PSH,URG 플래그 조합 패킷 이용 스캔 (닫혀있어도 응답이 옴 RST+ASK)

-sN [대상 서버 IP] : TCP NULL Scan : NULL 이용한 스캔(플래그가 없음) (닫혀있어도 응답이 옴 RST+ASK)

-sA [대상 서버 IP] : TCP ACK Scan (포트 오픈여부가 아닌 방화벽 룰셋이 정상적으로 동작하는지 테스트하기위해 사용)

-sP [대상 서버 IP] : Ping 스캔

-D [대상 서버 IP] : Decoy 스캔 (스캐너 주소를 식별하기 어렵도록 실제 스캐너 주소 외 위조된 주소로 스캔)

[options]

-p : port number

-v : 상세 내역 출력

-o : 결과물을 파일 형식으로 출력 ( xml = x , file = N 등)

-O : 대상 호스트 운영체제 정보 출력

  • $ssh

    암호화된 통신 방식으로 목적지에 원격 접속하는 프로토콜

    format

    $ssh [대상 서버 IP] : 대상 IP로 ssh 접속 시도

  • $telnet

    네트워크를 이용하여 원격지에 떨어져 있는 서버에 접속하여 자료를 교환할 수 있는 프로토콜. 다만, 보안상의 이유로 ssh를 사용

    format

    $telnet [option] [대상 서버 IP] [대상 Port] : 대상 IP, Port로 텔넷 접속 시도

[options]

-l [user명] : telent 서버에 접속할 유저 ID지정

-a : 현재 유저를 ID로 사용하여 접속

  • $nslookup

    도메인 주소에 대응하는 IP 주소를 획득하기 위해 사용

    format

    $nslookup [도메인] [네임서버 IP]

  • $ss

    netstat 명령보다 속도가 빠른 네트워크 소켓 상태 확인 명령어.
    서버 접속한 클라이언트의 IP 및 포트를 확인 시 사용

[options]

-a : 모든 포트 확인

-n : 호스트, 포트 등 정보 숫자 표기

-p : 프로세스명 표기

-r : 라우팅 테이블 표기

-l : listen 상태 소켓만 표시

-v : 요약 정보



서비스 관련 명령어


  • $service [daemon name][start / stop / restart / reload / status]

    데몬 시작/종료/재시작/갱신/상태확인 (CentOS 7 미만, Ubuntu 15.04 미만)

  • $systemctl [start / stop / restart / reload / status][daemon name]

    데몬 시작/종료/재시작/리로드/상태확인 (CentOS 7 이상, Ubuntu 15.04 이상)

[other options]

enable : 부팅할 때 서비스 자동 시작

disable : 부팅할 때 서비스 자동 시작 해제

list-units : 모든 서비스 목록 보기

mask : 서비스 등록

unmask : 서비스 등록 해제

  • 서비스(데몬) 관리

$systemctl list-units --type service -all : 전체 서비스 목록 확인 (inactive, active)

$systemctl list-units --type service : 활성화된 서비스(데몬) 조회

UNIT - 서비스 유닛의 이름입니다.
LOAD - 장치 파일이 메모리에 로드되었는지 여부에 대한 정보입니다.
ACTIVE - 활성화, 새로고침, 비활성화, 실패, 활성화, 비활성화할 수 있는 높은 수준의 장치 파일 활성화 상태입니다. SUB 열의 일반화입니다.
SUB - 하위 수준 장치 파일 활성화 상태입니다. 이 필드의 값은 장치 유형에 따라 다릅니다. 예를 들어 서비스 유형 단위는 비활성, 종료, 실패, 비활성 또는 실행 상태 중 하나일 수 있습니다.
DISCRIPTION - 장치 파일에 대한 간단한 설명입니다.

$systemctl list-unit-files : 모든 서비스의 자동 시작 활성화 유무 (enable, disable, static)

$systemctl list-dependencies : 전체 서비스 의존성 파악

  • $ntsysv

    서비스를 자동으로 실행하기 위한 목록과 체크 박스가 나타남.

  • $setup

    시스템 서비스 및 인증 설정 수행



부팅 관련 명령어

  • $reboot

    운영체제 재부팅, $shutdown -r, $init 6도 재부팅 가능

  • $halt

    운영체제 종료, $shutdown -h, $init 0로 종료 가능

  • $init

    run level 별로 실행 수준을 정의해서 해당 정의된 run level에 맞는 시스템 서비스를 수행

    format

    $init [1-6]

0 : halt : 시스템 종료

1 : sungle user mode 로 시작 (단일 사용자 모드)

2 : Multi user mode (networking x) 로 다시 시작 (네트워크 파일 시스템이 없음

3 : Full multiuser mode 로 다시 시작 (CLI 형식으로 시작)

4 : 사용 안함. (사용자 정의에 따라 수행)

5 : X11 로 시작 (GUI 형식으로 시작, Linux 기반 시스템에 대한 표준 실행 수행)

6 : reboot : 시스템 다시 시작

$systemctl rescue
시스템 복구 등의 이유로 single user mode로 진입할 필요가 있을 경우

$systemctl emergency
파일 시스템 깨짐 등의 이유로 single mode 진입이 힘들 때, 최소한의 기능으로만 부팅할 수 있도록 함.

  • $systemctl isolate

    세션을 유지한 채로 현재 세션에서 run 레벨을 변경하고자 할때 사용

    format

    $systemctl isolate [target value]

[target values]

아래 값들은 /lib/systemd/system 경로에서 $ls -l | grep runlevel으로 심볼릭 링크로 된 값들을 확인할 수 있음.

poweroff.target : 시스템 종료

rescue.target : 싱글 유저 모드 (시스템 복구용)

multi-user.target : 멀티 유저 모드 (CLI)

graphical.target : 멀티 유저 모드 (GUI)

reboot.target : 시스템 재부팅

[ex]

$systemctl get-default : 현재 부팅 시 접속될 Default Runlevel 확인

$systemctl set-default [target value] : Default Runlevel 변경

  • $chkconfig

    run level별 시스템 서비스 수행여부 조회/설정 도구. chkconfig가 작동하지 않는다면 6. 서비스 관련 명령어의 데몬 관리(systemctl list-units) 참고.



권한, 소유권, 계정 관련 명령어

  • $su

    다른 계정으로 전환하는 리눅스 명령어

    format

    $su [유저명]

[ex]
$su - [유저명] : 변경하려는 유저의 환경으로 쉘 실행

$sudo : 다른 유저의 보안 권한으로 관련 프로그램을 구동하도록 하는 것 (기본 값 root, 경로 : /etc/sudoers)

  • $chmod

    파일/디렉터리에 읽기/쓰기/실행에 대한 권한을 부여하는 명령어

    format

    $chmod [권한 값][적용할 파일/디렉터리명]

(권한 값은 총 10자리 ----------며 값의 앞 자리로 무슨 파일인지 구분할 수 있다.)
( - : 파일 | d : 디렉터리 | c : 입출력에 사용되는 특수 파일 | b : 블록 구조 특수 파일 )

(권한 값(합산) r:4, w:2, x:1)
(각 위치 | -rwx------ : 소유자 | ----rwx--- : 그룹 | -------rwx : 일반 사용자]

(권한 값에 u+w, g+r, o-x 처럼 사용하여 기존 권한에서 권한을 추가, 감소 시킬 수도 있다. u : 소유자, g : 그룹, o : 일반 사용자)

[options]

-f : 에러 메시지 출력하지 않음.

-R : * 하위 디렉터리, 폴더 모두 적용

[extends]

set uid : 파일 실행 시 일시적 파일 소유자 권한 획득 (---s------)

set gid : 파일 실행 시 일시적 파일 소유그룹 권한 획득 (------s---)

sticky-bit : 파일 소유자, 슈퍼 유저 외 인원에 대해 파일 삭제 및 이름 변경 X, 파일 생성은 가능하다. (---------t)

[ex]

$chmod 1777 abc.txt : 상태 : abc.txt 파일에 권한 rwxrwxrwt 부여

$chmod 441 abc.txt : 상태 : abc.txt 파일에 권한 r--r----x 부여

$chmod u+x aaa.txt : aaa.txt의 기존 권한에 사용자 구간에서 실행 권한을 추가


  • $umask

    파일 및 디렉터리 생성 시 기본으로 부여할 권한 값 지정

    format

    $umask [권한 값]

일반파일 생성 시 권한은 666에서 umask만큼 감소되고

디렉터리 생성 시 권한은 777에서 umask만큼 감소된다.

  • $chown

    파일/디렉터리의 소유권을 변경(파일 소유권은 실행권한(x)와는 관계없다. 읽기, 쓰기만 가능)

    format

    $chown [권한 부여할 유저명][적용할 파일/디렉터리명]

[option]

-R : 하위 디렉터리, 폴더 모두 적용

[ex]
$chown [권한 부여할 유저명].[권한 부여할 그룹명][적용할 파일/디렉터리명] : 유저와 그룹을 동시에 변경

  • $chgrp

    파일/디렉터리의 그룹 소유권을 변경

    format

    $chgrp [권한 부여할 그룹명][적용할 파일/디렉터리명]

  • $chage

    계정의 비밀번호에 대한 정책 지정 및 정책 정보 확인가능

    format

    $chage [options][유저명]

[options]

-l [유저명] : 해당 유저에 대한 비밀번호 관련 정책 및 정보를 호출합니다.

-m [value] : 패스워드 최소일 수 변경

-M [value] : 패스워드 사용 최대일 수 변경

-W [value] : 패스워드 만료에 따른 변경 경고일

-I [value] : 비활성화 기간 (대문자 i)

-E [년-월-일] 또는 [일수] : 패스워드 만료일 지정

[ex]

$chage ABC : ABC 계정에 대한 비밀번호 정책을 순차적으로 질의하여 변경함. (위 옵션에 있는 내용을 전부 거치며 확인 후 변경)

  • $useradd

    유저 생성

    format

    $useradd [option][생성할 유저명]

[options]

-m : 홈 디렉터리도 함께 만듦.

-u : uid 지정

-g : gid 지정

-d : 디렉터리 지정

-s : shell 지정

-p : 패스워드 지정

-D : useradd의 기본 설정값을 확인

  • $usermod

    유저 정보 변경

    format

    $usermod [option][유저명]

[options]

-u : uid 변경 (많이 쓰임. 중요)

-g : gid 변경

-G : 새로운 보조 그룹 지정

-d : 홈 디렉터리 변경

-s : shell 변경

-l : 로그인 ID 바꾸는 옵션 (새로운 유저명)

  • $userdel

    유저 삭제

    [format]

    $userdel [option][유저명]

[options]

-r : 홈 디렉터리도 같이 삭제

-f : 삭제 중 나는 에러 무시하고 강제삭제

  • $groupadd

    그룹 생성

    format

    $groupadd [option][생성할 그룹명]

[option]

-g : gid 지정

  • $groupmod

    그룹 설정 변경

    format

    $groupmod [option][그룹명]

[options]

-g : gid 변경

-n : 그룹명을 변경

  • $groups

    그룹에 속한 유저 확인

    format

    $groups [그룹명]

  • $groupdel

    그룹 삭제

    format

    $groupdel [삭제할 그룹명]

  • $passwd

    비밀번호 재설정

    format

    $passwd [option][유저명] : 유저명 입력 안 할 시 기본 root 계정

[options]

-d : 계정의 패스워드 삭제

-l : 계정을 lock 상태로 변경

-u : 계정의 lock 상태 해제

  • $hostname

    네트워크에 연결된 장치에 부여되는 고유 이름 확인

[ex]

$hostnamectl : hostname 설정 및 상세 정보 확인

$hostnamectl set-hostname [name] : hostname을 name으로 변경 (영구, 재부팅 이후에도 유지)



압축 관련 명령어

! 압축 효율 순서 1. xz / 2. bzip2 > 3. gzip

  • $tar

    다수의 압축형식 압축 / 해제 (지원형식 : xz, bzip2, gzip, compress)

    format

    $tar [option][압축/해제할 파일이름] [압축할 파일의 경로]

[options]

-c : tar 파일 생성에 사용

-x : 압축 해제

-v : 진행 과정 상세 출력

-f [압축/해제할 파일 이름] : tar 파일의 이름 지정

--exclude : 제외할 폴더나 파일

-p : 퍼미션 상속

-z : gzip으로 압축하거나 해제 (tar.gz)

-j : bzip2로 압축하거나 해제 (tar.bz2)

-J : xz로 압축하거나 해제 (tar.xz)

[ex]

$tar [option] "[압축/해제할 파일 이름]" "[압축 대상1][압축 대상2] [압축 대상3]"... : 다수의 경로의 파일을 동시에 압축할 때

$tar -Jcvf abc.tar.xz /abc : abc폴더의 내용을 abc.tar.xz로 압축 파일을 생성 (1. z옵션 : xz형식으로 2. 압축 파일 생성하며 3. 진행 과정 출력하고 4. 파일 이름 지정)

$unxz abc.tar.xz : xz로 압축만 해제, tar xvf abc.tar : tar로 묶인 파일들을 해제

  • $zip

    zip 형식 파일 압축

    format

    $zip [option][filename]

  • $unzip

    zip 형식 파일 압축 해제

    format

    $unzip [option][filename]



Binary File Library 적용 유무 확인

  • $which [binary filename]

    해당 프로세스의 위치 탐색

  • $ldd [binary filename]

    해당 프로세스에 필요한 라이브러리 탐색 (필요한데 비어있으면 not found 표기)

  • $file [binary filename]

    해당 파일의 Type을 확인하기 위한 명령어



파일, 폴더, 검색 관련 명령어

  • $touch

    빈 파일 생성하는 명령어 (옵션 없이 사용할 때, 파일의 날짜 시간 정보 변경)

    format

$touch [option][파일명] : 해당 파일명으로 빈 파일 생성(옵션 없을 시)

[options]

$touch -c [파일명] : 현재 시간으로 파일 날짜 정보 변경

$touch -t [YYYYMMDDhhmm][파일명] : 파일의 날짜 정보를 변경

  • $mkdir

    디렉터리 생성

    format

    $mkdir [option][디렉터리명] : 디렉터리를 생성

[options]

-p [생성 디렉터리명/하위 생성 디렉터리명] : 디렉터리를 생성하고 하위 디렉터리도 추가로 생성

-m [권한 값][디렉터리명] : umask 값 무시하고 해당 권한에 대한 디렉터리 생성

  • $find

    파일 검색 (파생 설명 기준은 / -name "string" : 전체경로에 string이라는 파일 or 폴더를 찾는 것)

    format

    $find [경로][option] [찾는 파일명][action]

[options]

-name [파일명] : 파일 이름을 기준으로 찾기

-user [유저명] : 소유자로 파일을 찾기

-perm [permission value] : 파일의 권한을 기준으로 파일 찾기

-size [file size] : 파일 크기를 기준으로 파일 찾기

-type [file type] : 파일 종류를 기준으로 파일 찾기

-empty : 크기가 0인 일반파일 또는 디렉터리 찾기

-nouser : 파일 소유자가 없는 파일, 디렉터리 찾기


[ex]

$find / -name "[filename]" : [filename]에 해당하는 파일, 디렉터리를 / 아래 경로에서 전부 찾는 것

$find ./ -name [filename] | xargs grep -n [string] : 현재 디렉터리에서 특정 문자열(string)이 포함된 파일과 문자열, 그리고 문자열이 해당되는 줄까지 검색 (xargs 명령의 경우 exec의 +옵션과 흡사하다.)

$find / -name "[string]" -exec [command] {} \; : find로 찾아낸 string이름의 파일에 특정 command를 수행시킵니다. ( {}에는 find 명령문이 실행되고 나오는 결과 값이 들어갑니다. )

(command는 cat, rm 등 여러가지 커맨드가 사용됩니다.)
(\;의 의미는 '-exec 옵션을 끝내겠다'는 의미이며 {}의 의미는 'find로 찾은 값을 반영위한 값이 맵핑'되도록 사용됩니다. argument 값 가져옴)


[ex2]

$find / -atime +[value] : 접근 시간이 value 이후인 파일을 검색한다.

$find / -atime -[value] : 접근 시간이 value 이전인 파일을 검색한다.

$find / -ctime +[value] : 접근권한, 소유권한 등 파일자체 설정 수정 시간이 value 이후인 파일을 검색한다. (생성일자)

$find / -ctime -[value] : 접근권한, 소유권한 등 파일자체 설정 수정 시간이 value 이전인 파일을 검색한다. (생성일자)

$find / -mtime +[value] : 파일 내용 수정 시간이 value 이후인 파일을 검색한다.

$find / -mtime -[value] : 파일 내용 수정 시간이 value 이전인 파일을 검색한다.


[ex3]

백업에 주로 쓰이는 exec 양식

$find / -name "king" -exec cp -r {} {}.20230323 \;

// king 문구가 포함된 파일을 전부 찾아 파일명에 .20230323를 붙여 백업한다.

$find / -name "king20230323" -exec chown test.test {} \;

// 위 백업된 파일의 소유권을 test test 로 변경한다.

$find / -name "king20230323" -exec ls -l |grep {} \;

// 백업된 파일 리스트를 출력하여 소유권을 확인한다.

$find /app -type f -exec chmod -v 644 {} \;

// 특정 디렉터리 내에 있는 모든 파일 permission을 644 변경

$find /app -type d -exec chmod -v 755 {} \;

// 특정 디렉터리 내에 있는 모든 디렉터리 permission을 변경

find /home/tomcat/logs/. -mtime +7 -exec cp -ar {} /home/backup \;

// 수정한지 8일 이상 된 모든 파일들을 /home/backup에 백업


[ex4]

$find / -size 100M : 100M(100MiB) 용량을 가진 파일을 찾을 경우

$find / -size -100M -type d : 100M(100MiB) 용량보다 작은 디렉터리을 찾을 경우

$find / -size +100M -type f : 100M(100MiB) 용량보다 큰 파일을 찾을 경우

$find / -size +100M -150M : 100M(100MiB) ~ 150M(150MiB) 용량을 가진 파일을 찾을 경우

[ex5]

$find . ( -name ".log" -o -name ".o" ) -print : 확장자가 log이거나 o인 파일을 찾음.

$find . !( -name ".log" -o -name ".o" ) -print : 확장자가 log이거나 o 이외의 것을 찾음.

ㄴ ( 와 ) 앞에 (\)를 입력한 까닭은 소괄호를 특수문자로 인식하는게 아닌 일반문자로 인식하도록 하기 위해 특수문자 앞에 \을 붙임.

특수 문자 \ : \(back slash 동일함)은 특수 문자 바로 앞에 사용되는데 해당 특수 문자의 효과를 없애고 일반 문자처럼 처리 (대표적인 특수문자 : *, ?, |, ;, [ ], ~, ‘ ’, “ ”, ` `` )

ㄴ -print : 검색된 파일의 절대 경로명을 화면에 출력 (기본동작옵션)

  • $ln

    링크 생성 명령어

    format

    $ln [원본][링크 파일] : (-s가 없으면) 하드 링크 생성, $ln -s [원본][링크 파일] : 심볼릭 링크 생성

  • $ls

    디렉터리 내 파일명 조회

    format

    ls [경로]

[options]

-a : 숨겨진 파일이나 디렉터리를 보여줌

-l : 자세한 내용을 출력한다.

-S : 파일 크기 순으로 정렬하여 출력

-h : K, M, G 단위를 사용하여 파일 크기를 사람이 보기 좋게 표시

-R : 하위 디렉터리까지 출력

-b : 알파벳 순으로 출력

-Z : SELinux 보안 컨텍스트를 출력

[ex]

$ls -l |wc -l : 해당 디렉터리 내 파일 갯수 조회 (카운팅, counting)

$ls --time-style=full-iso -al |grep '파일이름' : 해당 파일의 마지막 수정 날짜 초 단위까지 표시



패키지 관리/설치, 다운로드 및 접근

  • $dnf

    yum이 가진 기존 문제점들을 해소하기 위해 나온 패키지 관리 도구

    format

    $yum [option] [command] [패키지명]

[ex]

$dnf install [패키지명1] [패키지명2] [패키지명3]... : 여러 패키지 동시에 설치

$dnf -y install [패키지명] : 패키지 설치 (동의 질의에 무조건 yes 적용)

$dnf reinstall [패키지명] : 해당 패키지를 재설치

$dnf list : 서버에 있는 그룹 및 패키지 리스트를 표기

$dnf search [String] : 해당 String으로 시작하는 패키지를 검색

$dnf update [패키지명] : 저장소 확인 후, 패키지 업데이트 유무 확인 및 업데이트 수행 (탐색만 하는 apt-get update와 동작 다름)

$dnf upgrade [패키지명] : 저장소 확인후, 패키지 업데이트 유무 확인 및 업데이트 수행 (더 이상 사용되지 않으면 자동 삭제 기능 추가)

$dnf deplist : dnf 패키지에 대한 의존성 테스트

$dnf clean all : 캐시 되어있는 것을 모두 지움.

$dnf erase [패키지명] : 시스템에서 해당 패키지를 삭제

$dnf downgrade [패키지명] : 해당 패키지를 다운그레이드

$dnf list updates : 업데이트 목록을 보여줌

$dnf list all : 설치가 가능한 모든 패키지 목록 출력

$dnf groupinfo [그룹명] : 그룹 패키지 정보를 확인

$dnf help : dnf 도움말 확인

[options]

-y : 모든 질의에 yes 처리

-d [debug level] : 최종 결과를 디버깅

-t : 에러를 자동으로 잡아서 설치

-v : 과정과 결과를 전부 출력 (세세하게)

--showduplicates : 중복 요소를 표기

-e [error level] : 결과 중 에러를 표시

--skip-broken : 문제가 있는 패키지 스킵

[ex1]

{보안 패치, 커널 변경x}

$yum install yum-security -y : 보안 패치 설치

$yum list-security --security : 업데이트 리스트 확인

$yum update --security : 보안 관련 업데이트 패치

$yum updateinfo list security all : 설치된 패치 리스트 확인

  • $wget

    HTTP, HTTPS, FTP 프로토콜을 이용하여서 내려 받을 수 있게 되어 있으며, URL에서는 원하는 파일 또는 소스를 다운로드 받을 수 있음.

    format

    $wget [option][URL]

[ex]

$wget -O [저장 위치/파일 이름][URL] : 사용자 정의 파일 이름으로 wget을 사용 후 저장.

$wget -p [저장 위치][URL] : 다운로드 받을 파일의 경로를 지정해서 다운로드

$wget -c [URL] : 기존에 받던 파일을 이어서 다운로드

$wget -b [URL] : 백그라운드에서 해당 URL의 파일을 다운로드

$wget --no-check-certificate [URL] : 인증서 URL 접속 및 다운로드 시 사전 입력

[ex1]

$ wget --ftp-user=FTP_USERNAME --ftp-password=FTP_PASSWORD ftp://ftp.example.com/filename.tar.gz : 인증에 필요한 정보를 기입한 뒤 FTP를 사용하여 지정한 URL으로부터 파일을 다운로드

$ wget ftp://ftp.example.com/filename.tar.gz : FTP를 사용하여 지정된 URL으로부터 파일을 다운로드

  • $curl

    Command Line 기반의 웹 요청 도구로 오픈소스 기반의 이 명령어는 다양한 OS에서 구동이 가능하며, 다양한 프로토콜(HTTP, HTTPS, FTP, LDAP, SCP, TELNT, SMTP, POP3 등)로 다운로드, 업로드 모두 가능함.

    format

    $curl [option] [URL]

[ex]

$curl [URL] : HTTP 요청을 서버로 보내고 응답을 받음.

$curl -X POST -F "file=[upload_filename]" [URL] : POST request를 이용해 파일을 서버에 업로드

$curl [URL] -o [filename] : 받아온 데이터를 콘솔에 출력과 더불어 해당 내용이 포함된 파일을 생성하여 파일로 저장.



출력, 편집, 필터 명령어

  • $cat

    파일 내용 출력

[option]
$cat [파일명] | wc -l : 파일 내 행 계산

  • txt editor

명령어설명
$vi파일 편집기, 색상 구분 없음. (CLI, GUI 사용가능)
$vim파일 편집기, vi의 업그레이드 버전, 특별한 단어들을 색상을 입혀 구분함. (CLI, GUI 사용가능)
$gedit파일 편집기 (GUI만 사용가능)

  • Output option

명령어설명
$moreSpace Bar, Enter를 통해 페이지를 아래로 내려가며 볼 수 있음. (명령어 후미에 파이프(|)를 주로 사용함.)
$lessless의 경우 위->아래, 아래->위 둘다 이동이 가능하다. 화살표, Page UP, Page Down 사용, 나갈 때 Q를 사용
$head처음 n행만 출력 (cat [파일명] | head 5 : 파일의 위 5줄 출력)
$tail마지막 n행만 출력 (cat [파일명] | tail 7 : 파일의 마지막 7줄 출력)
$tail -f [파일명]파일 내용을 계속 갱신해줌.(실시간으로 파일 내용이 변경되는 유무를 확인할 수 있음. 장비 로그 확인할 때 용이)

  • $grep

    지정된 파일에 [string] 문구가 있는지 검색하고 그 value가 있는 line을 출력하는 명령어 (명령어 후미에 파이프(|)로 추가적인 옵션으로도 주로 사용함)

    option

    -v [string] [파일명] : [string]에 해당하는 문구를 제외하고 나머지 행들을 모두 출력
    [string] * : *을 입력하면 해당 폴더의 모든 파일에서 [string] 값에 맞는 행들을 전체 출력

[ex]

$grep -v '#' [파일명] : #이 들어간 행을 제외하고 해당 파일 전체 출력

$grep love * : 현재 디렉토리 내에 있는 모든 파일에서 love라는 문자열을 검색해서 출력

  • $sort

    텍스트로 된 파일의 행 단위 정렬을 할 때 사용되는 명령어로 특정 DB, 쉘 프로그램 등 데이터를 직접 정렬 또는 편집할 때 사용

    format

    $sort [option] [extend]

[options]

-b : 선행 공백 무시

-r : 비교 결과를 내림차순으로 정렬(역순)

-n : 숫자가 큰 순서대로 정렬

(-rn 옵션으로 큰 용량을 내림차순으로 나열하는데 자주 쓰임)

-d : 값을 올림차순으로 정렬

[extends]

-k [n] : n번째 필드를 기준으로 정렬

-o [파일명] : 출력을 저장할 파일을 저장

-u : 정렬 후 중복된 내용을 제거한다.

  • $sed

    텍스트 변환 유틸로 줄단위(\n) 처리를 한다. (메모리를 이용한 여러 줄 처리도 가능)
    (명령어 후미에 파이프(|)로 추가적인 옵션으로도 주로 사용함)

    format

    $sed [option] [스크립트] [파일명]

[option]

구간 삭제 : $sed '/[시작 문자열]/,/[종료 문자열]/d'

ㄴ [행 위치]d : 해당 행에 대한 값을 삭제 (아래 예시 참고)

문자 치환 : $sed -i "s/[변경 전 문자열]/[변경 후 문자열]/g" <-마지막 g는 flag

[ex]

$echo -e "aaa\nbbb\nccc\nddd" | sed ""

aaa

bbb

ccc

ddd

[ex2]

$echo -e "aaa\nbbb\nccc\nddd" | sed "2d"

aaa

ccc

ddd

  • $[Any command] 2>>/dev/null

    에러 출력을 제거하고 표준 출력만 출력하도록 함.

[ex]

$[Any command] 2>&1

$[Any command] 1>/dev/null 2>&1

: 에러 출력(2)를 표준 출력으로 전달.. (표준 출력 (1)을 쓰레기 값으로..)

[속성]

> : Redirection

/dev/null : 버림 값으로 변경(쓰레기통)

2 : 표준 에러 출력을 뜻하는 디스크립터

1 : 파일 스크립트를 출력하라는 기호

& : 표준 출력을 뜻하는 파일 디스크립터

$grep --color=auto : 커맨드에 의해 출력되는 값을 단색이 아닌 키워드 강조 색상을 포함해서 표현

ls에는 이미 적용되어 있고 grep에 사용하려면 alias를 통해 등록한다.

일시 : $alias grep='grep --color=auto' 를 등록한 후 grep 시 자동으로 사용되도록 한다.)

영구 : #vim .bashrc 접속 후 alias grep='grep --color=auto' 등록 (default로 되어있음)



편집기 내 명령어

[라인 모드]

(vi, vim 내 입력 모드에서 사용 가능)

:set number : 번호 줄 생성

:set ts=[숫자] - tab 공백을 [숫자]수 만큼 지정한다.

:%s/기존 문자열/새 문자열 - 기존 문자열을 새 문자열로 바꾸기

/문자열 : 현재 커서 이후로 문자열 찾기 ( n키로 다음 문자열로 이동)

?문자열 : 현재 커서 이전으로 문자열 찾기 ( n키로 이전 문자열로 이동)


[명령 모드]

의미
:[번호]해당 번호의 줄로 이동
:[번호]d해당 번호 줄 삭제
dd커서가 위치한 줄 삭제
[숫자]dd커서 위치부터 [숫자]줄 삭제
yy커서가 위치한 줄을 복사
[숫자]y커서 위치부터 [숫자]만큼 줄을 복사
p복사한 내용을 현재 줄 이후로 붙여넣기
u되돌리기


시간 관련 명령어

  • $date

    보유 중인 서버 시간(운영체제, 소프트웨어)을 확인하는 명령어

    [format]
    $date -s "[YYYY-MM-DD hh:mm:ss]" : 서버 시간을 수동으로 설정

  • $hwclock -r

    메인보드에서 운영되는 하드웨어 자체의 시간을 확인하는 명령어

  • chrony

    ntp를 대체하는 프로토콜로 빠르고 정확하게 동기화 할 수 있도록 개선함

    [path] : /etc/chrony.conf

systemctl restart chronyd && systemctl enable chornyd : chrony를 재시작하고 부팅 후에도 자동 실행 되게 설정

chronyc sources : 타임서버 확인

chronyc -a makestep : 즉시 동기화

  • timedatectl

    현재 날짜, 시간, 타임존, 타임 서버와의 동기화 여부를 모두 확인 가능

(ex)
$timedatectl list-timezones : 국가 별 리스트 출력

$timedatectl set-timezone : 해당 국가로 타임존 변경

$timedatectl set-ntp true : ntp 동기화



Linux 환경설정 관련 명령어

  • $vim /etc/profile

    전체 계정에 대한 환경 변수 적용파일

    format
    $source /etc/profile : 해당 환경 변수 파일을 적용

  • $source

    bash의 명령어로 filename 안 명령어를 읽어 실행 (= . 와도 동일함 ex) ./test.sh)

    format

    $source [filename] : 해당 파일 실행

  • $chsh

    사용할 로그인 Shell 변경하는 명령어

  • $echo

    텍스트, 변수를 출력할 수 있는 명령어

    format

    $echo [옵션][문자열] : 문자열 입력 방식은 2가지로 1) $을 안붙이고 입력하면 단순한 문자열이고 2) $(명령어, 변수) 형태로 입력하면 return된 값이 나온다.

[option]

-e : 각 문자들이 개행 처리됨

[ex]

$echo -e "qwe/asd/zxc"

qwe

asd

zxc

[ex2]

$str="hello world"

$echo $str

hello world

[ex3]

$echo $(hostname)

localhost.localdomain

[ex4]

$echo $PATH : 해당 계정 경로 확인

[ex5]

$sync && echo 2 > /proc/sys/vm/drop_caches : 리눅스 버퍼/캐시용 메모리 삭제

$sync && echo 3 > /proc/sys/vm/drop_caches : 2번 + 페이지 캐시까지 삭제

  • $export

    텍스트, 변수를 환경 변수로 변경, 저장하는 명령어

    format

    $export [문자열] : 해당 문자열 현재 환경 변수에 저장

[ex]

$export TMOUT=0 : (현재 폴더 위치에 따라) 세션 타임아웃 0초로 변경

환경변수 파일에 값이 저장만 되어있어도 됨. (별도로 실행하여 재적용할 필요 없음)

  • $env

    환경변수 설정 및 변수 목록 확인(조회) 명령어

    format

    $env [문자열]

  • $set

    Bash 쉘 변수 관리 명령어

    format

    $set [문자열]

[options]

-a : 생성, 변경되는 변수 export

-e : 오류가 발생하면 스크립트 종료

-x : 수행하는 명령어 출력 후 실행

-c : 다음의 명령을 실행 ( ex) set -c "echo "B"" )

-o : 옵션 설정

  • : 옵션 끌 목적으로 사용 ( ex) set +x )

  • $unset

    Bash 쉘 변수 관리 명령어 (등록된 쉘 변수를 해제함)

    format

    $unset [문자열]

명령어 두 개 동시에 실행하는 방법

; - 앞의 명령어가 실패해도 다음 명령어가 실행
&& - 앞의 명령어가 성공했을 때 다음 명령어가 실행
& - 앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행
|| - 앞에 명령어가 성공하면 뒤의 명령어를 실행하지 않음



스케줄 관련 명령어

  • $crontab

    전체 계정에 대한 환경 변수 적용 파일

[options]

$crontab -e : 반복 스케줄 등록 및 수정 (설정값은 아래 링크 확인)

$crontab -l : 등록된 스케줄 확인

$crontab -r : 등록된 crontab 값 전부 제거

[Directory]

$cat /var/log/cron : 스케줄이 발생한 내용에 대한 로그 확인

$cat /etc/crontab : 실제 crontab 파일 위치



계정, 로그인, 로그 확인 명령어

  • rsyslog

    로그파일들의 위치 지정

    [path] : /etc/rsyslog.conf

  • utmp

    현재 로그인한 유저를 알 수 있는 바이너리 파일

    $w, $who, $finger
    [path] : Linux : /var/run/utp || Unix : /var/adm/utmpx

  • wtmp

    로그인/로그아웃이 성공한 유저 정보, 시스템 boot, shutdown 정보를 알 수 있는 바이너리 파일

    $last
    [path] : Linux : /var/log/wtmp || UNIX : /var/adm/wtmpx

  • lastlog

    가장 최근에/마지막에 성공한 로그인 기록을 보여주는 바이너리 파일

    $lastlog, $finger
    [path] : Linux : /var/log/lastlog || Unix : /var/adm/lastlog

  • btmp, loginlog

    실패한 로그인 시도를 보여주는 바이너리 파일

    $lastb
    [path] Linux : /var/log/btmp || Unix : /var/adm/loginlog

  • secure, sulog

    su 명령 사용 결과, sshd 데몬, telnet, 원격 접속 등에 대한 기록을 텍스트로 저장한 로그

    [path] Linux : /var/log/secure || Unix : /var/adm/sulog

  • xferlog

    ftp 데몬을 통하여 송수신되는 모든 파일에 대한 기록을 텍스트로 저장한 로그

  • acct/pacct

    시스템에 로그인한 유저가 로그아웃할 때까지 명령어, 터미널, 프로세스 시작 등 저장한 로그
    기본적으로 파일이 없으므로 accton /var/account/pacct, /usr/lib/acct/accton, /var/adm/pacct 명령 실행 필요
    (해커가 해킹 후에 history를 날렸다면 이 로그 파일을 통해 입력 명령어, 터미널 종류, 프로세스 시작 등을 확인할 수 있음.)

    [command] : $lastcomm [유저명]
    [path] Linux : /var/account/pacct || Unix : /var/adm/pacct

  • message

    시스템 동작에 대한 전반적인 모든 이벤트, 데몬 실행 상황, 시스템 설정 오류, 파일 시스템, Tcp wrapper 접근 제어 정보, 로그인 터널이 텍스트 파일로 저장

    [path] : /var/log/message

  • history

    유저가 입력한 명령어들의 기록이 남아있음.

    $history
    [path] : ~/.bash_history

  • boot.log

    리눅스가 부팅될 때 파일 시스템에 대한 체크, 서비스 데몬들의 실행 상태 등을 기록하고 있는 파일

    [path] : $/var/log/boot.log

$cat /var/log/dmesg : 부팅 과정에서 발생하는 로그 (커널 정보 포함. boot.log는 커널 이후 로그 기록) //RHEL 8버전부턴 messages에서 조회 가능.



SWAP 파일 생성 및 적용 명령어

  • mkswap

    파티션 장치를 지정하면 스왑 영역이 생성되고 해당 파티션에 대한 정보가 출력

    [ex]
    $mkswap -c /dev/sdb1 : /dev/sdb1을 Swap 파티션으로 변경. -c 옵션은 사전 배드블록을 검사하는 옵션이다.

  • swapon

    mkswap으로 영역을 생성한 뒤 시스템에서 스왑 영역이 사용될 수 있도록 활성화

    [ex]
    $swapon -s /dev/sdb1 : Swap 파티션을 활성화. -s 옵션은 상태를 출력

  • swapoff

    swapon으로 활성화된 스왑 영역을 비활성화

    [ex]
    $swapoff -a /dev/sdb1 : Swap 파티션을 비활성화. -a 옵션은 모든 영역을 비활성화



보안 정책, 방화벽

$firewalld

내부 방화벽 설정 창 진입 (GUI만) (CentOS 7 이상)

[path] : /etc/firewalld/firewalld.conf

[ex]

$systemctl start firewalld : 방화벽 서비스 시작

$firewall-cmd --state : 방화벽 상태 확인

$firewall-cmd --reload : 변동된 내용 적용하기 위해 방화벽 재시작

[ex2]

$firewall-cmd --get-zones : 정의된 zone 확인

$firewall-cmd --set-default-zone=external : 기본 zone 변경

$firewall-cmd --list-all : 현재 설정된 방화벽 리스트 확인

$firewall-cmd --get-active-zone : 네트워크 인터페이스에 적용된 zone 리스트 확인

$firewall-cmd --permanent --new-zone=[name] : zone 추가

$firewall-cmd --permanent --delete-zone=test : test zone 삭제

[ex3]

$firewall-cmd --list-service --zone=public : zone에 허용된 서비스 확인

$firewall-cmd --permanent --zone=public --add-service=sshd : zone에 sshd 서비스 추가

$firewall-cmd --permanent --zone=public --remove-service=https : zone에서 https 서비스 삭제

$firewall-cmd --permanent --zone=public --add-port=8081/tcp : zone에 8081 포트 추가

$firewall-cmd --permanent --zone=public --remove-port=8081/tcp : zone에서 8081 포트 삭제


  • $setenforce

    SELinux 상태를 변경하는 명령어 (Selinux : 커널에 내장되어 강제 접근 제어를 수행하는 모듈), getenforce로 현 상태 조회 가능

    [path] : /etc/selinux/config

[ex]

$setenforce 0 : selinux 일시 정지 (getenforce 시 Permissive 표기)

$setenforce 1 : selinux 활성화 (getenforce 시 Enforcing 표기)

$sestatus : selinux 상태 확인



원격지에 파일 전송 및 복사

  • $scp

    현재 사용 중인 리눅스 서버에서 다른 리눅스 서버로 파일을 복사하거나 받기위해 사용하는 프로토콜

  • {현재 리눅스 서버에서 타 서버로 파일 복사하기}

    format

    $scp [option] [현재 서버의 디렉터리] [다른 서버 계정]@[다른 서버 IP주소]:[다른 서버의 파일 또는 디렉터리]

[ex]

$scp -r /import root@192.168.0.1:/getcha

[options]

-r : 하위 디렉터리 전부 복사

-P : 포트 주소

  • {타 리눅스 서버에서 파일 받기}

    [format]
    $scp [option] [다른 서버 계정]@[다른 서버 IP주소]:[다른 서버의 파일 또는 디렉터리] [현재 서버의 디렉터리]

[ex]

$scp -r root@192.168.0.1:/getcha /import

[options]

-r : 하위 디렉터리 전부 복사

-P : 포트 주소



LVM

파티션을 추가, 제거, 조정 등을 할 수 있도록 제공하는 기능
궁극적인 목적은 여러 개의 하드 디스크를 합쳐서 하나의 파일 시스템으로 사용하기 위해 사용

  • {물리볼륨}

[command]

$pvcreate : 볼륨 그룹의 일부로 사용할 물리 볼륨 생성

$pvdisplay : 논리 볼륨 정보 표시

$pvmove : 물리 볼륨의 범위를 이동

$pvremove : 물리 볼륨 삭제

  • {논리볼륨}

[command]

$lvcreate : 볼륨 그룹에 논리 볼륨 생성

$lvdisplay : 논리 볼륨 정보 표시

$lvextend : 논리 볼륨 크기를 확장

$lvreduce : 논리 볼륨의 크기를 감소

$lvremove : 볼륨 그룹에서 논리 볼륨 제거

$lvscan : 논리 볼륨의 모든 디스크를 출력

  • {볼륨그룹}

[command]

$vgcreate : 볼륨 그룹을 생성

$vgdisplay : 볼륨 그룹에 대한 정보 표시

$vgextend : 물리 볼륨 추가하여 볼륨 그룹 확장

$vgreduce : 볼륨 그룹에서 볼륨 하나 이상 제거하여 볼륨 그룹 축소

$vgremove : 시스템과 디스크에서 볼륨 그룹의 정의를 제거

$vgscan : 시스템에서 디스크 볼륨 그룹을 검색

$vgcfgbackup : /etc/lvm/backup 파일에 메타데이터를 수동으로 백업

$vgcfgrestore : 해당 볼륨 그룹의 영역을 복원

$vgrename : 볼륨 그룹의 이름을 바꿈

$vgmerge : 두개의 볼륨 그룹을 합친다.




FTP


$ftp [option] [IP] : FTP 서버 접속

[command]

get : 파일 다운로드

mget : 복수 파일 다운로드

put : 파일 업로드

mput : 복수 파일 업로드

hash : 전송되는 과정 보여주기

open : ftp 서버 접속

exit : ftp 접속 종료

profile
등불은 꺼질 때까지 계속해서 환하게 빛을 비춘다.

0개의 댓글