10. Binary File Library 적용 유무 확인
{유저 정보 및 시스템}
/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}
{SYSLOG}
{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}
{Sendmail}
{Web}
/etc/php.ini : Apache 혹은 php 언어기반 Web Server에서 php 언어에 영향이 주는 설정파일 설정
/etc/httpd/conf/httpd.conf 또는 /usr/local/apache/conf/httpd.conf : 설치된 웹 서버 ex. apache) 설정파일
{DB}
{NTP}
{Super}
{Service, Protocols}
/etc/protocols : 프로토콜 및 프로토콜 식별 정보 정의
/etc/services : 다양한 서비스에 대한 포트/프로토콜 정보 정의
{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 코어 전체 수 확인 명령어
전체 리소스 모니터링 및 사용 프로세스 점유율 확인
[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줄 출력
메모리 사용률 확인
[ex]
$free -m : 메모리를 MB단위 기준으로 표기
프로세스 정보, 메모리 사용량, 입출력 상태, CPU 사용률 등 정보 출력
현재 '마운트'된 디스크의 크기, 사용량, 남아있는 용량에 대해 출력
[ex]
$df -Th : 각 파티션에 대한 파일 시스템 유형 및 용량 단위까지해서 df 명령에 대한 출력을 해줌.
파일이나 디렉터리들이 차지하고 있는 크기를 출력
[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번째 열에 용량 표시
현재 사용 중인 프로세스 확인
[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 및 메모리 사용률, 프로세스를 상세 표기
시스템의 모든 프로세스들을 트리 구조로 확인할 수 있음.
백그라운드에서 실행되고 있는 모든 프로세스를 확인, 프로세스 앞에 순서를 함께 출력
( + : 최근 추가된 프로세스, - : 기존에 있던 프로세스)
(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 값에 해당하는 작업을 종료 (목록에서 제거)
터미널이 끊기는 경우에도 (종료 포함) 실행 중인 프로세스를 중단하지 않고 백그라운드로 동작하도록 명령 내림 (종료하려면 $kill -9 [PID] 를 통해 강제 종료)
실행 후 출력화면에서 탈출이 불가한 일회성 실행 프로세스(서비스)의 경우 &을 입력하여 증상을 예방할 수 있음.
특정 프로세스를 종료. 프로세스 PID를 기준으로 종료 진행 (옵션이 별도로 없으면 -15 옵션으로 정상 종료)
format
$kill [option][PID]
[options]
-l : 시그널로 사용가능한 리스트 출력
-9 : 해당 PID의 프로세스 강제종료
-15 : 프로세스와 관련된 파일 정리 후 종료절차 진행 (-9는 강제종료, -15는 정상종료)
같은 데몬의 프로세스를 한 번에 종료. 프로세스 이름을 기준으로 종료 진행 (옵션이 별도로 없으면 -15 옵션으로 정상 종료)
format
$killall [option][프로세스 이름]
[options]
-v : 상세한 버전 정보 출력
-w : 모든 프로세스들이 종료될때까지 대기
-l : 시그널 전체 목록 확인
-g : 프로세스가 속한 그룹을 지정하여 프로세스를 종료
-I : 시그널로 사용가능한 리스트 출력
프로세스의 우선 순위를 설정하여 실행. -20이 우선 순위가 가장 높고 19가 가장 낮다.
(nice 값은 보통 0으로 시작하며 -20~-19까지 우선 순위 조정가능하다.)format
$nice -n [조정 수치 값][프로세스]
실행 중인 프로세스의 우선 순위를 변경함.
(root만 우선 순위를 renice를 통해 바로 감소시킬 수 있다.)format
$renice [option][변경할 NI값] [PID]
파일이나 파일 구조를 이용한 프로세스 식별 및 통제
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 : 현재 운영체제 간략히 설명
현재 연결된 모든 파티션 표현
[options]
$fdisk -l : 현재 연결된(설치된) 모든 파티션 정보를 리스트화하여 보여줌.
$fdisk -s [partition value] : 해당 파티션 크기 확인
파일 시스템 생성 관련 명령어. 생성된 파티션을 포맷하여 파일 시스템 생성. mkfs로 파일 시스템 생성을 위해서는 fdisk를 통한 사전 파티션 생성이 필요하다.
format
$ mkfs [option][파티션명 또는 Device 명]
$ mkfs.[파일 시스템][파티션명 또는 Device 명]
[options]
-t [파일 시스템] : 파일 시스템 종류 (ext4, ext3, xfs 등)
-v : 파일 시스템 생성과정 상세보기
-c : 파일 시스템 생성할 때 배드블록 파악
-b [bytes] : 블럭크기
-T : usagetype으로 사용량 단위 지정가능
-i [bytes] : 노드당 바이트 값
파일 시스템 생성 관련 명령어. 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 실행
파일 시스템을 점검 및 복구하는 명령어
format
$fsck [option] [파일 시스템]
[options]
-A : /etc/fstab에 등록된 내용 참고해서 모든 파일 시스템을 다 검사
-V : 자세한 정보 출력
-f : 강제적으로 검사 진행
-y : 파일 문제 있을 때 자동 수정
-n : 파일 시스템에 문제가 발생하면 수정 없이 내용 출력
-t [파일 시스템] : 점검할 파일 시스템 지정
리눅스에서 사용하는 모든 파일 시스템을 점검 및 복구하며 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
quota를 off한다.
format
$quotaoff [option] [디렉터리명]
[options]
-a : 모든 파일 시스템 체크
-u : 유저 쿼터 관련 체크
-g : 그룹 쿼터 관련 체크
-v : 파일 시스템의 상태를 확인
quota를 on한다
format
$quotaon [option] [디렉터리명]
[options]
-a : 모든 파일 시스템 체크
-u : 유저 쿼터 관련 체크
-g : 그룹 쿼터 관련 체크
-v : 파일 시스템의 상태를 확인
실제로 설정할 내용 반영을 위한 사전 체크 작업
format
$quotacheck [option] [디렉터리명]
[options]
-a : 모든 유저 및 그룹의 quota 체크 (/etc/fstab의 4번째 필드에 quota로 설정되어 있는지 유무까지 확인)
-c : 디스크 사용량 할당 quota 파일 생성
-u : 유저의 quota 정보 출력
-g : 그룹의 quota 파일 출력
-v : 자세한 내용 출력
유저별 디스크 사용 용량 및 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을 넘으면 제한 (절대 못넘김)
block partition ID 확인
$mount [partition value] [directory for mount] : 해당 파티션을 현재 실행한 OS에 Link
$umount [partition value] : 해당 파티션을 현재 실행한 OS에 Unlink
$vim /etc/fstab : mount/umount는 재부팅 시 값이 초기화되므로 영구적으로 mount 하기위해 사용되는 설정 파일(수정)
네트워크 인터페이스 상태 확인
format
$ethtool [option][인터페이스명]
[options]
-i : 해당 인터페이스 세부정보 확인 (Link detected : yes로 되어있으면 물리적으로 연결되었다는 얘기)
-p : 서버 장비에서 해당 인터페이스 주위의 불빛이 점등이 됨.(물리 인터페이스 위치 파악)
라우팅 테이블 확인 //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명] : 호스트 경로 삭제
$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명] : 해당 인터페이스를 비활성화
네트워크 인터페이스 확인
format
$ifconfig -a : 네트워크 인터페이스 전체 확인, -a 대신 [interface명]으로 특정 인터페이스 정보 확인
[options]
promisc : promiscuous(무차별 모드) 모드 설정
-promisc : promiscuous(무차별 모드) 모드 해제
해당 인터페이스 MAC 주소 확인
format
$ip link show [interface명] : 해당 인터페이스의 물리 맥 주소 확인
목적지와의 연결을 시도하며 거쳐가는 구간별 통신 상태와 목적지까지 가는 경로를 확인하기 위해 사용
format
$traceroute [대상서버 IP]
시스템의 네트워크 관련 다양한 상태 정보를 관리 및 확인할 수 있는 명령어
format
$netstat [option]
[options]
-a : 모든 소켓정보
-i : 네트워크 인터페이스 정보
-r : 시스템 라우팅 정보
-s : 각 프로토콜 통계 정보
-p : 해당 소켓의 프로세스/pid 출력
-t : 연결 상태 정보 출력
-n : 네트워크 주소를 숫자 형식으로 출력
리눅스 포트 체크 프로그램 ncat (별도 설치 필요없음)
[ex]
$nc [대상서버 IP][대상 Port] : 해당 서버의 포트가 listen 모드, 접근사용 가능한 상태인지 확인
$nc -v [대상서버 IP][대상 Port] : 해당 서버의 포트가 listen 모드, 접근사용 가능한 상태인지 확인 (위 옵션에 비해 더 상세함)
포트 체크 프로그램, 대상 서버 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 : 대상 호스트 운영체제 정보 출력
암호화된 통신 방식으로 목적지에 원격 접속하는 프로토콜
format
$ssh [대상 서버 IP] : 대상 IP로 ssh 접속 시도
네트워크를 이용하여 원격지에 떨어져 있는 서버에 접속하여 자료를 교환할 수 있는 프로토콜. 다만, 보안상의 이유로 ssh를 사용
format
$telnet [option] [대상 서버 IP] [대상 Port] : 대상 IP, Port로 텔넷 접속 시도
[options]
-l [user명] : telent 서버에 접속할 유저 ID지정
-a : 현재 유저를 ID로 사용하여 접속
도메인 주소에 대응하는 IP 주소를 획득하기 위해 사용
format
$nslookup [도메인] [네임서버 IP]
netstat 명령보다 속도가 빠른 네트워크 소켓 상태 확인 명령어.
서버 접속한 클라이언트의 IP 및 포트를 확인 시 사용
[options]
-a : 모든 포트 확인
-n : 호스트, 포트 등 정보 숫자 표기
-p : 프로세스명 표기
-r : 라우팅 테이블 표기
-l : listen 상태 소켓만 표시
-v : 요약 정보
데몬 시작/종료/재시작/갱신/상태확인 (CentOS 7 미만, Ubuntu 15.04 미만)
데몬 시작/종료/재시작/리로드/상태확인 (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 : 전체 서비스 의존성 파악
서비스를 자동으로 실행하기 위한 목록과 체크 박스가 나타남.
시스템 서비스 및 인증 설정 수행
운영체제 재부팅, $shutdown -r, $init 6도 재부팅 가능
운영체제 종료, $shutdown -h, $init 0로 종료 가능
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 진입이 힘들 때, 최소한의 기능으로만 부팅할 수 있도록 함.
세션을 유지한 채로 현재 세션에서 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 변경
run level별 시스템 서비스 수행여부 조회/설정 도구. chkconfig가 작동하지 않는다면 6. 서비스 관련 명령어의 데몬 관리(systemctl list-units) 참고.
다른 계정으로 전환하는 리눅스 명령어
format
$su [유저명]
[ex]
$su - [유저명] : 변경하려는 유저의 환경으로 쉘 실행
$sudo : 다른 유저의 보안 권한으로 관련 프로그램을 구동하도록 하는 것 (기본 값 root, 경로 : /etc/sudoers)
파일/디렉터리에 읽기/쓰기/실행에 대한 권한을 부여하는 명령어
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의 기존 권한에 사용자 구간에서 실행 권한을 추가
파일 및 디렉터리 생성 시 기본으로 부여할 권한 값 지정
format
$umask [권한 값]
일반파일 생성 시 권한은 666에서 umask만큼 감소되고
디렉터리 생성 시 권한은 777에서 umask만큼 감소된다.
파일/디렉터리의 소유권을 변경(파일 소유권은 실행권한(x)와는 관계없다. 읽기, 쓰기만 가능)
format
$chown [권한 부여할 유저명][적용할 파일/디렉터리명]
[option]
-R : 하위 디렉터리, 폴더 모두 적용
[ex]
$chown [권한 부여할 유저명].[권한 부여할 그룹명][적용할 파일/디렉터리명] : 유저와 그룹을 동시에 변경
파일/디렉터리의 그룹 소유권을 변경
format
$chgrp [권한 부여할 그룹명][적용할 파일/디렉터리명]
계정의 비밀번호에 대한 정책 지정 및 정책 정보 확인가능
format
$chage [options][유저명]
[options]
-l [유저명] : 해당 유저에 대한 비밀번호 관련 정책 및 정보를 호출합니다.
-m [value] : 패스워드 최소일 수 변경
-M [value] : 패스워드 사용 최대일 수 변경
-W [value] : 패스워드 만료에 따른 변경 경고일
-I [value] : 비활성화 기간 (대문자 i)
-E [년-월-일] 또는 [일수] : 패스워드 만료일 지정
[ex]
$chage ABC : ABC 계정에 대한 비밀번호 정책을 순차적으로 질의하여 변경함. (위 옵션에 있는 내용을 전부 거치며 확인 후 변경)
유저 생성
format
$useradd [option][생성할 유저명]
[options]
-m : 홈 디렉터리도 함께 만듦.
-u : uid 지정
-g : gid 지정
-d : 디렉터리 지정
-s : shell 지정
-p : 패스워드 지정
-D : useradd의 기본 설정값을 확인
유저 정보 변경
format
$usermod [option][유저명]
[options]
-u : uid 변경 (많이 쓰임. 중요)
-g : gid 변경
-G : 새로운 보조 그룹 지정
-d : 홈 디렉터리 변경
-s : shell 변경
-l : 로그인 ID 바꾸는 옵션 (새로운 유저명)
유저 삭제
[format]
$userdel [option][유저명]
[options]
-r : 홈 디렉터리도 같이 삭제
-f : 삭제 중 나는 에러 무시하고 강제삭제
그룹 생성
format
$groupadd [option][생성할 그룹명]
[option]
-g : gid 지정
그룹 설정 변경
format
$groupmod [option][그룹명]
[options]
-g : gid 변경
-n : 그룹명을 변경
그룹에 속한 유저 확인
format
$groups [그룹명]
그룹 삭제
format
$groupdel [삭제할 그룹명]
비밀번호 재설정
format
$passwd [option][유저명] : 유저명 입력 안 할 시 기본 root 계정
[options]
-d : 계정의 패스워드 삭제
-l : 계정을 lock 상태로 변경
-u : 계정의 lock 상태 해제
네트워크에 연결된 장치에 부여되는 고유 이름 확인
[ex]
$hostnamectl : hostname 설정 및 상세 정보 확인
$hostnamectl set-hostname [name] : hostname을 name으로 변경 (영구, 재부팅 이후에도 유지)
! 압축 효율 순서 1. xz / 2. bzip2 > 3. gzip
다수의 압축형식 압축 / 해제 (지원형식 : 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 형식 파일 압축
format
$zip [option][filename]
zip 형식 파일 압축 해제
format
$unzip [option][filename]
해당 프로세스의 위치 탐색
해당 프로세스에 필요한 라이브러리 탐색 (필요한데 비어있으면 not found 표기)
해당 파일의 Type을 확인하기 위한 명령어
빈 파일 생성하는 명령어 (옵션 없이 사용할 때, 파일의 날짜 시간 정보 변경)
format
$touch [option][파일명] : 해당 파일명으로 빈 파일 생성(옵션 없을 시)
[options]
$touch -c [파일명] : 현재 시간으로 파일 날짜 정보 변경
$touch -t [YYYYMMDDhhmm][파일명] : 파일의 날짜 정보를 변경
디렉터리 생성
format
$mkdir [option][디렉터리명] : 디렉터리를 생성
[options]
-p [생성 디렉터리명/하위 생성 디렉터리명] : 디렉터리를 생성하고 하위 디렉터리도 추가로 생성
-m [권한 값][디렉터리명] : umask 값 무시하고 해당 권한에 대한 디렉터리 생성
파일 검색 (파생 설명 기준은 / -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 : 검색된 파일의 절대 경로명을 화면에 출력 (기본동작옵션)
링크 생성 명령어
format
$ln [원본][링크 파일] : (-s가 없으면) 하드 링크 생성, $ln -s [원본][링크 파일] : 심볼릭 링크 생성
디렉터리 내 파일명 조회
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 '파일이름' : 해당 파일의 마지막 수정 날짜 초 단위까지 표시
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 : 설치된 패치 리스트 확인
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으로부터 파일을 다운로드
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] : 받아온 데이터를 콘솔에 출력과 더불어 해당 내용이 포함된 파일을 생성하여 파일로 저장.
파일 내용 출력
[option]
$cat [파일명] | wc -l : 파일 내 행 계산
명령어 | 설명 |
---|---|
$vi | 파일 편집기, 색상 구분 없음. (CLI, GUI 사용가능) |
$vim | 파일 편집기, vi의 업그레이드 버전, 특별한 단어들을 색상을 입혀 구분함. (CLI, GUI 사용가능) |
$gedit | 파일 편집기 (GUI만 사용가능) |
명령어 | 설명 |
---|---|
$more | Space Bar, Enter를 통해 페이지를 아래로 내려가며 볼 수 있음. (명령어 후미에 파이프(|)를 주로 사용함.) |
$less | less의 경우 위->아래, 아래->위 둘다 이동이 가능하다. 화살표, Page UP, Page Down 사용, 나갈 때 Q를 사용 |
$head | 처음 n행만 출력 (cat [파일명] | head 5 : 파일의 위 5줄 출력) |
$tail | 마지막 n행만 출력 (cat [파일명] | tail 7 : 파일의 마지막 7줄 출력) |
$tail -f [파일명] | 파일 내용을 계속 갱신해줌.(실시간으로 파일 내용이 변경되는 유무를 확인할 수 있음. 장비 로그 확인할 때 용이) |
지정된 파일에 [string] 문구가 있는지 검색하고 그 value가 있는 line을 출력하는 명령어 (명령어 후미에 파이프(|)로 추가적인 옵션으로도 주로 사용함)
option
-v [string] [파일명] : [string]에 해당하는 문구를 제외하고 나머지 행들을 모두 출력
[string] * : *을 입력하면 해당 폴더의 모든 파일에서 [string] 값에 맞는 행들을 전체 출력
[ex]
$grep -v '#' [파일명] : #이 들어간 행을 제외하고 해당 파일 전체 출력
$grep love * : 현재 디렉토리 내에 있는 모든 파일에서 love라는 문자열을 검색해서 출력
텍스트로 된 파일의 행 단위 정렬을 할 때 사용되는 명령어로 특정 DB, 쉘 프로그램 등 데이터를 직접 정렬 또는 편집할 때 사용
format
$sort [option] [extend]
[options]
-b : 선행 공백 무시
-r : 비교 결과를 내림차순으로 정렬(역순)
-n : 숫자가 큰 순서대로 정렬
(-rn 옵션으로 큰 용량을 내림차순으로 나열하는데 자주 쓰임)
-d : 값을 올림차순으로 정렬
[extends]
-k [n] : n번째 필드를 기준으로 정렬
-o [파일명] : 출력을 저장할 파일을 저장
-u : 정렬 후 중복된 내용을 제거한다.
텍스트 변환 유틸로 줄단위(\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
에러 출력을 제거하고 표준 출력만 출력하도록 함.
[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 | 되돌리기 |
보유 중인 서버 시간(운영체제, 소프트웨어)을 확인하는 명령어
[format]
$date -s "[YYYY-MM-DD hh:mm:ss]" : 서버 시간을 수동으로 설정
메인보드에서 운영되는 하드웨어 자체의 시간을 확인하는 명령어
ntp를 대체하는 프로토콜로 빠르고 정확하게 동기화 할 수 있도록 개선함
[path] : /etc/chrony.conf
systemctl restart chronyd && systemctl enable chornyd : chrony를 재시작하고 부팅 후에도 자동 실행 되게 설정
chronyc sources : 타임서버 확인
chronyc -a makestep : 즉시 동기화
현재 날짜, 시간, 타임존, 타임 서버와의 동기화 여부를 모두 확인 가능
(ex)
$timedatectl list-timezones : 국가 별 리스트 출력
$timedatectl set-timezone : 해당 국가로 타임존 변경
$timedatectl set-ntp true : ntp 동기화
전체 계정에 대한 환경 변수 적용파일
format
$source /etc/profile : 해당 환경 변수 파일을 적용
bash의 명령어로 filename 안 명령어를 읽어 실행 (= . 와도 동일함 ex) ./test.sh)
format
$source [filename] : 해당 파일 실행
사용할 로그인 Shell 변경하는 명령어
텍스트, 변수를 출력할 수 있는 명령어
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번 + 페이지 캐시까지 삭제
텍스트, 변수를 환경 변수로 변경, 저장하는 명령어
format
$export [문자열] : 해당 문자열 현재 환경 변수에 저장
[ex]
$export TMOUT=0 : (현재 폴더 위치에 따라) 세션 타임아웃 0초로 변경
환경변수 파일에 값이 저장만 되어있어도 됨. (별도로 실행하여 재적용할 필요 없음)
환경변수 설정 및 변수 목록 확인(조회) 명령어
format
$env [문자열]
Bash 쉘 변수 관리 명령어
format
$set [문자열]
[options]
-a : 생성, 변경되는 변수 export
-e : 오류가 발생하면 스크립트 종료
-x : 수행하는 명령어 출력 후 실행
-c : 다음의 명령을 실행 ( ex) set -c "echo "B"" )
-o : 옵션 설정
Bash 쉘 변수 관리 명령어 (등록된 쉘 변수를 해제함)
format
$unset [문자열]
명령어 두 개 동시에 실행하는 방법
; - 앞의 명령어가 실패해도 다음 명령어가 실행
&& - 앞의 명령어가 성공했을 때 다음 명령어가 실행
& - 앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행
|| - 앞에 명령어가 성공하면 뒤의 명령어를 실행하지 않음
전체 계정에 대한 환경 변수 적용 파일
[options]
$crontab -e : 반복 스케줄 등록 및 수정 (설정값은 아래 링크 확인)
$crontab -l : 등록된 스케줄 확인
$crontab -r : 등록된 crontab 값 전부 제거
[Directory]
$cat /var/log/cron : 스케줄이 발생한 내용에 대한 로그 확인
$cat /etc/crontab : 실제 crontab 파일 위치
로그파일들의 위치 지정
[path] : /etc/rsyslog.conf
현재 로그인한 유저를 알 수 있는 바이너리 파일
$w, $who, $finger
[path] : Linux : /var/run/utp || Unix : /var/adm/utmpx
로그인/로그아웃이 성공한 유저 정보, 시스템 boot, shutdown 정보를 알 수 있는 바이너리 파일
$last
[path] : Linux : /var/log/wtmp || UNIX : /var/adm/wtmpx
가장 최근에/마지막에 성공한 로그인 기록을 보여주는 바이너리 파일
$lastlog, $finger
[path] : Linux : /var/log/lastlog || Unix : /var/adm/lastlog
실패한 로그인 시도를 보여주는 바이너리 파일
$lastb
[path] Linux : /var/log/btmp || Unix : /var/adm/loginlog
su 명령 사용 결과, sshd 데몬, telnet, 원격 접속 등에 대한 기록을 텍스트로 저장한 로그
[path] Linux : /var/log/secure || Unix : /var/adm/sulog
ftp 데몬을 통하여 송수신되는 모든 파일에 대한 기록을 텍스트로 저장한 로그
시스템에 로그인한 유저가 로그아웃할 때까지 명령어, 터미널, 프로세스 시작 등 저장한 로그
기본적으로 파일이 없으므로 accton /var/account/pacct, /usr/lib/acct/accton, /var/adm/pacct 명령 실행 필요
(해커가 해킹 후에 history를 날렸다면 이 로그 파일을 통해 입력 명령어, 터미널 종류, 프로세스 시작 등을 확인할 수 있음.)[command] : $lastcomm [유저명]
[path] Linux : /var/account/pacct || Unix : /var/adm/pacct
시스템 동작에 대한 전반적인 모든 이벤트, 데몬 실행 상황, 시스템 설정 오류, 파일 시스템, Tcp wrapper 접근 제어 정보, 로그인 터널이 텍스트 파일로 저장
[path] : /var/log/message
유저가 입력한 명령어들의 기록이 남아있음.
$history
[path] : ~/.bash_history
리눅스가 부팅될 때 파일 시스템에 대한 체크, 서비스 데몬들의 실행 상태 등을 기록하고 있는 파일
[path] : $/var/log/boot.log
$cat /var/log/dmesg : 부팅 과정에서 발생하는 로그 (커널 정보 포함. boot.log는 커널 이후 로그 기록) //RHEL 8버전부턴 messages에서 조회 가능.
파티션 장치를 지정하면 스왑 영역이 생성되고 해당 파티션에 대한 정보가 출력
[ex]
$mkswap -c /dev/sdb1 : /dev/sdb1을 Swap 파티션으로 변경. -c 옵션은 사전 배드블록을 검사하는 옵션이다.
mkswap으로 영역을 생성한 뒤 시스템에서 스왑 영역이 사용될 수 있도록 활성화
[ex]
$swapon -s /dev/sdb1 : Swap 파티션을 활성화. -s 옵션은 상태를 출력
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 포트 삭제
SELinux 상태를 변경하는 명령어 (Selinux : 커널에 내장되어 강제 접근 제어를 수행하는 모듈), getenforce로 현 상태 조회 가능
[path] : /etc/selinux/config
[ex]
$setenforce 0 : selinux 일시 정지 (getenforce 시 Permissive 표기)
$setenforce 1 : selinux 활성화 (getenforce 시 Enforcing 표기)
$sestatus : selinux 상태 확인
현재 사용 중인 리눅스 서버에서 다른 리눅스 서버로 파일을 복사하거나 받기위해 사용하는 프로토콜
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 : 포트 주소
파티션을 추가, 제거, 조정 등을 할 수 있도록 제공하는 기능
궁극적인 목적은 여러 개의 하드 디스크를 합쳐서 하나의 파일 시스템으로 사용하기 위해 사용
[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 : 두개의 볼륨 그룹을 합친다.
[command]
get : 파일 다운로드
mget : 복수 파일 다운로드
put : 파일 업로드
mput : 복수 파일 업로드
hash : 전송되는 과정 보여주기
open : ftp 서버 접속
exit : ftp 접속 종료