달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

유닉스 명령어_2_디렉토리관리,파일관리,파일권한관리,패턴검색,파일검색


출처 : http://blog.naver.com/jungah26/130041519053


1        디렉토리 관리

1)     디렉토리(파일)정보 출력(ls)

     ls [-ailFR] [file-name | directory_name]

–-l : 목록형태로 정보 자세히 보여줌

–-a : 도트(.)파일(숨겨진 파일포함하여 디렉토리 내에 있는 모든 디렉토리 및 파일을 보여줌

–-R : 하위 디렉토리에 있는 내용까지 보여줌

–-F : 디렉토리인지나 어떤 종류의 파일인지를 알려줌(/디렉토리, *실행파일, @심볼릭링크)

–-i : 디렉토리 및 파일에 지정된 inode 번호를 보여줌

     종류접근권한하드링크수소유주소유그룹크기최종변경일최종변경시간이름

  •   _rwxrwxrwx 1 root root 4061 413 17:59 daemon
  •   종류 : 첫 번째 바이트 문자디렉토리 및 파일의 종류, d(디렉토리), b(블록디바이스(커널내의 특정버퍼 이용)파일), c(문자디바이스(문자단위로 처리)파일,), l(심볼릭링크파일(특정파일의 위치정보를 담고 있는 파일)), p(네임드파이프), s(유닉스도메인), -(일반(정규)파일텍스트파일 또는 실행 프로그램)
  • ※참고 : 디바이스파일 – 물리적인 입출력 장치들을 참조하는 파일
  •  접근권한 : 두 번째 바이트 문자부터 세 개씩 user, group, other

   -       user : 파일을 만든 소유주

   -       group : 파일을 만든 소유주가 속한 그룹의 사용자

   -       other : 기타 사용자

   -       r(4) : 읽기 권한과 디렉토리 내에 있는 파일명을 읽을 수 있는 권한

   -       w(2) : 쓰기 권한과 디렉토리 내에 파일을 생성삭제할 수 있는 권한

   -       x(1) : 실행 권한과 디렉토리 내에서 탐색을 위해 이동할 수 있는 권한

   -       - : r, w, x에 대한 권한이 없는 경우 해당 자리를 대체

   -       유닉스의 경우 일반 파일 생성의 경우 666(rw_rw_rw_), 디렉토리 생성의 경우 777(rwxrwxrwx)을 디폴트 값으로 취하고 umask로 지정한 값만큼 디폴트 값에서 뺀다.

  •   하드 링크 수 : 링크 카운터동일한 inode를 참조하는 파일의 수
  •   소유주 : 해당 디렉토리 및 파일의 소유주
  •   소유 그룹 : 소유주가 소속된 기본 그룹명

2)     디렉토리 간의 이동(cd : change working directory) : 파일 시스템 내의 특정 디렉토리로 이동할 때 사용

     cd / : 루트 디렉토리로 이동

     cd .. : 상위 디렉토리로 이동

     cd ~ 또는 cd : 사용자의 홈 디렉토리로 이동

     cd /etc : /etc 디렉토리로 이동

     cd ./a/b : 현재 디렉토리 하위의 /a/b 디렉토리로 이동

     절대 경로명 : 루트 디렉토리를 기준으로 기술(/home/freeman/work/project)

     상대 경로명 : 현재 디렉토리를 기준으로 기술(./work/project)

     특수 디렉토리 : . - 현재 디렉토리, .. - 상위 디렉토리, ~ - 홈 디렉토리

      3)     현재 디렉토리 확인(pwd : print working deriectory) : 현재 디렉토리의 절대 경로명을 출력

4)     새 디렉토리 생성(mkdir) : 디렉토리를 새로 만들면 .  .. 이 자동으로 생성된다이 두 디렉토리는 사용자가 임의로 생성할 수 없다.

     mkdir [-m mode] [-p] directory_name

–-m : 새로 만들 디렉토리의 접근 권한을 명시적으로 선언없는 경우 디폴트 접근 권한인 777이 적용됨(umask적용 받음)

