특징 - Open Source - Linus Benedict Torvalds( 리누스베네딕트토르발스 ) 가개발함 - 기존 Unix 커널을경량화하고 GNU project 의 C 라이브러리를포함한운영체제 - 기본적인 Linux 커널을바탕으로여러종류의배포판이만들어져있음 - Linux = Kernel - Linux OS = Kernel + GNU - 버전표시 - <Major>.<Minor>.<Patch> - Major : 커널의큰구조적변화 - Minor : 내부적구현방식의변화 ( 짝수 : 안정화, 홀수 : 개발중 ) - Patch : 같은버전에서업데이트 ( 값이클수록안정적이며기능이향상된것 ) GNU(Gnu Not Unix) 선언문 - Software 의자유배포를위한약속
배포판종류 데비안레드햇맨드리바 SUSE 슬랙웨어아치우분투젠투페도라독립형 리눅스민트데비안, 린스파이어, 마에모, 크노픽스, 크런치뱅리눅스, 핀닉스, 테일스, 칼리리눅스 모블린, 아시아눅스, 아크리눅스, 페도라, CentOS ALT 리눅스, 마제야, PCLinuxOS 오픈수세 베터리눅스, 프로갈웨어 만자로리눅스, 아치뱅리눅스 그뉴센스, 루분투, 리눅스민트, 우분투그놈, 우분투스튜디오, 주분투, 코분투, 쿠분투, 백트랙 사바욘리눅스 레드햇, CentOS 미고
공식사이트 - https://www.centos.org - 6.7 version ISO download - http://mirror.centos.org/centos/6.7/isos/ (i386=32bit, x84_64=64bit) - release note - https://wiki.centos.org/manuals/releasenotes/centos6.7
가상머신생성 - Player File New Virtual Machine 운영체제선택 - Linux CentOS 64-bit
가상머신이름및저장위치지정 HDD 용량선택
설정확인및완료 설치된폴더및파일확인 -.vmx : Virtual machine 설정파일 -.vmdk : Virtual disk 파일
추가설정 - 필요없는하드웨어삭제 - ISO 이미지삽입 - CentOS-6.7-x86_64-bin-DVD1.iso - Player 는 Network Adapter -> Advanced 설정에서 MAC 주소변경
부트종류선택 - Install or upgrade an existing system - 그래픽환경으로설치 ( 기본 ) - Install system with basic video driver - 자체그래픽을이용하여그래픽설치환경지원 - Rescue installed system - 복구모드 - Boot from local drive - 최초설치된디스크에서부팅
설치매체 (CD) 상태확인 - 시간이오래걸림 : Skip 그래픽환경설치시작
설치환경언어선택 - Korean( 한국어 ) 키보드타입선택 - U.S. 영어 ( 설치후변경가능 )
저장매체종류설정 - 기본저장장치 - 로컬시스템에직접연결된하드디스크나 SSD 에설치 - 특별한저장장치 - 직접액세스저장장치 (DASD) - 다중경로를멀티패스장치 - SAN 파티션오류경고창 - 하드디스크에서파티션정보를읽어올수없을때발생 ( 무시 )
호스트명및네트워크기본설정 - 변경하지않음 ( 설치후변경가능 ) 시스템시간설정 - 기본값 ( 설치후실습에서변경 )
root( 슈퍼유저 ) 비밀번호설정 - Windows 의 administrator 계정과같음 - Passw0rd 설정 - 보안에취약한비밀번호설정시경고메시지 : 무시가능 파티션종류선택 - 사용자레이아웃만들기
파티션설정 - 용량 - swap : 메모리 2 배 - var : 2G - home : 2G - tmp : 2G - /( 최상위 ) : 나머지 - sda(/dev/sda) - 하드디스크장치명 - 여유공간선택 만들기
Swap 파티션만들기 - 여유공간선택 만들기
파티션타입선택 - 표준파티션 생성
Swap 파티션설정 - 파일시스템유형 swap - 추가용량옵션 고정용량 - 용량 (MB) 2G(2 x 1024) = 2048M - Swap : 가상메모리
var 파티션만들기 - 여유공간선택 만들기
파티션타입선택 - 표준파티션 생성
var 파티션설정 - 마운트지정 : /var - 파일시스템유형 ext4 - 추가용량옵션 고정용량 - 용량 (MB) 2G(2 x 1024) = 2048M
home 파티션만들기 - 여유공간선택 만들기
파티션타입선택 - 표준파티션 생성
home 파티션설정 - 마운트지정 : /home - 파일시스템유형 ext4 - 추가용량옵션 고정용량 - 용량 (MB) 2G(2 x 1024) = 2048M
tmp 파티션만들기 - 여유공간선택 만들기
파티션타입선택 - 표준파티션 생성
tmp 파티션설정 - 마운트지정 : /tmp - 파일시스템유형 ext4 - 추가용량옵션 고정용량 - 용량 (MB) 2G(2 x 1024) = 2048M
/( 최상위 ) 파티션만들기 - 여유공간선택 만들기
파티션타입선택 - 표준파티션 생성
/( 최상위 ) 파티션설정 - 마운트지정 : / - 파일시스템유형 ext4 - 추가용량옵션 가능한최대용량으로채움 - 첫번째파티션으로만듦체크
파티션생성및포맷후파티션구조저장하기 - 다음 포맷 디스크에변경사항기록
패키지소프트웨어선택 - Desktop - 일반사용자를위한여러종류의추가소프트웨어설치 - GUI 환경 - Minimal - 운영체제동작에필요한필수소프트웨어만설치 - CLI 환경 - Basic Server - 데이터베이스설치 - Web Server - Apache 웹서버설치
부트로더설정 - 일반적으로 /( 최상위 ) 파티션 : 기본값
설치완료후재부팅
운영체제초기설정시작
라이선스확인
사용자계정생성 - 사용자이름 : ktest - 성명 : 본인이름이니셜 - 암호 : P@ssw0rd - 나머지 : 기본값
날짜및시간 - 기본값 ( 실습에서변경 ) 오류메시지 - 확인 ( 무시 )
관리자 (root) 로그온 - 기타 사용자이름 : Root 암호 : P@ssw0rd Root 계정사용경고메시지 - 닫기 ( 무시 )
패널에터미널프로그램등록 - 프로그램 시스템도구 터미널우클릭 이실행아이콘을패널에추가 네트워크설정 - 프로그램 보조프로그램 gedit 텍스트편집기
네트워크설정 - 파일 열기 파일시스템 etc sysconfig network-script ifcfg-eth0 - 수정 ( 대소문자, 공백주의 ) - DEVICE= 기본값 - HWADDR= 기본값 - TYPE= 기본값 - UUID= 기본값 - ( 변경 )ONBOOT=yes - ( 변경 )NM_CONTROLLED=no - ( 변경 )BOOTPROTO=static - ( 추가 )IPADDR=200.200.200.xxx - ( 추가 )NETMASK=255.255.255.0 - ( 추가 )GATEWAY=200.200.200.254 - ( 추가 )DNS1=168.126.63.1 - 설정완료후 저장 프로그램종료
네트워크설정 - 터미널실행 service network restart - IP 확인 : ifconfig
불필요한서비스및보안기능해제 (selinux 비활성화 ) - gedit 실행 열기 파일시스템 etc sysconfig selinux - 설정변경후저장 - SELINUX=disabled - SELINUXTYPE=targeted 앞에 #( 주석 ) #SELINUXTYPE=targeted
불필요한서비스및보안기능해제 (iptables 비활성화 ) - 터미널실행 - 방화벽중지 : service iptables stop - 시작프로그램제외 : chkconfig --level 2345 iptables off - 결과확인 : chkconfig --list iptables
불필요한서비스및보안기능해제 (NetworkManager 비활성화 ) - 터미널실행 - 네트워크관리프로그램중지 : service NetworkManager stop - 시작프로그램제외 : chkconfig --level 2345 NetworkManager off - 결과확인 : chkconfig --list NetworkManager
VMware Tools 설치후종료 - VMware 의 Player Manage Install VMware Tools - 빈디렉터리생성후마운트 - mkdir /mnt/cdrom - mount /dev/cdrom /mnt/cdrom - 설치파일복사 - cp /mnt/cdrom/vmwaretools-< 버전정보 >.tar.gz /tmp - 압축해제 - cd /tmp - tar zxvfp VMwareTools-< 버전정보 >.tar.gz - 설치파일실행 - cd vmware-tools-distrib/ -./vmware-install.pl - 모든설정은기본값선택 ( 계속엔터 ) - 설치종료후시스템종료 - shutdown h now 백업
용도 - 매뉴얼확인 ( 상세도움말 ) - 기본적으로첫번째발견된매뉴얼페이지만출력 사용법 - [root@kh-linux~]# man [option] [section] [command] -a 모든매뉴얼페이지출력 -f 간단한설명만출력 NAME SYNOPSIS OPTION ENVIRONMENT 설명할명령어 명령어의사용방법 OPTION SECTION 명령에서사용되는옵션 명령어가사용되는환경
용도 - 시스템의시간 ( 커널 ) 과날짜확인 - 권한이필요함 사용법 - 확인 [root@kh-linux~]# date - 수정 [root@kh-linux~]# date [MMDDhhmm[[CC]YY][.ss]] MM DD hh mm CC YY ss 월일시간분연도앞연도뒤초
용도 - 간단한달력확인 사용법 - [root@kh-linux~]# cal [ 연도 ]
용도 - 하드웨어 (ROM-BIOS) 시간동기화 - 권한이필요함 사용법 - [root@kh-linux~]# hwclock [option] -r 하드웨어시간확인 OPTION -s 시스템시간을하드웨어시간과동기화 -w 하드웨어시간을시스템시간과동기화
용도 - 원격지로부터시간동기화 사용법 - [root@kh-linux~]# rdate [option] [NTPserver address] -p NTP server 시간출력 OPTION -s NTP server 와시스템시간동기화 LG U+ NTP Server List time.bora.net 또는 gps.bora.net KRISS time.kriss.re.kr 또는 203.254.163.74
용도 - 현재로그인한계정이름확인 사용법 - [root@kh-linux~]# logname [option]
용도 - 시스템 CPU 정보확인 사용법 - [root@kh-linux~]# arch [option]
용도 - 시스템정보확인 사용법 - [root@kh-linux~]# uname [option] OPTION -a 모든정보출력 -m 하드웨어타입 (CPU 정보 ) 출력 -n 호스트명출력 -r OS 릴리즈번호출력 -s OS 이름출력 -v OS 버전출력
용도 - 명령어의간단한설명확인 사용법 - [root@kh-linux~]# whatis [option]
용도 - 명령어의경로확인 사용법 - [root@kh-linux~]# which [option] [command]
용도 - 화면지우기 - 내용을삭제하는것이아님 - 마지막출력라인을화면제일위로올려줌 사용법 - [root@kh-linux~]# clear
용도 - 표준출력 - 입력한문자열을그대로출력 - redirection 을이용하여파일생성 ( 덮어쓰기 / 추가쓰기 ) 사용법 - [root@kh-linux~]# echo [option] [string] Redirection - 입 / 출력방향전환 /dev/stdin(0) /dev/stdout(1) /dev/stderr(2) Input/Output 표준입력 표준출력 표준에러 Redirection > 왼쪽결과를오른쪽출력 ( 덮어쓰기 ) >> 왼쪽결과를오른쪽출력 ( 추가쓰기 ) < 오른쪽결과를왼쪽입력 ( 덮어쓰기 ) << 오른쪽결과를왼쪽입력 ( 추가쓰기 )
용도 - 사용한명령어목록확인 사용법 - [root@kh-linux~]# history [num] - [num] 을지정하면해당숫자만큼최근사용한명령어출력
용도 - 별칭확인및설정 사용법 - [root@kh-linux~]# alias [ 별칭 = command ] - alias 설정을무시하고실행하고싶을때는 \ 별칭 으로입력
용도 - 별칭해제 사용법 - [root@kh-linux~]# unalias 별칭
(1 단계 ) POST 동작 - 시스템의기본적인하드웨어이상유무점검 - 시스템의하드웨어정보수집 (2 단계 ) Boot Loader(GRUB) 동작 - 하드디스크에서커널정보를읽어서메모리에적재 - 커널에시스템제어권한을넘김 (3 단계 ) 커널동작 - 운영체제동작시작 - 하드웨어점검완료 - 내부자료구조초기화 - 부가적인커널모듈을하드디스크에서메모리로적재 (4 단계 ) init 프로세스동작 - 커널에의해생성되는첫번째프로세스 (init) 실행 - init 프로세스 = PID 1 - init 프로세스정보확인
Linux Booting 상세단계 1단계 ROM-BIOS(POST) 2단계 CMOS 3단계 MBR 4단계 부트로더동작 (GRUB) 5단계 스왑프로세스수행 6단계 Init 프로세스실행 7단계 서비스실행
Linux shutdown - 운영중인시스템의정기점검, H/W 나 S/W 변경및추가, 기타관리작업등을위해필요함 주의 - 접속중인사용자에게종료를공지하여작업을마무리하게해야함 - 운영중인서비스를안정하게종료해야함 - 하드디스크를갱신하여파일시스템의무결성을유지해야함 하드디스크동기화 (sync) - 하드디스크 I/O( 입 / 출력 ) 의효율성을높이기위해버퍼를이용하므로종료시버퍼상의데이터가디스크에반영되지않으면데이터손실이발생함
Linux Shutdown 단계 1단계 Shutdown 명령을수행한후 sync 작업수행 2단계 접속해있는사용자에게종료메시지전송 3단계 새로운사용자로그인금지 4단계 지정된시간에종료되지않은프로세스강제종료 (kill) 5단계 지정된시간에 logout하지않은사용자강제 logout 6단계 메모리에남아있는데이터를디스크에저장 (sync) 7단계 시스템종료에관련된정보를로그파일에기록 (wtmp, utmp) 8단계 마운트되어있는장치는마운트해제 (unmount) 9단계 시스템종료 (halt)
용도 - 시스템종료및재부팅 사용법 - [root@kh-linux~]# shutdown [option] [time] [message] OPTION -k(knock) 종료를알리는경고메시지전송 ( 실제종료되지않음 ) -h Shutdown 후종료 (half) 실행 -r Shutdown 후재부팅 (reboot) 실행 -f(fast reboot) 재부팅시 fsck(fast system check) 를수행하지않음 ( 빠른재부팅 ) -c 예약되어있는 shutdown 을취소 ( 시간지정은안되지만사용자에게메시지전송은가능함 )
용도 - 시스템즉시종료 사용법 - [root@kh-linux~]# poweroff [option] - [root@kh-linux~]# halt [option] 차이점 - 하드디스크동기화유무 - poweroff 는동기화시키지않고종료 : sync 로동기화하고사용해야함
용도 - 시스템재시작 사용법 - [root@kh-linux~]# reboot [option]
용도 - run level 선택 - run level : 시스템의동작방식을정의해놓은것 사용법 - [root@kh-linux~]# init [option] [run level] Run Level 0 종료모드하드디스크동기화후종료 1 단일사용자모드 (single mode) 시스템복구 2 다중사용자 CLI NFS/X-window 를제외한부팅 3 다중사용자 CLI X-window 를제외한부팅 4 X 사용하지않음 ( 사용자정의가능 ) 5 다중사용자 GUI X-window 환경으로모든서비스포함 6 재부팅모드시스템재시작
절대경로 - 최상위경로를기준으로현재파일이나디렉터리의위치를나타내는경로 - 사용자의현재위치와는관계없음 상대경로 - 현재위치를기준으로파일이나디렉터리의위치를나타내는경로 - 사용자의현재위치에따라경로가달라짐 Linux 파일및디렉터리특징 - 대 / 소문자구분 - 파일과디렉터리이름중복불가 - 디렉터리의기본크기 = Block(4096byte) Linux 디렉터리구조 - FHS(Filesystems Hierarchy System) : Tree 형태의계층적인구조 - 최상위디렉터리 : /
bin / - 최상위경로 boot bin - 사용자를위한명령어저장 - ls, ps, mv, cat, chmod, date, mount boot - 부트로더및부팅을위한파일저장 / dev etc home lost + found 사용자홈디렉터리 dev - 시스템의장치 (devices) 파일저장 - 시스템의모든장치가파일로표현 - udev daemon 에의해관리됨 media misc usr etc bin ETC. local
etc - 시스템및프로그램의환경설정파일 - 계정파일, 네트워크설정파일등시스템의주요관리파일 - 백업필요 home - 사용자계정의홈디렉터리기본경로 - 계정명으로홈디렉터리가생성됨 lib - 시스템프로그램실행에필요한공유라이브러리 - 변경및삭제하지않는것이좋음 media - 플로피, CD-ROM, DVD 등이동식디스크가 mount 됨
mnt - 파일시스템임시 mount 경로 opt - 추가 S/W 설치경로 proc - 실행중인프로세스, CPU, memory 등의시스템정보가가상파일로저장 - 대부분의파일이읽기전용 - 쓰기가능한파일의설정의변경하여커널의기능을변경할수있음 (Kernel parameter) root - root 계정 ( 관리자 ) 의홈디렉터리 - root 계정으로만접근이가능함
sbin - system 관리용명령저장 - 시스템수정, 복구작업에사용되는명령어 - 일반사용자들의접근을제한해야함 - ifconfig, reboot, shutdown, mount, fsck, mkfs srv - Service 디렉터리 - 주로 FTP, HTTP, CVS 등의데이터가저장됨 sys - system 동작에필요한파일저장 - 변경및삭제하지않는것이좋음 usr - 일반사용자들을위한 S/W 설치위치
var - 수시로업데이트되는파일들이위치함 - log 파일 - http, mail, dns 등이동작할때필요한데이터가저장되기도함 lost + found - 부팅시파일시스템에문제발생시 fsck(file system check) 명령으로복구할때사용됨 - 한파일시스템당하나만존재함
I-node(Index node) - 파일이나디렉터리의모든정보를가지고있는정보집합체 - 사용자프로세스가커널을통해디스크에있는데이터에접근하기위해커널은현재사용중인파일에대한자료구조를유지해야함 - 커널에서관리하는파일시스템과관련된중요한자료구조 - 한 I-node 당크기 : 64kbyte I-node list table - 하나의파일시스템에서파일이나디렉터리들의 I-node 정보모음 I-node Number(inumber) - I-node 가 I-node list table 에등록될때가지게되는 I-node 식별번호 Directory list table - 파일의이름과매칭되는 I-node 정보모음
File System Layout Hard disk Hard disk record Partition 1 Partition 2 Partition 3 Partition Boot Blocks Super Blocks I-node list Data Super Blocks I-node list Data Super Blocks I-node list table I-num : 2 Data Block Reference : 3, 7, 9 Meta data : Permissions etc. Directory List Table I-num : 2 Filename : Kernel 3 4 5 6 7 8 9
I-node 자료구조 - 파일종류 - 권한 - 소유자 ID - 소속그룹 ID - 크기 (byte 단위 ) - 시간 ( 최근사용시간, 최근수정시간, I-node 최근수정시간 ) - 파일링크수 : 해당 I-node 를참조하고있는횟수 - 디스크의물리적인주소 File type Permission(12) UID(192) GID(192) Size Date (last access time, last mod time, last inode access time) Direct Pointer (12 개 ) Single Pointer Double Pointer Triple Pointer Shadow I-node
I-number 확인 - 파일 - [root@kh-linux~]# ls -i - 파일시스템 - [root@kh-linux~]# df I - 전체정보확인 - [root@kh-linux~]# stat
파일종류 - 일반파일 b 블록형특수장치파일 ( 주로디스크, /dev/sda 등 ) C 문자형특수파일 ( 주로입 / 출력에사용, dev/console 등 ) d(/) P(=) S l(a) 디렉터리파일 파이프파일 소켓파일 심볼릭링크파일 확장자의의미 - 윈도우와다르게특별한의미가없음 - 보통프로그램개발언어등을표시
일반파일 - 기본적인대부분의파일 - 원하는형식의데이터저장이가능하며각사용자들이소유권한을가짐 - 데이터베이스, 동영상, 음악, 실행파일등 디렉터리파일 - 특수파일 - 연관있는파일들을하나의그룹으로만들어저장하도록구분되어있는공간 - 하나의 inode 를할당받으며파일이름과 inumber 를매칭하는항목의리스트로구성되어있음 - 현재디렉터리 :. - 상위디렉터리 :.. 디바이스파일 - 하드웨어를하나의파일로인식하여관리함 - 블록디바이스파일 : 디스크, 테이프등의저장장치 - 문자디바이스파일 : 터미널, 프린터등의출력장치 - 키보드디바이스파일에서데이터를읽음, 사운드디바이스파일에소리파일을보내면스피커로출력됨
디렉터리파일 - 원본파일과동일한 inode 에연결되는링크 - 링크파일을수정하면원본파일의내용도함께수정됨 - 다른파일시스템에서링크불가능 - 원본과동일한 inode 를사용함 - 링크카운트가증가함 링크파일 - 파일과디렉터리의관리를편리하게하고자하는목적으로사용됨 - 상위디렉터리가많은경우파일명만이용하여접근 - 긴파일명의파일을자주참조할경우다른디렉터리에연결 - 해킹에이용될수있으므로주기적으로확인하여불필요한링크파일은삭제하는것이좋음 - 심볼릭링크방식을더많이사용함
심볼릭 ( 소프트 ) 링크 - 원본파일의위치정보를가지는단축아이콘 - 윈도우의바로가기와비슷한개념으로특정파일을가리키고있는파일 - 심볼릭링크파일을변경해도원본파일에는변화가없음 - 다른파일시스템에서도링크가능 - 별도의 inode 를가지며링크파일이가지고있는용량만큼디스크의공간을차지함 - 원본의링크카운트가증가하지않음 하드링크 - 원본파일과동일한 inode 에연결되는링크 - 하나의파일에여러개의이름을지정해서사용하는개념 - 다른파일시스템에서링크불가능 - 원본과동일한 inode 를사용함 - 원본의링크카운트가증가함
용도 - 현재디렉터리위치확인 사용법 - [root@kh-linux~]# pwd
용도 - change directory - 디렉터리이동 사용법 - [root@kh-linux~]# cd [ 이동할디렉터리의상대경로또는절대경로 ]. 현재위치한디렉터리.. 현재위치의상위디렉터리 ~ 계정의홈디렉터리 ~[ 계정명 ] 지정한계정의홈디렉터리 / 최상위디렉터리
용도 - 지정한디렉터리의파일목록출력 사용법 - [root@kh-linux~]# ls [option] [ 디렉터리의상대경로또는절대경로 ] -a/-a OPTIONS 숨김파일을포함하여출력 /.,.. 을제외하고출력 -i 파일의 inumber 출력 -l/-n 파일의 inode 를포함한상세내용출력 /UID, GID 로출력 -k 파일크기를 KB 단위로출력 -m 가로목록으로출력 -F 파일이름에파일종류를구분하는기호를함께출력 -R 하위디렉터리의모든파일출력 -1 한줄에한파일씩출력
용도 - 디렉터리생성 사용법 - [root@kh-linux~]# mkdir [option] [ 디렉터리이름 ] OPTIONS -m 생성할디렉터리의권한설정 (default : 755) -p 상위디렉터리함께생성
용도 - 빈디렉터리생성 사용법 - [root@kh-linux~]# rmdir [option] [ 디렉터리이름 ] -p 상위경로의디렉터리까지삭제 OPTIONS 주의사항 - 무조건빈디렉터리만삭제됨
용도 - 파일의종류를자동으로판단하여출력 사용법 - [root@kh-linux~]# file [option] [ 파일이름 ] OPTIONS -f 리스트파일을이용하여파일의종류확인 -m 매직파일을선택해서파일의종류확인
용도 - 지정된파일내용을표준출력으로확인 사용법 - [root@kh-linux~]# cat [option] [ 파일이름 ] -n 라인번호를포함하여출력 OPTIONS -b 라인번호를포함하여출력하지만공백라인은제외하고출력 redirection 을이용한파일생성 - [root@kh-linux~]# cat > [ 파일이름 ] - [root@kh-linux~]# [ 내용입력 ] - [root@kh-linux~]# [ctrl + d : 저장후종료 ]
용도 - 파일의처음부터지정된줄까지출력 - default : 처음부터 10 행 사용법 - [root@kh-linux~]# head [option] [ 파일이름 ] -n NUM 지정한줄만큼출력 OPTIONS -c SIZE 지정한크기만큼출력 ( 단위 : byte)
용도 - 파일의마지막부터지정된줄까지출력 - default : 마지막부터 10 행 사용법 - [root@kh-linux~]# tail [option] [ 파일이름 ] -n NUM 지정한줄만큼출력 OPTIONS -c SIZE 지정한크기만큼출력 ( 단위 : byte) -f 실시간추가되는내용출력 ( 주로 log 파일을확인할때자주사용됨 )
용도 - 많은출력결과를화면사이즈에맞게한페이지씩출력 - ( 파이프 ) 를이용하여다른명령의결과를처리할수있음 ( 예 : ls l /etc more) 사용법 - [root@kh-linux~]# more [+number] [ 파일이름 ] Space Enter b d KEY 한페이지씩출력 한행씩출력 이전페이지출력 다음페이지반만출력 / 문자열지정된문자열검색 n / 문자열 로검색후다음찾기 h KEY 키도움말출력 = 현재위치의행번호출력 v q vi( 텍스트편집기 ) 모드로이동 more 동작종료! 쉘명령지정된쉘명령실행
용도 - 많은출력결과를화면사이즈에맞게한페이지씩출력 - more 와동일한기능제공 사용법 - [root@kh-linux~]# less [+number] [ 파일이름 ] Space Enter b d KEY 한페이지씩출력 한행씩출력 이전페이지출력 다음페이지반만출력 / 문자열지정된문자열검색 n / 문자열 로검색후다음찾기 h KEY 키도움말출력 = 현재위치의행번호출력 v q vi( 텍스트편집기 ) 모드로이동 more 동작종료! 쉘명령지정된쉘명령실행
용도 - 파일이존재할때 : 지정된파일의시간정보를갱신함 - 파일이존재하지않을때 : 0byte 의빈파일생성 사용법 - [root@kh-linux~]# touch [option] [ 파일이름 ] -a 파일의최근사용시간만변경 OPTIONS -c 파일이존재하지않을때파일을생성하지않음 -m 파일의최근변경시간만변경 -t 파일의날짜를임의의날짜로지정하여변경
용도 - 파일및디렉터리삭제 사용법 - [root@kh-linux~]# rm [option] [ 파일이름 ] OPTIONS -i 파일및디렉터리를삭제할때확인함 (y= 삭제, n= 취소 ) -f 파일및디렉터리를삭제할때확인하지않고강제삭제함 -r 해당디렉터리의하위디렉터리까지모두삭제
용도 - 원본파일을대상파일로복사 사용법 - [root@kh-linux~]# cp [option] [ 원본파일 ] [ 대상파일 ]
OPTIONS -a 가능한원래파일의퍼미션을보존 -b 백업파일생성 -d 복사할원본이심볼릭링크파일일경우심볼릭정보와함께복사 -f 복사할파일이름이겹칠때강제로복사 -i 복사할파일이름이겹칠때확인하고복사 -l 하드링크생성 -p 소유주, 소속그룹, 퍼미션, 시간등을동일하게복사 -s 심볼릭링크파일생성 -U 복사할대상이원본과변경날짜가같거나더욱최신파일이면복사하지않음 -v 복사하기전에복사할파일출력 -R 하위디렉터리까지복사 -r 하위디렉터리까지복사
용도 - 파일의이름변경 - 파일을다른경로로이동 사용법 - [root@kh-linux~]# mv [option] [ 원본파일 ] [ 대상파일 ] OPTIONS -f 이동할위치에이동할파일이름이겹치면확인하지않고강제로이동함 -i 이동할위치에이동할파일이름이겹치면확인함
용도 - 링크파일생성 심볼릭링크사용법 - [root@kh-linux~]# ln -s [option] [ 원본파일 ] [ 심볼릭링크파일 ] 하드링크사용법 - [root@kh-linux~]# ln [option] [ 원본파일 ] [ 심볼릭링크파일 ] OPTIONS -b 대상파일이존재할때백업파일을생성한후링크파일생성 -d 디렉터리하드링크 ( 시스템권한으로제한되는경우가있음 ) -f 대상파일이존재할때기존의파일을강제로삭제하고링크파일생성 -i 대상파일이존재할때기존의파일을삭제할것인지확인후생성 -s 심볼릭링크파일생성 -S 백업파일을생성할때원하는접미사지정
1. 최상위디렉터리하위에 test 이름의디렉터리생성 2. 생성한 test 디렉터리로이동 3. test 디렉터리하위에 file1의이름을갖는빈파일생성 4. file2 파일을생성하면서 hello라는데이터를새로쓰기 ( 단, 명령어한줄로처리 ) 5. file2 데이터에 byebye 데이터이어쓰기 ( 단, cat 명령어를이용해서추가 ) 6. file2의데이터내용확인 7. 생성한 test 디렉터리하위에 dir1 디렉터리생성 8. test 디렉터리하위에있는 file2 파일을이전에생성한 dir1 디렉터리로복사 9. test 디렉터리하위에있는 file1 파일의이름을 file1-mod로변경 10. test 디렉터리하위에있는 dir1 디렉터리하위에있는 file2 파일의하드링크파일을 /root/file2-hard 라는파일이름으로생성 11. test 디렉터리하위에있는 dir1 디렉터리하위에있는 file2 파일의심볼릭링크파일을 /var/file2-soft 라는파일이름으로생성 ( 단, 상대경로로 ) 12. 최상위밑에존재하는 test 디렉터리를한번에삭제
용도 - word count - 파일의통계확인 사용법 - [root@kh-linux~]# wc [option] [ 파일이름 ] -c 파일내용중에서문자개수출력 -l 파일내용중에서줄의개수출력 OPTIONS -w 파일내용중에서단어의개수출력 -L 파일내용중에서가장긴문자의길이출력 -m 파일의글자수출력
용도 - 지정된디렉터리하위의파일검색 사용법 - [root@kh-linux~]# find [ 디렉터리 ] [option] [action]
-empty -uid [UID] -gid [GID] -user [username] -group [groupname] -nouser -nogroup -name [ 문자열 ] -per [permission] -type [f/d/b/ ] -atime [+n/n/-n] -mtime [+n/n/-n] OPTIONS 비어있는파일찾기지정된 UID 값으로찾기지정된 GID 값으로찾기소유자로찾기소속그룹명으로찾기소유주가없는파일찾기소속그룹없는파일찾기파일이름으로찾기지정된권한을갖는파일찾기지정된파일타입을이용하여파일찾기 Access 시간을이용하여찾기파일내용을변경한시간을이용하여찾기
-ctime [+n/n/-n] -size [+n/n/-n] OPTIONS 파일정보를변경한시간을이용하여찾기 n 정확하게 n일전에변경된파일찾기 +n 현재 ~ n일동안변경되지않고, n일이전에변경된파일찾기 -n 현재 ~ n일동안변경된파일찾기파일의크기를이용하여찾기 n 정확하게 n크기의파일찾기 +n n크기이상의파일찾기 -n n크기이하의파일찾기
-print -exec command {} \; -ok command {} \; ACTION 리스트출력 Find의결과에 command 적용 Find의결과에 command를적용할것인지확인후적용 {} Find 명령의결과집합 \; 명령의끝
1. /usr 디렉터리에서 rdate 파일찾기 2. /usr 디렉터리에서 rd로시작하는파일찾기 3. /usr 디렉터리에서첫번째글자가 r 또는 a 로시작, 두번째글자가 c 또는 d로시작 하는모든파일찾기 4. /usr 디렉터리에서첫번째글자가 a 또는 b로시작하는 4개의문자로구성된파일찾 기 5. 자신의계정홈디렉터리에서소유자가 (ls -l 의 3번째필드 ) 자신의계정인것을찾기 6. /root 디렉터리에서일반파일만찾기 7. 최상위디렉터리에서심볼릭링크찾기
용도 - 파일또는명령어의결과에서특정패턴의문자열검색 사용법 - [root@kh-linux~]# grep [option] [ 패턴 ] [ 파일이름 ] OPTIONS -c 검색된문자를출력하는대신검색된행의총수를출력 -h 파일이름을출력하지않음 -i 대 / 소문자를구분하지않고검색 -n 검색된문자의행의번호를함께출력함 -s 에러메시지만출력 -v 지정된표현식에매치되지않은행만출력 -w 메타문자 ( 정규표현식 ) 를무시하고한단어로취급하여검색
정규표현식 - 메타문자를이용하여특정패턴을만들고자할때사용함 정규표현식. 아무문자나한문자대체 * 0회이상반복 \+ 1회이상반복 \? 0회또는 1회반복 \{n\} n회반복 \{n,\} n회이상반복 \{n,m\} n회이상 m회이하반복 \{,m\} m회이하반복 정규표현식 \( 문자열 \) 문자열을한단어로취급 [ ] [ ] 안의문자중 1개이상일치 [^] [ ] 안의문자제외 \< 단어의시작지정 \> 단어의끝지정 ^ 문장의시작지정 $ 문장의끝지정 \ 메타문자가아닌본래의문자
용도 - 문서편집기 - 한행씩편집하는것이아니라한화면당편집하는기능을지원하는프로그램 사용법 - [root@kh-linux~]# vi [option] [ 파일이름 ] -R 읽기전용으로열기 +n n 번째행에서열기 OPTIONS +/ 문자열지정된문자열이위치한행에서열기 -r 문서편집중비정상종료가발생했을때편집중이던문서로복구 [ 파일 1] [ 파일 2] 다중파일열기 [ 명령모드 ] :n 다중파일열기상태에서다음파일로이동 [ 명령모드 ] :N 다중파일열기상태에서이전파일로이동 [ 명령모드 ] :args 현재파일의이름확인
명령모드 - vi editor 의기본모드이며다른모드로전환을수행할수있는모드 - 간단한검색, 커서이동, 복사 / 붙여넣기등의편집을수행함 편집 ( 입력 ) 모드 - 문서의텍스트를입력, 수정, 삭제할수있는모드 - 내용을작성할때사용됨 실행 (ex) 모드 - vi editor 를제어하는명령어를실행하는모드 - 각종치환, 저장, 파일읽기, vi editor 의환경설정등을수행함
모드이동 - 명령모드 입력모드 - 명령모드 실행모드 - 입력 / 실행모드 명령모드 실행모드 :, /,? ESC 명령모드 a, A, i, I, o, O ESC 입력모드
명령모드 입력모드 i 현재커서의위치부터입력 I 현재커서의행의처음으로이동하여입력 a 현재커서의다음부터입력 ( 오른쪽한칸이동 ) A 현재커서의행의마지막으로이동하여입력 o 현재커서의다음행에빈줄을생성한후입력 O 형재커서의이전행에빈중을생성한후입력 s 현재커서의한문자를삭제한후입력 S 현재커서의한행을삭제한후입력 R 수정입력모드 (replace) 로변경 명령모드 실행모드 : 명령어실행모드 / 검색모드 ( 아래로검색 )? 검색모드 ( 위로검색 )
명령모드명령어 u 되돌리기 ( 실행취소 ) ctrl + r 되돌리기취소커서이동 h 왼쪽 l 오른쪽 k 위 j 아래단어단위로이동 w 현재커서를기준으로다음단어로이동 [n]w 현재커서를기준으로 n개만큼다음단어로이동 b 현재커서를기준으로이전단어로이동 [n]b 현재커서를기준으로 n개만큼이전단어로이동
명령모드명령어 행단위로이동 0( 숫자 ) 한행의처음으로이동 (home) $ 한행의마지막으로이동 (end) G 한문서의마지막행으로이동 g 한문서의처음행으로이동 [n]g n번째행으로이동대 / 소문자변환 ~ 현재커서의문자를대 / 소문자로변환 [n]~ 현재커서를기준으로오른쪽으로 n개만큼의문자를대 / 소문자로변환. 마지막명령재실행복사 y 현재커서위치의한문자를복사 ( 버퍼에임시저장 ) [n]y 현재커서를기준으로오른쪽으로 n개의문자를복사 ( 버퍼에임시저장 )
명령모드명령어 yy 현재커서가위치한한행을복사 ( 버퍼에임시저장 ) [n]yy 현재커서를기준으로아래의 n개의행을복사 ( 버퍼에임시저장 ) 붙여넣기 p 현재커서를기준으로위쪽으로행을붙여넣기 P 현재커서를기준으로아래쪽으로행을붙여넣기 삭제 x 현재커서가위치의한문자삭제 [n]x 현재커서를기준으로오른쪽으로 n개의문자를삭제 d 현재커서를기준으로왼쪽으로한문자삭제 d 현재커서를기준으로오른쪽으로한문자삭제 d 현재커서가위치한행 + 다음행삭제 d 현재커서가위치한행 + 이전행삭제 [n]d[, ] 현재커서를기준으로방향키방향으로 n개의문자삭제
명령모드명령어 [n]d[, ] 현재커서를기준으로방향키방향으로 n개의행삭제 dd 현재커서가위치한한행을삭제 [n]dd 현재커서를기준으로아래로 n개의행삭제
실행모드명령어 문자열검색 :set ic 검색에서대 / 소문자구분안함 :set noic 검색에서대 / 소문자를구분함 / 문자열 커서의위치에서아래로검색? 문자열 커서의위치에서위로검색 n ( 검색상태에서 ) 다음문자열검색 N ( 검색상태에서 ) 이전문자열검색 :%s / 문자열1/ 문자열2 /g 문자열1 을 문자열2 로치환 시스템명령 :!bash Shell환경으로전환 (vi editor로재전환 : exit, ctrl + D) :! 명령어 Shell환경에서명령어를실행한후 vi editor로재전환 :r! 명령어 Shell환경에서실행된명령의결과를 vi editor로출력
실행모드명령어 ( 사용자정의옵션 ) :n split [ 파일이름 ] 현재문서에서 n행만큼화면을자르고다른파일열기 :set nu 행번호표시 :set nonu 행번호숨기기 (default) :set ts=n Tab문자의칸수 ( 간격 ) 지정 (default : 8) :set list Tab문자또는개행문자표시 :set nolist Tab문자또는개행문자숨기기 :ab 정의된별칭 ( 문자 ) 확인 :ab [ 별칭이름 ] [ 문자열 ] 별칭정의 ( 입력모드에서사용함 ) :una [ 별칭이름 ] 별칭해제 :map [ 매크로 ] [ 명령어 ] 매크로정의 ( 명령모드에서사용함 ) :unmap [ 매크로 ] 매크로해제 :set ( 종료 : q) 현재환경설정내용확인 :set all ( 종료 : q) 모든환경설정내용확인
실행모드명령어 종료 저장 (w), 종료 (q), 강제 (!) w 문서저장 w! 강제문서저장 q 저장하지않고종료 q! 저장하지않고강제종료 wq(=x) 저장후종료 wq! 저장후강제종료 wq(=x) [ 파일이름 ] 다른이름으로저장 e! 현재문서를저장하지않고최종저장된상태로다시열기
vi 환경설정 - vi editor 에서의환경설정은일시적인설정 - 환경설정파일을수정해야지고정적인설정이가능함 - 계정별로환경설정이가능하며각계정의홈디렉터리에서설정 - ~/.exrc vim 환경설정 - vi editor 의환경설정방식과동일하지만설정파일의위치가다름 - 공통 - /etc/vimrc - 계정별설정 - 예제파일복사 : # /usr/share/vim/vim74/vimrc_example.vim ~/.vimrc - 환경설정내용수정
1. vi 로 /root/install.log 파일을열기 2. 프롬프트를 200 번라인으로이동 3. 200 번라인부터 5 라인을복사한후문서의제일마지막라인에붙여넣기 4. 현재문서에서라인번호를표시 5. 300 번라인으로이동 6. 수정모드로 edit 문자열입력 7. 6 번에서작업했던내용취소 8. 100 번라인으로이동 9. 현재프롬프트를기준으로오른쪽으로 5 개의문자열삭제 10. 현재프롬프트를기준으로위쪽으로 mailcap 문자열검색 11. 현재문서에서 el6 로되어있는모든문자열을 centos6 로변경 12. 문서의마지막으로이동 13. find / -name install.log 명령의출력결과를문서로불러들이기 14. /root/anaconda-ks.cfg 파일의내용을현재문서로불러들이기 15. 500 번라인부터 50 라인을잘라내서 600 번라인밑으로붙여넣기 16. 저장하고종료
목적 - 사용자식별 인증 - 사용자별환경제공 - 보안성향상 사용자계정및그룹관리파일 /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/default/useradd 사용자계정의기본정보 암호화된패스워드및정책설정정보 사용자그룹의기본정보 사용자그룹의암호화된패스워드정보 useradd 명령을사용한경우적용되는기본설정 /etc/login.defs 로그인수행시기본설정 ( 전체사용자에게적용됨 ) /etc/skel 홈디렉터리에기본적으로제공되는파일의저장위치
확인 - [root@kh-linux~]# cat /etc/passwd 1 root 2 x 1root 2:x 3:0 4:0 5:root 6:/root 7:/bin/bash 사용자계정이름 패스워드가암호화되어 /etc/shdow 파일에저장되어있음 - 암호화정책이없으면패스워드가평문으로저장됨 3 0 uid ( 관리자 : 0, 사용자 : 500 이상 ) 4 0 gid ( 관리자 : 0, 사용자 : 500 이상 ) 5 root 6 /root 7 /bin/bash 사용자의실제이름 (comment) 사용자의홈디렉터리 관리자 사용자 /root /home/ 계정이름 사용자의 shell 정의 (default : bash)
확인 - [root@kh-linux~]# cat /etc/shadow 1 root 1root 2:$6$NAzqsXeFGHz3Hlp3$kS2BgO 3:16692 4:0 5:99999 6:7 7: 8: 9: 사용자계정이름 2 :$6 3H 2BgO 암호화된패스워드정보 ( 형식 : $hash_id$salt$hash_value) - hash_id : 1(MD5), 5(SHA-256), 6(SHA-512) 3 16692 패스워드의마지막변경일 (1970 년 1 월 1 일부터경과된일수로표시 ) 4 0 마지막변경일로부터패스워드를최소사용해야하는일수 5 99999 마지막변경일로부터패스워드를최대사용할수있는일수 (99999 : 무한대 ) 6 7 패스워드만료를경고하는일 ( 만료일이전 n 일부터경고 ) 7 패스워드만료후사용유예기간 8 계정사용만료일 ( 월 / 일 / 연도 ) 9 예약된필드 ( 사용하지않음 )
확인 - [root@kh-linux~]# cat /etc/group 1 root 2 x 그룹이름 그룹의패스워드 3 0 gid ( 관리자 : 0, 사용자 : 500 이상 ) 4 그룹에소속된사용자목록 ( 참조 ) 1root 2:x 3:0 4:
확인 - [root@kh-linux~]# cat /etc/gshadow 1 root 2 3 4 그룹이름암호화된그룹의패스워드정보그룹의관리자목록그룹의구성원목록 1root 2: 3: 4:
사용자계정및그룹관리명령어 useradd 사용자계정생성 adduser 사용자계정생성 passwd 사용자패스워드설정 usermod 사용자계정의설정변경 chage 사용자패스워드관리 userdel 사용자계정삭제
용도 - 사용자계정생성 사용법 - [root@kh-linux~]# useradd [ 옵션 ] [ 계정이름 ] - 옵션을설정하지않으면 /etc/default/useradd 에지정된기본값으로생성됨 OPTIONS -u 사용자계정의 uid 설정 -g 사용자계정의 gid 설정 -G 사용자계정의 2차그룹의 gid 설정 -d 사용자의홈디렉터리설정 -e 사용자계정의만료일설정 OPTIONS -f 사용자계정의만료유예일설정 -s 사용자계정의로그인기본 shell 설정 -M 사용자의홈디렉터리를생성하지않음 -c /etc/passwd의설명 (comment) 설정 -D /etc/default/useradd 파일의기본설정변경
/etc/default/useradd - useradd 명령으로계정을생성할때설정되는기본정책이설정된파일 확인 - [root@kh-linux~]# cat /etc/default/useradd # useradd defaults file 1 GROUP=100 2 HOME=/home 3 INACTIVE=-1 4 EXPIRE= 5 SHELL=/bin/bash 6 SKEL=/etc/skel 7 CREATE_MAIL_SPOOL=yes 1 GROUP 2 HOME 3 INACTIVE 4 EXPIRE 5 SHELL 6 SKEL 7 CREATE_MAIL_SPOOL 기본그룹 ID 사용자홈디렉터리생성위치패스워드만료후유예기간패스워드만료일 (YYYY-MM-DD) 사용자의기본 shell 사용자별기본설정파일의위치메일저장파일생성여부
/etc/login.defs - 시스템에서생성되는전체사용자계정의기본정책이설정된파일 확인 - [root@kh-linux~]# cat /etc/login.defs 1 MAIL_DIR 메일파일의저장경로 7 UID_MAX 사용자계정의최대 uid 2 PASS_MAX_DAYS 3 PASS_MIN_DAYS 4 PASS_MIN_LEN 5 PASS_WARN_AGE 6 UID_MIN 패스워드최대사용일수 ( 지정된기간이후재설정 ) 패스워드최소사용일수 ( 지정된기간중변경불가능 ) 패스워드최소길이 패스워드만료경고일 사용자계정의최소 uid 8 GID_MIM 9 GID_MAX 10 USERDEL_CMD 11 CREATE_HOME 12 UMASK 사용자계정의최소 gid 사용자계정의최대 gid 계정삭제명령 (userdel) 이실행되기전실행할프로그램설정 사용자홈디렉터리생성여부 사용자계정홈디렉터리의 umask 설정
용도 - 사용자계정의설정변경 사용법 - [root@kh-linux~]# usermod [ 옵션 ] [ 계정명 ] OPTIONS -u 사용자계정의 uid 변경 -g 사용자계정의 gid 변경 -G 사용자계정의 2차그룹의 gid 변경 -c 사용자계정의설명 (comment) 변경 OPTIONS -d 사용자계정의홈디렉터리변경 -e 사용자계정의만료일변경 -f 사용자계정의만료유예일변경 -s 사용자계정의로그인기본 shell 변경
용도 - 사용자계정의패스워드생성및설정변경 사용법 - [root@kh-linux~]# passwd [ 옵션 ] [ 계정명 ] OPTIONS -d 패스워드를 null값으로변경 ( 패스워드삭제 ) -l 패스워드잠금 (Lock) -u 패스워드잠금해제 -S 사용자계정의패스워드설정내용확인
용도 - 사용자계정의패스워드설정변경 사용법 - [root@kh-linux~]# chage [ 옵션 ] [ 계정명 ] -l( 소문자 L) chage 설정내용확인 OPTIONS -M 패스워드의사용최대기간 ( 재설정 ) 변경 -m 패스워드의최소유지기간변경 -I( 대문자 i) 패스워드의사용기간만료후사용자계정만료유예기간변경 (0 : 즉시계정만료 ) -E 사용자계정의만료기간변경 (0 : 즉시, -1 : 비활성, YYYY-MM-DD : 직접지정 ) -d 패스워드의최종변경일수정 -W 패스워드만료에대한경고일변경
용도 - 사용자계정삭제 사용법 - [root@kh-linux~]# userdel [ 옵션 ] [ 계정명 ] -r 사용자의홈디렉터리까지함께삭제 OPTIONS
용도 - 사용자그룹의정보확인 사용법 - [root@kh-linux~]# groups [ 계정명 ] - 계정명을지정하지않으면현재계정의사용자그룹정보를확인함 - 계정명을지정하면지정된계정의사용자그룹정보를확인함
용도 - 사용자그룹생성 사용법 - [root@kh-linux~]# groupadd [ 옵션 ] [ 계정명 ] -g 그룹 gid 설정 -o 중복 gid 생성허용 -r OPTIONS 0~499 범위에서자동으로 gid 값을지정함 ( 사용가능한큰값부터순차적으로할당됨 )
용도 - 사용자그룹의설정변경 사용법 - [root@kh-linux~]# groupmod [ 옵션 ] [ 계정명 ] -g 그룹 gid 변경 -o 중복 gid 변경허용 -n 새로운그룹명으로변경 OPTIONS
용도 - 사용자그룹의패스워드설정 - 사용자그룹의관리자지정및추가 - 사용자그룹의멤버추가및삭제 사용법 - [root@kh-linux~]# gpasswd [ 옵션 ] [ 계정이름 ] [ 그룹이름 ] -A 그룹의관리자추가 -a 그룹의멤버추가 -d 그룹의멤버삭제 -M 그룹의멤버수정 OPTIONS
용도 - 사용자그룹삭제 사용법 - [root@kh-linux~]# groupdel [ 그룹이름 ]
용도 - 사용자계정의홈디렉터리에서제공할기본환경설정파일의위치지정 - 사용자계정을생성했을때홈디렉터리에복사될파일의위치가지정됨 - 사용자홈디렉터리의초기환경제공을위해사용됨 확인 - [root@kh-linux~]# ls /etc/skel
User : testuser UID : 1200 GID : tg Shell : sh HOME : /hosting Skel : /skelsam Auto Creating Directory : public_html Auto Creating File :.sam 1. 모든작업은 root 계정으로 root의홈디렉터리경로에서설정 2. 계정생성은옵션을이용해서한줄로만작업할것 3. 모든작업이완료된후검사받고작업한내용삭제할것
1. /etc/inittab 파일을최상위디렉터리로복사 2. vi 로 /inittab 파일을열고 vi 편집기를이용해 /home/ktest 디렉터리에크기가 0 인파일 a, b, c, d, e 를만든후 /inittab 의 20 번째라인밑에 /home/ktest 디렉터리의파일내용을삽입 3. 파일안에있는내용변경 : etc -> secret, init -> sleep 4. 5 ~ 12 번째라인을 2 번째라인밑에복사 5. 편집중인파일을 /test 디렉터리밑에 sam.test 파일명으로저장 6. 현재까지작업한모든내용을새로운파일 (/usertest/sample) 로저장하고 vi 를종료 7. 위에서만든파일 (sample) 과동일한내용을가지는파일을 ktest 사용자의 home 디렉터리에 secret 이라는파일명으로생성 8. 위에서만든 secret 파일을 vi 로열고 5 번째줄밑에리눅스의 IP 출력내용을삽입한후, linux 사용자의 home 디렉터리에 final 파일명으로저장하고 vi 를종료 9. 사용자홈디렉터리의생성위치가 /export/home/ 인 test1 사용자계정생성 10. linux 계정의홈디렉터리의위치를 /export/home/ 으로, shell 을 tcsh 로변경 11. /etc/skel 디렉터리의내용을 /samskel 로복사한후, skel 디렉터리가 /samskel 인 user2 생성하되계정생성후홈디렉터리에 public_html 이름의디렉터리생성 12. user2 의그룹을 ktest 그룹으로변경
Permission - 멀티유저환경에서개체 ( 파일, 디렉터리등 ) 에접근할수있는자격 - 개체를읽거나 (read), 쓰거나 (write), 실행 (execute) 하는행위 - 사용자 (user), 사용자그룹 (group), 나머지사용자 (other) 단위로권한을부여함 Permission 확인 - [root@kh-linux~]# ls -l [ 파일이름 ] - 파일형식을제외한 10 자리의문자
소유권 (ownership) - 앞에서부터 3 자리씩소유자 (user), 소속그룹 (group), 나머지사용자 (other) 로구분함 - 마지막 (10 번째문자 ). 은확장권한 ( 권한 ACL) 을나타냄 rw-(user)r--(group)r--(other).(acl) 소유자 (user) 소속그룹 (group) 나머지사용자 (other) 허가권 (Permission) 종류 (rw-) 해당개체를생성하거나소유한사용자 (r--) 지정된소속그룹의멤버로포함된사용자 (r--) 소유자또는소속그룹의멤버가아닌나머지사용자 문자허가권파일디렉터리 r 읽기내용을읽을수있는권한디렉터리목록확인권한 w 쓰기 x 실행 쓰거나삭제할수있는권한디렉터리안에서파일을생성, 삭제할수있는권한 실행파일 ( 바이너리파일 ) 에대한실행권한 디렉터리의경로변경, 디렉터리안에있는항목을읽을수있는권한
Permission 정보확인 - Linux 시스템의모든개체 ( 파일및디렉터리 ) 는소유자와소속그룹이지정되어있음 - 소유자및소속그룹을이름으로확인 - [root@kh-linux~]# ls -l - 소유자 (uid) 및소속그룹 (gid) 을 id 로확인 - [root@kh-linux~]# ls -n Permission 인증절차 1 2 3 4 5 6 사용자가 xxx.txt파일을수정하기위하여쓰기권한을요청함 xxx.txt파일의 uid와권한을요청한사용자의 uid를비교함일치하면요청한사용자를파일의소유주로인정하고소유주 (user) 의 permission 을부여함일치하지않으면 gid를비교함 gid가일치하면사용자를파일의소속그룹멤버로인정하고소속그룹 (group) 에할당된 permission을부여함 gid도일치하지않으면나머지사용자 (other) 에해당하는 permission을부여함
소유권 (ownership) 관리명령어 chown 파일의소유권변경 chgrp 파일의소속그룹소유권변경 허가권 (permission) 관리명령어 chmod 파일의허가권변경 특수 permission 명령어 setuid 일시적으로소유자의권한으로파일을실행함 setgid 일시적으로소속그룹의권한으로파일을실행함 sticky bit 모든권한할당 ( 단, 삭제는소유주만가능함 ) 기본 permission 설정명령어 umask 개체가생성될때부여되는기본 permission 설정
용도 - 개체 ( 파일및디렉터리 ) 의소유자및소속그룹변경 파일의소유자변경사용법 - [root@kh-linux~]# chown [ 계정이름 ] [ 파일이름 ] 파일의소유자변경사용법 - [root@kh-linux~]# chown [uid]:[gid] [ 파일이름 ] - [root@kh-linux~]# chown [ 계정이름 ]:[ 그룹이름 ] [ 파일이름 ] OPTIONS -R 하위디렉터리및파일전체의소유권변경
용도 - 개체 ( 파일및디렉터리 ) 의소속그룹변경 사용법 - [root@kh-linux~]# chgrp [ 옵션 ] [gid 또는그룹이름 ] [ 파일이름 ] OPTIONS -R 하위디렉터리및파일전체의소유권변경
용도 - 개체 ( 파일및디렉터리 ) 의허가권변경 - 상대모드또는절대모드로허가권을지정함 사용법 - [root@kh-linux~]# chmod [ 상대모드또는절대모드허가권 ] [ 파일이름 ]
상대모드 소유권 연산자 허가권 u user + 권한추가 r 읽기 g group - 권한삭제 w 쓰기 o other = 권한지정 x 실행 a all s 소유자, 소속그룹만실행 예제 현재 permission user group other 실행 결과 설명 rwx rwx rwx # chmod a-x file rw-rw-rw- 실행권한모두제거 rwx rw- r-- # chmod u-x,o+w file rw-rw-rw- user( 실행제거 ), other( 쓰기추가 ) rwx rw- r-- # chmod u-x,g-w file rw-r--r-- User( 실행제거 ), group( 쓰기제거 ) rw- rw- ww- # chmod a+x,g-w,o-w file rwxr-xr-x All( 실행추가 ), group( 쓰기제거 ), other( 쓰기제거 )
절대모드 소유자 (user) 소속그룹 (group) 나머지사용자 (other) r w x r w x r w x 4 2 1 4 2 1 4 2 1 2^2 2^1 2^0 2^2 2^1 2^0 2^2 2^1 2^0 예제 ( rw-r-xr-x ) 소유자 (user) 소속그룹 (group) 나머지사용자 (other) r w x r w x r w x 4 2 1 4 2 1 4 2 1 4(r) 2(w) - 4(r) - 1(x) 4(r) - 1(x) 4+2 = 6 4 + 1 = 5 4 + 1 = 5 655
특수권한 (special permission) - 시스템관리의효율성을높이기위해사용하는특별한권한 - 보안의취약점이될수있으므로꼭필요한경우가아니면사용하지않는것이좋음 특수권한절대모드상대모드 setuid 4000 u+s setgid 2000 g+s Sticky bit 1000 o+t
setuid (4000 = u+s) - 해당파일의소유주의권한으로실행 - 일반적인실행은파일을이용하려는사용자의소유권에의해실행권한이부여되지만, setuid 권한이적용되어있는파일은실행되는동안은사용자가아닌파일의소유주의권한을할당받음 - 실행파일에만설정이가능함 - 소유자의허가권에서실행권한이 x 가아닌 s 로표시됨 ( 예 : rwsr--r--) 예 (passwd) - 패스워드를변경하면 /etc/shadow 파일의읽기및쓰기권한을가지고있어야지패스워드를기록할수있음 - passwd 실행파일에 setuid 권한이부여되어있으므로 passwd 명령이실행되는동안은소유주의권한 (root) 으로동작하게됨
setgid (2000 = g+s) - 해당파일의소속그룹권한으로실행 - 파일이실행되는동안은사용자가아닌파일의소속그룹권한을할당받음 - 파일및디렉터리에서설정가능 - 소속그룹의허가권에서실행권한이 x 가아닌 s 로표시됨 ( 예 : rwxr-sr--) 디렉터리적용 - setgid 가적용된디렉터리의하위에생성되는디렉터리도동일하게 setgid 가설정됨 - setgid 가적용된디렉터리안에서새로운디렉터리를생성하면 setgid 에명시된소속그룹으로설정됨
sticky bit (1000 = o+t) - 모든소유권에모든허가권을부여하지만삭제는소유주만가능함 - 디렉터리에설정함 - 나머지사용자 (other) 의허가권에서실행권한이 x 가아닌 t 로표시됨 ( 예 : rwxr-xr-t) - /tmp, /var/tmp 에적용되어있음 - 기본소유권과허가권을먼저확인하기때문에기본허가권에삭제권한이있으면삭제가가능함
권한 ACL - 기본적인소유권과허가권외의세부설정이필요한경우사용되는 permission - 파일및디렉터리에특정사용자 / 소속그룹의권한을부여할때사용함 - 파일및디렉터리의세부정보중에서권한정보 (rw-r--r--.) 의마지막 10 번째값으로권한 ACL 설정여부를확인함. 권한 ACL 이설정되지않았음 + 권한 ACL 이설정되어있음 rw-r--r--. 권한 ACL 명령어 getfacl 권한 ACL 확인 setfacl 권한 ACL 설정
용도 - 파일및디렉터리에설정된권한 ACL 확인 사용법 - [root@kh-linux~]# getfacl [ 옵션 ] [ 파일이름 ] OPTIONS -n 소유자, 소속그룹의정보를 uid, gid 형태로출력 -d 기본권한정보만출력 -c 확장권한정보만출력 -R 디렉터리하위의파일, 디렉터리의정보도함께출력
확인 기본권한 확장권한 # getfacl file1 # file : 1 파일및디렉터리이름 # owner : root 원소유자 # group : root 원소속그룹 user::rw- 원소유자의허가권 user:test:rwx setfacl로확장된권한 ( 소유자 : test, 허가권 : rwx) group::r-- 원소속그룹의허가권 mask::rwx 확장된소유자와소속그룹 (ACL entry) 의최대권한 other::r-- 원나머지사용자의허가권
용도 - 파일및디렉터리에설정된권한 ACL 설정 사용법 - [root@kh-linux~]# setfacl [ 옵션 ] [ 정책 ] [ 파일이름 ] 정책 (rules) - [ 소유권 ]:[ 확장할사용자 ]:[ 허가권 ] u:test:rx(=5) -m 권한 ACL 설정 -x 한항목씩 ACL 설정삭제 -b ACL 모두삭제 ( 초기화 ) OPTIONS -R 이미존재하는하위경로의파일및디렉터리에도함께설정 -d 하위경로의파일및디렉터리가생성될때즉시설정
파일속성 (file attribution) - 특정파일시스템에서지원하는파일의속성 - 파일의손상을방지하여보호하기위한목적으로사용됨 - 허가되지않은사용자가파일을변경하지못하게하여파일보안을제공함 속성종류 a 파일에추가로쓰기만가능 ( 덮어쓰기불가능 ) c 디스크에압축상태로저장함 ( 자동압축 / 해제 ) d Dump 명령에의해백업되지않음 ( 덤프방지 ) i 변경, 삭제, 이름변경, 추가쓰기, 링크등이모두불가능함 s 파일을삭제할때블록이모두 0 으로덮어써지고다시저장됨 ( 안전한삭제 ) S 파일의수정된내용이디스크상에바로동기화 u 삭제된파일의내용을저장함 ( 데이터복구가능 )
파일속성관리명령어 lsattr 지정된파일의속성확인 chattr 지정된파일의속성변경
용도 - 파일에설정된속성확인 사용법 - [root@kh-linux~]# lsattr [ 옵션 ] [ 파일이름 ] OPTIONS -R 지정된디렉터리하위의모든파일의속성정보확인 -a 숨김파일을포함한지정된디렉터리내부의모든파일의속성정보확인 -d 디렉터리구조를무시하고모두일반파일형식으로속정정보확인 -v 파일의버전정보확인
용도 - 파일에설정된속성확인 사용법 - [root@kh-linux~]# chattr [ 옵션 ] [mode] [ 파일이름 ] OPTIONS -R 지정된디렉터리하위의모든파일의속성정보변경 -V 변경된속성정보에대해상세한정보출력 -f 오류메시지출력 -v version 파일의버전정보를설정 + 속성을추가함 - 속성을제거함 = 정확히지정된속성만설정함 속성연산자 (mode)
root 계정을이용하여실습 1. 최상위디렉토리 (/) 하위에 permtest 이름의디렉터리생성 2. linux1, linux2 이름을가지는계정생성 3. permtest 디렉터리의소유자를 linux1으로설정 4. 최상위디렉터리에 file1 파일을생성하고파일의내용을 12345으로입력 5. file1 파일을 /test 디렉터리로이동 ( 같은파일이름으로 ) 6. 퍼미션설정
1. 최상위디렉터리 (/) 하위에 test2 디렉터리생성 2. /root/install.log 파일을 test2 디렉터리로복사 3. 시스템에서 drwxrwxrwt 퍼미션을갖는파일을검색하여최상위 (/) 하위에 sticky-list 파일이름으로저장 ( 단, 명령은한줄로처리 ) 4. sticky-list 파일을 test2 디렉터리로이동 5. test2 디렉터리를통째로 /tmp 디렉터리의하위로이동 6. /tmp/test2 디렉터리의퍼미션설정 ( 결과 ; drwxr-xr--) 7. test2 계정을생성하며홈디렉터리를 /test2 로지정 ( 명령어한줄처리 ) 8. /tmp/test2 디렉터리하위의모든파일을 /test2 로이동 9. /test2 디렉터리하위모든파일의소유자와소유그룹을 test2 로지정 10. /test2/sticky-list 의하드링크파일생성 (/root 하위에같은이름으로 ) 11. 시스템을재부팅할때 Run Level 을다중사용자텍스트환경으로실행되게설정 12. init 명령어를이용하여재부팅 13. 시스템의현재시간을 time.bora.net 서버에있는시간으로동기화 14. hello 를입력하면화면에 Hello World 가출력되게 alias 를설정 15. ftpadmin, ftpuser1, ftpuser2 계정생성
16. ftpusers 그룹생성 (GID 는 700 으로지정 ) 17. ftpusers 그룹의관리자로 ftpadmin 설정 18. ftpadmin 으로로그인하여 ftpusers 그룹구성원으로 ftpuser1, ftpuser2 를추가 19. ftpadmin 의홈디렉터리의소유자를 ftpadmin, 그룹소유자를 ftpusers 로변경 ( 하위파일들포함 ) 20. ftpadmin 의홈디렉터리하위에 file1 파일생성 ( 내용은 a~z 까지입력 ) 21. 시스템에서퍼미션이 -rwsr-xr-x 인파일들을검색하여검색결과를 setuid-list 파일에내용으로저장 (ftpadmin 의홈디렉터리에저장 ) 22. ftpuser1 과 ftpuser2 의홈디렉터리를 ftpadmin 의홈디렉터리로변경 23. ftpadmin 의홈디렉터리퍼미션설정 1 소유주 (user) 모든권한 2 그룹구성원 (group) 디렉터리 : 출입가능, 리스트확인가능 파일생성 / 삭제 / 변경거부 3 나머지계정 (other) 접근거부
용도 - disk free - 파일시스템에대한정보확인 - 파일시스템에할당된전체용량, 사용량, 사용가능용량, 사용률, 마운트정보등 사용법 - [root@kh-linux~]# df [ 옵션 ] -a 모든파일시스템의정보확인 -i Size 대신 inode 사용정보확인 -k 단위를 KB 로확인 (default) -h 단위를 MB 로확인 -t 지정한종류의파일시스템확인 OPTIONS -x 지정한종류의파일시스템을제외한정보확인
용도 - disk usage - 파일및디렉터리의용량확인 사용법 - [root@kh-linux~]# du [ 옵션 ] [ 파일또는디렉터리이름 ] -a 파일까지확인 (default : 디렉터리 ) -s 전체용량의합계를확인 -b 단위를 byte 로확인 -k 단위를 KB 로확인 -l 하드링크된파일까지확인 -h 용량단위표시 OPTIONS
용도 - file system disk - 파티션테이블을생성, 수정, 삭제 사용법 ( 현재파일시스템의파티션정보확인 ) - [root@kh-linux~]# fdisk l 사용법 ( 파티션생성 ) - [root@kh-linux~]# fdisk [ 디스크장치이름 ] - windows 의 diskpart 처럼디스크관리모드가지원됨
용도 - 파일시스템생성 사용법 - [root@kh-linux~]# mkfs [ 옵션 ] [ 장치이름 ] 사용법 ( 특정파일시스템생성 ) - [root@kh-linux~]# mkfs.ext4 [ 옵션 ] [ 장치이름 ] -t [ 종류 ] 파일시스템의종류선택 OPTIONS -c 파일시스템을생성하기전에 bad block 을검사함 -v 작업상태와결과를자세히출력함
용도 - 운영체제가물리적인장치를이용할수있도록연결함 - Linux OS 는모든장치를파일단위로관리하기때문에새로추가된장치는임의의디렉터리 (mount pointer) 에연결시켜서사용해야함 mount pointer - 하드디스크를운영체제로연결할때사용한디렉터리 사용법 (mount 정보확인 ) - [root@kh-linux~]# mount 사용법 ( 기본 mount) - [root@kh-linux~]# mount [ 장치이름 ] [ 마운트포인터 ] 사용법 ( 기본 mount) - [root@kh-linux~]# mount -f [ 파일시스템종류 ] -o [ 옵션 ] [ 장치이름 ] [ 마운트포인터 ]
asymc auto defaults dev exec noauto noexec nosuid nouser OPTIONS 마운트된파일시스템에비동기입출력사용 /etc/fstab에지정된파일시스템에대해부팅할때자동마운트 rw, suid, dev, exec, auto, nouser, async를종합적으로사용함해당파일시스템을문자디바이스나블록디바이스를이용하여해석파일시스템에포함된프로그램을실행할수있도록함자동으로마운트가되지않도록함해당파일시스템의프로그램이실행되지않도록함실행파일에존재하는 suid, sgid 기능을제한함 root 외의사용자가파일시스템을마운트하거나해제하는것을제한함
ro rw suid sync user users noatime OPTIONS 읽기전용으로마운트함읽고쓰기로마운트함실행파일에존재하는 suid, sgid를허용함마운트된파일시스템에동기식입출력을사용함일반사용자가파일시스템을마운트하는것을허용함모든일반사용자가파일시스템을마운트하는것을허용함 Access time을기록하지않음
용도 - 마운트해제 - 운영체제와장치의연결을해제함 사용법 - [root@kh-linux~]# unmount [ 마운트포인터 ]
확인 - [root@kh-linux~]# cat /etc/fstab 1UUID=ec78d766-639a-4c6e-80a5-627449f11768 2/ 3ext4 4defaults 51 61 1 UUID=ex 장치명 (Label 로지정할수도있음 ) 2 / 3 ext4 4 defaults 마운트포인터 장치의파일시스템종류 마운트할때사용하는옵션종류 5 1 덤프의필요여부를지정함 ( 하드디스크 : 1, 그외 : 0) 6 1 fsck 명령 ( 무결성체크 ) 의수행여부 0 체크하지않음 1 이상체크함 ( 숫자가작은순서대로체크함 ) 1 최상위파티션 2 그외의파티션의번호를지정하여순서대로체크함
1. 20G크기를가진하드디스크장착 2. 1번파티션은주파티션생성 (8G) 3. 2번파티션은확장파티션생성 (12G) 4. 논리파티션추가 (4G) 5. 파일시스템 (ext4) 설정 6. 주파티션은 /data1에마운트 7. 논리파티션은 /data2에마운트 ( 읽기전용 )
부트로더 (boot loader) - 부팅단계에서운영체제가실행되지이전에먼저호출되는프로그램 - 커널이올바르게부팅되기위해필요한모든관련작업을마무리하고최종적으로운영체제를실행시키는동작을수행함 - Linux 에서는 LILO(Linux Loader) 와 GRUB(Grand Unified Boot loader) 를사용함 - 현재는 GRUB 를사용함 GRUB - 현재 Linux 의기본부트로더 - LILO 의단점을보완하는기능을제공함 - 메뉴인터페이스제공함 - 시스템의 BIOS 에서인식하는모든장치 (device) 에접근이가능함 /etc/grub.conf - GRUB 의환경설정파일 - 부팅단계에서 GRUB 프로그램이 /etc/grub.conf 파일의내용을읽어간후동작을수행함
확인 - [root@kh-linux~]# cat /etc/grub.conf default 기본부팅을시도할부트엔트리 (title 번호 ) timeout passwd hiddenmenu title 지정된시간동안키보드의입력을기다림 키보드의입력이발생하면 GRUB 메뉴를제공함 입력이발생하지않으면 default 에명시된운영체제로부팅함 GRUB 메뉴를사용할때지정된패스워드로인증을수행함 설정하게되면키입력을기다리는대기시간동안메뉴를숨김 런타임시사용자인터페이스에서부팅될부트엔트리의설정영역 root kernel initrd title 에지정된운영체제의위치 최상위경로내에존재하는기본부트커널이미지의이름 initrd 이미지의위치및파일명
GRUB 의 password 설정 - [root@kh-linux~]# grub-crypt [ 옵션 ] - grub-crypt 명령에의해암호화된패스워드복사 - /etc/grub.cong 파일에패스워드설정 - passwd --[ 암호화방식 ] [ 복사한패스워드 ]
GRUB 를이용한복구모드 - 부팅시 GRUB 메뉴로이동 - 부팅을원하는운영체제를선택한후 e 입력 - 커널을선택한후 e 입력 - 라인의마지막에 single 을입력한후엔터 - b 입력후부팅 - 부팅후관리자의 password 재설정
용도 - 배포의편리성 : 데이터의빠르고편리하게송 / 수신하기위해사용함 - 파일보관의편리성 : 대용량의데이터를보관하기위해사용함 압축명령어종류 - gzip(gnu zip) - bzip2 - tar(tape archive)
용도 - 리눅스에서범용적으로사용되는압축프로그램 - 일반적으로 tar 로묶여진 (archive) 파일의용량을줄이기위한목적으로사용됨 - 압축파일을생성할때기본값으로.gz 확장자를붙여줌 사용법 - [root@kh-linux~]# gzip [ 옵션 ] [ 파일이름 ]
OPTIONS -n [1~9] 압축수행시처리속도조정 (1 : 가장빠른압축, 9 : 가장느린압축 ) -c 압축의결과를출력하고원본파일을보존함 -d 압축해제 (=gunzip) -f 시스템이사용중인파일을압축하는등의강제압축 -l ( 소문자 L) 압축파일의정보확인 compressed 압축된후의용량 uncompressed 압축되기전의용량 ratio 압축효율 uncompressed_name 압축되지전의파일이름 -r 한번에여러개의파일의압축 ( 디렉터리에포함된모든파일압축 ) -t 압축파일테스트 (-v 옵션과함께사용해야함 ) -v 자세한정보출력
용도 - 압축률은 gzip 보다좋지만처리속도가느림 - 압축에사용되는알고리즘 (BWT) 의특허때문에라이선스를잘확인하고이용해야함 - 압축파일을생성할때기본적으로.bz2 확장자를붙여줌 사용법 - [root@kh-linux~]# bzip2 [ 옵션 ] [ 파일이름 ] -t 압축파일테스트 -d 압축해제 -f 강제압축 -v 자세한정보출력 OPTIONS
용도 - 초기에 tape backup 을목적으로사용되었음 - 많은양의파일을하나의큰파일로묶어주기위해사용됨 - 파일배포시많이사용됨 - 내부옵션을통해 gzip 또는 bzip2 압축을지원함 사용법 ( 압축생성 ) - [root@kh-linux~]# tar [ 옵션 ] [ 생성할 tar 파일이름 ] [ 묶을파일이름 ] 사용법 ( 압축해제 ) - [root@kh-linux~]# tar [ 옵션 ] [tar 파일이름 ] C [ 해제할경로 ]
OPTIONS -c 정의한파일이름으로파일을묶음 -f 옵션뒤에 tar 파일을명시하고있음 -v 자세한내용출력 -t tar 파일의내용출력 -x tar 파일에서정의된파일을추출 -u 이미 tar 파일에포함된파일보다더최근의파일로변경 -r 생성될 tar 파일의제일끝부분에 tar 확장자명시 -p 원본파일의 permission 유지 -C tar 파일이해제될위치지정 -b 블록단위로작업 -g 증분백업 -z tar로묶여진파일을 gzip으로압축하여최종파일을생성 -j tar로묶여진파일을 bzip2로압축하여최종파일을생성
지정한파일묶기 - [root@kh-linux~]# tar -cvf [ 생성할 tar 파일이름 ] [ 묶을파일이름또는디렉터리 ] 지정한파일묶기 + gzip 압축 - [root@kh-linux~]# tar -zcvf [ 생성할 tar 파일이름 ] [ 묶을파일이름또는디렉터리 ] 지정한파일묶기 + bzip2 압축 - [root@kh-linux~]# tar -jcvf [ 생성할 tar 파일이름 ] [ 묶을파일이름또는디렉터리 ] 지정한파일묶기해제 - [root@kh-linux~]# tar -xvf [ 해제할 tar 파일이름 ] 지정한파일묶기해제 + gzip 압축해제 - [root@kh-linux~]# tar -zxvf [ 해제할 tar 파일이름 ] 지정한파일묶기해제 + bzip2 압축해제 - [root@kh-linux~]# tar -jxvf [ 해제할 tar 파일이름 ]
용도 - 운영체제를설치할때초기에설치되는기본프로그램외관리자나사용자가추가로필요한소프트웨어를설치할필요가있음 - 사용자의설치를도와주는프로그램및설치방법 종류 - RPM(Redhat Package Manager) - yum - source code compile
용도 - 패키지배포및관리프로그램 - 사용자가미리확보한패키지파일을이용하여원하는프로그램을설치하는방식 장점 - 패키지의설치및제거가편리함 - 패키지의업그레이드가편리함 - source code compile 방법보다설치속도가빠름 - 설치할패키지를검증할수있음 - 질의를통해패키지의자세한정보확인이가능함 단점 - 사용자가직접필요한패키지를확보해야함 - rpm 서버 (pbone.net), 설치 CD 등을통해확보함 - 사용자가직접의존성을해결해야함
사용법 ( 질의를통한패키지정보확인 ) - [root@kh-linux~]# rpm q [ 옵션 ] -a 모든패키지에대해질의 -f 파일에대한패키지질의 -p 설치되거나설치되지않은패키지파일에대한질의 -i 패키지의이름, 버전, 설명등의정보확인 -R 대상패키지와의존성이있는패키지목록확인 --provider -l( 소문자 L) 패키지가제공하는기능확인 패키지에포함되어있는파일정보확인 OPTIONS -s 패키지에포함되어있는파일의상태확인 (normal : 정상, not installed : 설치되지않음, replaced : 다른파일로교체 ) -d 문서파일만확인 -c 설정파일만확인 --scripts --dump 설치와제거과정에서사용되는 shell script 가존재하면내용출력 수정일, MD5 체크섬, 모드, 소유자 / 소속그룹, 설정파일여부, 문서파일여부, 심볼릭링크여부등 (-l, -c, -d 옵션중하나는반드시함께사용해야함 )
시스템에설치된 rpm 패키지의목록확인 ( 전체 ) - [root@kh-linux~]# rpm qa 특정패키지의설치여부확인 - [root@kh-linux~]# rpm qa grep [ 패키지이름 ] - [root@kh-linux~]# rpm q [ 패키지이름 ] 특정파일을포함하고있는패키지확인 - [root@kh-linux~]# rpm qf [ 파일이름 ] 설치된패키지에포함되어있는파일목록출력 ( 전체 ) - [root@kh-linux~]# rpm ql [ 패키지이름 ] 설치된패키지의파일상태체크 - [root@kh-linux~]# rpm qs [ 패키지이름 ]
사용법 ( 패키지설치 ) - [root@kh-linux~]# rpm [ 옵션 ] [rpm 패키지이름 ] -v, --vv 설치패키지의메시지를출력 ( 더자세히 ) -h 패키지를설치할때 #( 해쉬마크 ) 출력 -U 패키지를새로운버전으로업그레이드 OPTIONS --replacepkgs 패키지교체 ( 이전버전이설치되어있어도새로설치 ) --replacefiles --oldpackage --force --precent --includedocs --excludedocs --nodeps --aid --test 동일한파일명이있으면교체 예전패키지로교체 --replacepkgs, --replacefiles, --oldpackage 옵션을모두사용함 패키지의파일을설치할때진행률을 % 로표시 문서파일을포함하여설치 문서파일을제외하고설치 패키지의의존성을무시하고설치 패키지의의존성을검사하여의존성이필요한패키지를자동으로설치 패키지를실제설치하지않고충돌사항만점검하여확인
일반적인패키지설치 - [root@kh-linux~]# rpm ivh [ 패키지파일 ] 설치되어있는패키지교체 - [root@kh-linux~]# rpm ivh [ 패키지파일 ] --replacepkgs 의존성에러가발생한경우무시하고설치 - [root@kh-linux~]# rpm ivh [ 패키지파일 ] --nodeps 의존성에러가발생한경우의존성이있는패키지를먼저설치한후자동으로설치 - 사용자가직접의존성의순서에따라서설치해야함 - [root@kh-linux~]# rpm ivh [ 패키지파일 ] --aid 기존의설치되어있는패키지를업그레이드 - 지정된패키지가설치되지않은경우에는 -ivh 옵션으로동작함 - [root@kh-linux~]# rpm Uvh [ 패키지파일 ]
사용법 ( 패키지삭제 ) - [root@kh-linux~]# rpm e [ 옵션 ] [rpm 패키지이름 ] --nodeps --test 의존성여부를무시하고삭제 충동사항을점검 OPTIONS
용도 - 패키지배포및관리프로그램 - 네트워크에존재하는패키지서버 (repository) 로부터필요한패키지를다운하여설치까지완료함 장점 - rpm 의의존성문제를해결함 - 패키지를별도로확보할필요가없음 - 자동화되어있는설치및삭제를지원 - update 된패키지를검사하여최신패키지를설치함 단점 - 네트워크연결이반드시필요함 - repository 에서서비스를중단하면서비스를받을수없음 - 불필요한패키지가설치될가능성이있음
환경설정파일경로 - /etc/yum.repos.d/centos-base.rep 관리항목 - mirrolist - #baseurl mirror list 정보확인 - http://www.centos.org/download/mirrors/ 잘알려진국내 mirror server - baseurl=http://centos.mirror.cdnetworks.com/$releasever/os/$basearch/ - baseurl=http://data.nicehosting.co.kr/os/centos/$releasever/os/$basearch/ - baseurl=http://ftp.daum.net/centos/$releasever/os/$basearch/ - baseurl=http://mirror.khlug.org/centos/$releasever/os/$basearch/
분류 [base] yum의기본 reposiroty 경로설정 [update] 업데이트된패키지를위한경로설정 [extras] 사용중인패키지와관련된추가패키지의경로설정 [centosplus] 존재하는패키지들의기능적으로확장된추가패키지의경로설정 [contrib] 사용자에의해제작된패키지경로설정 세부항목 name mirrorlist baseurl enable gpgcheck Repository 의이름 mirrorlist 에등록된주소로접근하여해당 repository 가제공하는패키지를자동으로설치및업데이트함 직접 repositor 의주소지정 지정된 repository 사용여부 gpg( 패키지변조확인 ) 사용여부
사용법 - [root@kh-linux~]# yum [ 옵션 ] [mode] [ 패키지이름 ] -y 설치여부를확인하지않고바로설치 install check-update update remove info localinstall 패키지설치 OPTIONS MODE 설치된패키지중업데이트가가능한항목을확인함 패키지업데이트 패키지삭제 패키지정보확인 미리확보한 rpm 패키지설치
용도 - rpm 으로제공되지않는프로그램의설치해야할때사용함 - 일반적으로소스코드내부에주석으로설치방법이명시되어있거나, readme 또는 install 이라는파일을통해설치방법을제공함 - 컴파일러가반드시필요함 - C 컴파일러 (gcc 패키지 ), C++ 컴파일러 (gcc=c++ 패키지 ) 장점 - 설치가진행될때전체과정을제어할수있음 - 소프트웨어를설치할때세부환경설정및설치경로지정이가능함 단점 - 컴파일환경을미리준비해야함 - 정확한방법을숙지하지않으면설치시에러가많이발생함 - 설치및관리시간이오래걸림 - 검증되지않은불법소프트웨어가설치될가능성이있음
준비단계 - 컴파일러설치 : gcc, gcc-c++, glibc( 또는 glibc*) 설치를원하는소프트웨어의 source code 확보 - 직접다운로드또는 wget 을이용한다운로드 - wget 사용법 - [root@kh-linux~]# wget [ 소프트웨어의다운로드웹주소 ] 설치 - 컴파일환경설정 - [root@kh-linux~]#./configure - 소프트웨어설치를위한시스템의환경정보설정단계 - 도움말확인 : configure --help - 컴파일 - [root@kh-linux~]# make - 정상적으로컴파일을완료한후에설치파일을실행해야함 - 오류가발생했을때실패한컴파일삭제 : make clean - 컴파일된소프트웨어설치 - [root@kh-linux~]# make install
프로세스 - 프로그램이나명령어를실행했을때메모리에적재되어실제로동작하는상태 - 프로세스가실행되면프로세스식별번호 (PID, Process id) 를할당받음 - 최상위프로세스는항상 init 프로세스 - 나머지프로세스는항상부모프로세스 (PPID, Parent Process ID) 를가짐 - 해당프로세스를동작시킨파일의 uid, gid 를획득하여소유주등의프로세스실행에필요한 inode 정보및실행된터미널, 입력된명령어, 시작시간등의많은정보보유함 프로세스기본관리명령어 - ps - pstree - signal - kill - pkill
용도 - 프로세스의정보확인 사용법 - [root@kh-linux~]# ps [ 옵션 ] OPTIONS -a 프로세스중에서제어터미널을가지고있는목록출력 -e, -A 프로세스전체목록출력 -f PID, PPID 정보를포함하여출력 -l( 소문자 L) -f 옵션보다자세한정보출력 -u 사용자이름과시작된시간을출력 -x 터미널에종속되지않은프로세스목록출력
출력정보 - [root@kh-linux~]# ps f UID PID PPID C STIME TTY TIME CMD Root 3250 3247 0 02:24 pts/0 00:00:00 Bash root 3280 3250 0 02:25 pts/0 00:00:00 bash UID PID PPID C STIME TTY TIME CMD 사용자의 uid 프로세스를운영체제가식별하는번호해당프로세스의부모프로세스식별번호현재사용하지않는값프로세스가시작된시간프로세스가실행된터미널포트프로세스동작을위해사용한 CPU 사용시간전체실행시킨명령어
용도 - 프로세스의상관관계를계층적으로확인 사용법 - [root@kh-linux~]# pstree [ 옵션 ] OPTIONS -q 프로세스를동작시킨명령어까지함께출력 -n PID 순서대로정렬하여출력 -p PID 정보를함께출력 -U uid 정보를함께출력 -V 버전정보출력
용도 - 동작중인프로세스에게전달하는메시지의의미를가짐 - 각메시지마다프로세스가수행할동작이정의되어있음 signal 종류확인 - [root@kh-linux~]# kill -l SIGHUP(1) SIGINT(2) SIGKILL(9) SIGTERM(15) 프로세스실행 Signal 종류 키보드 ctrl +c( 인터럽트 ) 기능수행 프로세스종료 커널을통해직접적으로프로세스를종료 ( 강제종료 ) 프로세스가사용중이던데이터를기록하지않음 프로세스를통해정상종료 저장할데이터가있을경우저장후종료
용도 - 프로세스종료 - PID 를이용하여종료할프로세스를지정함 사용법 - [root@kh-linux~]# kill [-signal] [PID]
용도 - 프로세스종료 - 프로세스의이름을이용하여종료할프로세스를지정함 - 같인이름으로동작중인프로세스를동시에제어할수있음 사용법 - [root@kh-linux~]# pkill [-signal] [ 옵션 ] [ 프로세스이름또는패턴 ] OPTIONS -f 지정한패턴을명령어, 경로, 옵션, 인자에서도검색 -n 패턴과일치하는프로세스중에서가장최근에실행된하나만종료 -x 패턴과정확하게일치되는프로세스만종료
프로세스우선순위 - 한번에여러개의프로세스가동작할수있음 - 여러개의프로세스는 CPU 를사용하기위해경쟁하지만모든프로세스가동일한동작을하는것이아니므로공평하게자원을배분받지못함 - 프로세스의중요도에따라빨리처리가되어야하는경우우선순위가높아짐 - 백업, 업데이트, 용량이큰프로그램을다운받을경우백그라운드로동작시키면서우선순위를조정함 프로세스우선순위값 - -20 ~ 20( 낮을수록우선순위가높음 ) - nice, snice 명령어로관리함 - priority 값은변경이불가능하며 nice 값을이용하여시스템이계산함 ) 프로세스우선순위확인 - [root@kh-linux~]# ps -el PRI NI 시스템이 nice 의데이터를이용하여계산한실제우선순위값 Nice 에의해설정된우선순위값
용도 - 프로세스동작의우선순위를설정 - 프로그램을실행하면우선순위 (nicer 값 ) 를변경 사용법 - [root@kh-linux~]# nice -n [ 우선순위값 ] [ 프로그램이름또는 PID] - [root@kh-linux~]# nice +/- [ 우선순위값 ] [ 프로그램이름또는 PID]
용도 - 프로세스동작의우선순위를설정 - 실행중인프로그램의우선순위 (nice 값 ) 를변경 사용법 - [root@kh-linux~]# nice +/- [ 우선순위값 ] [ 프로그램이름또는 PID]
포그라운드 (foreground) - 일반적으로프로그램이실행되는방식 - 명령이실행시킨프로그램앞에서실행되는방식 백그라운드 (background) - 명령이실행시킨프로그램뒤에서실행되는방식 - 장시간동작해야하는프로그램은대부분백그라운드방식으로동작시킴 - 백그라운드프로세스는 kill 을사용하여종료함 백그라운드로실행 - 명령어입력뒤에 & 를붙여서실행 - 작업번호와 PID 를출력하고백그라운드로실행됨 - [root@kh-linux~]# firefox& JOB - 터미널에의해서제어되는프로세스 - 모든 hob 은 shell 에의해서작업번호를부여받음
jobs - 백그라운드로실행되고있는작업번호목록확인 - [root@kh-linux~]# jobs fg - 백그라운드로동작중인프로세스를포그라운로전환 - [root@kh-linux~]# fg %[ 작업번호 ] bg - 포그라운드로동작중인프로세스를백그라운드로전환 - [root@kh-linux~]# bg %[ 작업번호 ] nohup - 로그아웃후에도프로세스의동작을유지해야하는경우사용 - 백업, 많은양의파일을 tar 로압축, wgep 이나 ftp 로큰용량의파일의다운로드할때 - [root@kh-linux~]# nohup [ 실행명령어 ]
할당량 - 계정별로파티션의사용량을제한 - 용량또는 i-node 의수를조정하여제한함 할당량관리명령어 - quota 패키지를사용함
/etc/fstab 설정 - option 항목에서 userquota( 사용자할당량 ), group( 그룹할당량 ) 설정 /dev/sda5 /home ext4 Defaults,userquota 1 2 재부팅또는 remount - [root@kh-linux~]# shutdown r now - [root@kh-linux~]# mount o remount /home
quota database 생성 - [root@kh-linux~]# quotacheck -acugfm -a 디스크사용량할당활성화 /etc/fstab 에마운트된모든파일시스템확인 -u 사용자계정디스크의대한사용량할당정보체크 -g 그룹디스크의사용량할당정보체크 -v 사용량할당확인작업의진행을상세하게확인 -c 디스크사용량할당파일생성 (database 생성 : 각파티션의최상위에생성됨 ) -m 파일시스템이동작중인상태에서강제로 quotacheck 시도 -f 디스크사용량할당이비활성화상태여도강제로 quotacheck 시도
사용자계정별 quota 설정 - [root@kh-linux~]# edquota u [ 사용자계정 ] Block 현재사용하고있는디스크용량 ( 수정불가능 ) Soft Hard Inodes 사용할수있는실제용량유예기간동안 hard 설정용량까지사용가능 사용자가사용할수있는최대용량 현재사용하고있는전체파일의수 사용자계정별 quota 유예기간설정 - [root@kh-linux~]# edquota t
quota 시작 - [root@kh-linux~]# quotaon /home quota 중지 - [root@kh-linux~]# quotaoff /home quota 확인 - [root@kh-linux~]# repquota /home
40G 하드디스크추가 ( 있는사람은그대로사용 ) 10G 파티션 3 개생성 ( 주 2, 논리 1) 주파티션은 ext4, 논리파티션은 ext3 각파티션은 /data1, /data2, /data3 에마운트 test1, test2, test3 계정생성 test 그룹생성후 test1, test2 구성원으로구성 /data1 - 소유자 test1, 소유그룹 test - 소유자, 소유그룹모든권한, other 권한없음 - 소유자할당량제한없음 - test2 할당량제한 ( 용량은원하는대로 ) /data2 - 소유자 test2, 소유그룹 test - 소유자, 소유그룹모든권한, other 읽기및실행가능 - 소유그룹할당량제한 ( 용량은원하는대로 ) /data3 - 소유자 root, 소유그룹 test - 모든사용자모든권한, 단삭제는소유주만가능 - 모든사용자할당량제한 ( 용량은원하는대로 )
crond - 예약작업관리 확인 - [root@kh-linux~]# ps ef grep crond - [root@kh-linux~]# cat /var/log/cron 사용법 - [root@kh-linux~]#crontan [ 옵션 ] -u 예약작업실행계정 -l( 소문자 L) 예약작업목록확인 -r 예약작업취소 -e 예약작업등록 OPTIONS
등록형식 분 0~59 시간 0~23 일 1~31 월 1~12 요일 0( 일요일 ) ~ 6( 토요일 ) 명령 실행할명령어 분시간일월요일명령 ( 예제 ) */5 * * * * echo 5 분경과 로그에 5 분마다문자열출력
매월매일 01 시정각에 rdate 명령을실행하여 time.bora.net 과시간을동기화 매월매일 6 시간마다 30 분이될때 /root/backup 디렉터리에 /home/ 디렉터리내용을압축하여저장
LOG - 감사서비스를통해남겨지는시스템의동작흔적 - 시스템의오류및동작상태에대한정보를남기 - 차후침투가발생했을때공격자의흔적을추적하기위한필수정보 - 일반적으로 /var/log 경로에생성됨 감사서비스 (monitoring) - rsyslogd 에의해제어됨 - 환경설정파일인 /etc/rsyslog.conf 을수정하여로그의저장위치및파일이름을수정할수있음
/etc/rsyslog.conf - 선택자필드 ( 메시지, 우선순위 ) 와액션필드로구분됨 메시지종류 * 모든서비스 auth aythpriv cron daemon kern lpr 사용자인증 보안및승인 예약 데몬 커널 프린터 우선순위 mail news uucp user syslog local0 local 7 메시지종류 메일 뉴스 Uucp 사용자에의해생성된프로세스 syslogd 예약 Emerg > alert > crit > error > warn > notice > info > debug
/var/log/wtmp - 계정의로그인및로그아웃정보를저장 - 로그인, 로그아웃, shutdown, booting 정보등 - 바이너리 ( 실행 ) 파일 - 확인 : last 명령으로확인 /var/log/lastlog - 계정의최근로그인정보를저장 - 계정이름, 터미널, 마지막로그인시간 - 바이너리 ( 실행 ) 파일 - 확인 : lastlog 명령으로확인 /var/run/utmp - 현재로그인한계정의상태정보를저장 - 로그인계정이름, 터미널, 원격로그인주소, 로그인시간등 - 바이너리 ( 실행 ) 파일 - 확인 : w, who, finger 등의명령으로확인
/var/log/secure - telnet, ssh, ftp 등의원격로그인의인증정보저장 - 텍스트파일 - 확인 : vim, tail/head, cat 등으로확인 /var/log/btmp - 실패한로그인시도를저장 - 바이너리 ( 실행 ) 파일 - 확인 : lastb 명령으로확인 /var/log/messages - 시스템동작에대한전반적인모든이벤트가저장됨 - 로그인, 장치동작, 시스템설정오류, 파일시스템, 네트워크연결정보등이저장됨 - 텍스트파일 - 확인 : 필터링을하거나실시간로그확인방법을많이사용함 - [root@kh-linux~]# cat /var/log/messages grep [ 패턴 ] - [root@kh-linux~]# tail f /var/log/messages
/var/log/boot.log - 부팅동작에서서비스데몬들의실행상태정보저장 /var/log/sulog - su 명령의사용내역이저장 - 공격자가일반계정으로접근한후 su 명령으로관리자의권한을악용할수있으므로불법적인 su 명령사용을주기적으로점검해야함 - 환경설정을미리해야지로그가저장됨 - 텍스트파일 - 확인 : su:session 으로필터링해서확인 sulog 환경설정 /etc/login.defs /etc/rsyslog.conf /etc/logrotate.d/syslog SULOG_FILE /var/log/sulog autjpriv.info /var/log/sulog /var/log/sulog
/var/log/cron - crond 서비스동작에서예약작업의동작상태정보확인 - 텍스트파일 - 확인 : vim, tail/head, cat 등으로확인 기타로그파일 /var/log/xorg.0.log /var/log/dmesg /var/log/anaconda.log /var/log/anaconda.xlog /var/log/anaconda.syslog /var/log/maillog /var/log/rpmpkgs xwindow에대한정보저장부팅동작에서발생한에러정보저장소프트웨어설치내용저장 xwindow에서설치한소프트웨어내용저장 System 관리용소프트웨어설치내용저장메일서버의동작상태저장설치된패키지들의목록저장
shell( 명령어해석기 ) - 커널과직접적으로연결되어사용자가프로그램으로실행시킨명령어를해석하여그결과를커널에전달하는역할을수행함 - 다양한종류가있으며사용자의목적에따라선택하여사용함 - Linux 의기본 shell bash shell 지원되는 shell 확인 - [root@kh-linux~]# cat /etc/shells 현재사용중인 shell 확인 - [root@kh-linux~]# echo $SHELL
Bourne Shell - bell 연구소에서개발한최초의대중화된 Unix - 오랜기간동안 Unix 의표준 shell 이었으나차후개발된 shell 에비해기능이부족함 C Shell(csh) - 버클리대학에서개발 - Bourne shell 과호환은되지만기본적인구조가다르며 C 언어와비슷한면이있음 - 명령어모드에서다양한기능을제공하기때문에 Unix 의기본 shell 로많이사용됨 Korn Shell(ksh) - AT&T 사에서개발 - Bourne Shell 과 C Shell 의기능을포함하며더욱강력한기능을제공하는 Shell - Unix 에서많이사용됨
TC Shell(tcsh) - Ken greer 가 C shell 의기능을확장하여개발 - C shell 의기본기능을제공하며명령행편집기능을제공함 Bourne Again Shell(bash) - 현재 Linux 의기본 shell 이며가장범용적으로사용됨 - Bourne shell 의기능추가, 발전시킴 - C shell, Korn shell 에서제공하는기능들도상당수지원됨
일시적변경 - 명령어를이용하여사용자가직접실행 - [root@kh-linux~]# /bin/[shell 이름 ] - 일시적인변경이므로취소가가능함 exit 고정변경 - /etc/passwd 파일의계정의기본 shell 정보수정 - usermod s 명령을이용하여수정 - chsh 명령어로수정
기본기능 - 명령어완성기능 tab 키사용 - 명령어 history 기능 - 메타문자지원 - 특정프로그램에서위해문자가가진원래의의미외다른의미로정의해서사용하는문자 메타문자종류 > 출력리다이렉션 쓰기 >> 출력리다이렉션 추가쓰기 < 입력리다이렉션 읽기 * null 을포함한모든문자? 단일문자 파이프 ; 명령을순서대로실행, 하나의명령끝 [ ] 지정된문자일치 조건부실행 (or) && & # 주석 조건부실행 (and) 백그라운드실행 메타문자종류 $ Bash 의환경변수로접근
redirection - 표준입력또는출력의방향을변경함 사용법 명령 > 파일이름 명령 >> 파일이름 명령 >& 파일이름 명령 2> 파일이름 명령 2>&1 파일에명령의실행결과쓰기 파일에명령의실행결과추가쓰기 파일에명령의실행결과와에러쓰기 파일에명령의에러를쓰기 명령의에러를표준출력과같은위치로출력 /dev/stdin(0) /dev/stdout(1) /dev/stderr(2) Input/Output 표준입력 표준출력 표준에러 cat << c > file1 Cat < file1 > file2 Find / -perm 1777 > file1 2> /dev/null Find / -perm 1777 > file1 2>&1 Find / -perm 1777 2>&1 > file1 c를입력후엔터를입력하면 file1이생성됨 File1의내용을읽어서 file에쓰기검색결과는 file1에쓰고, 에러는 null로버림결과와에러를 file1에쓰기에러는모니터로출력, 검색결과는 file1에쓰기
변수 - 가변적인데이터를저장하는메모리공간 - 변수의이름은일반적으로대문자를사용함 - 첫글자는알파벳또는 _( 언더바 ) 만사용가능함 - 문자열은, 로지정해야함 지역변수 - 하나의 shell 에서만사용가능한공간 - [root@kh-linux~]# 변수명 = 값 환경변수 - 모든 shell 에서사용가능한공간 - [root@kh-linux~]# export 변수명 = 값 - [root@kh-linux~]# set 변수명 = 값
변수값확인 - 모든변수값확인 - [root@kh-linux~]# declare - 환경변수확인 - [root@kh-linux~]# env - [root@kh-linux~]# printenv - 지정한변수값확인 - [root@kh-linux~]# echo $[ 변수이름 ] BASH BASH_VERSION bash shell 의경로 bash shell 의버전 환경변수 COLUMNS 터미널의행수 (default : 80) DISPLAY HISTSIZE HISTFILE 현재 xwindow 의위치 history 로기억할명령어의수 history 파일의이름
환경변수 HISTFILESIZE history 파일의사이즈 HOME 계정의홈디렉터리 HOSTNAME 시스템의호스트명 LOGNAME 로그인사용자명 HOSTTYPE 시스템의종류 LINES 터미널의라인수 LS_COLORS ls 명령어사용시파일종류별색상지정 MAIL 메일저장위치 MAILCJECL 메일점검시간 (default : 60초 ) MANPATH man페이지경로 OSTYPE 운영체제종류 PATH 명령을찾을검색경로 PS1 프롬프트의모양지정
프롬프트기본형식 - [ 사용자 @ 호스트명현재디렉터리 ]#($) PS1 환경변수변경 - [root@kh-linux~]# export PS1= 프롬프트형식 프롬프트형식 \t 현재시간을 HH:MM:SS 형식으로출력 \d 현재날짜를 요일월일 형식으로출력 \s shell 이름출력 \w 현재디렉터리의절대경로출력 \W 현재디렉터리의이름만출력 ( 상대경로 ) \u 현재사용자이름출력 \h 호스트이름출력 프롬프트형식 \H 호스트이름전체출력 \# 현재명령의명령번호출력 \$ Root #, 일반사용자 $ 출력 \! 지정된명령의 history 번호 \num num(8 진수 ) 에해당하는문자
환경변수를지역변수로변경 - [root@kh-linux~]# export n [ 환경변수이름 ] - [root@kh-linux~]# declare n [ 환경변수이름 ] 변수삭제 - [root@kh-linux~]# unset [ 변수명 ]
/etc/profile - 시스템의환경설정과시작프로그램설정 - Linux 시스템전반에적용되는환경변수설정 - $PATH, $USER, $LOGNAME, $MAIL, $HOSTNAME, $HISTSIZE 등 - bash shell 을시작할때읽어옴 /etc/bashrc - 사용자의 alias, umask, 프롬프트형식설정 ~/.bash_profile - 사용자의환경설정 ~/.bashrc - 사용자의 alias 및함수설정 ~/.bash_histroty - 입력된명령어저장, HISTFILESIZE 환경변수를통해크기설정가능 파일실행순서 - /etc/profile /.bash_profile ~/.bashrc
script language - 배치언어 = 작업제어언어 = 다이나믹언어 - 프로그램코드를별도의처리과정 ( 컴파일 ) 없이특정프로그램이명령을실시간으로한줄씩실행시켜주는프로그램 - 처리과정이필요없으므로빨리결과를확인할수있는장점이있음 - 실시간성이강조되는웹응용프로그램개발에많이사용됨 script language 종류 - shell script, 배치파일, JavaScript, actionsciprt, python, Rubi, Perl, ASP, PHP, JSP, node.js 등 shell script - shell 에의해명령이처리되는프로그램
파일이름 test1.sh - [root@kh-linux~]# vim test1.sh #! /bin/bash echo 변수선언및출력 a= Hello World echo $a b=10 echo $b echo 값입력 echo n input : read word echo word 확인 - [root@kh-linux~]#./test1.sh
파일이름 test2.sh - [root@kh-linux~]# vim test2.sh #! /bin/bash a=10 b=20 c=`expr $a + $b` echo $a + $b = $c 연산 - `expr $[ 변수명 ] [ 연산자 ] $[ 변수명 ]` - ` 문자 tab 키위쪽문자 확인 - [root@kh-linux~]#./test2.sh
제어문 - 프로그램의실행흐름을제어하는문법 - 명령의실행순서를제어함 조건문 - 특정조건에명령을실행시키고싶지않을때사용 - 조건의결과가참또는거짓으로만구분됨 ( 참 실행, 거짓 생략 ) - 문법 if [ 조건식 ] then 실행명령 fi
반복문 - 특정조건에만족할때 ( 참 ) 명령을원하는횟수만큼반복 - 조건의결과가참또는거짓으로만구분됨 ( 참 실행, 거짓 생략 ) - 문법 while [ 조건식 ] do 실행명령 done 조건식표현방식 ( 숫자 ) [$A gt $B] A가 B보다크다 ( 초과 ) [$A lt $B] A가 B보다작다 ( 미만 ) [$A ge $B] A가 B보다크거나같다 ( 이상 ) [$A le $B] A가 B보다작거나같다 ( 이하 ) [$A eq $B] A와 B가같다 [$A ne $B] A와 B가같지않다 조건식표현방식 ( 문자 ) [$A > $B] A가 B보다크다 ( 초과 ) [$A < $B] A가 B보다작다 ( 미만 ) [$A >= $B] A가 B보다크거나같다 ( 이상 ) [$A <= $B] A가 B보다작거나같다 ( 이하 ) [$A = $B] A와 B가같다 [$A!= $B] A와 B가같지않다