[유닉스] 링크, 수정 시각 변경


파일 링크



ln 명령

  • 파일의 링크를 생성
  • 형식 : ln [옵션] 원본파일명 링크파일명
  • 옵션

    • -s : 심볼릭 링크 파일 생성
  • 사용 예 : ln test lntest, ln –s test lntest

하드 링크

  • 하나의 파일에 둘 이상의 다른 이름을 붙일 수 있음
  • 파일에 붙인 이름을 하드 링크, 이름이 붙여진 파일을 하드 링크 파일
  • 예제
    • 파일의 종류는 일반 파일
    • 하드 링크 수는 1
    • 원본 파일이 한 개이고 파일 이름의 개수가 1이므로 하드 링크 수가 1
$ cat > ln.txt
This is the first ln test.
^D
$ ls –l ln.txt
-rw--r--r-- 1 ksshin ksshin 27 6월 12 16:56 ln.txt
$

하드 링크 파일

  • ln 명령 사용하여 기존 파일에 새로운 이름 부여
    • 두 파일 모두 하드 링크 수가 2
    • 하나의 파일에 두 개의 이름이 붙여졌으므로 링크 수 증가
    • ln.txt와 ln.hd 파일이 동일한 파일임을 확인 (파일 내용으로 확인)
$ ln ln.txt ln.hd
$ ls –l ln.*
-rw--r--r-- 2 ksshin ksshin 27 6월 12 16:56 ln.hd
-rw--r--r-- 2 ksshin ksshin 27 6월 12 16:56 ln.txt
$
$ cat ln.txt
This is the first ln test.
$ cat ln.hd
This is the first ln test.
$

하드 링크와 파일 복사의 차이

  • 파일을 복사해도 내용은 같지만 다른 파일임

    • 같은 파일인지 알 수 있는 방법은 inode를 확인하는 것
  • 하드 링크의 경우 inode 값이 같음

    • ls –i 옵션으로 inode 확인 가능
$ ls –i ln*
133938 ln.hd 133938 ln.txt
$
  • 파일을 복사한 경우 inode 값이 다름

    • 파일 복사한 경우의 하드 링크 수와 inode 값 확인
$ cp ln.txt ln1.txt
$ ls –l ln*
-rw--r--r-- 1 ksshin ksshin 27 6월 12 17:07 ln1.txt
-rw--r--r-- 2 ksshin ksshin 27 6월 12 16:56 ln.hd
-rw--r--r-- 2 ksshin ksshin 27 6월 12 16:56 ln.txt
$ ls –i ln*
134032 ln1.txt 133938 ln.hd 133938 ln.txt
$

하드 링크 파일과 원본 파일의 변경

  • ln.hd 파일의 내용을 변경하면 ln.txt의 내용도 같이 변경됨
$ ls –i ln.* >> ln.hd
$ cat ln.txt
This is the first ln test.
133938 ln.hd
133938 ln.txt
$
  • ln.txt 파일을 삭제한 후 ln.hd 파일의 변화
    • 하드 링크 수가 1로 바뀌고 내용은 변화 없음
$ rm ln.txt
$ ls –l ln.*
-rw--r--r-- 1 ksshin ksshin 27 6월 12 16:56 ln.hd
$ cat ln.hd
This is the first ln test.
133938 ln.hd
133938 ln.txt
$

심볼릭 링크

  • 윈도우의 바로가기 아이콘과 같음
  • 원본 파일에 쉽게 접근하기 위해 생성한 특수 파일
  • 파일의 내용은 원본 파일의 경로
  • 링크 파일을 복사하거나 내용을 출력하면 모든 작업이 원본 파일에 대해 수행됨
  • 원본 파일이 삭제되면 심볼릭 링크 파일이 남아있어도 그 파일을 사용할 수 없음

심볼릭 링크 파일

  • ln 명령에 –s 옵션을 사용하여 만듦
  • 특징

    • 파일 종류 : l, 심볼릭 링크로 표시됨
    • 하드 링크 수 : 1, 이름 추가가 아님
    • 파일 이름 : 파일 이름 뒤에 원본 파일의 이름이 표시됨 (->ln.hd)
    • inode 번호 : inode 번호가 다른 별개의 파일임
$ ln –s ln.hd ln.sl
$ ls –l ln.*
-rw--r--r-- 1 ksshin ksshin 27 6월 12 16:56 ln.hd
lrwxrwxrwx 1 ksshin ksshin 5 6월 12 17:25 ln.sl -> ln.hd
$ ls –i ln.*
133938 ln.hd 134106 ln.sl
$

