7. 파일의 탄생과 사망 (ls, cat, ln, cp, mv, rm, touch, file, stat) 리눅스(linux)

2007/10/03 21:16

http://blog.naver.com/1inuxer/100042652649

file 이란 무엇인가 ?

regular file을 의미하는것도 있으나 광범위한 뜻으로는 장치파일이나 디렉터리까지 포함한다...


1. ls = list

파일의 목록을 보여준다...이렇게만 알면 안되고 파일의 정보를 보여준다라고 해야 맞는거 같다.

그렇다면 어떤 정보를 알려주는가. ?


[kimsm2@server03-FC5 ~]$ ls -l
total 8
drwxr-xr-x 4 kimsm2 sangmin 4096 Oct  3 19:58 k1
drwxr-xr-x 2 kimsm2 sangmin 4096 Oct  3 19:54 k3
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 18:59 newfile
[kimsm2@server03-FC5 ~]$


이렇게 많은 정보를 알려준다.

 file type

user mode

group mode

other mode

links

owner id

group id

size

 d

 rwx

 r-x

r-x

4

kimsm2

 sangmin

 4096

 디렉터리

400.200.100

40.0.10

4.0.1






o file type d : 디렉터리

              - : regular file

              b : block device (저장관련 블럭장치들)

              l : sysbolic link (윈도우의 아이콘기능정도)

 o mode

    r = 4 = 읽기

   w = 2 = 쓰기, 수정

    x = 1 = 실행


 o ls의 시간옵션

   t : 최근파일부터 출력

  c : 시간의 출력, 정렬시 변경시간(ctime), lt로 사용하면 변경시간 출력

  u : 시간의 출력, 정렬시 접근시간(atime)


시간이 하나가 아니라 몇개씩 되어 보인다. 하지만 달랑..3개만 있다. 유닉스의 영향이다.

하나씩 알아보자


atime(접근시간) : 파일을 읽기했을때

mtime(수정시간) : 파일내용 변경된 때

ctime(변경시간) : 파일의 메타정보가 변경 (권한 또는 경로등)


