How to make empty file in linux

저희 Redhat Enterprise Edition 5를 기준으로 볼때,

cp /dev/null {filename}, cat /dev/null > {filename} 의 성능을 보면, cat 쪽이 훨씬 더 빠릅니다. (Strace로 확인)

Cat 의 경우는 Library도 얼마 안쓰고 file open /dev//null 밖에 안하고 바로 stream으로 쏴버리네요.. cpcat보다 수많은 library를 읽고, file이 없으면 create도 하고 하는 open 작업이 하는 등 system call이 상대적이 많습니다. Redirect sign(output)을 사용하는 것이 엄청 빠르게 동작될 수 있다는 것을 알게 되었습니다.

 

cat /dev/null > {filename}

fstat64(1, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0

open("/dev/null", O_RDONLY|O_LARGEFILE) = 3

fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0

read(3, "", 4096)                       = 0

close(3)                                = 0

close(1)                                = 0

exit_group(0)                           = ?

 

cp /dev/null {filename},

geteuid32()                             = 1726

stat64("kkk111.txt", 0xbf8537bc)        = -1 ENOENT (No such file or directory)

stat64("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0

stat64("kkk111.txt", 0xbf853668)        = -1 ENOENT (No such file or directory)

open("/dev/null", O_RDONLY|O_LARGEFILE) = 3

fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0

open("kkk111.txt", O_WRONLY|O_CREAT|O_LARGEFILE, 020666) = 4

fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0

fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0

read(3, "", 4096)                       = 0

close(4)                                = 0

close(3)                                = 0

close(1)                                = 0

exit_group(0)                           = ?

 

 

그리고, linux에서 file creation할 수 있는 방법을 적어볼께요~

1.     Cat /dev/null > aa.txt

2.     Cp /dev/null aa.txt

3.     touch aa.txt

4.     /bin/bash 에서의 empty file creation (/bin/bash만 됩니다.)

[gw01:/home1/knight] /bin/bash

id: cannot find name for group ID 1728

[knight@gw01 ~]$ > aaa.txt

[knight@gw01 ~]$ ls -al aaa.txt

-rw-r--r-- 1 knight 1728 0  5 27 10:57 aaa.txt

[knight@gw01 ~]$

5.     dd if=/dev/zero of=foo count=0 of=xx.txt

[gw01:/home1/knight] dd if=/dev/zero of=foo count=0 of=xx.txt

0+0 records in

0+0 records out

0 bytes (0 B) copied, 8.819e-06 seconds, 0.0 kB/s

[gw01:/home1/knight] cat xx.txt

[gw01:/home1/knight] ls -al xx.txt

-rw-r--r-- 1 knight 1728 0  5 27 11:00 xx.txt

6.     head -0 > aa.txt

[gw01:/home1/knight] head -0 > x1x1.txt

[gw01:/home1/knight] ls -al x1x1.txt

-rw-r--r-- 1 knight 1728 0  5 27 11:01 x1x1.txt

7.     true > x2x2.txt

[gw01:/home1/knight] true > x2x2.txt

 [gw01:/home1/knight] ls -al x2x2.txt

-rw-r--r-- 1 knight 1728 0  5 27 11:02 x2x2.txt

8.     false > x3x3.txt

[gw01:/home1/knight] false > x3x3.txt

[gw01:/home1/knight] ls -al x3x3.txt

-rw-r--r-- 1 knight 1728 0  5 27 11:03 x3x3.txt

9.     sed –e “” < filename

[gw01:/home1/knight] sed -e "" < filename

 [gw01:/home1/knight] ls -al filename

-rw-r--r-- 1 knight 1728 0  5 27 11:04 filename

 

'c or linux' 카테고리의 다른 글

[리눅스] ar, ranlib, ldd, nm, make  (0) 2010.10.18
rz/sz 사용하기 (lrzsz 사용)  (0) 2010.07.09
Open files 수 늘이기  (0) 2010.03.23
Sendfile 이해도 높이기  (0) 2010.02.08
KQueue, Epoll  (0) 2010.02.08
Posted by '김용환'
,