하드 링크 파일과 심볼릭 링크 파일

  • 공통점

    • 심볼릭 링크 파일을 수정하면 원본이 수정됨
$ pwd >> ln.sl
$ cat ln.hd
This is the first ln test.
133938 ln.hd
133938 ln.txt
/home/ksshin
$
  • 차이점

    • 원본 삭제하면 하드 링크는 새로운 이름 사용 가능, 심볼릭 링크는 사용 불가
    • 하드 링크는 디렉토리 설정할 수 없지만 심볼릭 링크는 설정 가능
$ rm ln.hd
$ cat ln.sl
cat: ln.sl: No such file or directory
$


파일 생성 및 수정 시각 변경


###touch 명령

  • 빈 파일을 생성하거나 파일 수정 시각을 변경
  • 형식 : touch [-acm] [-r ref_file] [-t time] 파일
  • 옵션

    • -a : 접근 시간만 변경
    • -c : 지정된 파일이 없는 경우 새로 생성하지 않음
    • -m : 수정 시간만 변경
    • -r ref_file : 시각을 파일에서 읽음
    • -t [[CC]YY]MMDDhhmm[.ss] : 시각을 직접 입력
  • 사용 예 : touch test

파일 생성

  • 지정한 파일이 존재하지 않으면 내용 없는 빈 파일 생성
  • touch 명령 실습을 위해 디렉토리 생성
$ mkdir Touch
$ cd Touch
$ ls test
ls: cannot access test: No such file or directory
$  
  • touch 명령 입력
$ touch test
$ ls –l test
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:18 test
$
  • 기존에 없던 test 파일 생성, 파일 크기 0으로 내용 없이 파일 정보만 존재

  • 여러 파일을 한꺼번에 생성

$ touch t1 t2
$ ls
t1 t2 test
$    
- 생성된 파일의 종류는 일반 파일이므로 vi 에디터를 이용해 내용 편집 가능
  • touch 명령 이용해 빈 파일 생성하는 이유

    • 테스트를 위해 내용에 상관없이 파일만 필요한 경우

      i. 유닉스의 파일 명령 연습할 때
      ii. 쉘 특수 문자 테스트를 위해 다양한 이름의 파일 생성

    • 유닉스 시스템 관리를 할 때 필요에 의해

파일 접근 및 수정 시각 변경

  • 인자로 지정한 파일이 존재하면 해당 파일의 접근 및 수정 시각 변경

현재 시각으로 변경하기

  • touch 명령을 옵션 없이 사용
$ ls –l
total 4
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t2
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:18 test
$ touch t1
$ ls –l t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:35 t1
$

지정한 시각으로 변경하기

  • -t 옵션 사용
  • 시각 표시 형식
    • 형식 : [[CC]YY]MMDDhhmm[ss]
    • 옵션

      i. CC : 연도의 첫 두 자리
      ii. YY : 연도의 마지막 두 자리
      iii. MM : 달(01~12 범위내 지정)
      iv. DD : 날짜(01~31 범위내 지정)
      v. hh : 시각(00~23 범위내 지정)
      vi. mm : 분(00~59 범위내 지정)
      vii. ss : 초(00~59 범위내 지정)

    • CC를 지정하지 않으면 YY 값에 따라 CC를 자동으로 인식


  • 연도를 지정하지 않고 월, 일, 시각만 지정한 예
$ touch –t 05311830 test
$ ls –l
total 4
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t2
-rw-rw-r-- 1 ksshin ksshin 0 5월 31 18:30 test
$
  • 연도 네 자리를 모두 지정한 예
$ touch –t 200501010000 test
$ ls –l
total 4
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t2
-rw-rw-r-- 1 ksshin ksshin 0 1월 1 2005 test
$   

특정 파일 기준으로 변경하기

  • 특정 파일과 접근, 수정 시각을 일치시키고 싶을 때 –r 옵션 사용
$ touch –r t1 test
$ ls –l
total 4
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t2
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 test
$

수정, 접근 시각 선택 변경하기

  • 수정 시각만 변경하고 싶으면 –m 옵션 사용
  • 접근 시각만 변경하고 싶으면 –a 옵션 사용
  • 접근 시각만 변경한 경우 ls –ul 옵션을 사용해야 결과 확인 가능
$ touch –a –t 05311830 test
$ ls –l
total 4
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t2
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:18 test
$ ls –ul
total 4
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t1
-rw-rw-r-- 1 ksshin ksshin 0 6월 8 21:20 t2
-rw-rw-r-- 1 ksshin ksshin 0 5월 31 18:30 test
$