brunch

매거진 Linux Skill

You can make anything
by writing

C.S.Lewis

by Henry Sep 06. 2017

Linux Fundamental #2

Linux Basic

◎ MANIPULATING FILES


    1. 디렉토리 조작

        1) 디렉토리 생성 : mkdir

            * mkdir은 make directory의 약어로서 새로운 디렉토리를 만들때 사용하는 리눅스 명령어이다. mkdir은 umask 값의 이해가 필요하다는 것을 유념한다. umask 값은 /etc/bashrc 에 정의 되어 있다.

            * 명령어 : $ mkdir [옵션] 생성할디렉토리

                - $ mkdir 생성디렉토리명

                    - $ mkdir linux

                        > linux 디렉토리 생성


            * $ mkdir -m umask 디렉토리명

                - data라는 폴더명으로 특정 권한이 있는 디렉토리 생성

                    - $ mkdir -m 700 data

                    

            * $ mkdir -p 디렉토리1/디렉토리2

                - 현재 존재하지 않는 디렉토리의 하위디렉토리까지 생성(상위 디렉토리 경로를 포함하는 디렉토리 생성)

                - $ mkdir -p aaa/bbb/ccc

                  

        2) 디렉토리 삭제 : rmdir -r

            * rm은 remove의 약어로서 파일이나 디렉토리를 삭제하는 명령어이다.

            * 명령어 : $ rmdir 디렉토리명

                - 비어있는 디렉토리만 삭제가능하다.


            * 명령어 :  $ rm -r 디렉토리명

                - 비어있지 않은 디렉토리는 -r 옵션 없이는 삭제할 수 없으므로, rm -r을 사용하여 디렉토리를 삭제한다. rmdir 은 디렉토리를 삭제할때 사용하나 일반적으로 rm -r 을 이용한 삭제를 한다


    2. 파일 복사, 삭제, 이동, 생성

        1) 복사 : cp

            * cp는 파일을 복사하는 명령어로서 copy의 약어이다. 파일이나 디렉토리를 복사할때 사용한다.

            * 명령어 : $ cp 옵션 파일명

            -b : 복사하고자 하는 파일이 동일한 이름으로 이미 그 위치에 존재하고 있을 경우, 덮어쓰기 또는 원본을 지우고 복사할 경우에 원본파일의 복사본을 만든다.

            -f : 복사대상파일이 이미 그 위치에 존재한다면 파일을 지우고 복사한다.

            -i : 복사대상파일이 이미 그 위치에 존재한다면 덮어쓸 것인가를 사용자에게 확인, 기본으로 앨리어싱되어 있음.

            -r 또는 -R (--recursive) : 복사대상이 하위디렉토리와 파일들을 가지고 있을때 모두 동일하게 복사하는 옵션이다.

            -S (--suffix=확장자) : 원본파일과 동일한 이름의 파일이 이미 존재할 경우에 백업파일을 생성하지만, 백업파일의 끝에 붙여질 접미사(확장자)를 원하는 이름으로 지정하는 옵션이다.

            --preserve[=ATTR_LIST] : 복사되어 새로 생성되는 파일에 대하여 원본파일과 동일한 속성을 가지도록 하는 옵션이다. 이때 속성을 별도로 지정해야 한다. 만약 별도로 지정하지 않는다면 파일퍼미션, 소유자 정보, 시간정보이 3가지 속성을 기본 적용한다. 이 외에 지정할 수 있는 속성들은 context, links 등이 있으며 모든 속성을 지정하고자 할 경우에는 all 을 사용하면 된다.

            -p : 복사되어 새로 생성되는 파일이 원본파일과 동일한 모드, 소유자, 시간정보를 가지도록 하는 옵션이다. 이 옵션은 바로위의 --preserve 옵션에서 mode,ownership,timestamps 3가지 속성을 동시에 지정한 것과 같다. 즉, "--preserve=mode,ownership,timestamps" 를 사용한 것과 동일한 결과를 가진다.

        2) 이동/변경 : mv

            * 리눅스에서 파일을 이동하는 명령어로 mv 즉, move의 약자이다. 파일을 이동하는 명령어로 mv 옵션은 cp 명령어와 비슷하다. 다른 점이 있다면 cp는 파일을 복사하는 것이고 mv는 파일 이동인데 이동 시 원본 파일이 삭제되는 점이다.

            * 명령어 : $ mv [옵션] [원본] [이동경로]

            * 옵션

                -b: 이동 경로에 같은 이름의 파일이나 디렉터리가 존재하면 기존 파일을 백업한 뒤에 이동한다.

                -f: 이동 경로에 같은 이름의 파일이나 디렉터리가 존재하면 덮어쓸 때 묻지 않고 바로 덮어쓴다.

                -i: 이동 경로에 같은 이름의 파일이나 디렉터리가 존재하면 덮어쓸 때 물어본다.

                -v: 이동 상태를 표시한다.


        3) 삭제 : rm

            * 명령어 : $ rm [옵션] 파일명

                - $ rm test

                    > test 파일삭제

                - $ rm -f test

                    > test 파일 삭제시 확인과정 없이 삭제


        4) 생성 : touch

            * touch는 파일의 날짜시간정보를 변경하는 명령어이다. 즉 아무런 옵션없이 사용하면 서버의 현재시간으로 파일의 최근사용한 시간(access time)과 최근변경 시간(modification time)을 변경한다. 만약 특정옵션이 사용되지 않는다면 파일의 크기가 0인 빈 파일을 생성한다. -t 라는 옵션을 사용하면 서버의 현재시간이 아닌 지정된 시간으로 파일의 날짜시간정보를 변경한다.

            * 명령어 : $ touch 옵션 파일명


    3. 파일 링크 : ln

        * ln은 Link 의 약어로서 리눅스 파일시스템에서 링크파일을 만드는 명령어이다. 리눅스에서는 심볼릭링크와 하드링크의 두가지 링크 파일이 존재한다

        1) 심볼릭링크 (Symbolic Link)

            단순히 원본파일을 가리키도록 링크만 시켜둔 것으로 MS의 윈도우시스템에서 흔히 사용하는 '바로가기' 같은 것이며, 원본파일을 가리키고만 있으므로 원본파일의 크기와는 무관한다. 그리고 심볼릭링크에서는 원본파일이 삭제되어 존재하지 않을 경우에 링크파일은 깜박거리면서 링크파일의 원본파일이 없다는 것을 알려준다.


        2) 하드링크 (Hard Link)

            원본파일과 다른 이름으로 존재하는 동일한 파일이며 원본파일과 동일한 내용의 다른 파일이라고 할 수 있다. 그리고 하드링크에서는 원본파일과 링크파일 두개가 서로 다른 파일이기 때문에 둘 중 하나를 삭제하더라도 나머지 하나는 그대로 남아 있다. 또한 하드링크에서는 원본파일의 내용이 변경될 경우에는 링크파일의 내용 또한 자동으로 변경된다.


            * 명령어 : $ ln [옵션] 원본파일 대상파일(대상디렉토리)
                - hard link: $ ln source-file  link-name

                    > 동일 파일에 대해 이름을 여러개 가질때 사용

                - symbolic link(바로가기) : $ ln -s full_source-file slink-name

                    > 바로가기 아이콘 처럼 원본파일에 대한 링크만 유지하는 파일.


    4. 파일 내용 보기

        1) ASCII text file : cat, tac, nl

            * cat

                - cat 명령어는 텍스트로 된 파일일 경우 그 내용을 정상적으로 출력하지만 바이너리 파일일 경우에는 출력은 하지만 알아볼 수 없다. 그리고 2개 이상의 파일이름이 지정되면 모든 파일이 연결되어 보여진다.

            * 명령어 : $ cat [옵션] 파일명


        2) more(space,enter,b,q), less(압축파일을 풀어서 출력)

            * more

                - more 명령어는 특정파일의 내용을 확인하는 그 페이지에서 바로 vi 로 파일을 열어서 편집을 할 수도 있으며 텍스트 파일의 내용을 한 페이지씩 차례대로 확인할 수 있다.

                - 명령어 : $ more 파일명

                - 특정 파일의 내용을 확인하고 있는 상태에서 사용할 수 있는 키

                    > h : more 명령어상태에서 사용할 수 있는 키 도움말 확인

                    > Space Bar, f : 한 화면씩 뒤로 이동하기 (f와 동일)

                    > Enter : 현재행에서 한 행씩 뒤로 이동하기

                    > q : more 명령어 종료하기

                    > b : 한 페이지씩 앞으로 이동하기

                    > = : 현재 위치의 행번호 표시

                    > /문자열 : 지정한 문자열을 검색하기

                    > n : /문자열로 검색한 문자열을 차례대로 계속해서 찾기
                    > !쉘명령어 : more 명령어상태에서 쉘명령어를 실행하기

                    > v : more 명령어로 열려있는 파일의 현재위치에서 vi를 실행하기

            * less

                - less는 more와 매우 유사하다.

                - 명령어 : $ less 파일명

                - less 내부 명령키

                    > Space Bar 또는 f : 한 화면 뒤로 이동

                    > b : 한 화면 앞으로 이동

                    > Enter : 한 행씩 뒤로 이동

                    > 숫자+n : 원하는 페이지만큼 뒤로 이동, 이후부터는 n만 눌러도 숫자페이지만큼 이동     

                    > q : less 수행종료


        3) head, tail -f 

            * head

                - head는 파일의 앞부분부터 확인하는 명령어이다.

                - 명령어 : $ head 파일명

                    > 기본적으로 행의 앞부분 부터 10 행까지만 출력


                - 20행까지 출력

                    > $ head -n 20 test


                - 200byte 출력

                    > $ head -c 200 test


            * tail

                - tail은 특정파일에 계속 추가되는 모든 내용을 모니터링 할 수 있어 실무에서 유용하게 사용되는 명령어이다. /var/log/ 디렉토리에 존재하는 많은 시스템로그파일들의 로그파일들에 저장되는 내용들을 실시간으로 계속 모니터링하기 위한 용도로 자주 사용된다.

                - 명령어 : $ tail 파일명

                    > 기본적으로 파일에서 마지막 부분의 10개행을 화면에 출력

                - 마지막 부분의 20개행까지 출력

                    > tail -n 20 test


                - 마지막에서 200byte 까지를 출력

                    > tail -c 200 test  


                - 로그파일을 실시간 모니터링, 종료는 Ctrl+c

                    > tail -f /var/log/messages


    5. 파일 검색

        1) find

            * find는 글자 그대로 사용자 원하는 파일을 찾아주는 역활을 한다. 단순히파일 이름만을 가지고 찾는 것은 물론, 파일 모드, 파일 타입, 크기, 마지막으로 접근한 시간등 여러가지 다양한 조건으로 파일을 찾아준다.


            * 명령어 : find 검색디렉토리 [옵션]

            * 옵션

                - -name [파일이름]   :  파일이름과 일치

                    > 파일명 또는 확장자를 기준으로 검색할 수 있다.

                - -perm [권한]  :  권한과 일치하는 파일

                    > ex) find / -user level2 -perm -4000

                            ‣ 4000의 의미는 -(최소한), 4(SetUID)가 걸려있는 000(모든파일)을 의미한다.

                - -user [유저]  :  유저와 일치

                - -group [그룹] :  그룹과 일치하는 파일

                - -empty : 비어있는 파일이나 디렉토리를 검색

                    > ex)find . -empty

                        ‣ 현재 디렉토리 이하에서 비어있는 파일과 디렉토리를 검색.


                - -size [+파일크기/-파일크기/파일크기][bckw중 택1] : 파일크기와 일치하는 파일

                    b : 블록단위 512kb

                    - c : byte

                    k : kbyte

                    w : 2byte 워드

                    - 아무런 단위를 붙이지 않은 경우 : 디폴트 값 b

                         > 파일크기에 +1024k 이렇게 +를 붙이는 경우에는 크기가 1024kbyte 이상인 것을 찾고, -는 그 이하, +,-를 붙이지 않는 경우에는 그 크기의 파일을 찾는다.

                          >  ex)find / -size 1024k
                              ‣ 시스템 전체에서 파일크기가 1024kbyte인 파일을 검색한다.


                -exec command {} \; : 파일이 검색되었을 경우, 검색된 파일들에 대해 특정 명령을 수행 할 때 사용한다. 

                    {} : 검색된 파일들을 의미한다. 여러개의 파일이 검색되면 하나씩 치환되면서 해당명령이 실행되는 것이다.

                    ; : 검색된 결과가 여러개인 경우 하나의 행에 여러 명령을 사용하기 위함이다.

                    \ : ;이 특수 문자이기 때문에 문자로 ;라는 것을 알려 주기 위함이다.

                        ex) find . -name kkk* -exec rm {} \;  //kkk로 시작하는 파일을 검색하여 삭제(rm)함. 

                -ok : -exec와 동일한 작업을 한다. 다른 점은, 명령을 실행할 때마다 실행 의사를 물어본다. 

    

                -atime +n/-n/n : 최근 n일 이전에 액세스된 파일을 찾아준다.(accessed time)

                  +n : n일 또는 n일 이전에 액세스된 파일

                   -n : 오늘 부터 n일 전 사이에 액세스 된 파일

                    n : 정확히 n일 전에 액세스된 파일


            -ctime +n/-n/n : ctime은 파일의 퍼미션을 마지막으로 변경시킨 날짜를 의미한다. (changed time)

                    +n : n일 또는 n일 이전에 퍼미션이 변경된 파일

                    -n : 오늘 부터 n일 전 사이에 퍼미션이 변경된 파일

                    n :  정확히 n일 전에 퍼미션이 변경된 파일


            -mtime +n/-n/n : mtime은 파일내의 data를 마지막으로 변경한 날짜를 의미한다.(modified time

                +n : n일 또는 n일 이전에 수정된 파일

                -n : 오늘 부터 n일 전 사이에 수정된 파일

                n : 정확히 n일 전에 수정된 파일

           

            -ls : `ls -dils' 형식으로 찾은 파일들의 정보를 출력할때 사용한다.

            -fls [임의파일명] : `ls'와 동일하게 동작하며 결과를 [임의파일명]로 출력한다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari