cp /dev/null {filename}, cat /dev/null > {filename} 차이, 그리고, 빈 파일 생성 법
c or linux 2010. 5. 27. 11:19저희 Redhat Enterprise Edition 5를 기준으로 볼때,
cp /dev/null
{filename}, cat /dev/null > {filename} 의 성능을 보면, cat 쪽이 훨씬
더 빠릅니다. (Strace로 확인)
Cat 의 경우는 Library도 얼마 안쓰고 file open은 /dev//null 밖에 안하고 바로 stream으로 쏴버리네요.. cp는 cat보다 수많은 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 |