–-p : 계층적인 구조를 갖는 디렉토리를 한꺼번에 만듬.

   –-p옵션과 함께 -m옵션이 사용되는 경우에 명시적인 접근 권한은 최하위 디렉토리에만 적용된다.

     mkdir –-p work/project

5)     기존 디렉토리 삭제(rmdir)

     하위에 디렉토리나 파일이 없어야 한다.

   –-p : 계층적인 구조 갖는 디렉토리를 한꺼번에 삭제

2       파일 관리

1)     파일 보기

     cat : concatenate

  • 파일의 내용을 화면에 출력짧은 내용을 보는 경우에 사용하는 것이 좋다.
  • 편집기로도 사용 가능하지만 불편하다.(편집기 사용 중 중단은 [Ctrl+d])
  • 출력 재지정 명령(>, >>)과 함께 사용해 파일 생성확장(덧붙이기), 분리된 파일들을 임의의 파일로 병합할 때 사용한다.
  • cat [-nb] file_name
  • -n : 라인 번호를 붙여서 파일을 출력
  • -b : 공백 라인을 제외하고 라인 번호를 출력
  • cat > a.txt : 입력하는 텍스트를 출력 재지정하여 a.txt파일에 저장
  • cat a.txt b.txt > c.txt : a.txt b.txt파일 내용이 c.txt파일에 순차적으로 출력
  • cat hello.txt >> all.txt : hello.txt파일의 내용이 all.txt파일 뒤에 덧붙여짐.

     more : 파일 전체 내용을 화면의 크기에 맞게 끊어서 보여줌

  •   more [-d] [+line_number] [-line] [+/pattern] file_name
  • -d : 좀 더 자세한 프롬프트를 보여줌
  • +line_number : 숫자에 해당하는 라인부터 출력
  • -line : 숫자 라인 만큼씩 스크롤하여 보여줌
  • +/pattern : 지정 패턴이 있는 곳부터 출력
  • h : 도움말 출력, q : 종료, = : 현재 라인번호, [Ctrl+i] : 화면에 재출력
  •  :f : 파일명과 라인번호 출력, v : 현재 라인에서 vi시작, space : 다음 화면 보여줌
  •  숫자[return] : 숫자만큼 다음 라인 출력

     head : 파일의 첫 번째 줄부터 10번째 줄까지를 디폴트로 보여줌

  -number : 숫자만큼의 라인을 출력

     tail : 파일의 끝으로부터 10번째 줄까지를 디폴트로 보여줌

  -number : 파일의 끝으로부터 지정한 숫자만큼 출력

  +number : 처음부터 지정한 숫자만큼 띈 라인부터 파일 끝까지 출력

  -f : 파일에 추가되는 내용을 실시간으로 확인하는 것이 가능

2)     파일 이동(mv) : 하나 또는 여러 파일이나 디렉토리를 다른 곳으로 이동

     목적지 지정하면서 다른 이름으로 변경 가능(기존에 있으면 덮어쓴다)

     mv a.c b.c : 이름 변경(a.c -> b.c)

mv a.c b.c .. : 상위폴더로 a.c b.c를 이동

mv a.c b.c ./work : /work폴더로 이동

                    mv -i a.c b.c : 덮어쓸지 물어봄

3)     파일 복사(cp)

     -i : 대상 파일이 있는 경우 덮어쓸 것인지를 대화식으로 묻는다.

     cp a.c b.c : a.c내용을 b.c에 복사

     cp a.c b.c c.c ./Backup/ : 세 개의 파일이 Backup디렉토리로 복사

     cp *.c ./Backup/ : 확장자가 .c인 모든 파일을 Backup디렉토리로 복사

4)     파일 삭제(rm) : 하위 디렉토리와 그 안에 있는 파일 모두 삭제됨기본적으로 복구 안됨.

     -i : 확인 문구

    -r : 디렉토리 삭제시 사용디렉토리 비어있지 않아도 삭제

     -f : rm에 설정된 -i옵션을 제거함.

     rm -r A

rm -i *.c

alias rm=’rm -i’: 명령어 rm rm -i로 대치되도록 alias로 처리

rm main.c : rm rm -i로 대치되어서 삭제 여부를 확인한다.

rm -f main.c : alias처리된 기능을 제거(unalias)

5)     파일 링크(ln)

     하드 링크(Hard Link) : 이름이 다른 파일에 동일한 inode를 지정해주는 것다른 파일 시스템 간에는 만들 수 없다이름을 제외한 모든 속성이 같고 링크된 파일의 속성을 바꾸면 다른 파일의 속성이 함께 바뀐다.(파일에만 링크 가능)

     심볼릭 링크(Symbolic Link) : 원래 파일의 경로정보를 담고 있다그 내용을 참조해 원래 파일에 접근한다. c의 포인터와 비슷한 개념이다다른 파일 시스템 간에 존재하는 파일이나 디렉토리 간에도 가능하다.(파일 또는 디렉토리에 링크 가능)

     ln [-s] source_file | source_derectory target_file

–-s : 있으면 심볼릭 링크없으면 하드 링크

     ln -s a.c b.c -> ls -il -> 화면에 b.c -> a.c 이렇게 출력됨.

     링크 카운터(Link Counter) :  동일한 inode를 참조하는 파일의 개수

ls -l

 2

-rx-r—r--  1  root  root  …… : 여기서 1이 링크 카운터이다.

3        파일 권한 관리

1)     접근 권한 변경(chmod) :  해당 파일 소유주나 root만 실행

     -R : 하위 디렉토리와 파일의 권한까지 변경

     permission : 기호나 8진수로 접근 권한 지정

     접근 권한을 기호로 기술하는 방법

  대상 : u(user), g(group), o(other), a(all)

  연산자 : +(추가), -(제거), =(지정)

  접근권한 : r, w, x

     접근 권한을 숫자로 기술하는 방법(세 개의 8진수로)

  r : 4, w : 2, x : 1

     chmod 777 a.c

 chmod g-x a.c

 chmod a=rwx a.c

2)     소유권 또는 그룹 변경(chown / chgrp)

     -R : 하위 디렉토리와 모든 파일의 소유주 변경

     -h : 심볼릭 링크 파일 자체의 소유주나 그룹 변경

     보안 위해 수퍼 유저만 실행할 수 있도록 명령에 제한 두는 경우가 많음.

     chown root a.c : a.c파일의 소유주를 root로 변경

          ⑤     chgrp system a.c : a.c파일의 소유그룹을 system으로 변경

3)     접근 시간 변경(touch)

     인수로 오는 파일의 존재 여부에 따라 파일이나 디렉토리의 시간 정보를 변경하거나 신규파일 생성

     touch [-acm] [-t[[CC]YY]MMDDhhmm] [-r file_name] file_name | directory_name

touch [-acm] [MMDDhhmm[YY]] file_name

-c : 대상 파일의 시간만 변경할 경우대상 파일이 없으면 파일 만들지 않는다.

-a : 마지막 접근 시간만 변경

-m : 마지막 수정 시간만 변경

-r : 옵션 뒤에 지정한 파일의 시간으로 대상 파일의 시간 변경

-t : 현재 시간 대신 파일의 시간을 지정한 시간으로 변경

     touch main.c : main.c파일이 없을 경우 명령 후 생성됨

4)     접근 권한 마스크(umask) : 앞으로 만들어진 파일에 영향을 미친다.

     명령시 지정한 8진수는 새로 만들어질 파일이 갖지 말아야 할 권한을 명시한다보통022를 많이 사용한다.

     일반적으로 파일은 666 - umask디렉토리는 777 - umask

4        파일 응용

1)     파일 내 문자 개수(wc : word count)

     wc [-cmlw] 파일명1 [파일명2…]

-l : 라인 수, -w : 단어 수, -c : 바이트 수, -m : 문자 수

     한글의 경우 한 문자는 2바이트로 구성

     옵션이 없는 경우 : -l, -w, -c 순으로 출력

     여러 파일 나열할 경우 합계도 출력

2)     파일 가공(cut)

     파일의 각 행으로부터 특정 바이트나 필드를 추출해내는 명령

     cut [-옵션파일명

  -c 뒤에 해당 바이트수 : 바이트 단위의 행을 출력

–-f 뒤에 해당 필드 : 필드 단위의 행을 출력

–-d 뒤에 특정 구분자 : 특정 구분자를 표기함, -f옵션과만 사용 가능

     -c와 -f는 함께 사용할 수 없다.

     cut -c4 a.txt : 각 행의 4번째 바이트를 출력

cut -c1-4 : 각 행의 1에서 4번째 바이트까지 출력

     불필요한 필드를 삭제한 문서의 행들을 출력하는데 효과적출력 재지정을 이용해서 파일 저장이 가능

3)     파일 가공(paste)

     cut와 반대로 행을 병합여러 개의 파일에서 같은 행을한 파일에서 인접한 같은 행을 병합

–-s : 한 파일 내에서 인접한 행을 병합

–-d 구분자들 : 구분자를 지정, -d:, -d”:@”, -d”\t\t\n”(- - -와 같다)

     paste -d: a.txt b.txt : a.txt b.txt내용을 :로 구분해서 합해서 출력

(a.txt 내용 1 , b.txt 내용 a => 1:a 로 출력)

                    ls | paste - - -와   ls | paste -d”\t\t\n” -s  는 같은 의미

4)     파일 내 문자 치환(tr)

     지정한 문자를 치환삭제줄일 때

     tr [-옵션] string1 [string2]

–-d : string1에 나오는 문자와 일치하는 모든 입력 문자를 삭제

–-s : string1에 나오는 문자 중 같은 문자들의 반복을 하나의 문자로 줄임.

     옵션이 없을 경우 : string1 string2로 바꾼다.

     tr ‘0aA’ ‘@#$’ < data1.txt : 0->@, a->#, A->$로 치환

more data1.txt | tr -d ‘0aA’ > data.txt : 0, a, A 제거하고 출력

tr -s ‘abcd’ < data3.txt : a, b, c, d 중 반복되는거 있으면 한 문자로 줄임(aaa->a)

5)     파일 정렬(sort)

     지정한 파일의 내용을 알파벳 순이나 숫자 순으로 출력하거나 정렬된 파일의 내용 병합

     sort [-옵션] [-o output_file] file_name1 [file_name2…]

–-n : 라인의 각 필드를 비교하는 대상을 숫자로 한정

–-d : 사전 순으로 정렬(영어숫자만)

–-f : 대소문자 구분 없이 비교

–-r : 역순 출력

–-b : 앞에 붙는 공백 무시

–-t : 필드 구분하는 구분자를 지정

–-m : 이미 정렬된 파일 병합

–-u : 파일 정렬하고 중복되는 행을 하나의 행으로 만듬.

   -o : 출력 결과 저장할 파일의 이름 적음파일명을 적지 않으면 화면에 출력

     옵션 없을 경우 : ASCII코드 순으로 정렬

     공백을 구분자로 필드를 나누고 왼쪽부터 우선 정렬첫 필드가 0

     +숫자 : 해당 번째의 필드부터 정렬함

     sort +2 a.txt : 공백 포함되어 있으면 정상적으로 나오지 않을 수 있다.

sort +2b a.txt : 공백 무시

sort +3n sort_data1.txt –o out.txt : 네번째 필드를 숫자(n)로 인식해 정렬해서 out.txt에 결과 출력

cut -f1,3 -d: /etc/passwd | sort +1n -t:  : 1,3번째 필드, : 구분자, 2번째 필드를 숫자로 인식해 정렬, : 기준으로 필드를 구분함.

