Unix / Linux - การจัดการไฟล์
ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการจัดการไฟล์ใน Unix ข้อมูลทั้งหมดใน Unix จัดเป็นไฟล์ ไฟล์ทั้งหมดจะถูกจัดเป็นไดเร็กทอรี ไดเร็กทอรีเหล่านี้จัดเป็นโครงสร้างแบบต้นไม้ที่เรียกว่าระบบไฟล์
เมื่อคุณทำงานกับ Unix ไม่ทางใดก็ทางหนึ่งคุณใช้เวลาส่วนใหญ่ในการทำงานกับไฟล์ บทช่วยสอนนี้จะช่วยให้คุณเข้าใจวิธีสร้างและลบไฟล์คัดลอกและเปลี่ยนชื่อสร้างลิงก์ไปยังไฟล์เหล่านั้น ฯลฯ
ใน Unix มีไฟล์พื้นฐานสามประเภท -
Ordinary Files- ไฟล์ธรรมดาคือไฟล์ในระบบที่มีข้อมูลข้อความหรือโปรแกรมคำสั่ง ในบทช่วยสอนนี้คุณจะดูการทำงานกับไฟล์ธรรมดา
Directories- ไดเรกทอรีจัดเก็บทั้งไฟล์พิเศษและไฟล์ธรรมดา สำหรับผู้ใช้ที่คุ้นเคยกับ Windows หรือ Mac OS ไดเรกทอรี Unix จะเทียบเท่ากับโฟลเดอร์
Special Files- ไฟล์พิเศษบางไฟล์ให้การเข้าถึงฮาร์ดแวร์เช่นฮาร์ดไดรฟ์ไดรฟ์ซีดีรอมโมเด็มและอะแดปเตอร์อีเทอร์เน็ต ไฟล์พิเศษอื่น ๆ คล้ายกับนามแฝงหรือทางลัดและช่วยให้คุณสามารถเข้าถึงไฟล์เดียวโดยใช้ชื่ออื่น
รายชื่อไฟล์
ในการแสดงรายการไฟล์และไดเร็กทอรีที่จัดเก็บในไดเร็กทอรีปัจจุบันให้ใช้คำสั่งต่อไปนี้ -
$ls
นี่คือผลลัพธ์ตัวอย่างของคำสั่งด้านบน -
$ls
bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
คำสั่ง ls รองรับไฟล์ -l ตัวเลือกที่จะช่วยให้คุณได้รับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ในรายการ -
$ls -l
total 1962188
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
นี่คือข้อมูลเกี่ยวกับคอลัมน์ในรายการทั้งหมด -
First Column- แสดงถึงประเภทไฟล์และสิทธิ์ที่กำหนดให้กับไฟล์ ด้านล่างนี้คือคำอธิบายของไฟล์ทุกประเภท
Second Column - แสดงจำนวนบล็อกหน่วยความจำที่นำมาโดยไฟล์หรือไดเร็กทอรี
Third Column- แสดงถึงเจ้าของไฟล์ นี่คือผู้ใช้ Unix ที่สร้างไฟล์นี้
Fourth Column- แสดงถึงกลุ่มของเจ้าของ ผู้ใช้ Unix ทุกคนจะมีกลุ่มที่เกี่ยวข้อง
Fifth Column - แสดงขนาดไฟล์เป็นไบต์
Sixth Column - แสดงวันที่และเวลาที่สร้างหรือแก้ไขไฟล์นี้เป็นครั้งสุดท้าย
Seventh Column - แสดงถึงไฟล์หรือชื่อไดเร็กทอรี
ใน ls -l ตัวอย่างรายชื่อไฟล์ทุกบรรทัดเริ่มต้นด้วยไฟล์ d, -, หรือ l. อักขระเหล่านี้ระบุประเภทของไฟล์ที่อยู่ในรายการ
ซีเนียร์ | คำนำหน้าและคำอธิบาย |
---|---|
1 | - ไฟล์ปกติเช่นไฟล์ข้อความ ASCII ไฟล์ปฏิบัติการไบนารีหรือฮาร์ดลิงก์ |
2 | b บล็อกไฟล์พิเศษ บล็อกไฟล์อุปกรณ์อินพุต / เอาต์พุตเช่นฮาร์ดไดรฟ์ทางกายภาพ |
3 | c ไฟล์พิเศษของอักขระ ไฟล์อุปกรณ์อินพุต / เอาต์พุตดิบเช่นฮาร์ดไดรฟ์ทางกายภาพ |
4 | d ไฟล์ไดเร็กทอรีที่มีรายการของไฟล์และไดเร็กทอรีอื่น ๆ |
5 | l ไฟล์ลิงค์สัญลักษณ์ ลิงก์บนไฟล์ทั่วไป |
6 | p ท่อชื่อ. กลไกสำหรับการสื่อสารระหว่างกระบวนการ |
7 | s ซ็อกเก็ตที่ใช้สำหรับการสื่อสารระหว่างกระบวนการ |
Metacharacters
Metacharacters มีความหมายพิเศษใน Unix ตัวอย่างเช่น,* และ ?เป็น metacharacters เราใช้* เพื่อจับคู่อักขระ 0 ตัวขึ้นไปเครื่องหมายคำถาม (?) จับคู่กับอักขระเดี่ยว
ตัวอย่างเช่น -
$ls ch*.doc
แสดงไฟล์ทั้งหมดชื่อที่ขึ้นต้นด้วย ch และลงท้ายด้วย .doc -
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
ที่นี่ *ทำงานเป็นอักขระเมตาที่ตรงกับอักขระใด ๆ หากคุณต้องการแสดงไฟล์ทั้งหมดที่ลงท้ายด้วยเพียง.docจากนั้นคุณสามารถใช้คำสั่งต่อไปนี้ -
$ls *.doc
ไฟล์ที่ซ่อนอยู่
ไฟล์ที่มองไม่เห็นคือหนึ่งอักขระตัวแรกคือจุดหรืออักขระจุด (.) โปรแกรม Unix (รวมถึงเชลล์) ใช้ไฟล์เหล่านี้ส่วนใหญ่เพื่อจัดเก็บข้อมูลการกำหนดค่า
ตัวอย่างทั่วไปของไฟล์ที่ซ่อนอยู่ ได้แก่ ไฟล์ -
.profile - สคริปต์การเริ่มต้น Bourne shell (sh)
.kshrc - สคริปต์การเริ่มต้น Korn เชลล์ (ksh)
.cshrc - สคริปต์การเริ่มต้น C เชลล์ (csh)
.rhosts - ไฟล์คอนฟิกูเรชันเชลล์ระยะไกล
หากต้องการแสดงรายการไฟล์ที่มองไม่เห็นให้ระบุไฟล์ -a ตัวเลือกในการ ls -
$ ls -a
. .profile docs lib test_results
.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
Single dot (.) - นี่แสดงถึงไดเร็กทอรีปัจจุบัน
Double dot (..) - แสดงถึงไดเร็กทอรีหลัก
การสร้างไฟล์
คุณสามารถใช้ไฟล์ viโปรแกรมแก้ไขเพื่อสร้างไฟล์ธรรมดาบนระบบ Unix ใด ๆ คุณต้องให้คำสั่งต่อไปนี้ -
$ vi filename
คำสั่งดังกล่าวจะเปิดไฟล์ที่มีชื่อไฟล์ที่กำหนด ตอนนี้กดปุ่มiเพื่อเข้าสู่โหมดแก้ไข เมื่อคุณอยู่ในโหมดแก้ไขคุณสามารถเริ่มเขียนเนื้อหาของคุณในไฟล์ได้ตามโปรแกรมต่อไปนี้ -
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
เมื่อคุณทำโปรแกรมเสร็จแล้วให้ทำตามขั้นตอนต่อไปนี้ -
กดปุ่ม esc เพื่อออกจากโหมดแก้ไข
กดสองปุ่ม Shift + ZZ ออกมาจากไฟล์อย่างสมบูรณ์
ตอนนี้คุณจะมีไฟล์ที่สร้างด้วย filename ในไดเร็กทอรีปัจจุบัน
$ vi filename
$
การแก้ไขไฟล์
คุณสามารถแก้ไขไฟล์ที่มีอยู่โดยใช้ไฟล์ viบรรณาธิการ. เราจะพูดถึงวิธีการเปิดไฟล์ที่มีอยู่โดยย่อ -
$ vi filename
เมื่อเปิดไฟล์แล้วคุณสามารถเข้าสู่โหมดแก้ไขได้โดยกดปุ่ม iจากนั้นคุณสามารถดำเนินการต่อโดยแก้ไขไฟล์ หากคุณต้องการย้ายมาที่นี่และอยู่ในไฟล์ก่อนอื่นคุณต้องออกจากโหมดแก้ไขโดยกดปุ่มEsc. หลังจากนี้คุณสามารถใช้ปุ่มต่อไปนี้เพื่อย้ายภายในไฟล์ -
l เพื่อเลื่อนไปทางด้านขวา
h เพื่อเลื่อนไปทางด้านซ้าย
k เพื่อย้ายกลับหัวในไฟล์
j เพื่อเลื่อนลงในไฟล์
ดังนั้นเมื่อใช้ปุ่มด้านบนคุณจะสามารถวางเคอร์เซอร์ได้ทุกที่ที่คุณต้องการแก้ไข เมื่อคุณอยู่ในตำแหน่งแล้วคุณสามารถใช้ไฟล์iกุญแจสำคัญที่จะเข้ามาในโหมดแก้ไข เมื่อคุณแก้ไขไฟล์เสร็จแล้วให้กดEsc และสุดท้ายสองปุ่ม Shift + ZZ ออกมาจากไฟล์อย่างสมบูรณ์
แสดงเนื้อหาของไฟล์
คุณสามารถใช้ไฟล์ catคำสั่งเพื่อดูเนื้อหาของไฟล์ ต่อไปนี้เป็นตัวอย่างง่ายๆเพื่อดูเนื้อหาของไฟล์ที่สร้างขึ้นด้านบน -
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
คุณสามารถแสดงหมายเลขบรรทัดโดยใช้ไฟล์ -b ตัวเลือกพร้อมกับ cat คำสั่งดังนี้ -
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I'm going to save this content in this file.
$
การนับคำในไฟล์
คุณสามารถใช้ไฟล์ wcคำสั่งเพื่อรับจำนวนบรรทัดคำและอักขระทั้งหมดที่มีอยู่ในไฟล์ ต่อไปนี้เป็นตัวอย่างง่ายๆเพื่อดูข้อมูลเกี่ยวกับไฟล์ที่สร้างด้านบน -
$ wc filename
2 19 103 filename
$
นี่คือรายละเอียดของทั้งสี่คอลัมน์ -
First Column - แสดงจำนวนบรรทัดทั้งหมดในไฟล์
Second Column - แสดงจำนวนคำทั้งหมดในไฟล์
Third Column- แสดงจำนวนไบต์ทั้งหมดในไฟล์ นี่คือขนาดจริงของไฟล์
Fourth Column - แสดงชื่อไฟล์
คุณสามารถให้ไฟล์หลายไฟล์และรับข้อมูลเกี่ยวกับไฟล์เหล่านั้นได้พร้อมกัน ต่อไปนี้เป็นไวยากรณ์ง่ายๆ -
$ wc filename1 filename2 filename3
การคัดลอกไฟล์
ในการทำสำเนาไฟล์ให้ใช้ไฟล์ cpคำสั่ง ไวยากรณ์พื้นฐานของคำสั่งคือ -
$ cp source_file destination_file
ต่อไปนี้เป็นตัวอย่างในการสร้างสำเนาของไฟล์ที่มีอยู่ filename.
$ cp filename copyfile
$
ตอนนี้คุณจะพบอีกหนึ่งไฟล์ copyfileในไดเรกทอรีปัจจุบันของคุณ ไฟล์นี้จะเหมือนกับไฟล์ต้นฉบับทุกประการfilename.
การเปลี่ยนชื่อไฟล์
ในการเปลี่ยนชื่อไฟล์ให้ใช้ไฟล์ mvคำสั่ง ต่อไปนี้เป็นไวยากรณ์พื้นฐาน -
$ mv old_file new_file
โปรแกรมต่อไปนี้จะเปลี่ยนชื่อไฟล์ที่มีอยู่ filename ถึง newfile.
$ mv filename newfile
$
mvคำสั่งจะย้ายไฟล์ที่มีอยู่ไปยังไฟล์ใหม่อย่างสมบูรณ์ ในกรณีนี้คุณจะพบเฉพาะnewfile ในไดเรกทอรีปัจจุบันของคุณ
การลบไฟล์
ในการลบไฟล์ที่มีอยู่ให้ใช้ไฟล์ rmคำสั่ง ต่อไปนี้เป็นไวยากรณ์พื้นฐาน -
$ rm filename
Caution- ไฟล์อาจมีข้อมูลที่เป็นประโยชน์ ขอแนะนำให้ระมัดระวังขณะใช้สิ่งนี้เสมอDeleteคำสั่ง จะดีกว่าถ้าใช้ไฟล์-i ตัวเลือกพร้อมกับ rm คำสั่ง
ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีลบไฟล์ที่มีอยู่ทั้งหมด filename.
$ rm filename
$
คุณสามารถลบไฟล์หลายไฟล์ได้พร้อมกันด้วยคำสั่งด้านล่าง -
$ rm filename1 filename2 filename3
$
สตรีม Unix มาตรฐาน
ภายใต้สถานการณ์ปกติโปรแกรม Unix ทุกโปรแกรมจะมีสตรีม (ไฟล์) สามสตรีมที่เปิดไว้เมื่อเริ่มต้น -
stdin- สิ่งนี้เรียกว่าอินพุตมาตรฐานและตัวอธิบายไฟล์ที่เกี่ยวข้องคือ 0 ซึ่งจะแสดงเป็น STDIN ด้วย โปรแกรม Unix จะอ่านอินพุตเริ่มต้นจาก STDIN
stdout- สิ่งนี้เรียกว่าเอาต์พุตมาตรฐานและตัวอธิบายไฟล์ที่เกี่ยวข้องคือ 1 ซึ่งจะแสดงเป็น STDOUT ด้วย โปรแกรม Unix จะเขียนเอาต์พุตเริ่มต้นที่ STDOUT
stderr- สิ่งนี้เรียกว่าข้อผิดพลาดมาตรฐานและตัวบอกไฟล์ที่เกี่ยวข้องคือ 2 ซึ่งจะแสดงเป็น STDERR ด้วย โปรแกรม Unix จะเขียนข้อความแสดงข้อผิดพลาดทั้งหมดที่ STDERR