<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SpaLinux.com &#187; cp preserve</title>
	<atom:link href="http://spalinux.com/tag/cp-preserve/feed" rel="self" type="application/rss+xml" />
	<link>http://spalinux.com</link>
	<description>Resources for Relaxing Linux System Administrators</description>
	<lastBuildDate>Sat, 21 Jan 2012 16:07:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>copy ไฟล์ให้เหมือนเดิม</title>
		<link>http://spalinux.com/2009/10/copy_preserve_file_information</link>
		<comments>http://spalinux.com/2009/10/copy_preserve_file_information#comments</comments>
		<pubDate>Sat, 03 Oct 2009 11:02:44 +0000</pubDate>
		<dc:creator>editor</dc:creator>
				<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[cp preserve]]></category>

		<guid isPermaLink="false">http://spalinux.com/?p=956</guid>
		<description><![CDATA[ในบทความนี้ขอแสดงตัวอย่างและเปรียบเทียบผลลัพธ์การใช้คำสั่ง cp ด้วยออปชั่นต่างๆ ว่าข้อมูลของไฟล์ (file perrmission, owner, group, timestamps, attributes) ว่าแตกต่างกันอย่างไร หมายเหตุ ตัวอย่างในบทความนี้ทดสอบบน Fedora 11 สร้างไฟล์ทดสอบด้วย user1 [user1@fc11-64a tmp]$ echo "Hello World, this is test file." &#62; user1-file.0 [user1@fc11-64a tmp]$ ls -l total 4 -rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0 คำสั่ง cp ไม่มีออปชั่น ทดสอบด้วย root เพื่อ copy ไฟล์ โดยไม่มีการระบุออปชั่น [root@fc11-64a tmp]# date Sat [...]]]></description>
			<content:encoded><![CDATA[<p>ในบทความนี้ขอแสดงตัวอย่างและเปรียบเทียบผลลัพธ์การใช้คำสั่ง cp ด้วยออปชั่นต่างๆ ว่าข้อมูลของไฟล์ (file perrmission, owner, group, timestamps, attributes) ว่าแตกต่างกันอย่างไร</p>
<p><span id="more-956"></span></p>
<p>หมายเหตุ ตัวอย่างในบทความนี้ทดสอบบน Fedora 11</p>
<h4>สร้างไฟล์ทดสอบด้วย user1</h4>
<pre>[user1@fc11-64a tmp]$ <strong>echo "Hello World, this is test file." &gt; user1-file.0</strong></pre>
<pre>[user1@fc11-64a tmp]$ <strong>ls -l</strong>
total 4
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0</pre>
<h4>คำสั่ง cp ไม่มีออปชั่น</h4>
<p>ทดสอบด้วย root เพื่อ copy ไฟล์ โดยไม่มีการระบุออปชั่น</p>
<pre>[root@fc11-64a tmp]# <strong>date
</strong>Sat Oct  3 17:06:52 ICT 2009</pre>
<pre>[root@fc11-64a tmp]# <strong>cp user1-file.0 user1-file.1</strong></pre>
<pre>[root@fc11-64a tmp]# ls -l
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
<span style="color: #ff0000;"><strong>-rw-r--r--</strong></span> 1 <strong><span style="color: #ff0000;">root  root</span></strong>  32 2009-10-03 <strong><span style="color: #ff0000;">17:06</span></strong> user1-file.1</pre>
<p>ไฟล์ที่ copy ได้มา จะมี permission, owner, group, timestamp ไม่ตรงกับไฟล์ต้นฉบับ เพราะดีฟอลต์ คำสั่ง cp จะไม่ preserve ข้อมูลของไฟล์เลย</p>
<h4>cp -p เก็บข้อมูลของไฟล์</h4>
<p>หากต้องการ preserve ข้อมูลของไฟล์ด้วย ต้องระบุออปชั่น &#8216;-p&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -p    same as --preserve=mode,ownership,timestamps</pre>
<p>ทดสอบ cp ด้วยออปชั่น &#8216;-p&#8217;</p>
<pre>[root@fc11-64a tmp]# <strong>date
</strong>Sat Oct  3 17:08:01 ICT 2009</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-file.0 user1-file.2</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-r--r-- 1 root  root  32 2009-10-03 17:06 user1-file.1
-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.2</pre>
<p>หมายเหตุ หากใช้ user อื่น ที่ไม่ใช่ root เช่น user2 จะไม่สามารถคงข้อมูล owner, group ของไฟล์ได้</p>
<pre>[user2@fc11-64a tmp]$ <strong>cp -p user1-file.0 user1-file.3
</strong>[user2@fc11-64a tmp]$ <strong>ls -l
</strong>-rw-rw-r-- 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-rw-r-- 1 <span style="color: #ff0000;"><strong>user2 user2</strong></span> 32 2009-10-03 17:03 user1-file.3</pre>
<h4>ทดสอบ preserve ข้อมูล ACL</h4>
<p>ใช้ user1 คอนฟิก ACL เพิ่มเติมในไฟล์</p>
<pre>[user1@fc11-64a tmp]$ <strong>getfacl user1-file.0
</strong># file: user1-file.0
# owner: user1
# group: user1
user::rw-
group::rw-
other::r--</pre>
<pre>[user1@fc11-64a tmp]$ <strong>setfacl -m user:user2:rwx user1-file.0</strong></pre>
<pre>[user1@fc11-64a tmp]$ <strong>getfacl user1-file.0
</strong># file: user1-file.0
# owner: user1
# group: user1
user::rw-
user:user2:rwx
group::rw-
mask::rwx
other::r--</pre>
<p>การใช้ออปชั่น &#8216;-p&#8217; สามารถ preserve File ACL ที่คอนฟิกไว้ได้ด้วย</p>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-file.0 user1-file.3
</strong>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.3</pre>
<pre>[root@fc11-64a tmp]# <strong>getfacl user1-file.3
</strong># file: user1-file.3
# owner: user1
# group: user1
user::rw-
<span style="color: #0000ff;"><strong>user:user2:rwx</strong>
</span>group::rw-
mask::rwx
other::r--</pre>
<h4>cp -v แสดงไฟล์ที่กำลัง copy</h4>
<p>หากต้องการดูไฟล์ที่กำลัง copy อยู่ สามารถใช้ ออปชั่น &#8216;-v&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -v, --verbose    explain what is being done</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pv user1-file.0 user1-file.4
</strong>`user1-file.0' -&gt; `user1-file.4'</pre>
<h4>soft link file</h4>
<p>ใช้ user1 สร้าง soft link ชื่อ user1-link.0 เพื่อ link ไฟล์ไปยัง user1-file.0</p>
<pre>[user1@fc11-64a tmp]$ <strong>ln -s user1-file.0 user1-link.0
</strong>[user1@fc11-64a tmp]$ <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0</pre>
<p>ใช้คำสั่ง cp -p เพื่อ copy ไฟล์ soft link</p>
<pre>[root@fc11-64a tmp]# <strong>cp -p user1-link.0 user1-link.1</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0
-rw-rwxr--+ 1 user1 user1 <span style="color: #ff0000;">32</span> 2009-10-03 17:03 user1-link.1</pre>
<p>ผลลัพธ์กลับเป็นการ copy ไฟล์ต้นฉบับ user1-file.0 ไม่ใช่ link file</p>
<h4>cp -d เก็บสถานะ link file</h4>
<p>หากต้องการ copy ไฟล์แล้วยังคงสถานะ link file ไว้ ต้องใช้ ออปชั่น &#8216;-d&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -d    same as --no-dereference --preserve=links</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pd user1-link.0 user1-link.2</strong></pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 8
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-file.0
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:15 user1-link.0 -&gt; user1-file.0
-rw-rwxr--+ 1 user1 user1 32 2009-10-03 17:03 user1-link.1
lrwxrwxrwx  1 user1 user1 12 2009-10-03 17:18 user1-link.2 -&gt; user1-file.0</pre>
<h4>copy ทั้งไดเร็คทอรี</h4>
<p>ใช้ user1 สร้างไดเร็คทอรี และไฟล์ย่อยๆ ข้างใน</p>
<pre>[user1@fc11-64a tmp]$ <strong>mkdir user1-dir.0
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file1.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file2.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file3.txt
</strong>[user1@fc11-64a tmp]$ <strong>touch user1-dir.0/sub-file4.txt
</strong>[user1@fc11-64a tmp]$ <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
[user1@fc11-64a tmp]$ <strong>ls -l user1-dir.0/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<p>ทดลองใช้ root เพื่อ copy ไฟล์ทั้งไดเร็คทอรี</p>
<pre>[root@fc11-64a tmp]# <strong>cp -pd user1-dir.0/ user1-dir.1
</strong>cp: omitting directory `user1-dir.0/'</pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0</pre>
<p>ออปชั่นแค่นี้ ไม่สามารถ copy ไดเร็คทอรี ได้</p>
<h4>cp -R ทั้งไดเร็คทอรี</h4>
<p>หากต้องการ copy ทั้งไดเร็คทอรี ต้องใช้ออปชั่น &#8216;-R&#8217; หรือ &#8216;-r&#8217;</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -R, -r, --recursive    copy directories recursively</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -pvdR user1-dir.0/ user1-dir.1
</strong>`user1-dir.0/' -&gt; `user1-dir.1'
`user1-dir.0/sub-file1.txt' -&gt; `user1-dir.1/sub-file1.txt'
`user1-dir.0/sub-file2.txt' -&gt; `user1-dir.1/sub-file2.txt'
`user1-dir.0/sub-file3.txt' -&gt; `user1-dir.1/sub-file3.txt'
`user1-dir.0/sub-file4.txt' -&gt; `user1-dir.1/sub-file4.txt'</pre>
<p>ตรวจสอบไดเร็คทอรี และไฟล์ที่อยู่ข้างใน</p>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.1
[root@fc11-64a tmp]# <strong>ls -l user1-dir.1/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<h4>cp -a ออปชั่นเดียวทำทุกอย่าง</h4>
<p>ออปชั่นที่ยกตัวอย่างข้างบนมาทั้งหมด (ยกเว้น -v) สามารถเปลี่ยนเป็นออปชั่นเดียวได้คือ &#8216;-a&#8217; เพื่อการ copy ไฟล์แล้วคงข้อมูลของไฟล์ไว้ทั้งหมด รวมทั้ง copy ไดเร็คทอรี ไฟล์ย่อยๆ ได้ทั้งหมด</p>
<p>คำอธิบาย ออปชั่น &#8216;-p&#8217; จาก man cp(1)</p>
<pre>    -a, --archive    same as -dR --preserve=all</pre>
<pre>[root@fc11-64a tmp]# <strong>cp -av user1-dir.0/ user1-dir.2
</strong>`user1-dir.0/' -&gt; `user1-dir.2'
`user1-dir.0/sub-file1.txt' -&gt; `user1-dir.2/sub-file1.txt'
`user1-dir.0/sub-file2.txt' -&gt; `user1-dir.2/sub-file2.txt'
`user1-dir.0/sub-file3.txt' -&gt; `user1-dir.2/sub-file3.txt'
`user1-dir.0/sub-file4.txt' -&gt; `user1-dir.2/sub-file4.txt'</pre>
<pre>[root@fc11-64a tmp]# <strong>ls -l
</strong>total 0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.0
drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.1
<span style="color: #0000ff;">drwxrwxr-x 2 user1 user1 86 2009-10-03 17:24 user1-dir.2
</span>[root@fc11-64a tmp]# <strong>ls -l user1-dir.2/
</strong>total 0
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file1.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file2.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file3.txt
-rw-rw-r-- 1 user1 user1 0 2009-10-03 17:24 sub-file4.txt</pre>
<h4>ข้อมูลอ้างอิง</h4>
<ul>
<li>man cp(1)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spalinux.com/2009/10/copy_preserve_file_information/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