6)     파일 분할(split)

     하나의 파일을 여러 개의 작은 파일로 나눌 때 사용

     명시한 접두사에 aa~zz까지 어미가 붙는 형태로 디폴트 값은 x이다(xaa, xab, xac…)

     split [-line_number | -l line_number] target_file [prefix]

-line_number | -l 나누고자 하는 라인 단위의 수(디폴트 1000)

     split -10 a.txt : xaa, xab, xac…

split -10 a.txt cho : choaa, choab, choac…

7)     파일 내 인접행 비교(uniq)

     파일에서 인접하는 행을 비교하여 같은 내용이 여러 번 반복되면 한 행만 출력(이어진 문장에 대해서만 검사)

     uniq [-옵션] input_file [output_file]

–-u : 반복되지 않은 행만 출력

–-d : 반복되는 행만 출력

–-c : 각 행별 반복 개수를 추가로 알려줌

     output_file : 처리된 결과 저장

           ④   uniq -u main.c

8)     파일 비교(cmp)

     두 개의 파일 비교하여 다르다면 처음 발견한 라인 번호와 바이트 옵셋(offset)을 화면에 출력같으면 아무것도 출력 안함

     cmp [-l | -s] 파일명1 | 파일명2

–-l : 서로 다른 모든 바이트 옵셋의 위치와 각 파일의 문자 값 출력

–-s : 두 파일을 비교한 결과 값만을 반환(0 : 일치, 1 : 다름, 2 : 파일 접근 불가)

9)     파일 비교(comm)

     두 파일을 비교해 한쪽에만 있거나 양쪽 모두에 있는 행을 찾아낸다.

     comm [-123] 파일명파일명2

-12 : 두 파일에 공통으로 있는 행 출력

-13 : 파일2에는 있고 파일1에는 없는 행 출력

-23 : 파일1에는 있고 파일2에는 없는 행 출력

     옵션 없을 경우 : 세 개의 의미 다 포함(-12, -23, -13)

     프로그램이나 라이브러리가 변경되는 경우 이전과 최근 목록 비교해 정리하는데 유용함

10)     파일 비교(diff)

     파일이 동일한지 여부 검사

     diff [-ib] 파일명파일명2

     -i : 대소문자 구별 안함

     -b : 하나 이상의 공백 문자는 모두 동일 취급

     diff a.txt b.txt : a.txt를 기준으로 b.txt와의 차이점 비교

[출력]5c5,6 : a.txt 5라인과 b.txt 5~6 라인이 다르다.

< five : a.txt에만 있는 내용

---

> six : b.txt에만 있는 내용

> seven : b.txt에만 있는 내용

     파일명1을 기준으로 같아지기 위해서는

n1 a n3,4 : 파일명1 n1라인에는 없지만 파일명2 n3-4라인에는 있다. append

n1,n2 c n3,n4 : 파일명1 n1-2라인과 파일명2 n3-4라인이 서로 다르다. change

n1,n2 d n3,n4 : 파일명1 n1-2라인에는 있지만 파일명2 n3-4라인에는 없다. delete

11)     패턴 검색(grep)

     파일 내에서 지정한 패턴이나 문자열 찾은 후 그 패턴을 포함하고 있는 모든 행을 표준 출력

     grep [-civnlw] pattern 파일명1 [파일명2…]

–-c : 패턴 일치 행의 수

–-i : 대소문자 구별 없이 비교

–-v : 패턴과 일치하지 않은 행만 출력

–-n : 행의 번호 함께 출력

–-l : 패턴 포함된 파일명 출력

–-w : 패턴이 전체 단어와 일치하는 행만 출력

            ③   정규표현식 : 문자숫자특수문자($, ^, *, . )로 구성작은따옴표(‘’)로 묶음.

     ‘^abc’ a.txt : ^(행의 시작), abc로 시작하는 행을 찾는다.

‘abc$’ a.txt : $(행의 끝)

‘abc*’ a.txt : abc로 시작하는 단어 모두

‘a.....g’a.txt : a로 시작 g로 끝나는 7자리 단어