[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424832      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:43:02.000000000 +0900
Modify: 2007-10-03 20:43:02.000000000 +0900
Change: 2007-10-03 20:43:02.000000000 +0900
[root@server03-FC5 kimsm2]#

[root@server03-FC5 kimsm2]# cat time
[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424832      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:43:51.000000000 +0900
Modify: 2007-10-03 20:43:02.000000000 +0900
Change: 2007-10-03 20:43:02.000000000 +0900

[root@server03-FC5 kimsm2]# vi time

[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 16              Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 424834      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:45:27.000000000 +0900
Modify: 2007-10-03 20:45:27.000000000 +0900
Change: 2007-10-03 20:45:27.000000000 +0900

[root@server03-FC5 kimsm2]# chmod 777 time
[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 16              Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 424834      Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:45:27.000000000 +0900
Modify: 2007-10-03 20:45:27.000000000 +0900
Change: 2007-10-03 20:50:11.000000000 +0900

2. cat = catenate file & print on the standard output

 o 기존의 파일을 윈도우의  type 명령어처럼 출력해 줄 수 있다.

[root@server03-FC5 kimsm2]# cat time

hi jsp bye php

rail

merong


옵션 -b -n도 있음

 o 새로운 파일 (주로 간단한거)를 만들 수 있다.

[root@server03-FC5 kimsm2]# cat makenewfile
cat: makenewfile: No such file or directory
[root@server03-FC5 kimsm2]# cat > makenewfile
hi
this file is made by catenate
bye
[root@server03-FC5 kimsm2]# cat makenewfile
hi
this file is made by catenate
bye

 o 기존 파일에 새로운 내용을 추가 할 수 있다.

 [root@server03-FC5 kimsm2]# cat >> time
what time is it now ?
[root@server03-FC5 kimsm2]# cat time

hi jsp bye php

rail

merong
what time is it now ?

 o 내부입력을 이용하여 다른 파이프로 보내는 기능도 있다.

 [root@server03-FC5 kimsm2]# cat time | grep php
hi jsp bye php


3. ln = make links between files

 링크파일은 심오하게도 2가지 종류가 있다.

 hard link, sybolic link 이렇다..

 명령어도 참으로 단순한거다.

 

[root@server03-FC5 kimsm2]# ln -s time k1/linktime
[root@server03-FC5 kimsm2]# cd k1
[root@server03-FC5 k1]# ls -l
total 8
-rw-r--r-- 1 root   root       0 Oct  3 20:40 ctime
drwxr-xr-x 2 kimsm2 sangmin 4096 Oct  3 19:53 k2
drwxr-xr-x 3 kimsm2 sangmin 4096 Oct  3 19:58 k4
lrwxrwxrwx 1 root   root       4 Oct  3 21:09 linktime -> time

symbolic link가 만들어 졌으니 재미있는 실험을 해보고 싶어진다...

time이란 파일을 timeold라는 파일로 cp 해서 백업해 놓고

time을 삭제후 k1 디렉터리의 linktime의 파일을 확인하자.  80년대 나이트 분위기가 나온다.



이제 sysmbolic에서 hard link로 넘어가 보자

그런데 귀찮은것이 하나 등장해야만 한다. 바로 inode라는 것이다.

왜 등장하냐...

이유는 단순명백하다..symbolic link 파일은 ls에서 "l" 이라고 친절하게 가르쳐주는데

hard link는 정말 hard 스럽다...알아낼 방도가 없기 때문에 inode를 알아야 하느것이다.


inode란 각 파일들이 가지고 있는 특별한 번호로서 유닉스 계열은 파일을 구분할때 filename이 아닌

inode를 가지고 구분한다... 여기까지만 이렇게 이해하길바란다.


 
[root@server03-FC5 kimsm2]# ln -s link slink     심볼릭링크를 만들고
[root@server03-FC5 kimsm2]# ln link hlink         하드링크를 만들고
[root@server03-FC5 kimsm2]# ls -l
total 0
-rw-r--r-- 2 root root 0 Oct  3 21:38 hlink            링크인지 구분이 안선다.
-rw-r--r-- 2 root root 0 Oct  3 21:38 link              일반파일이였고
lrwxrwxrwx 1 root root 4 Oct  3 21:39 slink -> link 친절하게도 link에게 연결된거라고 알려준다.

이래서 inode를 알아야 한다는 것이다.

 
[root@server03-FC5 kimsm2]# ls -li
total 0
424822 -rw-r--r-- 2 root root 0 Oct  3 21:38 hlink
424822 -rw-r--r-- 2 root root 0 Oct  3 21:38 link
424823 lrwxrwxrwx 1 root root 4 Oct  3 21:39 slink -> link

막힌 가슴이 뚫리듯 확 느끼기 시작했을것이다.

심볼릭은 l 이라는 file type으로 알 수 있지만 하드링크는 inode가 원본파일과 같다는것이다.


 4. cp, mv,rm


cp

 [root@server03-FC5 kimsm2]# cp -a cp1 acp
[root@server03-FC5 kimsm2]# cp -b cp1 acp
cp: overwrite `acp'? y
[root@server03-FC5 kimsm2]# ln -s cp1 scp
[root@server03-FC5 kimsm2]# cp scp scp1
[root@server03-FC5 kimsm2]# cp -d scp dscp
[root@server03-FC5 kimsm2]# ls -l
total 4
-rw-r--r-- 1 root   root       0 Oct  3 22:18 acp
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 22:16 acp~
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 22:16 cp1
lrwxrwxrwx 1 root   root       3 Oct  3 22:20 dscp -> cp1
drwxr-xr-x 2 root   root    4096 Oct  3 21:54 kk
lrwxrwxrwx 1 root   root       3 Oct  3 22:19 scp -> cp1
-rw-r--r-- 1 root   root       0 Oct  3 22:19 scp1


외에도

i = 확인하고

f = 확인하지 않고

p = 원본파일의 시간, 유저, 권한을 그대로 유지하고

r = 파일이면 복사하고, 디렉터리경우 하위경로의 파일까지 복사

R = 디렉터리 복사경우 하위까지 복사

s = 링크파일로 복사

u = 복사할 대상이 변경날짜가 같거나, 최근파일일경우 복사하지 않음


mv

 -b = 백업파일 만듬

 -f = 강제로 대체

 -i = 확인하고

 -v = 과정표시


rm

 -f = 확인도 않하고

 -i = 확인하고

 -r = 디렉터리일 경우 하위까지

 -v = 과정표시


5. touch

현재 존재하는 파일의 시간을 현재시간으로 변경해 주고

없는 파일은 생성해주는 역할을 하지요..

 [root@server03-FC5 kimsm2]# stat acp
  File: `acp'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424827      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 22:18:38.000000000 +0900
Modify: 2007-10-03 22:18:38.000000000 +0900
Change: 2007-10-03 22:18:38.000000000 +0900
[root@server03-FC5 kimsm2]# touch acp
[root@server03-FC5 kimsm2]# stat acp
  File: `acp'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424827      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 22:39:13.000000000 +0900
Modify: 2007-10-03 22:39:13.000000000 +0900
Change: 2007-10-03 22:39:13.000000000 +0900


6. file

유닉스 혹은 리눅스 계열은 확장자의 의미가 없어요.. 왜냐면 나도 모르고...MS하고는 좀 틀리죠 ?

또하나 생각한다면 MS는 대소문자의 구분이 없지만 유닉스/리눅스는 까칠스럽게 따진다는거..잊지마세요


자. 확장자가 없는 파일이거나 혹은 확장자가 있는데 잘못되었을 경우 이 파일의 종류를 알려면

file 이란 명령을 쓰면 금방 알 수 있습니다.

그런데 확장가가 틀린 파일인 경우에도 파일 종류를 알 수 있다는것은..비내리는날 먼지가 나는것과

같을 정도로 심오한 뜻을 가지고 있습니다.


[root@server03-FC5 kimsm2]# gzip filename *cp
gzip: filename: No such file or directory
gzip: dscp is not a directory or a regular file - ignored
gzip: scp is not a directory or a regular file - ignored
[root@server03-FC5 kimsm2]# ls -l
total 8
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 22:16 acp~
-rw-r--r-- 1 root   root      24 Oct  3 22:39 acp.gz
lrwxrwxrwx 1 root   root       3 Oct  3 22:30 cp2 -> cp1
lrwxrwxrwx 1 root   root       3 Oct  3 22:20 dscp -> cp1
drwxr-xr-x 2 root   root    4096 Oct  3 22:31 kk
lrwxrwxrwx 1 root   root       3 Oct  3 22:19 scp -> cp1
-rw-r--r-- 1 root   root       0 Oct  3 22:19 scp1
[root@server03-FC5 kimsm2]# file acp.gz
acp.gz: gzip compressed data, was "acp", from Unix
[root@server03-FC5 kimsm2]# grep "gzip compressed data" /usr/share/magic
0       string          \037\213        gzip compressed data
[root@server03-FC5 kimsm2]# od -b -N 8 acp.gz
0000000 037 213 010 010 201 233 003 107
0000010

Posted by 행복한 프로그래머 궁금쟁이박
TAG

댓글을 달아 주세요