2-1장. 리눅스 명령어
리눅스 접속 …. 리눅스 부팅 후 로긴 가상 터미널(Virtual terminal) 사용 윈도우용 접속 프로그램 호스트 telnet, SSH, zterm, puTTY 윈도우용 접속 프로그램 X Manager, X Ming, Exceed 인터넷 LAN/WAN 가상터미널 …. 호스트
Login과 Password 리눅스 사용자 접속 과정 Login ID 규칙 Password 규칙 다른 사용자로부터 자신의 정보들을 보호 접속 후 자신의 홈(home) 디렉토리에서 파일 생성/편집/저장 가능 Login ID 규칙 영문 소문자와 숫자의 조합으로 8자 이내의 단어 Password 규칙 8자 내외의 문자, 숫자, 특수문자로 구성 2자 문자와 1자 숫자 또는 특수문자가 포함 적어도 3자의 문자는 상이해야 함 password 는 Login ID 나 User name 과 상이해야 함
프롬프트 셸(Shell) 셸 프롬프트 명령어 해석 프로그램 다음 명령을 입력할 준비가 될 때, 프롬프트(prompt) 출력 “%”, “$” 등의 기호 사용 Bourne Shell 이나 Korn Shell 은 “%”, C Shell 은 “$” 사용 사용자의 목적에 따라 프롬프트 변경 가능 [linux@seps home]$ linux : 로그인한 사용자 계정 seps : 현재 접속하고 있는 호스트 이름 home : 작업하고 있는 현재 디렉토리의 위치
Unix/Linux 파일 파일의 개념 파일의 종류 파일은 사용자가 이용할 수 있는 데이터의 실체를 의미. 여기에는 시스템 그 자체도 하나의 파일로 볼 수 있고, 응용 프로그램도 파일로 볼 수 있음. 파일의 종류 디렉토리 다른 파일을 조직하고 액세스하는데 필요한 정보를 가지고 있음 일반화일 보통 우리가 평상시 쓰는 파일 문서(text) 또는 아스키(ASCII) 파일 키보드로 입력 가능한 ASCII 문자로 구성 ASCII 문자 : 대·소문자, 숫자, 공백, 탭, 문장부호, 제어문자 포함 128개코드 2진 파일 - 문자가 아닌 데이터 포함. 예) 실행파일 특수화일 Unix/Linux가 자원을 관리하는 디바이스(Device) 파일 등 * 파일에 대한 상세 정보는 inode 데이터 구조에 저장 - 파일 종류, 크기, 소유자, 생성 시간 등
Unix/Linux 파일시스템 트리(Tree)구조 파일 시스템 유닉스 계층구조 파일과 디렉토리의 계층적 구조 최상위는 항상 루트(root) 디렉토리에 기반 유닉스 계층구조
Unix/Linux 파일시스템 리눅스 계층구조
Linux 파일시스템 디렉토리의 종류 디렉토리 의미 /bin 보통 ls, cp 와 같은 기본적인 명령어 실행 파일이 저장 /dev tty, ram 과 같은 하드웨어 장치 파일을 포함 /etc 시스템 관리자를 위해 필요한 환경 설정 파일 등을 포함 /home 여러 사용자들의 홈 디렉토리들이 위치 /lib 시스템 프로그램 실행을 위한 각종 라이브러리를 포함 /mnt 외부 장치인 플로피 디스크, 시디롬, 삼바등을 마운트하기 위해서 제공되는 디렉토리 /proc 시스템 실행 정보를 제공하는 process 파일 시스템 디렉토리임 /root 시스템 관리자인 수퍼유저의 홈 디렉토리 /sbin 수퍼유저가 사용할 수 있는 중요한 관리 명령어들이 위치 /tmp 시스템이 사용하는 임시파일을 저장 /usr 시스템에 사용되는 각종 프로그램들이 설치되는 디렉토리 /var 빠르게 갱신되거나 변화하는 가변 데이터들이 위치(로그, 메일 등)
Unix/Linux 파일시스템 홈 디렉토리 시스템관리자가 사용자를 등록할 때 기본적으로 주어지는 전용 공간 기본적으로 "/home/userID" 형식으로 생김 사용자의 홈 디렉토리 식별하는 $HOME이라는 변수를 지정 홈 디렉토리 환경설정 파일 ".profile" , ".login", ".cshrc"
명령어 입력 명령어 라인 (Command Line) 오타 교정 명령어를 입력한 전체 줄 반드시 Enter 키를 눌러야 명령어 실행됨 여러 명령어 실행을 위해 각 명령어는 “;” 로 구분 오타 교정 삭제(erase) 문자 백스페이스 (Ctrl-h 키), 또는 delete 키 라인킬(linekill) 문자 Ctrl-x, Ctrl-u 사용 stty 를 이용한 변경 stty erase [Ctrl-h] stty: 터미널의 설정을 보여주거나 설정내용을 변경하는 명령어 OS] stty -a # 현재 설정된 상태 확인 OS] stty erase ^? # delete 버튼으로 한글자 지우고 싶을 때 OS] stty erase ^h # 백스페이스 버튼으로 한글자 지우고 싶을 때 OS] stty kill ^k # 이렇게 해두면 한 줄 지울 때 Ctrl키를 누르고 k를 누름 OS] stty kill ^u # 이렇게 해두면 한 줄 지울 때 Ctrl키를 누르고 u를 누름
명령어 명령어의 구조 명령어 종류 $ls –l shell 매개변수 옵션 비 대화식(NonInteractive) 명령어 하이픈 해당 명령어만 입력하여 사용자가 원하는 결과를 표시 매우 간단하며 사용도 편리 대화식(Interactive) 명령어 명령어들이 실행하는 동안에 어떤 것을 질문하고 사용자가 대답하고 하는 일련의 과정이 끝나면 결과를 보여줌. $ls –l shell 명령어 하이픈 옵션 매개변수
셸에서 사용하는 특수문자들 코드 키 의미 init ^C 실행중인 프로그램의 중단 erase ^H 마지막 문자의 삭제 werase ^W 마지막 한 단어의 삭제 kill ^U 한 줄 전체의 삭제 quit ^\ 프로그램을 중단시키고 코어(core)파일에 저장 stop ^S 화면표시의 정지 start ^Q 화면표시의 재개 eof ^D 더 이상 자료 없음을 표시
온라인 매뉴얼 매뉴얼 출력(man) 편성 1절 - Commands (명령어) 2절 - System Calls (시스템 호출) 3절 - Subroutines (라이브러리 함수) 4절 - Special files (특수 파일) 5절 - File formats and conventions (파일 형식) 6절 - Games (게임) 7절 - Macro package and language conventions (기타정보) 8절 - Maintenance commands and procedures (보수) man 일반형식 man [section] name 주요옵션 section – 아래 구분에서 매뉴얼을 찾아 보여준다
온라인 매뉴얼 매뉴얼 형식 항목 의미 NAME 명령어의 이름과 기능 기술 SYNOPSIS 명령어의 일반형식 기술 DESCRIPTION 명령어와 옵션의 변화를 더욱더 자세히 설명 OPERANDS 특정연산자 사용방법 기술 ENVIRONMENT VARIABLES 환경변수 기술 EXIT STATUS 실행후 정상종료, 비 정상종료 확인 ATTRIBUTES 속성 정의 SEE ALSO 관련된 명령어, 유용한 정보 제공 NOTES 주의, 또는 특히 알아야 할 사항 제공 USER COMMANDS 사용예제 제공
작업종료 사용자가 작업을 마치기 위해서는 반드시 로그아웃(Logout)을 해야 함. 로그아웃 방법 “logout” 명령 "Ctrl+D" 키 "exit" 명령어
디렉토리 파일 목록 보기 디렉토리 파일 보기 (ls) 사용 예 [linux@seps linux]$ ls Desktop Mail bashrc book2 packages [linux@seps linux]$ ls 일반형식 ls [ 옵션 ] 주요옵션 -a, --all : 디렉토리 내의 모든 파일을 출력 -l, --format=long : 파일 종류, 사용권한, 크기 등 출력 -s, --size : 1K 단위로 파일 크기를 표시 -t, --sort=time : 최근에 만들어진 파일부터 출력 -c, --time : 최근에 변경한 파일부터 출력 -R : 하위 디렉토리까지 출력
디렉토리 파일 목록 보기 사용 예 [linux@seps linux]$ ls -l 합계 20 drwxr-xr-x 3 linux linux 4096 2월 6 12:06 Desktop drwx------ 7 linux linux 4096 6월 16 2003 Mail -rw-rw-r-- 1 linux linux 1651 2월 4 17:20 bashrc drwxrwxr-x 12 linux linux 4096 2월 3 11:32 book2 drwxr-xr-x 2 linux linux 4096 2월 1 15:22 packages [linux@seps linux]$ ls -a . .bash_history .emacs kde .viminfo Mail .. .bash_logout .esd_auth .mcop .wmrc bashrc .ICEauthority .bash_profile .gdbtkinit .mcoprc .xawtv book2 .Xauthority .bashrc .gimp-1.2 .mozilla.xsession-errors packages .ami .ddd .gtkrc-kde .qt Desktop [linux@seps linux]$
파일 종류 보기 파일 종류 표시 파일 종류 file 파일명 사용 예 문자 파일 유형 - 일반 (정규) 파일 d 디렉토리 파일 b 블럭 단위로 읽고 쓰는 블럭 장치 특수 파일 c 문자 단위로 읽고 쓰는 문자 장치 특수 파일 l 기호적 링크 p 파이프 s 소켓 $ file first.dat temp first.dat: ASCII text temp: directory $
파일 복사 파일의 복사(cp) 사용 예 - /bin/date 를 Test 디렉토리 안으로 복사 [linux@seps linux]$ ls Desktop Mail Test bashrc book2 linux packages [linux@seps linux]$ cp /bin/date Test [linux@seps linux]$ cd Test [linux@seps Test]$ ls Test.c date cp 일반형식 cp [ -fip ] source dest cp [ -fipr ] source.. dest_dir 주요옵션 -f : 복사할 파일이 있을 경우 삭제하고 복사 -i : 복사할 파일이 있을 경우 복사할 것인지 물어봄 -p : 원본 파일의 모든 정보를 보존한 채 복사 -r : 하위 디렉토리에 있는 모든 파일을 복사
파일 복사 파일의 복사(cp) 사용 형식 동 작 cp 파일1 파일2 파일1을 파일2로 복사. cp 파일들 디렉토리 파일들을 디렉토리 밑에 같은 이름으로 복사. cp -r 디렉토리1 디렉토리2 디렉토리1을 디렉토리2로 복사. 디렉토리1의 파일도 모두 복사됨. $ cp hello.c h.c $ cp f1.c dir1 $ cp f1.c f2.c f3.c dir1 $ cp -r dir1 dir2 $ cp /etc/hosts text1 $ cp /etc/hosts . - dir2 있을 경우 dir2 하위에 dir1 복사 - dir2 없을 경우 현 디렉토리에 dir2 만들고 dir1 복사
파일 삭제 파일의 삭제(rm) 사용 예 [linux@seps linux]$ cd Test [linux@seps Test]$ ls Test.c date [linux@seps Test]$ rm date Test.c rm 일반형식 rm [ -firv ] file or directory 주요옵션 -f : 지울 파일이 있을 경우 강제로 삭제 -i : 지울 파일이 있을 경우 지울 것인지 물어봄 -r : 하위 디렉토리에 있는 모든 파일을 삭제 -v : 지우는 파일 정보를 출력 - rm *.* ???
파일 이름 변경과 옮기기 파일 이름 변경와 옮기기(mv) = cp후 rm 명령 수행 결과 같음 mv 일반형식 mv [ -fi ] source dest mv [ -fi] source … dest_dir 주요옵션 -b : 대상 파일이 지워지기 전에 백업 파일을 만듦 -f : 대상 파일의 접근허가와 관계없이 무조건 파일을 이동 -i : 대상 파일이 기존 파일이면, 덮어쓸 것인지 물어봄 -u : 대상 파일보다 원본 파일이 최근의 것일 때 업그레이드 -v : 파일 옮기는 과정을 자세하게 보여준다 사용 형식 동 작 mv 파일1 파일2 파일1의 이름을 파일2로 바꿈. mv 파일명… 디렉토리 지정한 파일들을 디렉토리로 옮김. mv 디렉토리1 디렉토리2 디렉토리1의 이름을 디렉토리2로 바꿈.
파일 이름 변경과 옮기기 사용 예 [linux@seps linux]$ ls Desktop Mail Test bashrc book2 mvTest.c packages [linux@seps linux]$ mv mvTest.c Test Desktop Mail Test bashrc book2 packages [linux@seps linux]$ cd Test [linux@seps Test]$ ls Test.c Test2 mvTest.c [linux@seps Test]$ cp mvTest.c ..; cd .. [linux@seps linux]$ mv -i mvTest.c Test mv: overwrite `Test/mvTest.c'? Y [linux@seps linux]$
디렉토리 생성 디렉토리 생성 (mkdir) 사용 예 mkdir 일반형식 mkdir [ -m mode ] [ -p ] dir … [linux@seps linux]$ ls Desktop Mail Test bashrc book2 packages [linux@seps linux]$ mkdir temp Desktop Mail Test bashrc book2 packages temp [linux@seps linux]$ mkdir -p Test3/Test5 Desktop Mail Test Test3 bashrc book2 packages temp [linux@seps linux]$ ls Test3 Test5 mkdir 일반형식 mkdir [ -m mode ] [ -p ] dir … 주요옵션 -m : 새로운 디렉토리의 허가모드를 지정한 모드로 설정 -p : 하위 디렉토리가 존재하지 않는 경우 함께 생성
디렉토리 삭제 디렉토리 삭제(rmdir) 사용 예 [linux@seps Test3]$ ls Test5 [linux@seps Test3]$ rmdir Test5 [linux@seps Test3]$ rmdir 일반형식 rmdir [ -p ] dir … 주요옵션 -p : 지정한 하위 디렉토리까지 삭제 * 디렉토리가 비어있어야 삭제 가능
실습하기 mkdir Unix/ch3 cd Unix/ch3 mkdir Practice cd Practice cp /etc/services test.txt ls cp /etc/services . mkdir Temp cp test.txt Temp cp Temp Tmp cp -r Temp Tmp ls Temp ls Tmp 1) ~ 14) 각 작업의 의미를 설명해 보세요
실습하기 ls rm –i test.txt rm profile ls Tmp rmdir Temp rm –r Temp 1) ~ 7) 각 작업의 의미를 설명해 보세요 5) 와 6)의 차이는 무엇인가요?
실습하기 ls mkdir Temp mv test.txt Temp ls –l Temp mv Temp temp rm –r temp 1) ~ 9) 각 작업의 의미를 설명해 보세요 3) 과 6)의 차이는 무엇인가요?
소유권과 보호 파일 접근을 위해 각 파일에 대해 사용권한 설정 사용권한 소유권한 파일/디렉토리에 대한 사용자 범위 제한 및 발생 가능한 사용자 실수로부터의 보호 사용권한 소유권한 Unix에서 제공되는 모든 파일들은 3가지 권한의 조합으로 표시 모드 종류 의미 4 Read 그 파일에 대해 읽기 가능 2 Write 그 파일에 대해 쓰기 가능 1 Execute 그 파일에 대해 실행 가능(명령어로 사용 가능) 그 파일에 대해 어떤 사용권한도 없음 종류 의미 소유자(Owner) 파일이나 디렉토리를 처음 만든 사람 그룹(Group) 사용자는 어느 특정한 그룹에 속함 다른사람들(Others) 현재 사용자 계정을 가진 모든 사람
소유권과 보호 사용권한 조합 사용권한 값 읽기 쓰기 실행 - Y 1 2 3 4 5 6 7
파일 사용권한 변경 파일 사용권한 변경(chmod) 기호 모드 chmod 일반형식 chmod [ -fR ] <absolute-mode> file ... chmod [ -fR ] <symbolic-mode-list> file … 주요옵션 -f : chmod가 에러가 발생하여도 강제로 모드를 변경 -R: 모든 하위 디렉토리를 포함하여 모드를 변경 기호 의미 + 사용권한 부여 - 사용권한 제거 = 사용권한 설정 s 소유자와 그룹만 허용 u 소유자 권한 g 그룹 권한 o 소유자와 그룹 이외 다른 사용자 권한 a 소유자, 그룹, 다른 사용자 모두 사용권한 허가
파일 사용권한 변경 사용 예 [linux@seps Test]$ ls -l 합계 8 -r-xr-xr-x 1 linux linux 0 2월 10 23:01 Test.c drwxrwxr-x 2 linux linux4096 2월 10 23:31 Test2 -rw-rw-r-- 1 linux linux 26 2월 11 00:44 catTest.txt -rw-rw-r-- 1 linux linux 0 2월 11 00:17 mvTest.c [linux@seps Test]$ [linux@seps Test]$ chmod g+rw Test.c -r-xrwxr-x 1 linux linux 0 2월 10 23:01 Test.c -rw-rw-r-- 1 linux linux 26 2월 11 00:44 catTest.txt
파일 사용권한 변경 절대 모드 사용자 범위 사용권한 기호 절대모드 소유자 읽기 r 400 쓰기 w 200 실행 x 100 그룹 다른 사용자 4 2 1
파일 사용권한 변경 사용 예 [linux@seps Test]$ ls -l 합계 8 -r-xrwxr-x 1 linux linux 0 2월 10 23:01 Test.c drwxrwxr-x 2 linux linux4096 2월 10 23:31 Test2 -rw-rw-r-- 1 linux linux 26 2월 11 00:44 catTest.txt -rw-rw-r-- 1 linux linux 0 2월 11 00:17 mvTest.c [linux@seps Test]$ [linux@seps Test]$ chmod 725 Test.c -rwx-w-r-x 1 linux linux 0 2월 10 23:01 Test.c
파일 소유자 및 그룹 변경 파일 소유자 변경(chown) 파일 그룹명 변경(chgrp) chown 일반형식 chown [ -fR ] owner [ : group ] file … 주요옵션 -f : chown이 에러가 발생하여도 강제로 모드를 변경 -R: 모든 하위 디렉토리를 포함하여 모드를 변경 *파일의 소유권을 변경할 때 변경 전후 계정에 대한 권한을 갖고 있어야 하므로 루트 계정으로 명령 실행하는 것이 일반적임 chgrp 일반형식 chgrp [ -fR ] group file ... 주요옵션 -f : chgrp가 에러가 발생하여도 강제로 모드를 변경 -R: 모든 하위 디렉토리를 포함하여 모드를 변경 * 파일의 소유자나 루트만 실행 가능 명령
파일 링크 만들기 파일 연결관계(Link) 만들기(ln) 사용 예 Unix/Linux 파일시스템에서 매우 긴 파일이름을 참조하거나, 다른 디렉토리 경로로 연결하여 쉽게 접근할 필요가 있을 때 사용 사용 예 [linux@seps linux]$ ln -s catTest.txt Test.txt [linux@seps linux]$ ls -l 합계 8 -rw-rw-r-- 1 linux linux 0 9월 6 21:55 Test.c lrwxrwxrwx 1 linux linux 11 9월 6 22:25 Test.txt -> catTest.txt -rw-rw-r-- 1 linux linux 0 9월 6 21:54 Test1.c drwxrwxr-x 2 linux linux 4096 9월 6 21:55 Test2 -rw-rw-r-- 1 linux linux 26 9월 6 21:55 catTest.txt ln 일반형식 ln [ -fns ] source_file [ target ] ln [ -fns ] source_file … target 주요옵션 -f : 접근할 수 없는 사용권한을 가졌을 때도 링크가 가능 -s: 심볼릭 링크 생성
파일 링크 만들기 하드 링크 심볼릭 링크 하나의 파일에 둘 이상의 다른 이름 사용 (디렉토리는 불가) 파일의 한 이름으로 수정 시 다른 이름으로도 수정 반영 ls –al로 하드 링크 수 확인 동일 파일 확인 (같은 inode 번호 가짐) ls –i 파일 한 이름 삭제(rm) 시 다른 이름 존재 하드 링크 수 1 감소 rm 명령어는 무조건 파일 삭제가 아닌 하드 링크 수 1감소 후, 0이면 삭제 심볼릭 링크 파일 및 디렉토리 둘 다 가능 윈도우의 바로가기 아이콘에 해당 하드 링크 수 1 (이름 추가 아님) 파일 이름 뒤에 원본 파일 이름 표시됨 inode 번호가 다른 별개의 파일임 원본 파일 삭제 시 심볼릭 링크 사용 불가
파일 링크 만들기 dirent Contents of file dirent Hard link symlink dirent Symbolic Link
파일 링크 만들기 복사 (cp)와 링크(ln)의 차이는? cp ln 완전 별도 파일 생성 이름만 다르고 내용은 동일 둘 중 하나를 수정해도 다른 파일에 영향 없음 둘 중 하나를 수정하면 두 파일이 같이 수정됨 같은 파일을 별도로 수정하여 작업할 때 사용 파일을 공동으로 관리해야 할 때 사용
파일 링크 만들기 하드 링크 실습하기 cp /etc/service ln.txt ls -l ln ln.txt ln.hd 1) 파일을 복사하세요. 2) ln.txt의 링크수는 얼마인가요? 3) ln.txt와 ln.hd의 링크수는 얼마인가요? 4-5) ln.txt의 내용과 ln.hd의 내용이 같은가요? 6) ln.txt.와 ln.hd가 같은 i-node번호를 가졌나요? 7) ln.hd의 내용을 바꾸세요. 8) ln.txt의 내용이 바뀌었나요? 9) ln.txt 파일을 삭제하세요. 10) rm을 하고 난 뒤 파일의 링크수가 바뀌었나요? cp /etc/service ln.txt ls -l ln ln.txt ln.hd cat ln.txt cat ln.hd ls -i ln.* ls >> ln.hd rm ln.txt ls -l ln.*
파일 링크 만들기 심볼릭 링크 실습하기 ln –s ln.hd ln.sl ls –l ls –i vi ln.sl rm ln.hd ln.txt, ln.hd, ln.sl의 링크수는 얼마인가요? ls –l의 결과 ln.sl은 ln.txt나 ln.hd와 어떻게 다른가요? ln.txt, ln.hd, ln.sl 중 inode번호가 같은 것은 무엇이고 다른 것은 무엇입니까? vi ln.sl을 하면 어떤 내용이 나옵니까? 파일을 삭제하세요. vi를 하면 무엇이 나오나요? ln의 결과는 무엇입니까? ln –s의 결과는 무엇입니까? ln –s ln.hd ln.sl ls –l ls –i vi ln.sl rm ln.hd ln /usr/bin/ls ls.x ln –s /usr/bin/ls ls.x
파일검색(find) 파일 검색 (find) 지정된 디렉토리부터 서브디렉토리를 탐색하여 특정 파일을 찾음 find 일반형식 주요옵션 탐색조건은 아래 참고 탐색 조건 설 명 -name 파일명 찾고자 하는 파일의 이름을 정한다. 와일드 카드도 가능하다. -perm 모드 파일 권한(permission)이 일치되는 것을 찾는다. -type ? 형태가 같은 파일을 찾는다. 물음표(?) 부분에 디렉토리(d), 파이프(p), 심볼릭 링크(l), 소켓(s), 블록 파일(b), 일반 파일(f) 사용 -links ? 특정 개수의 링크를 가진 파일을 찾는다. 물음표 부분에 링크 숫자 -size [+|-]n 파일의 크기가 일치하는 것을 탐색. +n블록보다 크거나, -n블록보다 작거나, 정확히 크기가 n블록인 파일 검색. 블록 단위(512bytes) n*512bytes -user 사용자 파일 사용자의 ID에 따라서 검색한다. -atime [+|-]n 최근 며칠 내에 엑세스한 파일을 검색한다. 날짜수는 n에 명시한다. -exec 명령 원하는 탐색조건에 맞는 파일을 찾으면 명령을 실행. 명령 끝은 \; -newer 파일 어떤 파일보다 최근에 갱신된 모든 파일을 검색한다.
파일검색(find) 기능 검색조건을 결합할 때 사용하는 논리연산자 표현식에는 특정 파일의 이름이나 복수개의 파일을 지정하는 패턴 또는 파일의 속성(크기, 수정시간) 그리고 여러 가지 속성을 조합한 논리식이 지정될 수 있음 표현식과 일치하는 파일들에 대해 파일의 이름을 출력할 수도 있고 특정한 명령을 실행시킬 수도 있음 현재의 경로 이름을 지정하기 위하여 "{}"를 사용 검색조건을 결합할 때 사용하는 논리연산자 논리연산자 의미 논리부정 (NOT) 부정에는 "!" 연산자를 사용 예) ".c"로 끝나지 않는 모든파일 이름 ! -name "*.c" 논리곱 (AND) 논리곱의 경우에는 별도의 “-a” 또는 연산자 없이 검색조건 나열 예) 크기가 10 블럭 이상이고 링크가 3개인 파일 -size +10 -links 3 또는 -size +10 -a -links 3 논리합 (OR) “-o” 연산자를 사용 예) 크기가 10블럭을 넘거나 링크가 3개인 파일 -size +10 -o -links 3
파일검색(find) 경로 설정 경로 표현 찾기 시작 위치 ~ 홈 디렉토리에서 찾기 시작 . 현재 디렉토리에서 찾기 시작 /etc /etc 디렉토리에서 찾기 시작 (절대 경로) / /(root) 디렉토리에서 찾기 시작 (전체 파일 시스템 검색) unix unix 디렉토리에서 찾기 시작 (상대 경로)
파일검색(find) -atime / -mtime (+/- : 24시간 기준) : 24시간 이내 접근된/수정된 파일 찾기 $ find . -mtime -1 . ./fg.txt ./eg.txt ./h.txt [ 시간 표현 방법 ] 현재 시각을 기준으로 -n : n일 이내. n*24시간 전부터 현재까지 마지막으로 수정 또는 접근된 파일 n : n일 전. 즉 (n+1)*24 시간 전부터 n*24 시간전까지 최종 수정 또는 접근된 파일 +n : n일 이후, 즉 (n+1)*24 시간 이전에 마지 막으로 수정 또는 접근된 파일 72시간전 48시간전 24시간전 현재 1 -1 +1
파일검색(find) 사용 예 $ find ~ -name find.dat -exec rm {} \; $ [linux@seps linux]$ find /bin -name “r*“ $ find . -newer g.dat g.dat 파일 보다 나중에 수정된 파일 찾기 $ find ~ -type d –o –name Unix 디렉토리이거나 이름이 Unix 인 파일 $ find . ! -newer h.txt h.dat 파일보다 나중에 수정되지 않은 파일 찾기. 즉, h.dat 파일보다 이전에 수정된 파일 찾기 $ find ~ -name find.dat -exec rm {} \; $ 앞의 find 명령으로 찾아진 파일에 삭제 명령을 수행 결국은 rm find.dat 실행함 { }는 find 명령으로 찾아진 파일명이 들어가는 자리 \; find 명령의 끝
파일검색(find) 실습 find /etc -type l find . –mtime -1 –name report.txt find ~ -size +2 find . -ls find /home –user user1 find . -type f find . -name “*.dat” -exec mv {} Practice \; /etc 디렉토리에 있는 심볼릭링크 파일 찾기 어제 작업한 report.txt 파일 찾기 크기가 2블록(1KB)보다 큰 파일 찾기 전체 파일 User1 사용자의 파일 현재 디렉토리에서 파일 찾기 *.dat 파일 찾아 Practice 디렉토리로 이동
작업 디렉토리 확인 현재 작업중인 디렉토리 확인(pwd) 사용 예 pwd (print working directory) [linux@seps linux]$ pwd /home/linux [linux@seps linux]$ (print working directory) pwd 일반형식 주요옵션
디렉토리 경로 절대경로와 상대경로 절대경로: 모든 경로 명을 루트 디렉토리인 "/"로 시작하여 특정한 파일이나 디렉토리를 표시 A - /usr B - /export/home/knd1/test C - /export/home/home 상대경로: 현재 작업 디렉토리부터 시작하여 상대적인 경로 이름 표시 A - ../../../usr B - ../knd1/test C - ../
작업 디렉토리 변경 디렉토리 변경(cd) 사용 예 cd 일반형식 cd [ directory ] 주요옵션 [linux@seps linux]$ cd /usr [linux@seps usr]$ pwd /usr [linux@seps usr]$ cd ~ [linux@seps linux]$ pwd /home/linux [linux@seps usr]$ cd .. cd 일반형식 cd [ directory ] 주요옵션
백그라운드 작업 목록 작업(job) 포그라운드 작업 백그라운드 작업 실행중인 프로세스 쉘이 프로세스를 관리하는 단위 쉘은 job을 시작시키고 제어 (Job ID 부여 - PID와 다름) 포그라운드 작업 키보드 표준 입력을 받아들이면서 실행 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 프롬프트가 출력되지 않아서 다른 명령을 입력할 수 없는 처리 방법 보통의 처리방법 백그라운드 작업 실행 도중 쉘은 다른 용도로 사용 가능 명령의 입력이 끝나면 결과에 상관없이 바로 다음 프롬프트가 출력되어 다른 명령을 입력할 수 있는 처리 방법 명령의 끝에 & 붙임
백그라운드 작업 목록 백그라운드 작업 목록(jobs) 사용 예 jobs 일반형식 jobs [ -I ] 주요옵션 [linux@seps linux]$ sleep 100 & [1] 1384 [2] 1385 [linux@seps linux]$ jobs [1]- Running sleep 100 & [2]+ Running sleep 100 & [linux@seps linux]$ jobs 일반형식 jobs [ -I ] 주요옵션 -I : 프로세스 번호를 추가로 보여준다. 포그라운드 $ find / -name passwd 백그라운드 $ find / -name passwd & [1] 5699 $ cp –R /usr/test & 작업순서 +, - • + : 가장 최근에 접근한 작업 • - : + 작업보다 바로 전에 접근한 작업 • 공백 : 그 외의 작업
백그라운드 작업 목록 작업 전환 및 종료 명령 명령 기능 bg [%작업번호] 현재 작업이나 특정 작업을 백그라운드로 전환시켜 실행 fg [%작업번호] 현재 작업이나 특정 작업을 포그라운드로 전환시켜 실행 ctrl+z 포그라운드 작업을 중지시키고, 백그라운드의 중지된 목록으로 보냄 ctrl + c 포그라운드에서 수행중인 작업을 중지 kill %n 작업번호가 n인 작업을 종료
백그라운드 작업 목록 $ sleep 100 ^Z [1]+ Stopped sleep 100 $ bg %1 $ jobs [1]+ Running sleep 100 & $ fg sleep 100 _ jobs 명령으로 현재 작업을 확인 1번 job : 실행중인 상태 포그라운드로 다시 전환하면 프로세스가 끝날 때까지 기다려야 한다.
백그라운드 작업 목록 실습하기 vi /etc/hosts ctrl+z sleep 300 & jobs kill %2 fg
프로세스 삭제 프로세스 삭제(kill) kill 일반형식 kill [ -signalID ] PID 주요옵션 시그널 번호 이름 기능 기본 응답 1 SIGHUP 터미널 연결이 끊어진 경우에 발생 종료 2 SIGINT 보통 Ctrl-C에 의해 발생 9 SIGKILL 프로세스를 강제종료 시킨다. 이 시그널은 무시할 수 없다. 15 SIGTERM 프로세스를 종료시킨다. 이 시그널은 무시할 수도 있다. kill 명령이 보내는 기본 시그널 HUP(Hangup): 로그아웃하거나 (모뎀) 접속을 끊을 때 발생하는 시그널. 특정 실행 중인 프로그램이 이용하는 설정 파일을 변경시키고 변화된 내용을 적용할 때 이용. INTerrupt: 현재 실행 중인 프로그램의 동작을 멈출 때 사용 KILL: 무조건 해당 실행 프로그램 종료 TERMination: 실행중인 프로그램에 정의되어 있는 정상적인 종료방법으로 프로그램을 종료
프로세스 삭제 $ kill 15759 $ $ kill -9 15759 $ soft kill 15759 프로세스에게 SIGTERM 시그널을 보낸다. 프로세스는 하던 작업을 마무리하고 종료됨. 정상 종료 $ kill 15759 $ sure kill 15759 프로세스에게 SIGKILL 시그널을 보낸다. SIGKILL 을 받으면 프로세스가 즉시 종료된다. 어떤 시그널도 무시하는 프로세스를 종료시킬 때 유용하다. 비정상 종료 $ kill -9 15759 $
프로세스 삭제 사용 예 * kill 1384 명령 실행 후 결과와 비교 [linux@seps linux]$ sleep 100 & [1] 1384 [linux@seps linux]$ kill -9 1384 [linux@seps linux]$ jobs [1]+ Killed sleep 100 [linux@seps linux]$ * kill 1384 명령 실행 후 결과와 비교
파일 만들기 파일 만들기(touch) 지정한 파일이 존재하지 않으면 생성, 존재하면 현재 시간 또는 지정한 시간으로 시간 변경 [[CC]YY]MMDDhhmm[.ss] 옵션 –r 시간을 파일(ref_file)에서 읽음. 즉, 특정 파일의 접근, 수정 시각으로 수정 touch 일반형식 touch [ -acm ] [-r ref_file | -t time ] file ... touch [ -acm ] [ date_time ] file ... 주요옵션 -a : 접근시간만 갱신 -c : 지정된 파일이 존재하지 않는 경우 새로 생성하지 않음 -m : 수정시간만 갱신 -r 또는 -t : 현재 시간 대신 지정 시간(ref_file 또는 time) 사용
파일 만들기 사용 예 ls -l touch newfile1 touch -r test newfile1 [linux@seps temp]$ ls [linux@seps linux]$ touch out [linux@seps linux]$ ls -rw-rw-r-- 1 linux linux 0 9월 3 19:24 out -rw-rw-r-- 1 linux linux 0 9월 3 19:30 out [linux@seps linux]$ touch –t 03150030 out ls -l touch newfile1 touch -r test newfile1 1) ~ 6) 각 작업의 의미를 설명해 보세요 3) 과 5)의 차이는 무엇인가요?
파일 만들기 파일 만들기(cat) 사용 예 [linux@seps Test]$ cat > catTest.txt cat Hello! Nice to meet you. Ctrl-D 입력 [linux@seps Test]$ ls Test.c Test2 catTest.txt mvTest.c [linux@seps Test]$ cat 일반형식 cat > filename 또는 cat >> filename 기능 키보드로부터 입력받아 파일 생성 파일 존재 시 > : 덮어쓰기 파일 존재 시 >>: 이어쓰기 종료 시 ctrl-D 입력하면 쉘로 빠져나옴
파일 내용 보기 파일의 내용보기(cat) 사용 예 [linux@seps Test]$ cat catTest.txt cat Hello! Nice to meet you. [linux@seps Test]$ cat -b catTest.txt 1 Hello! 2 Nice to meet you. cat 일반형식 cat [ -bnsuvet ] [ file … ] 주요옵션 -b, -n : 모든 라인에 행 번호를 붙임 (-b 는 nonblank 라인에) -u : 출력이 버퍼에 기록되지 않게 함 -v : 출력할 수 없는 문자를 출력. -e : -vE 옵션과 같음. 라인의 끝에 "$"를 표시함 -t : -vT 옵션과 같음. ^I 로 TAB 문자를 표시함
파일 내용 보기 파일의 내용보기(more, less) cat 명령은 파일 내용을 화면에 연속적으로 출력, 화면에는 파일의 마지막 페이지만 보임 more, less 명령은 파일의 내용을 페이지 단위로 보여줌 more, less 일반형식 more/less file_name 주요옵션 f, 스페이스 바: 다음 페이지 출력 엔터: 다음 한 줄 출력 b: 이전 페이지 출력 q: 프로그램 종료 /문자열: 문자열 검색
파일 내용 보기 파일의 내용보기(head, tail) 사용 예 [linux@seps Test]$ cat catTest.txt Hello! Nice to meet you. [linux@seps Test]$ head –1 catTest.txt // 첫 번째 줄 [linux@seps Test]$ tail –1 catTest.txt // 마지막 줄 head, tail 일반형식 head [ -number | -n number ] [ file… ] tail [ + number [ lbcf ] ] [ file… ] tail [ -f | -r ] [ -c name | -n number ] [ file…] 주요옵션 -n : 출력할 라인의 개수이며 기본은 10개의 라인임 -l : 출력크기를 라인단위로 지정 -b : 출력크기를 블록단위로 지정 -c : 출력크기를 문자단위로 지정 -f : 파일 뒤에 추가되는 라인을 계속적으로 보여줌
파일 내용 보기 실습하기 cd cat .profile cat -n .profile cat /etc/services more /etc/services space b /time tail /etc/services tail -f /etc/services ^C 홈 디렉토리로 이동 . profile의 내용 보기 . profile의 내용을 줄번호와 함께 보기 /etc/services 파일 내용 보기 한 화면씩 /etc/services 내용 보기 다음 화면 보기 이전화면 보기 문자열 “time” 찾기 /etc/services 파일 내용의 마지막 부분 보기 파일의 마지막 부분을 계속 보기 ^C 로 강제 종료
파일탐색(grep) 파일 탐색 (grep : get regular expression print) 파일 내에서 특정 문자열을 검색하기 위해 사용 문자열이 발견되면 해당 행을 표시 grep 일반형식 grep [option] 패턴 파일 주요옵션 -v(invert) : 검색 문자열을 포함하는 행을 제외한 모든 라인 출력 -n(number) : 검색 문자열을 포함하는 행 번호 표시 -c(count) : 검색 문자열을 포함하는 라인 수 출력 -l(listfile) : 해당 패턴이 들어있는 파일 이름을 출력 -i : 대문자, 소문자 구분을 하지 않고 검색 -w : 패턴이 하나의 단어로 된 것만 검색
파일탐색(grep) grep 명령 사용 예제 기본 검색 대소문자 무시 : -i 기본 데이터 (grep.dat) $ grep unix grep.dat unix+ 123 $ UNIX 12345 unix+ 123 system admin Network 5 root other sh sjyoun prof ksh jongwon prof KSH ROOT other csh ck07555 student ksh CK08777 student bash $ grep -i unix grep.dat UNIX 12345 unix+ 123 $
파일탐색(grep) grep 명령 사용 예제 파일 이름 검색 : -l 줄 번호 출력 : -n 기본 데이터 (grep.dat) $ grep -l unix grep.dat grep.dat $ UNIX 12345 unix+ 123 system admin Network 5 root other sh sjyoun prof ksh jongwon prof KSH ROOT other csh ck07555 student ksh CK08777 student bash $ grep -n unix grep.dat 2: unix+ 123 $
파일탐색(grep) grep 명령 사용 예제 패턴을 포함하는 행을 제외한 행 출력: -v 패턴을 포함하는 행수 : -c 기본 데이터 (grep.dat) 패턴을 포함하는 행을 제외한 행 출력: -v 패턴을 포함하는 행수 : -c UNIX 12345 unix+ 123 system admin Network 5 root other sh sjyoun prof ksh jongwon prof KSH ROOT other csh ck07555 student ksh CK08777 student bash $ grep -v unix grep.dat UNIX 12345 system admin Network 5 … $ $ grep -c 123 grep.dat 2 $
파일탐색(grep) grep 명령 사용 예제 단어 검색 : -w 다중 옵션 사용 기본 데이터 (grep.dat) $ grep -w unix grep.dat unix+ 123 $ UNIX 12345 unix+ 123 system admin Network 5 root other sh sjyoun prof ksh jongwon prof KSH ROOT other csh ck07555 student ksh CK08777 student bash $ grep -ni 123 grep.dat 1: UNIX 12345 2: unix+ 123 $
파일탐색(grep) 실습 grep sh g.txt grep -w sh g.txt grep -v root g.txt grep –I root g.txt grep -ci sh g.txt grep user1 /etc/passwd grep root /etc/passwd grep root /etc/group grep other /etc/group root other sh ROOT csh user1 USER2 12root ksh user1 KSH csh 결과를 예측해 봅시다
파일탐색(grep) 실습 데이터 파일 : g.txt 1만 검색하기 위한 명령은? 1이 들어있지 않은 라인을 검색하기 위한 명령은? User를 대소문자 구분 없이 검색하기 위한 명령은? sh 가 들어간 라인의 수를 구하는 명령은? 정확히 sh만 들어간 라인의 수를 구하는 명령은? root가 들어간 라인을 찾아 파일 h.out에 저장하는 명령은? root other sh ROOT csh user1 USER2 12root ksh user1 KSH csh grep 1 g.txt grep -v 1 g.txt grep -i user g.txt grep -c sh g.txt grep -w sh g.txt grep root g.txt > h.out
파일탐색(grep) 정규표현식 사용하기 필요에 따라 약간 더 복잡한 검색 명령어를 사용할 필요로 하는 것을 정규표현식이라 함 문자 의미 예 결과 ^ 라인의 시작 ‘^문자열’ 문자열로 시작하는 모든 행 $ 라인의 끝 ‘문자열$’ 문자열로 끝나는 모든 행 . 한 글자 ‘a…b’ 한글자 대응, a로 시작해서 b로 끝나는 5글자 검색 [ ] 괄호안의 글자중 하나 ‘[Pp]attern’ Pattern 또는 pattern이 나타나는 라인 검색 [^] 괄호 안에 있는 글자가 아닌 글자 ‘[^a-m]att’ att앞에 a부터 m까지 나오지 않는 라인 검색 * 앞의 항목이 없거나 여러 번 반복 ‘ab*’ a다음에 b가 없거나 반복적으로 나타나는 라인 검색
파일탐색(grep) 실습 결과를 예측해 봅시다 데이터 파일 : grep.dat 주의! 패턴을 작은 따옴표 ‘ ‘ 로 꼭 감싸야 함! UNIX 12345 unix+ 123 system admin Network 5 root other sh sjyoun prof ksh jongwon prof KSH ROOT other csh ck07555 student ksh CK08777 student bash grep ‘^root’ grep.dat grep ‘sh$’ grep.dat grep ‘r..t’ grep.dat grep ‘oo*’ grep.dat grep ‘[0-9].*’ grep.dat grep ‘[^c]sh’ grep.dat 결과를 예측해 봅시다
파일탐색(grep) 파이프 라인 이용 grep 명령은 또한 파이프라인에 많이 사용 특정한 정보를 필터링 한 명령의 출력을 다른 명령이나 쉘의 입력으로 연결하여 사용 두 명령은 “|” 를 사용하여 연결
파일탐색(grep) 사용 예 $ ls -l | grep rw- [linux@seps Test]$ grep '[rst]ystem.$' osinfo.txt The GPL governs the distribution of the Linux operating system. [linux@seps Test]$ ps ax | grep clock 901 pts/1 S 0:00 grep clock $ ls -l | grep rw- -rw-r--r-- 1 user1 staff 50 May 10 23:00 g.txt … $ $ ps -ef | grep user1 user1 6683 6680 0 07:28:15 pts/1 0:00 ps -ef user1 6720 6683 0 17:50:53 pts/1 0:00 -bash $
파일비교(diff, cmp, comm) 파일 비교(diff) 두 파일의 차이점을 출력 어떻게 하면 두 개의 파일이 같아질 수 있는지를 출력 파일 변경을 표시하는 3가지 옵션 diff 일반형식 diff [option] from-file to-file 주요옵션 -u : 통일된 출력 형식을 사용 -n : 비교하는 디렉토리에 파일이 하나만 있더라도 모두 있는 것처럼 처리 -r(recursive) : 서브디렉토리까지 모두 비교 옵션 의미 a(append, add) 2번째 파일에 나타난 결과를 얻기 위하여 1번째 파일에 첨가되는 라인을 표시 d(delete) 1번째 파일로부터 삭제되는 라인 c(change) 1번째와 2번째 파일 사이에 변경된 라인
파일비교(diff, cmp, comm) 파일 비교(diff) 파일1과 파일2가 같아지기 위해 a(파일1에 추가), d(파일1에서 삭제), c(파일1, 파일2 수정)의 의미를 갖는 수정 기호와 해당 라인 번호 내용 출력 '<'는 파일1, '>'는 파일2 의미 n1 a n3,n4 : 파일1의 n1 라인에는 없지만 파일2의 n3~n4 라인에는 있음 n1,n2 c n3,n4 : 파일1의 n1~n2 라인과 파일2의 n3~n4 라인이 서로 다름 n1,n2 d n3,n4 : 파일1의 n1~n2 라인에는 있지만 파일2의 n3~n4 라인에는 없음 $ diff file1 file2 3c3 Change line 3 < This is line 3 of file 1. from this --- > This is line 3 of file 2. to this. 7a8 > This is line 8 from file 2. Add this line after line 7 of file1.
파일비교(diff, cmp, comm) “cmp” 명령 “comm” 명령 두 파일이 서로 같은가를 결정 차이점 발견하면 정지 텍스트 파일에서는 문자와 문자를 비교 “comm” 명령 두 파일의 행 단위 비교 옵션 -1: 파일1에만 있는 것은 출력하지 않기 -2: 파일2에만 있는 것은 출력하지 않기 -3: 파일1과 파일2에 모두 존재하는 라인은 출력하지 않기
파일비교(diff, cmp, comm) 사용 예 [linux@seps Test]$ cat diffText.txt Hi! Nice to meet you. How are you? [linux@seps Test]$ diff catText.txt diffText.txt 1c1 < Hello! --- > Hi! 2a3 > How are you? [linux@seps Test]$ [linux@seps Test]$ cmp catText.txt diffText.txt catText.txt diffText.txt differ: byte 2, line 1 [linux@seps Test]$ comm catText.txt diffText.txt Hello!
파일압축과 묶음 파일 묶기 (tar) tar 일반형식 tar [options] file files… 주요옵션 -c : 새로운 tar 파일 생성 -t : tar 파일의 목차 출력 -x : tar 파일 풀기 -r : tar 파일에 새로운 파일 추가 --delete : tar 파일에서 특정 파일 삭제 -u : tar 파일보다 새로운 파일이면 갱신(수정된 파일 업데이트) -v : 표준 출력으로 실행 내용 출력 -f : 아카이브 파일이나 tape 장치 등 지정 -z : tar 실행과 동시에 gzip으로 동시에 압축 -j : tar 실행과 동시에 bzip2으로 동시에 압축
파일압축과 묶음 아카이브 생성 : cvf 아카이브 생성 확인, 목록 보기 : tvf $ mkdir ~/Unix/ch9 $ cd ~/Unix/ch9 $ cp /etc/hosts 1.txt $ cp 1.txt 2.txt $ cp 2.txt 3.txt $ tar cvf txt.tar *.txt a 1.txt 1K a 2.txt 1K a 3.txt 1K $ $ tar tvf txt.tar tar: blocksize = 8 -rw-r--r-- 60005/10 183 Aug 7 22:36 2012 1.txt -rw-r--r-- 60005/10 183 Aug 7 22:36 2012 2.txt -rw-r--r-- 60005/10 183 Aug 7 22:36 2012 3.txt $
파일압축과 묶음 아카이브 풀기 : xvf 아카이브 업데이트 하기 : uvf $ tar xvf txt.tar tar: blocksize = 8 x 1.txt, 183 bytes, 1 tape blocks x 2.txt, 183 bytes, 1 tape blocks x 3.txt, 183 bytes, 1 tape blocks $ $ mkdir temp $ cp txt.tar temp $ cd temp $ $ cd .. $ tar uvf txt.tar 2.txt $ $ touch 2.txt a 2.txt 1K 파일에 변동사항이 없으면 아카이브 안함 수정된 파일 업데이트!
파일압축과 묶음 파일 추가하기 : rvf $ cp /etc/services test.txt $ $ tar rvf txt.tar test.txt a test.txt 5K $ tar tvf txt.tar -rw-r--r-- 60005/10 183 Aug 7 22:36 2012 1.txt -rw-r--r-- 60005/10 183 Aug 7 22:36 2012 2.txt -rw-r--r-- 60005/10 183 Aug 7 22:36 2012 3.txt -rw-r--r-- 60005/10 183 Aug 7 22:45 2012 2.txt -rw-r--r-- 60005/10 4543 Aug 7 22:49 2012 test.txt
파일압축과 묶음 실습 cd tar cvf Unix.tar Unix mv Unix.tar Unix/ch9 tar cvf all.tar . tar tvf all.tar | more mkdir Unix/ch9/tmp mv all.tar Unix/ch9/tmp cd Unix/ch9/tmp tar xvf all.tar ls 홈 디렉토리로 이동 Unix 디렉토리를 Unix.tar 로 묶음 Unix.tar 파일 이동 현재 디렉토리를 all.tar로 묶음 all.tar 파일 내용 확인 ch9 디렉토리 아래 tmp 디렉토리 생성 all.tar 파일을 tmp 디렉토리로 이동 tmp 디렉토리로 이동 all.tar 파일 풀기 풀린 내용 확인
파일압축과 묶음 gzip 형식으로 압축 및 해제 (gzip, gunzip) gzip 형식으로 파일들을 압축하거나 해제 사용 예 $ gzip 1.txt $ gzip -d aaa.txt.gz $ gunzip bbb.txt.gz gzip 일반형식 gzip [option] file files… 주요옵션 -d : 압축 해제 (gunzip과 동일) -l : 현재 압축된 파일의 내용 출력 -r : 입력된 디렉토리부터 하위 디렉토리까지 모두 압축 -t : 압축 파일의 완전성 검사 -v : 압축 진행상항을 화면에 출력 -g : 최대한 압축
파일압축과 묶음 bzip2 형식으로 압축 및 해제 (bzip2, bunzip2) bzip2 형식으로 파일들을 압축하거나 해제 gzip에 비해 60~70% 이상 압축률은 높고, 속도는 약간 느림 확장자가 .bz2인 압축 파일 생성 사용 예 $ bzip2 1.txt $ bzip2 -z aaa.txt $ bzip2 -d aaa.txt.bz2 bzip2 일반형식 bzip2 [option] file files… 주요옵션 -d : 파일 압축 해제 -z : 파일 압축 -r : 입력된 디렉토리부터 하위 디렉토리까지 모두 압축 -t : 압축 파일의 완전성 검사 -v : 압축 진행상항을 화면에 출력 -g : 최대한 압축
파일압축과 묶음 도스용 압축유틸리티(rar) 기타 압축 유틸리티(compress) 명령어(Command)와 스위치(Switch) 로 구성 사용 예 $ ./rar a total * $ ./rar t total.rar $ ./rar x total.rar 기타 압축 유틸리티(compress) $ compress * $ zcat bbb.txt.Z $ uncompress bbb*
파일압축과 묶음 자주 사용하는 명령어 및 옵션 1. Archive 생성 5. 풀기 6. Archive + gzip 압축 tar cvf test.tar test.txt 2. 현재 폴더에 있는 모든 파일과 서브 폴더를 하나의 tar 파일로 묶음 tar cvf test.tar ./* 3. 현재 폴더의 서브 폴더인 test_dir를 tar 파일로 묶음 tar cvf test.tar ./test_dir 4. 확인 tar tvf test.tar 5. 풀기 tar xvf test.tar 6. Archive + gzip 압축 tar cvzf test.tar.gz test.txt 7. Archive + bzip2 압축 tar cvjf test.tar.bz2 test.txt 8. 압축 해제 + tar 풀기 tar xvzf test.tar.gz tar xvjf test.tar.bz2
문자 및 문자열 개수 구하기(wc) 문자 및 문자열 개수(wc: word count) 파일 안에 있는 라인 수, 단어 수, 문자의 수를 세어서 표시 사용 예 $ wc –l file1 $ wc file1 wc 일반형식 wc [option] file 주요옵션 -c : 바이트(byte) 수 -m : 문자(character) 수 -l : 라인 수 -w : 화이트 스페이스나 새로운 행으로 구분된 단어 수
문자 및 문자열 개수 구하기(wc) 실습 wc /etc/passwd wc /etc/hosts wc -l /etc/services cat /etc/hosts | wc -l ls –l /usr/bin | wc –l ??? /etc/passwd 파일의 정보를 확인 /etc/hosts 파일의 정보 확인 /etc/services 파일의 라인 수 확인 /etc/hosts 파일의 라인수를 확인하는 다른 방법 /usr/bin 디렉토리 파일의 라인 수가 의미하는 것은 무엇인가? 현재 디렉토리에 파일이 몇 개 있는지 알려면 어떻게 해야 하는가?
파일 정렬(sort) 파일 정렬 (sort) 정렬기준 텍스트 파일의 내용을 지정한 방법으로 정렬하여 화면에 출력 각 행의 첫 번째 문자부터 기준으로 정렬 (사전식) 환경변수 LC_COLLATE 환경변수 LANG (LC_COLLATE가 없으면) 유니코드 : 공백특수문자숫자영문자 아스키코드 : 공백숫자영문소문자영문대문자 특수문자는 공백, 숫자, 문자가 같은 경우에 사용됨 $ env | grep LC_COLLATE $ env | grep LANG LANG=en_US.utf8
파일 정렬(sort) sort [ 옵션 ] 파일명 * 기본 필드 구분: 공백 또는 탭 옵션 기능 -b 앞에 붙는 공백을 무시 역순으로 정렬 -c 정렬이 되지 않은 상태로 출력 -u 중복 행 삭제 -d 사전순으로 정렬 -o 파일명 정렬된 결과를 파일에 저장 -f 대소문자 구분 안함 -t문자 지정한 문자를 필드 구분자로 사용 * -k # # 필드 기준으로 정렬 +번호 번호+1 필드를 기준으로 정렬 -n 숫자를 산술 값으로 환산 +pos1 -pos2 정렬하고자 하는 필드를 지정. pos1 열부터 pos2열까지 정렬 * 기본 필드 구분: 공백 또는 탭
파일 정렬(sort) 사용 예 기본 정렬 기본 데이터 (test_sort1) This is a test file. 1234 @_@ 1234 50 700 &987 !abc abcd hi #include love ^love ~love <love> _love 'love' {Love This is a test file. unix Unix This is a test file. 1234 unix Unix _love ~love !abc 700 50 @_@ #include love ^love <love> `love` hi &987 abcd {Love
파일 정렬(sort) 사용 예 필드 정렬하기: -k 번호 기본 데이터 (test_sort2) 다음 결과 ? 두 번째 필드 값 같으면 자동으로 다음 필드(세 번째)를 기준으로 정렬 다음 결과 ? sort –r -k 2 test_sort2 두 번째 필드 기준 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 003 Lee Na-Young 54 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 006 Jyun Doo-Ri 49 F 007 Lee Mi-Ra 59 F $ sort -k 2 test_sort2 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 006 Jyun Doo-Ri 49 F 004 Kim Chan-Sook 60 F 007 Lee Mi-Ra 59 F 003 Lee Na-Young 54 F 002 Park Ji-Soo 100 M $
파일 정렬(sort) +pos1 -pos2 숫자 처리: -n 두 번째 필드만 이용하여 정렬 +시작필드 ~종료필드-1 : 정렬에 사용할 필드 번호를 옵션으로 명시(번호는 0부터 시작) 지정된 필드들의 값이 같으면 원래 순서대로 정렬 두 번째 필드만 이용하여 정렬 숫자 처리: -n 사전식 정렬이므로 위와 같은 결과 얻음 $ sort -k 4 test_sort2 002 Park Ji-Soo 100 M 006 Jyun Doo-Ri 49 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M $ $ sort +1 -2 test_sort2 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 006 Jyun Doo-Ri 49 F 004 Kim Chan-Sook 60 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 002 Park Ji-Soo 100 M $ $ sort -n -k 4 test_sort2 006 Jyun Doo-Ri 49 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M $
파일 정렬(sort) 2차 정렬 정렬 결과 저장 : -o $ sort +2 -3 +1 -2 test_sort2 004 Kim Chan-Sook 60 F 006 Jyun Doo-Ri 49 F 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 005 Han Ju-Hyun 75 M 007 Lee Mi-Ra 59 F 003 Lee Na-Young 54 F $ $ sort -n +3 -4 -o sort.out test_sort2 $ cat sort.out 006 Jyun Doo-Ri 49 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M $ 3번째 필드만을 기준으로 정렬 3번째 필드 값이 같으면 2번째 필드를기준으로 정렬
파일 정렬(sort) 필드 구분자 지정하기 : -t 기본 데이터 (test_sort3) 001:Hong:Gil-Dong:80:M 002:Park:Ji-Soo:100:M 003:Lee:Na-Young:54:F 004:Kim:Chan-Sook:60:F 005:Han:Ju-Hyun:75:M 006:Jyun:Doo-Ri:49:F 007:Lee:Mi-Ra:59:F $ sort –t : -k 2 test_sort3 005:Han:Ju-Hyun:75:M 001:Hong:Gil-Dong:80:M 006:Jyun:Doo-Ri:49:F 004:Kim:Chan-Sook:60:F 007:Lee:Mi-Ra:59:F 003:Lee:Na-Young:54:F 002:Park:Ji-Soo:100:M $
파일 분할(split) split [ 옵션 ] [ 파일명 ] 큰 파일을 일정한 크기의 여러 개 작은 파일로 분할 분할된 파일 이름은 xaa, xab, … 순으로 생성 옵션 -b n : 크기가 n 바이트인 파일로 분할 -n : n줄씩 분할 옵션을 지정하지 않으면 1000줄씩 분할 파일을 지정하지 않으면 표준입력내용을 분할 저장 split [ 옵션 ] [ 파일명 ] xaa xab
파일 분할(split) 사용 예 행을 기준으로 파일 분할 바이트를 기준으로 파일 분할 기본 데이터 (test_split) $ wc -c test_split 362285 test_split $ split -b 50000 test_split $ ls test_split xaa xab xac xad xae xaf xag xah $ wc -c x* 50000 xaa 50000 xab 50000 xac 50000 xad 50000 xae 50000 xaf 50000 xag 12285 xah 362285 total $ $ cp /etc/services test_split $ wc -l test_split 9253 test_split $ $ split -2500 test_split $ ls test_split xaa xab xac xad $ wc -l x* 2500 xaa 2500 xab 2500 xac 1753 xad 9253 total $
uniq [ 옵션 ] [ 입력파일 [출력파일] ] 파일 또는 표준입력으로 입력된 내용 중 중복된 내용의 줄이 연속으로 있으면 하나만 남기고 삭제 파일을 지정하지 않으면 표준입력내용을 처리 입출력 파일 이름은 달라야 함 옵션 -u : 중복되지 않는 줄만 출력 -d : 중복된 줄 중 1줄만 출력, 중복되지 않은 행은 삭제 -c : 중복 횟수를 출력 uniq [ 옵션 ] [ 입력파일 [출력파일] ]
중복 삭제(uniq) 사용 예 중복 삭제 기본 데이터 (test_uniq) $ uniq test_uniq aaaaa abcde bbbbb ccc $ aaaaa abcde bbbbb ccc
중복 삭제(uniq) 정렬과 중복 제거를 동시에 중복되지 않는 행보기 중복 행과 중복 횟수 보기 $ uniq –u test_uniq aaaaa bbbbb abcde ccc $ $ sort test_uniq aaaaa abcde bbbbb ccc $ sort test_uniq | uniq $ $ uniq –d test_uniq abcde bbbbb $ uniq –c test_uniq 1 aaaaa 2 abcde 1 bbbbb 1 abcde 2 bbbbb 1 ccc $ * sort –u test_uniq 동일
필드 잘라내기(cut) cut [ 옵션 ] [ 파일명 ] 파일의 각 행에서 선택된 필드를 잘라냄 특정 필드 정보를 표시할 때 사용 옵션 -c 리스트 : 각 줄에서 잘라낼 문자 위치 지정 -f 필드수 : 지정한 필드 잘라냄 -d 문자 : 필드 구분자 기본 필드 구분자: 탭 sort 명령어: 공백, 탭 cut [ 옵션 ] [ 파일명 ] field1 field2
필드 잘라내기(cut) 사용 예 문자 추출 : -c, 필드추출 : -f 기본 데이터 (test_cut) $ cut –c 5-8 test_cut Hong Park Lee Kim Han Jyun $ 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 003 Lee Na-Young54 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 006 Jyun Doo-Ri 49 F 007 Lee Mi-Ra 59 F 5번째에서 8번째 문자열 추출 $ cut -f 2-3 test_cut Hong Gil-Dong Park Ji-Soo Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra $ 2번째에서 3번째 필드 추출 Sort에서 사용하던 데이터에 탭을 넣어서 수정
필드 잘라내기(cut) 필드 구분자 지정하기 : -d $ cut -d: -f 1 /etc/passwd | more root daemon bin sys adm lp smtp uucp listen nobody noaccess nobody4 mysql (중략) --계속-- $ cut -d' ' -f 2 test_sort2 Hong Park Lee Kim Han Jyun $
필드 잘라내기(cut) cp /etc/passwd . cut -d: -f 7 passwd > shell.out more shell.out sort shell.out | uniq /etc/passwd 파일을 현재 디렉토리로 복사 passwd 파일중 필드 구분자를 : 로 지정하여 7번째 필드를 추출하여 shell.out 파일로 저장 저장한 파일 내용 확인 shell.out 파일 내용을 정렬한 후 중복 제거 (sort –u shell.out)
두 파일 연결하기(paste) paste [ 옵션 ] [ 파일1 파일2 ... ] 지정한 파일의 내용을 붙임 사용자가 지정한 두 개 이상의 파일 내용을 필드로 하여 병렬 연결하거나, 한 파일의 끝에 다른 파일의 내용을 추가 연결된 내용은 표준 출력으로 출력되므로 출력 리다이렉션 필요 옵션 -s : 파일의 끝에 추가 (split으로 나눈 파일을 원래대로 붙일 때) -d문자 : 필드 구분자 - : 파일 대신 표준 입력 사용 paste [ 옵션 ] [ 파일1 파일2 ... ] file1 file2 file1 file2
두 파일 연결하기(paste) 사용 예 파일 붙이기 기본 데이터 (test_paste1) 기본 데이터 (test_paste2) Hong Gil-Dong 001 Park Ji-Soo 002 Lee Na-Young 003 Kim Chan-Sook 004 Han Ju-Hyun 005 Jyun Doo-Ri 006 Lee Mi-Ra 007 $ 001 002 003 004 005 006 007 Hong Gil-Dong Park Ji-Soo Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra
두 파일 연결하기(paste) 두 파일의 행이 같지 않을 경우 필드 구분자 지정 : -d 파일 수평 붙이기 : -s 기본 데이터 (test_paste3) 필드 구분자 지정 : -d 파일 수평 붙이기 : -s $ paste -d: test_paste1 test_ paste2 001:Hong Gil-Dong 002:Park Ji-Soo 003:Lee Na-Young 004:Kim Chan-Sook 005:Han Ju-Hyun 006:Jyun Doo-Ri 007:Lee Mi-Ra $ 001 002 003 004 005 006 007 $ paste test_paste2 test_paste3 Hong Gil-Dong 001 002 003 004 Park Ji-Soo 005 006 007 Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra $ $ paste -s test_paste1 test_paste2 001 002 003 004 005 006 007 Hong Gil-Dong Park Ji-Soo Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra $
두 파일 연결하기(paste) cut과 paste의 복합 사용 기본 데이터 (s.dat) 기본 데이터 (u.dat) Kim Ji-Soo 10 F Lee Gil-Dong 20 M Lee Gil-San 15 M Park Ji-Soo 21 F Choi Na-Na 20 F aaaaa abcde bbbbb $ cut –d’ ‘ -f 1 s.dat | paste - u.dat Kim aaaaa Lee abcde Park bbbbb Choi $
두 파일 연결하기(paste) more /etc/passwd cut –f 1 –d: /etc/passwd > login_list cut –f 5 –d: /etc/passwd > name_list paste –d: name_list login_list > user_list sort –o user_list user_list /etc/passwd파일 구조 파악 첫번째 필드인 로그인ID추출 사용자 이름 추출(5번째 필드) 파일 합치기 정렬
파일 덤프(dd – data duplicate) 지정한 입력 파일을 지정한 옵션에 따라 변환하여 출력파일로 저장 옵션 bs=n : 입출력 블록의 크기를 n 바이트로 지정 (기본 1블록=512바이트) conv=lcase : 알파벳을 소문자로 변환 conv=ucase : 알파벳을 대문자로 변환 dd [ 옵션 ] [ if=입력파일 ] [ of=출력파일 ]
파일 덤프(dd) 사용 예 : 대소문자 전환하기 $ dd conv=lcase if=test_cut of=test_dd1 0+1 레코드 인: 0+1 레코드 아웃 $ more test_dd1 001 hong gil-dong 80 m 002 park ji-soo 100 m 003 lee na-young 54 f 004 kim chan-sook 60 f 005 han ju-hyun 75 m 006 jyun doo-ri 49 f 007 lee mi-ra 59 f $
파일 덤프(dd) 파일 지우기 $ dd if=/dev/null of=test_dd2 0+0 레코드 인: 0+0 레코드 아웃 $ more test_dd2 $ ls test_dd2 test_dd2 $ 빈 파일
디스크 용량 확인 디스크의 남은 용량 확인 (df – disk free) 사용 예 df 일반형식 [linux@seps linux]$ df Filesystem K-blocks Used Available Use% Mounted on /dev/sdb1 33973700 8099384 24148536 26% / /dev/sda1 101089 16290 79580 17% /boot none 256620 0 256620 0% /dev/shm [linux@seps linux]$ df -a Filesystem 1K-blocks Used Available Use% Mounted on /dev/sdb1 33973700 8099384 24148536 26% / none 0 0 0 - /proc usbdevfs 0 0 0 - /proc/bus/usb /dev/sda1 101089 16290 79580 17% /boot none 0 0 0 - /dev/pts none 256620 0 256620 0% /dev/shm df 일반형식 df [ -aikT ] [ -t fstype ] 주요옵션 -a : 디렉토리로 생략된 블록크기의 파일 시스템 출력 -i : inode 로 디스크 정보를 보여준다 -k : 파일의 크기를 kb(킬로바이트) 단위로 보여준다 -T : 파일 시스템의 정보와 디스크 정보를 보여준다 -t : fstype 값을 가진 파일 시스템에 대한 디스크 정보를 보여줌
디스크 사용 공간 확인 디렉토리나 파일의 사용 용량 확인 (du – disk used) 사용 예 du 일반형식 [linux@seps linux]$ du test 4 test/Test2 12 test [linux@seps linux]$ du 일반형식 du [ -abckx ] filename… 주요옵션 -a : 모든 파일들의 정보를 보여준다 -b : 바이트 단위로 보여준다 -c : 파일의 사용 정보를 보여주고 난 뒤 총 합계를 보여준다 -k : 킬로바이트 단위로 보여준다 -x : 심볼릭 링크이면 그 원본 크기를 보여준다
프로세스 상태 확인 프로세스 상태 확인 (ps – process status) PID, 터미널, CPU 시간, 명령어 등의 정보 제공 -ef: PID, PPID와 같은 간단한 정보 제공 aux: 좀 더 자세한 정보 제공 ps 일반형식 ps [-] [ options ] 주요옵션 l : 긴 형식으로 출력 e : 시스템에 있는 모든 프로세스 정보 출력 u UID : 특정 사용자에 대한 모든 프로세스 출력 f : 프로세스에 대한 자세한 정보 출력 j : 작업 제어(job control) 형식으로 출력 s : 시그널 형식으로 출력 m : 메모리 정보를 보여준다 a : 다른 사용자의 프로세스 현황을 보여준다 x : 터미널 제어 없이 프로세스 현황 표시
프로세스 상태 확인 사용 예 구분 설명 UID 소유자의 사용자 ID STIME 프로세스 시작시간 PID 프로세스 번호 TTY $ ps –ef | more UID PID PPID C STIME TTY TIME CMD root 0 0 0 19:23:21 ? 0:04 sched root 5 0 0 19:23:20 ? 0:01 zpool-rpool root 6 0 0 19:23:22 ? 0:00 kmem_task ... --More-- 구분 설명 UID 소유자의 사용자 ID STIME 프로세스 시작시간 PID 프로세스 번호 TTY 터미널 번호( ? : 데몬) PPID 부모 프로세스 번호 TIME CPU 사용시간 C 프로세스 우선순위 CMD 명령어 이름
프로세스 상태 확인 사용 예 구분 설명 USER 프로세스 실행 사용자 PID 프로세스 번호 %CPU, %MEM RSS 사용하는 실제 메모리 크기 TTY 프로세스를 제어하고 있는 터미널 STAT 프로세스 상태 코드
프로세스 상태 확인 프로세스 상태 확인 (top) ps: ps명령어가 실행된 순간의 상태 정보 제공 윈도우의 작업관리자 (ctrl+alt+del)와 유사
프로세스 상태 확인 라인1: top – 11:58:41 up … 라인2, 3 라인 4, 5 up 180 days: 시스템이 마지막 부팅된 시점부터 지금까지의 시간 2 users: 2명의 사용자가 로그인 함 load average: 평균부하 (1분간 평균값, 5분간 평균값, 15분간 평균값) 라인2, 3 Tasks: 프로세스의 수와 프로세스 상태 별 수를 나타냄 Cpu(s): CPU 사용율을 나타냄 0.2%us: CPU의 0.2%를 사용자 프로세스가 사용 중 (커널 제외) 0.2%sy: CPU의 0.2%를 시스템(커널) 프로세스가 사용 중 0.0%ni: nice(우선순위가 낮은) 프로세스가 사용 중 99.5%id: 99.5%가 유휴 상태 0.2%wa: 0.2%가 I/O 대기 중 라인 4, 5 Mem: 메모리 사용 현황 Swap: 스왑 영역 사용 현황
소프트웨어 패키지 관리 리눅스 소프트웨어 패키지 파일 소프트웨어 패키지 관리 (rpm/yum/dpkg/apt-get) 레드햇 계열 – rpm 파일 (확장자가 .rpm) 데비안/우분투 계열 – deb 파일 (확장자가 .deb) 소프트웨어 패키지 관리 (rpm/yum/dpkg/apt-get) 일반 형식 rpm/yum/dpkg/apt-get [옵션] 패키지 rpm, yum dpkg, apt-get 설 명 rpm -ivh 패키지파일 yum install 패키지 dpkg -i 패키지파일 패키지를 파일 또는 원격 배포판 서버로부터 설치한다. rpm -Uvh 패키지파일 yum update dpkg --update-avail 패키지파일 apt-get install 파일 apt-get upgrade 일부 또는 전체 패키지를 업그레이드 rpm -e 패키지 dpkg -r 패키지 apt-get remove 패키지 패키지를 제거한다. rpm -qi 패키지 dpkg -p 패키지 패키지 정보를 출력한다. rpm -qa dpkg -l 설치된 패키지의 목록을 출력한다. rpm -ql 패키지 dpkg -L 패키지 패키지의 설치 파일 목록을 출력한다. rpm -qa 패키지 dpkg -l 패키지 패키지를 찾는다.