[a-d] a.txt : a, b, c, d로 시작하는 단어 모두

[fF]ree a.txt : free 또는 Free로 시작하는 단어 모두

     egrep : grep의 확장다수의 패턴을 하나 혹은 다수의 파일에서 찾는다대체 패턴은|로 분리 지정파이프로 인식하지 않게 하기 위해 인용부호(‘’)로 묶는다.

egrep ‘Sunny, [one|Thank]’ a.txt

12)     파일 검색(find)

     시스템 내에 있는 파일들 중 사용자가 원하는 파일 찾을 때 사용찾은 파일에 특정 명령을 실행하도록 명령할 수 있어 편리검색경로는 절대경로나 상대경로 사용

     find path [expression] [action]

-name file_name : 검색 대상 파일명, [], ?, *의 메타문자 함께 사용 가능

-type [file_type] : 검색 대상 파일의 종류 지정, b(block), c(character), d(directory), p(Named Pipe), f(Regular File), l(Symbolic Link), s(socket)

-user uname : uname은 검색 파일의 소유주 또는 UID

-group gname : gname은 검색 파일의 소유그룹 또는 GID

-size [+-]num[bck] :  검색 파일의 크기 지정, num(일치), +num(이상), -num(이하)

b(block, 512byte, 디폴트), c(byte), k(kilobyte)

-perm mode : 8진수로 주어진 접근 권한 갖는 파일 검색

-atime [+-]n : 파일이 읽힌 최근 시간

-ctime [+-]n : 소유주나 권한이 바뀐 최근 시간

-mtime [+-]n : 파일이 수정된 최근 시간

-prune : 서브로 내려가지 않고 현재 디렉토리에서만 검색

-print : 검색 후에 행할 작업 옵션으로 검색 결과 출력

     -exec command {} \; : 검색 후에 행할 작업 옵션으로 검색 결과에 특정 명령 실행하게 명령함.

{}를 명령어의 인수를 사용하면 find명령이 찾은 파일명으로 치환함. ;로 종료되어야 함쉘은 ;를 특수문자로 인식하기 때문에 \와 함게 쓰임. } \사이에 공백이 있어야 함.

find . -name “*.c” -exec rm {} \; : *.c를 검색해서 그 결과를 rm명령어의 인수로 전달해 실행함.

     명시적으로 논리 연산 사용하는 것이 가능 : -a(AND), -o(OR), !(NOT)

(expression)

! expression

expression [-a] expression : 디폴트 연산자

expression -o expression

find . -name “*.log” -o -name “*.o” -print : 확장자가 둘 중 하나인 것

find . \(-name “*.log” -o -name “*.o”\) -print : 위와 동일

find . !\(-name “*.log” -o -name “*.o”\) -print : 이외의 것 검색

                     find . \(-name “*.log” -o -name “*.o”\) -exec rm {} \; : 찾아서 삭제

     xargs 명령어 : 파이프로 넘어오는 결과를 읽어들여 뒤에 오는 명령어에게 다중 인수로 변환하여 전달

find . | xargs 명령어 : find의 결과가 명령어의 다중 인수로 받아들여짐.

     

find . : find . -print와 동일(-print가 디폴트로 설정), 현재와 서브 디렉토리의 모든 파일 출력

find . -name “*.c” -print : .c로 끝나는 파일

find . -type d -print : 디렉토리만

find . -name lib -type d : lib이름의 디렉토리만

find . -size +56 -print : 56블록보다 큰 것

find . -perm -1 -print : other에 실행권한 있는 파일 검색,  -는 ‘rwx-‘중 하나(--------x)

find . -perm -44 -print : group(4), other(4)

find . -mtime +3 -print : 수정한지 3일이 지난 것(4, 5, 6…)

find . -mtime 3 -print : 수정한지 3일 된 것

                     find . -mtime -3 -print : 수정한지 3일이 못된 것(0, 1, 2…)

확인 취소
닫기
:
Posted by 라면스프