Introduction to Linux - A Hands on Guide

Introduction to Linux

A Hands on Guide

Machtelt Garrels

Garrels.be

                        

1.27 Edition

20080606


Table of Contents
Introduction
1. Why this guide?
2. Who should read this book?
3. New versions and availability
4. Revision History
5. Contributions
6. Feedback
7. Copyright information
8. What do you need?
9. Conventions used in this document
10. Organization of this document
1. What is Linux?
1.1. History
1.2. The user interface
1.3. Does Linux have a future?
1.4. Properties of Linux
1.5. Linux Flavors
1.6. Summary
1.7. Exercises
2. Quickstart
2.1. Logging in, activating the user interface and logging out
2.2. Absolute basics
2.3. Getting help
2.4. Summary
2.5. Exercises
3. About files and the file system
3.1. General overview of the Linux file system
3.2. Orientation in the file system
3.3. Manipulating files
3.4. File security
3.5. Summary
3.6. Exercises
4. Processes
4.1. Processes inside out
4.2. Boot process, Init and shutdown
4.3. Managing processes
4.4. Scheduling processes
4.5. Summary
4.6. Exercises
5. I/O redirection
5.1. Simple redirections
5.2. Advanced redirection features
5.3. Filters
5.4. Summary
5.5. Exercises
6. Text editors
6.1. Text editors
6.2. Using the Vim editor
6.3. Linux in the office
6.4. Summary
6.5. Exercises
7. Home sweet /home
7.1. General good housekeeping
7.2. Your text environment
7.3. The graphical environment
7.4. Region specific settings
7.5. Installing new software
7.6. Summary
7.7. Exercises
8. Printers and printing
8.1. Printing files
8.2. The server side
8.3. Print problems
8.4. Summary
8.5. Exercises
9. Fundamental Backup Techniques
9.1. Introduction
9.2. Moving your data to a backup device
9.3. Using rsync
9.4. Encryption
9.5. Summary
9.6. Exercises
10. Networking
10.1. Networking Overview
10.2. Network configuration and information
10.3. Internet/Intranet applications
10.4. Remote execution of applications
10.5. Security
10.6. Summary
10.7. Exercises
11. Sound and Video
11.1. Audio Basics
11.2. Sound and video playing
11.3. Video playing, streams and television watching
11.4. Internet Telephony
11.5. Summary
11.6. Exercises
A. Where to go from here?
A.1. Useful Books
A.2. Useful sites
B. DOS versus Linux commands
C. Shell Features
C.1. Common features
C.2. Differing features
Glossary
Index
List of Tables
1. Typographic and usage conventions
2-1. Quickstart commands
2-2. Key combinations in Bash
2-3. New commands in chapter 2: Basics
3-1. File types in a long list
3-2. Subdirectories of the root directory
3-3. Most common configuration files
3-4. Common devices
3-5. Color-ls default color scheme
3-6. Default suffix scheme for ls
3-7. Access mode codes
3-8. User group codes
3-9. File protection with chmod
3-10. New commands in chapter 3: Files and the file system
3-11. File permissions
4-1. Controlling processes
4-2. Common signals
4-3. New commands in chapter 4: Processes
5-1. New commands in chapter 5: I/O redirection
7-1. Common environment variables
7-2. New commands in chapter 7: Making yourself at home
8-1. New commands in chapter 8: Printing
9-1. New commands in chapter 9: Backup
10-1. The simplified OSI Model
10-2. New commands in chapter 10: Networking
11-1. New commands in chapter 11: Audio
B-1. Overview of DOS/Linux commands
C-1. Common Shell Features
C-2. Differing Shell Features
List of Figures
1. Introduction to Linux front cover
1-1. OpenOffice MS-compatible Spreadsheet
2-1. Terminal window
2-2. Konqueror as help browser
3-1. Linux file system layout
3-2. Hard and soft link mechanism
4-1. Fork-and-exec mechanism
4-2. Can't you go faster?
4-3. Gnome System Monitor
8-1. Printer Status through web interface
9-1. Floppy formatter
10-1. Evolution mail and news reader
10-2. X-Chat
10-3. SSH X11 forwarding
11-1. XMMS mp3 player

Introduction

Introduction

1. Why this guide?

1. ทำไมต้องมีหนังสือเล่มนี้

คนส่วนมากยังคงรู้สึกว่าการเรียนรู้ระบบลีนุกซ์นั้นยาก, หรือเฉพาะผู้เชี่ยวชาญเท่านั้นที่จะสามารถเข้าใจว่าระบบลีนุกซ์ทำงานอย่างไร . แม้ว่าจะมีหนังสือจำนวนมากที่หาอ่านได้ฟรี, หนังสือที่มีอยู่ทั่วไปในเวบบ่อยครั้งที่อ่านแล้วทำให้งง, เนื่องจากคู่มือเหล่านั้นมีเนื้อหาเน้นสำหรับผู้ใช้ที่มีประสบการณ์ใช้ระบบ ยูนิกซ์หรือลีนุกซ์มาก่อน. ทุกวันนี้, ต้องขอบคุณความก้าวหน้าของการพัฒนา, ทำให้ลีนุกซ์มีการใช้งานอย่างแพร่หลายทั้งที่บ้านและที่ทำงาน. เป้าหมายของหนังสือเล่มนี้คือการทำให้ผู้อ่านทุกวัยอ่านแล้วมีความรู้สึกว่า ลีนุกซ์นั้นง่ายและสนุก,และนำไปใช้งานได้ทุกความต้องการ.

2. Who should read this book?

2. หนังสือเล่มนี้เหมาะกับใคร?

หนังสือเล่มนี้เขียนขึ้นเพื่ออธิบายภาพรวมการทำงานของระบบปฎิบัติการ ลินุกซ์, เป็นแนวทางในการศึกษาและเริ่มต้นสำหรับผู้ใช้มือใหม่, พร้อมกับแบบฝึกหัดท้ายบทในแต่ละบท.  สำหรับผู้ที่เคยศึกษามาแล้วก็สามารถใช้เป็นหนังสืออ้างอิง, และคอลเลคชั่นสะสมความรู้พื้นฐานใช้เพื่อการทำงานกับระบบและผู้ดูแลระบบ เครือข่าย.  หนังสือเล่มนี้ประกอบด้วยตัวอย่างจริงจากประสบการณ์ของผู้เขียนในฐานะผู้ ดูแลระบบลีนุกซ์และเครือข่าย, ผู้สอน  และที่ปรึกษา.  เราหวังว่าตัวอย่างเหล่านี้จะช่วยคุณให้มีความเข้าใจในระบบลินุกซ์ได้ดีขึ้น และกล้าที่จะลองใช้ด้วยตนเอง

ทุกคนที่ต้องการจะเรียนรู้การใช้งานแบบคอมมานด์ไลน์ "CLUE" (Command Line User Experience), ที่ใช้งานด้วยระบบลินุกซ์(และยูนิกซ์) จะพบว่าหนังสือเล่มนี้เป็นประโยชน์อย่างแท้จริง.

3. New versions and availability

3. เนื้อหาฉบับปรับปรุงและแหล่งข้อมูล

เอกสารฉบับนี้เป็นส่วนหนึ่งของ Linux Documentation Project collection ในเว็บไซต์ http://www.tldp.org/guides.html ; คุณสามารถดาวน์โหลดไฟล์ PDF และเวอร์ชัน Postscript formatted ได้ที่นี่

เวอร์ชั่นปรับปรุงล่าสุดสามารถดาวน์โหลดได้ที่เว็บไซต์ http://tille.garrels.be/training/tldp/

ฉบับปรับปรุงครั้งที่สองสามารถหาอ่านได้จาก Fultus.com Books ในรูปแบบของหนังสือปกอ่อน Print On Demand หรือ POD. Fultus ได้เผยแพร่เอกสารนี้ผ่าน Ingram และ Baker & Taylor ไปยังร้านหนังสือหลายแห่ง, เช่น Amazon.com, Amazon.co.uk, BarnesAndNoble.com และ Google's Froogle แหล่งซื้อขายสินค้าทั่วโลก  และ Google Book Search.

รูปที่ 1 หน้าปกของ Introduction to Linux

หนังสือเล่มนึ้ได้รับการแปลเป็นภาษาฮินดีโดย :

  • Alok Kumar

  • Dhananjay Sharma

  • Kapil

  • Puneet Goel

  • Ravikant Yuyutsu

Andrea Montagner แปลหนังสือเล่มนี้เป็นภาษาอิลาลี

แปลเป็นภาษาไทย โดย pcman

4. Revision History

4. บันทึกการปรับปรุงเนื้อหา

 

 บันทึกการปรับปรุงเนื้อหา
Revision 1.27 20080606 Revised by: MG
updates.
Revision 1.26 20070919 Revised by: MG
 ความคิดเห็นจากผู้อ่าน, ลิขสิทธิ์
Revision 1.25 20070511 Revised by: MG

ความคิดเห็นจากผู้อ่าน, การปรับปรุงส่วนย่อย, มารยาทในการใช้ E-mail, ข้อมูลเกี่ยวกับความพร้อมในการใช้งาน (ด้วยความช่วยเหลือของ Oleg)

Revision 1.24 2006-11-01 Revised by: MG

เพิ่มเนื้อหาสารบัญ, เตรียมการพิมพ์ฉบับแก้ไขครั้งที่ 2, เพิ่ม gpg และ ข้อมูล proxy

Revision 1.23 2006-07-25 Revised by: MG and FK

แก้ไขตวามถูกต้อง, แก้ไข app5 อีกครั้ง, ดัดแปลงลิขสิทธิ์เพื่อให้เหมาะสมกับ Debian docs

Revision 1.22 2006-04-06 Revised by: MG

ปรับปรุงบทที่ 8 ให้สมบูรณ์, แก้ตัวอย่างในบทที่ 10 ให้เข้าใจง่ายขึ้น, เพิ่ม ifconfig และข้อมูล cygwin, ปรับปรุง network apps

Revision 1.21 2006-03-14 Revised by: MG

เพิ่มแบบฝึกหัดในบทที่ 11, แก้ไขคำผิดให้ถูกต้อง, แก้ไขคำอธิบายคำสั่งควบคุมในบทที่ 9 ให้สมบูรณ์, แก้ไขส่วนที่ผิดเล็กน้อยในบทที่ 10

Revision 1.20 2006-01-06 Revised by: MG

แยกบทที่ 7 : เรื่อง audio stuff แยกไปอยู่บทที่ 11, บทที่ 11.xml. แก้ไขเล็กน้อย, ปรับปรุงเนื้อหาคำสั่งเช่น aptitude,  เพิ่มเนื้อหาเกี่ยวกับ USB storage, Internet telephony, แก้ไข้ความถูกต้องจากคำแนะนำของผุ้อ่าน.

Revision 1.13 2004-04-27 Revised by: MG

ตรวจทานครั้งสุดท้ายก่อนจะส่งให้ Fultus ตีพิมพ์.  เพิ่มข้อมูลอ้างอิงของ Fultus ในส่วนที่ปรับปรุงใหม่, เพิ่มส่วนของ Conventions และ Organization, แก้ไขเพิ่มเติมในบทที่ 4, 5, 6 และ 8 เล็กน้อย, เพิ่มข้อมูล rdesktop ในบทที่ 10, เพิ่มอภิธานศัพท์, แทนที่ fileutils ด้วย coreutils ในส่วนอ้างอิง, ขอบคุณผู้แปลเป็นภาษาฮินดี

5. Contributions

5. ผู้ให้การสนับสนุน

ขอขอบคุณเป็นอย่างมากสำหรับผู้ที่ช่วยแบ่งปันประสบการณ์. และโดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ลินุกซ์ชาวเบลเยียมที่คอยให้คำแนะนำที่มี คุณค่าและรับฟังข้อมูลต่างๆจากทีมงาน

ขอบคุณสำหรับไอเดียพิเศษของ Tabatha Marshall ในการแก้ไขที่ละเอียดอ่อน, การตรวจการสะกดและรูปแบบการเขียน, และขอบคุณ Eugene Crosser สำหรับตรวจความผิดพลาดหลังจากที่พวกเราตรวจทานถึงสองรอบ

และขอบคุณสำหรับผู้อ่านทุกท่านที่ช่วยแนะนำเกี่ยวกับหัวข้อที่ผิดพลาดและ ผู้ที่ช่วยแก้ไขในส่วนที่ผิดพลาดของการตรวจทานครั้งสุดท้าย, ส่งอีเมล์มาบอกถึงปัญหาและข้อผิดพลาดของคำนิยามที่ไม่ชัดเจนและความผิดพลาด จากการตีพิมพ์. Filipus Klutiero ผู้ที่ช่วยแก้ไขบทสัมภาษณ์ในปี 2005 และ 2006 ให้สมบูรณ์และช่วยแนะนำเรื่อง Debian docs, Alexey Eremenko ผู้ที่ช่วยเหลือเรื่องข้อมูลในบทที่ 11, ทั้งสองคนนี้คือผู้ที่ช่วยเหลือทีมงานในการทำให้หนังสือเล่มนี้มีข้อมูลที่ ใหม่อยู่เสมอ

ในปี 2006, Suresh Rajashekara ได้สร้างแพ๊คเกจ Debian ของเอกสารฉบับนี้

สุดท้ายนี้, ขอบคุณอย่างมากสำหรับอาสาสมัครทุกคนผู้ที่คอยแปลเอกสารฉบับนี้ในภาษา ฝรั่งเศส, สวีเดน, เยอรมัน, ฮินดี, และภาษาอื่นๆอีกมากมาย. มันเป็นงานที่ใหญ่มากที่ไม่ควรจะมองข้ามไป ; ผมขอขอบคุณเป็นอย่างมาก

6. Feedback

6. แนะนำ ติชม

ข้อมูลที่ผิดพลาด, ลิงก์ที่ผิดพลาด, หรืออักขระที่ผิดพลาด?. คุณสามารถอีเมล์มาหาเราเพื่อช่วยแก้ไขเอกสารฉบับนี้ได้

                    

                    ฉบับแปลเป็นภาษาไทยแนะนำติชมส่งเมล์มาที่ pcmanx@hotmail.com

อย่าลืมหาอ่านเวอร์ชันล่าสุดก่อนเป็นลำดับแรก!

 

7. Copyright information

7. ข้อมูลการสงวนลิขสิทธิ์

* Copyright (c) 2002-2007, Machtelt Garrels
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the author, Machtelt Garrels, nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

โลโก้, เครื่องหมายการค้าและสัญลักษณ์ต่างๆที่ใช้ในหนังสือเล่มนี้เป็นสิทธิ์ของเจ้าของผู้ผลิตนั้น

8. What do you need?

8. สิ่งที่จำเป็นที่คุณต้องใช้?

คุณจำเป็นต้องมีคอมพิวเตอร์และระบบลินุกซ์,และมีเวลา, เนื้อหาในหนังสือสามารถนำไปใช้งานได้กับลินุกซ์ทุกสายพันธ์ - และระบบยูนิกซ์ทั่วไป   นอกนั้นไม่ต้องมีอะไรเป็นพิเศษ.

คู่มือ Installation HOWTO มีข้อมูลที่เป็นประโยชน์ในการหาซอฟต์แวร์ระบบลินุกซ์มาใช้งานและการติดตั้ง ลงในคอมพิวเตอร์ของคุณ. มีข้อมูลของฮาร์ดแวร์ที่จำเป็นและโปรแกรมที่ใช้งานร่วมกับระบบปฎิบัติการ อื่นอธิบายอีกด้วย

CD images สามารถดาวน์โหลดได้จาก linux-iso.com และอีกหลายแห่ง, สามารถดูได้ที่ Appendix A

ทางเลือกที่น่าสนใจทางอื่นสำหรับผู้ที่ไม่กล้าติดตั้งระบบลินุกซ์ลงใน คอมพิวเตอร์คือการใช้ลีนุกซ์สายพันธ์ที่สามารถรันจาก CD , เช่น สายพันธ์ Knoppix

9. Conventions used in this document

9. ข้อตกลงที่ใช้ในเอกสารฉบับนี้

รูปแบบข้อความและการใช้งานที่ใช้ในหนังสือเล่มนี้:

 ตารางที่ 1 ข้อความและคำอธิบายข้อตกลง

Text type Meaning
"Quoted text"  คำพูดจากผู้อื่น  หรือผลการประมวลจากคอมพิวเตอร์
terminal view

อินพุตตามตัวอักษรของคอมพิวเตอร์และผลการประมวลสุดท้าย, มักจะแสดงด้วยพื้นหลังสีเทา

command  ชื่อของคำสั่งที่สามารถใช้ใน command line
VARIABLE  ชื่อของตัวแปรหรือ pointer ของตัวแปร เช่น $VARNAME
option  ตัวเลือกของคำสั่ง เช่น "อ็อพชั่น -a ของคำสั่ง ls".
argument  อาร์กิวเม้นท์หรือส่วนขยายของคำสั่ง เช่นรายละเอียดที่ปรากฏจากการป้อนคำสั่ง  "read man ls "
prompt

 เครื่องหมายพร้อมรับคำสั่ง, ปกติจะตามด้วยคำสั่งที่คุณพิมพ์บนเทอร์มินอลวินโดว์ เช่น hilda@home> ls -l

command options arguments

  สาระสำคัญของคำสั่งหรือคำอธิบายทั่วไปในบรรทัดที่แยกออกมา
filename  ชื่อของไฟล์หรือรายชื่อ เช่น "Change to the /usr/bin directory."
Key  ปุ่มที่พิมพ์บนคีย์บอร์ด เช่น "type Q to quit"
Button  ปุ่มที่เป็นรูปภาพเพื่อให้คลิก เช่น  คลิกปุ่ม OK
Menu->Choice

ตัวเลือกที่ให้เลือกจากเมนูรูปภาพ เช่น "SelectHelp->About Mozilla in your browser."

Terminology  คำสำคัญหรือคอนเซ็ปต์ เช่น "The Linux kernel is the heart of the system."
\

เครื่องหมาย \ ในท้ายคำสั่งแสดงถึงบรรทัดที่ยังไม่จบ  หรือในอีกคำอธิบายหนึ่ง  ถ้าคุณเห็นคำสั่งยาวๆที่ถูกตัดไปในอีกบรรทัด \ หมายถึง  อย่าเพิ่งกด Enter

See Chapter 1

 เชื่อมต่อไปยังหัวข้อที่เกี่ยวข้องภายในเอกสาร

The author  ลิงก์ที่สามารถคลิกได้เชื่อมต่อไปยังแหล่งข้อมูลเว็บไซต์ภายนอก

รูปภาพที่ใช้ :

Note  คำอธิบายเพิ่มเติม
 

 ประกอบด้วยข้อมูลเพิ่มเติมหรือข้อสังเกต

Caution  ข้อควรระวัง
 

 หมายความให้คุณควรจะระวัง

Warning  คำเตือน
 

  ควรจะระวังเป็นอย่างยิ่ง

Tip  เคล็ดลับ
 

 เคล็ดลับและทริค

10. โครงสร้างเนื้อหาของหนังสือเล่มนี้

หนังสือ เล่มนี้เป็นส่วนหนึ่งของ Linux Documentation Project ที่มีจุดประสงค์เพื่อให้ความรู้ที่เป็นพื้นฐานของเนื้อหาอื่นๆที่คุณจะได้ จากโปรเจคนี้   จึงมี เนื้อหาพื้นฐานความรู้สำหรับผู้ที่ต้องการเริ่มการใช้งานด้วยระบบปฎิบัติการ ลินุกซ์   ขณะเดียวกันก็พยายามหลีกเลี่ยงเนื้อหาที่เข้าใจยาก  คุณจะพบว่า หนังสือเล่มนี้ยังไม่สมบูรณ์และเต็มไปด้วยลิ้งค์ไปหาแหล่งข้อมูลเพิ่มเติมบน ระบบของคุณ, บนอินเตอร์เน็ต, และในคู่มือใช้งานระบบของคุณ

บทแรกเป็นเนื้อหาเริ่มต้นเกี่ยวกับลินุกซ์;  สองบทถัดไปเป็นการอธิบายคำสั่งพื้นฐาน.  บทที่ 4 และ 5 อธิบายในเนื้อหาที่เข้มขึ้นแต่ยังอยู่ในหัวข้อพื้นฐาน, บทที่ 6 เป็นเนื้อหาที่จำเป็นในการทำงานระบบ, เป็นเนื้อหาอธิบายเกี่ยวกับการแก้ไขไฟล์ และความสามารถที่คุณต้องเรียนรู้เพื่อเปลี่ยนจากผู้ใช้ลีนุกซ์มือใหม่ ไปเป็น Linux user. บทถัดมาอธิบายเกี่ยวกับหัวข้อที่ยากขึ้นที่คุณต้องทราบในการใช้ระบบลินุกซ์ ในชีวิตประจำวัน.

เนื้อหาทุกบทจะมีแบบฝึกหัดให้คุณทำการทดสอบเพื่อเตรียมตัวสู่การเรียนรู้บทถัดไป

  • Chapter 1: ลินุกซ์คืออะไร, มันกำเนิดขึ้นมาได้อย่างไร, ข้อดีและข้อเสีย, การพัฒนาในอนาคตของลินุกซ์, ลินุกซ์เหมาะกับใคร, การติดตั้งลงในคอมพิวเตอร์ของคุณ.
  • Chapter 2: การเริ่มต้นใช้งาน, เชื่อมต่อกับระบบ, คำสั่งพื้นฐาน, แหล่งขอความช่วยเหลือ.
  • Chapter 3: ระบบไฟล์, ไฟล์ที่สำคัญและรายชื่อไฟล์, การจัดการไฟล์และรายชื่อไฟล์, การป้องกันข้อมูลของคุณ.
  • Chapter 4: เข้าใจและจัดการโพรเซส, ขั้นตอนการรีสตาร์ทและปิดเครื่อง, การเลื่อนทาสก์, repetitive tasks.
  • Chapter 5: อะไรคืออินพุตพื้นฐาน, เอาท์พุต และข้อผิดพลาด  และวิธีใช้ features เหล่านี้จากบรรทัดคำสั่ง.
  • Chapter 6: ทำไมจึงควรเรียนรู้วิธีใช้โปรแกรมอีดิเตอร์, คำอธิบายสำหรับคำสั่งอีดิเตอร์ที่ใช้งานบ่อยๆ.
  • Chapter 7: การปรับแต่งหน้าจอกราฟฟิก, ตัวอักษรและเสียงประกอบ, การตั้งค่าสำหรับผู้ที่ไม่ได้ใช้ภาษาอังกฤษดั้งเดิม, เคล็ดลับสำหรับการติดตั้งซอฟต์แวร์พิเศษ.
  • Chapter 8: การแปลงไฟล์ให้เป็นฟอร์แมทที่สามารถสั่งพิมพ์ได้, การสั่งพิมพ์ออกทางเครื่องพิมพ์, แนวทางสำหรับแก้ปัญหาในการพิมพ์
  • Chapter 9: การเตรียมไฟล์เพื่อการสำรองไฟล์, คำอธิบายสำหรับโปรแกรมเครื่องมือต่างๆ, การทำ remote backup
  • Chapter 10: ภาพรวมของโปรแกรมเครื่องมือสำหรับ Linux networking และ application ของผู้ใช้, คำอธิบายแบบย่อของเดมอนในระบบและความปลอดภัยของเครือข่าย.
  • Chapter 11: ระบบเสียงและวีดีโอ, รวมทั้งระบบเสียงส่งผ่านเครือข่ายอินเตอร์เนทและการบันทึกเสียง จะอธิบายในบทนี้.
  • Appendix A: หนังสือและเว็บไซต์ที่สามารถไปเยี่ยมชมได้หลังจากจบการเรียนรู้.
  • Appendix B: การเปรียบเทียบคำสั่ง DOS และ ลีนุกซ์
  • Appendix C: ถ้าคุณเกิดปัญหาหรือไม่เข้าใจ  ข้อมูลคำตอบอาจอยู่ในตารางนี้  คุณสามารถใช้เป็นเหตุผลได้เมื่อเจ้านายของคุณยืนยันว่าคุณควรจะใช้ shell ที่เขาชอบ.

Chapter 01. What is Linux?

Chapter 1.  ลินุกซ์คืออะไร

สารบัญ

1.1. ประวัติของลีนุกซ์

1.1.1. ยูนิกซ์ 

1.1.2. Linus กับ Linux

1.1.3. แอพพลิเคชั่นปัจจุบันในระบบปฎิบัติการลินุกซ์

1.2. The user interface 

1.2.1. ลินุกซ์ใช้งานยากหรือไม่?

1.2.2. ลินุกซ์สำหรับผู้ใช้ที่เพิ่งเรียนรู้การใช้งานเป็นครั้งแรก  

1.3. ทิศทางของลินุกซ์ในอนาคต

1.3.1. โครงการ Open Source

1.3.2. ประสบการณ์ของการพัฒนาตลอดสิบปี

1.4. คุณสมบัติของลินุกซ์

1.4.1. ข้อดีของ Linux

1.4.2. ข้อด้อยของ Linux

1.5. ระบบปฎบัติการลินุกซ์ที่นิยมใช้งาน

1.5.1. Linux and GNU

1.5.2. GNU/Linux

1.5.3. ลินุกซ์รุ่นไหนที่ควรจะติดตั้งใช้งาน?

1.6. บทสรุป

1.7. แบบฝึกหัด

เรา จะเริ่มต้นจากความเป็นมาของระบบปฎิบัติการลินุกซ์จนถึงปัจจุบัน  ประวัติของการพัฒนาจากอดีตถึงในอนาคตและวิเคราะห์เจาะลึกข้อดี/ข้อเสียของ ระบบปฏิบัติการลินุกซ์. เราจะพูดถึงสายพันธ์ลีนุกซ์,  การเผยแพร่โอเพ่นซอร์สและรายละเอียดเล็กๆน้อยๆเกี่ยวกับ GNU.

ในบทนี้จะตอบคำถามต่างๆเกี่ยวกับระบบลินุกซ์ดังนี้ :

·          ลินุกซ์คืออะไร

·         ลินุกซ์ทำงานอย่างไร?

·          ลินุกซ์เป็นระบบปฏิบัติการที่สามารถทำทุกอย่างได้ด้วยคำสั่งตัวอักษรใช่หรือไม่?

·          ลินุกซ์จะพัฒนาต่อไปหรือเป็นแค่โฆษณาชวนเชื่อ?

·          ข้อดีของการใช้ระบบปฏิบัติการลินุกซ์คืออะไร?

·          ข้อเสียของระบบปฏิบัติการลินุกซ์คืออะไร?

·          ลินุกซ์มีกี่ประเภทและประเภทไหนที่เหมาะกับการใช้งานในแบบต่างๆ?

·          โอเพ่นซอร์สและ GNU คืออะไร?

 

1.1. History

1.1. ประวัติของลินุกซ์

1.1.1. ยูนิกซ์

เพื่อที่จะทำความเข้าใจกับการได้รับความนิยมของลินุกซ์, เราควรจะมองย้อนกลับไปในอดีตราวๆ 30 ปีที่แล้ว...

จินตนาการภาพคอมพิวเตอร์ที่ใหญ่ขนาดเท่าบ้านหนึ่งหลัง, หรือใหญ่เท่าสนามกีฬา. ในขณะที่ขนาดของคอมพิวเตอร์เหล่านั้นเป็นปัญหาที่สำคัญ, มีสิ่งหนึ่งที่ทำให้ปัญหาเหล่านั้นยิ่งแย่ไปกว่า : คอมพิวเตอร์ทุกเครื่องมีระบบปฎิบัติการที่แตกต่างกัน. ซอฟต์แวร์มักจะถูกทำขึ้นโดยมีจุดประสงค์เฉพาะบนระบบปฎิบัติการเดียว, และมันจะไม่ทำงานบนระบบปฎิบัติการอื่นๆ. มันสามารถทำงานบนระบบหนึ่งไม่ได้หมายความว่ามันจะทำงานกับระบบอื่นได้โดย อัตโนมัติ.  เป็นการทำงานที่ยาก,ทั้งผู้ใช้และผู้ควบคุมดูแลระบบ

คอมพิวเตอร์มีราคาแพงมาก, จึงต้องเสียค่าใช้จ่ายหลังจากติดตั้งเครื่องคอมพิวเตอร์เพื่อให้ผู้ใช้ เข้าใจวิธีการทำงานของมัน. ค่าใช้จ่ายทั้งหมดต่อคอมพิวเตอร์หนึ่งเครื่องจึงมีราคาที่สูงมาก.

เทคโนโลยีในขณะนั้นยังพัฒนาได้ไม่มาก, ดังนั้นเราจึงต้องใช้คอมพิวเตอร์ในขนาดที่ใหญ่โตอยู่หลายทศวรรษ. ในปี 1969, ทีมผู้พัฒนาในห้องปฏิบัติการ Bell Labs ได้เริ่มต้นหาวิธีแก้ปัญหาของซอฟต์แวร์, เพื่อจัดการให้มีการใช้แทนกันได้. พวกเขาได้พัฒนาระบบปฏิบัติการขึ้นมาใหม่ที่มีคุณสมบัติดังนี้

  1.  เรียบง่ายและสวยงาม

  2.  สร้างด้วยภาษาซีแทนที่จะเป็นภาษาแอสเซมบลี.

  3.  สามารถนำโค้ดกลับมาใช้ใหม่ได้.

ทีมงาน Bell Labs ได้ตั้งชื่อโครงการนี้ว่า "UNIX."

โค้ดที่สามารถนำกลับมาใช้ได้นี้มีความสำคัญมาก. ก่อนหน้านี้ระบบคอมพิวเตอร์ต่างๆต้องแก้ไขโค้ดเพื่อให้มีความเหมาะสมกับการ ใช้งานบนระบบปฏิบัติการหนึ่งๆ. แต่ยูนิกซ์ใช้การปรับแต่งเพียงโค้ดพิเศษเท่านั้น, ที่ปัจจุบันเรียกว่า kernel. เคอร์เนลเป็นส่วนเดียวของโค้ดที่จำเป็นต้องปรับแต่งสำหรับระบบที่ที่แตกต่าง กันทุกระบบและสร้างแกนของระบบยูนิกซ์.  ระบบปฏิบัติการและความสามารถต่างๆถูกสร้างขึ้นห่อหุ้มเคอร์เนลนี้และเขียน ด้วยภาษาระดับสูงคือภาษาซี. ภาษานี้สร้างขึ้นเพื่อระบบยูนิกซ์โดยเฉพาะ. ด้วยการใช้เทคนิคใหม่นี้, ทำให้การพัฒนาระบบปฏิบัติการที่สามารถใช้กับฮาร์ดแวร์ที่แตกต่างกันทำได้ ง่ายขึ้น.

ผู้ผลิตซอฟต์แวร์สามารถปรับใช้ได้เร็วขึ้น, เพราะพวกเขาสามารถขายซอฟต์แวร์ได้มากขึ้นเป็นสิบเท่า. ปรากฏการณ์ใหม่ที่เกิดขึ้นคือ : คอมพิวเตอร์จากผู้ผลิตต่างกันสามารถติดต่อกันได้บนเครือข่ายเดียวกัน, หรือผู้ใช้สามารถทำงานบนระบบต่างๆโดยไม่ต้องยุ่งยากกับเรียนรู้การใช้ คอมพิวเตอร์เครื่องอื่น. ยูนิกซ์ช่วยให้ผู้ใช้บนระบบที่ต่างกันทำงานร่วมกันได้.

การพัฒนาของระบบยูนิกซ์ดำเนินไปตลอดสองทศวรรษถัดมา. หลายสิ่งพัฒนาจากความเป็นไปไม่ได้ให้เป็นไปได้  และมีผู้ผลิตฮาร์ดแวร์และซอฟต์แวร์มากมายให้การสนับสนุนระบบยูนิกซ์.

ยูนิกซ์เริ่มแพร่หลายในเหล่าเมนเฟรมและมินิคอมพิวเตอร์ (หมายเหตุ คอมพิวเตอร์พีซีเป็นไมโครคอมพิวเตอร์) เป็นวงกว้าง. คุณสามารถใช้งานระบบยูนิกซ์ได้ทุกที่ไม่ว่าจะเป็นมหาวิทยาลัย  หน่วยงานราชการ  หรือหน่วยงานทางการเงินเพื่อเข้าใช้ระบบยูนิกซ์.

แต่คอมพิวเตอร์ที่เล็กกว่านี้เพิ่งได้รับการพัฒนา, และเมื่อถึงปลายปี 80, ผู้คนมากมายมีคอมพิวเตอร์สำหรับใช้งานที่บ้าน. ในเวลานั้น, มีเพียงยูนิกซ์หลายเวอร์ชั่นที่สามารถใช้งานได้กับคอมพิวเตอร์พีซี, แต่ไม่มีเวอร์ชั่นใหนที่ใช้ฟรีและที่สำคัญกว่านั้นคือ : มันทำงานได้ช้ามาก,  ดังนั้นผู้คนส่วนมากจึงใช้ MS DOS หรือ Windows 3.1 บนคอมพิวเตอร์ของพวกเขา.

1.1.2. Linus กับ Linux

ต้นทศวรรษที่ 90 คอมพิวเตอร์พีซีสำหรับใช้งานในบ้านก็พัฒนาให้มีประสิทธิภาพมากเพียงพอที่จะ ใช้งานกับระบบยูนิกซ์. Linus Torvalds, ชายหนุ่มที่ศึกษาด้านวิทยาศาสตร์คอมพิวเตอร์ที่มหาวิทยาลัยเฮลซิงกิมี ความคิดว่า  คงจะดีหากมีระบบยูนิกซ์ที่สามารถใข้งานได้ฟรี, เขาจึงเริ่มต้นพัฒนาโค้ดขึ้น

เขาเริ่มต้นด้วยการถามคำถาม, มองหาคำตอบและทางแก้ปัญหาที่ช่วยในการติดตั้งยูนิกซ์บนคอมพิวเตอร์ของเขา. ด้านล่างเป็นข้อความแรกที่เขาโพสต์ลงใน comp.os.minix ในปี 1991

From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Newsgroups: comp.os.minix
Subject: Gcc-1.40 and a posix-question
Message-ID: <1991Jul3.100050.9886@klaava.Helsinki.FI>
Date: 3 Jul 91 10:00:50 GMT
Hello netlanders,
Due to a project I'm working on (in minix), I'm interested in the posix
standard definition. Could somebody please point me to a (preferably)
machine-readable format of the latest posix rules? Ftp-sites would be
nice.

จากจุดเริ่มต้น, เป้าหมายของ Linus คือการที่มีระบบปฏิบัติการที่ใช้งานได้ฟรีที่พัฒนามาจากยูนิกซ์. เขาจึงได้ใช้มาตรฐาน POSIX ในการเริ่มต้น, POSIX ยังคงเป็นพื้นฐานของยูนิกซ์.

ในขณะนั้น plug-and-play ยังไม่ได้ถูกสร้างขึ้น, แต่ผู้คนส่วนมากสนใจที่จะมีระบบปฏิบัติการยูนิกซ์เป็นของตัวเอง, ไดร์เวอร์อุปกรณ์จึงไม่ใช่ปัญหาใหญ่. ไดร์เวอร์ใหม่ที่รองรับฮาร์ดแวร์ทุกชนิดมีเพิ่มมากขึ้นเรื่อยๆ, แทบจะทันทีที่มีฮาร์ดแวร์ใหม่เกิดขึ้น. บางคนซื้อมันเพื่อที่จะลองใช้กับลินุกซ์, ระบบค่อยๆมีการเรียนรู้และขยายให้รองรับอุปกรณ์มากขึ้น และเผยแพร่โค้ดสำหรับฮาร์ดแวร์ออกมาเป็นวงกว้าง. ผู้ถอดโค้ดเหล่านี้ไม่หยุดเพียงคอมพิวเตอร์พีซี ; แต่สำหรับฮาร์ดแวร์ทุกชนิดที่พวกเขาค้นพบว่ามีประโยชน์สำหรับลีนุกซ์.

บางครั้งพวกนักพัฒนาเหล่านี้จะถูกเรียกว่าพวก "ทึ่ม" หรือ " คิดแปลกประหลาด" แต่นั่นไม่เป็นปัญหาสำหรับพวกเขา,ตราบใดที่ฮาร์ดแวร์ที่รองรับลีนุกซ์เติบโต มากขึ้น. ต้องขอบคุณคนเหล่านี้ที่มีส่วนอย่างมาก,  ลินุกซ์ไม่เพียงถูกใช้งานบนคอมพิวเตอร์พีซีใหม่ๆ  แต่ยังเป็นระบบปฏิบัติการที่เป็นทางเลือกสำหรับฮาร์ดแวร์เก่าและฮาร์ดแวร์ตก รุ่นที่จะไม่สามารถใช้งานได้ถ้าไม่มีลินุกซ์.

สองปีหลังจากที่ Linus โพสต์ข้อความนั้น, มีผู้ใช้ลินุกซ์กว่า 12,000 คน. โปรเจคนี้ได้รับความนิยมมากในหมู่นักเล่นคอมพิวเตอร์เป็นงานอดิเรก, และเติบโตอย่างรวดเร็วในขณะที่ยังใช้พื้นฐานของ POSIX standard อยู่. หลังจากนั้นสองปี feature ทุกชนิดของยูนิกซ์ถูกเพิ่มขึ้นมา, ส่งผลให้เกิดเป็นระบบปฏิบัติการลินุกซ์มาจนถึงทุกวันนี้. ลินุกซ์กลายเป็นตัวก๊อปปี้ของยูนิกซ์โดยสมบูรณ์, เหมาะกับการใช้งานในสำนักงานในการเป็นเซิร์ฟเวอร์ middle-range และ high-end. ปัจจุบัน, ผู้ผลิตในตลาดฮาร์ดแวร์และซอฟต์แวร์รายสำคัญจะมีทีมพัฒนาลินุกซ์ของพวกเขา เอง ; คุณสามารถติดต่อซื้อลินุกซ์ในแบบ pre-installed ที่ได้รับการสนับสนุนอย่างเป็นทางการ ได้ที่ดีลเลอร์ท้องถิ่น - แม้ว่าจะมีฮาร์ดแวร์และซอฟแวร์เป็นจำนวนมากเช่นกันที่ไม่ได้รับการสนับสนุน อย่างเป็นทางการ

1.1.3.  แอพพลิเคชั่นปัจจุบันของระบบลินุกซ์

ปัจจุบันลินุกซ์ได้เข้ามาเป็นส่วนหนึ่งของตลาดคอมพิวเตอร์. ผู้พัฒนาลินุกซ์ให้ความสนใจกับเน็ตเวิร์กและการบริการในตอนเริ่มต้น, และแอพพลิเคชั่นสำหรับออฟฟิศเป็นตลาดสุดท้ายที่เข้าถึงได้ยากมาก. เราไม่ยอมรับตลาดที่ไมโครซอฟต์ครองอยู่, ดังนั้นจึงมีโปรแกรมทางเลือกมากมายเริ่มออกสู่ท้องตลาดในสองสามปีหลังจาก นั้นเพื่อทำให้ลินุกซ์เป็นทางเลือกสำหรับสำนักงาน, ที่สามารถใช้งานง่ายเหมือนโปรแกรมของไมโครซอฟท์ออฟฟิสเช่น word processors, spreadsheets, presentations เป็นต้น.

ในด้านของเซิร์ฟเวอร์, ลินุกซ์มีชื่อเสียงในด้านของความเสถียรและเป็นแพลตฟอร์มที่น่าเชื่อถือ, มันถูกใช้ทำฐานข้อมูลและให้บริการทางการค้าสำหรับบริษัทอย่าง Amazon, ซึ่งเป็นร้านหนังสือออนไลน์ที่มีชื่อเสียง, US Post Office, กองทัพเยอรมันและอื่นๆ. โดยเฉพาะผู้ให้บริการอินเตอร์เน็ตนิยมใช้ลินุกซ์เป็นไฟร์วอลมากขึ้น, proxy และเว็บเซิร์ฟเวอร์, และคุณจะพบลินุกซ์ได้ในเครื่องของผู้ดูแลระบบยูนิกซ์ทุกคนที่ใช้ในการจัดการ ระบบยูนิกซ์. ลินุกซ์คลัสเตอร์ยังถูกใช้งานการสร้างภาพยนตร์อย่างเรื่อง "ไททานิค", "เชร็ค" และเรื่องอื่นๆอีกมากมาย. ในงานไปรษณีย์, ลีนุกซ์เป็นศูนย์กลางที่ส่งผ่านจดหมายต่างๆและในเซิร์ชเอนจิ้นขนาดใหญ่, ลินุกซ์คลัสเตอร์ก็ถูกใช้ในการค้นหาข้อมูลในอินเตอร์เน็ต. นี่เป็นเพียงตัวอย่างเพียงน้อยนิดของงานใหญ่ๆที่ถูกสร้างโดยลินุกซ์ในทั่ว โลก

จะเป็นการดีมากที่ลินุกซ์จะไม่ใช้แค่เพียงระบบในสำนักงาน, เซิร์ฟเวอร์ระดับกลางและระดับสูง, แต่ยังใช้งานเป็น"อุปกรณ์ขนาดเล็ก" ได้เหมือน คอมพิวเตอร์พกพา, มือถือ, คอมพิวเตอร์ที่ทำงานเฉพาะทาง embedded application และแม้แต่บนนาฬิกาข้อมือ. สิ่งเหล่านี้ทำให้ลินุกซ์เป็นเพียงระบบปฏิบัติการเดียวในโลกที่ครอบคลุม ฮาร์ดแวร์ที่หลากหลาย.

1.2. The user interface

1.2.  ส่วนติดต่อกับผู้ใช้

1.2.1. ลินุกซ์ใช้ยากหรือเปล่า?

การเรียนรู้ลินุกซ์อาจเป็นเรื่องยากกับคนใช้งานมือใหม่. ผู้ใช้ที่คุ้นเคยกับระบบยูนิกซ์จะตอบว่าไม่ยากเลย, เพราะลินุกซ์เป็นระบบปฏิบัติการที่ออกแบบมาเพื่อผู้ใช้งานระดับสูงและนัก เขียนโปรแกรม, และกำลังพัฒนาให้ใช้ง่ายสำหรับทุกคน.

ลินุกซ์เป็นสิ่งที่นักพัฒนาโปรแกรมไฝ่ฝันถึง: คอมไพเลอร์, ไลบรารี่, เครื่องมือพัฒนาและเครื่องมือในการตรวจหาข้อผิดพลาดของโปรแกรม. ชุดโปรแกรมเหล่านี้จะมีมากับชุดโปรแกรมลีนุกซ์มาตรฐาน. คอมไพเลอร์ภาษาซีมีให้ใช้ฟรี - ในขณะที่ระบบยูกนิกซ์อื่นๆอาจต้องจ่ายเงินเพื่อใช้งาน. เอกสารและคู่มือสามารถหาได้, พร้อมตัวอย่างที่ใช้บ่อย เพื่อให้คุณเริ่มต้นใช้งานได้ในเวลาอันรวดเร็ว. ผู้ใช้จะรู้สึกว่ายูนิกซ์กับลินุกซ์มีความคล้ายคลึงกันแทบแยกไม่ออก.

ในการใช้งานลีนุกซ์, ถ้าคุณเคยใช้ยูนิกซ์มาก่อนจะสามารถเข้าใจลีนุกซ์ได้ไม่ยาก. หลักการพื้นฐานคือ "อ่านคู่มือคำสั่งก่อน". คู่มือคำสั่งนี้จะมีมากับระบบ, ส่วนหนังสืออ่านประกอบการใช้งานจะหาได้ยาก, และคำอธิบายส่วนมากจะเป็นศัพท์เทคนิค ทำให้ผู้ใช้ลึนุกซ์มือใหม่อาจถอดใจไม่อยากเรียนรู้ระบบ.

ชุมชนผู้ใช้งานลีนุกซ์เห็นถึงความสำคัญที่จะสนับสนุนให้มีการใช้งาน ลีนุกซ์ให้เป็นไปอย่างแพร่หลาย, และทำให้ผู้ใช้เข้าใจในระบบลีนุกซ์มากขึ้น.จำเป็นที่จะต้องให้ความรู้ในการ เข้าใจระบบ.

1.2.2. การใช้ลีนุกซ์สำหรับผู้ใช้มือใหม่

บริษัทที่ส่งเสริมให้มีการใช้งานลีนุกซ์เช่น RedHat, SuSE และ Mandriva ได้ริเริ่ม, จัดทำชุดโปรแกรมลีนุกซ์ที่เหมาะในการใช้งานสำหรับทุกคน. โดยการนำโปรแกรมติดต่อกับผู้ใช้แบบกราฟฟิกเป็นจุดหลัก, โปรแกรมนี้พัฒนาโดยชุมชนนักพัฒนาลินุกซ์, เพื่อให้การจัดการโปรแกรมและเซอร์วิสของระบบทำได้ง่าย. ทำให้ผู้ใช้ลีนุกซ์ทุกวันนี้ เรียนรู้เพื่อใช้งานได้อย่างมีประสิทธิภาพ โดยไม่จำเป็นต้องรู้รายละเอียดในการสร้างระบบที่บางครั้งคุณอาจต้องการ ดัดแปลงระบบให้ได้ตามที่คุณต้องการ.

ทุกวันนี้คุณสามารถล็อกอินผ่านระบบกราฟฟิกและเรียกใช้โปรแกรมแอพพลิเค ชั่นที่ต้องการได้โดยไม่ต้องพิมพ์อักษรซักตัวเดียว, และยังสามารถเข้าถึงโครงสร้างของระบบได้อีกด้วย. ด้วยโครงสร้างที่ยึดหยุ่นของลีนุกซ์, ทำให้ผู้ใช้สามารถเข้าถึงระบบได้ง่าย: มีผลดีต่อผู้ใช้มือใหม่และมือเก่า. ผู้ใช้มือใหม่สามารถเข้าใช้ระบบได้ง่าย, ในขณะที่ผู้ใช้ที่ชำนาญแล้วไม่ถูกบังคับให้ต้องทำงานซ้ำเหมือนตอนที่ เรียนรู้ลีนุกซ์ใหม่ๆ.

ขณะที่มีการพัฒนาอย่างต่อเนื่อง, การใช้งานของผู้ใช้คอมพิวเตอร์ตั้งโต๊ะได้พัฒนาขึ้นมาก, โดยเฉพาะส่วนที่แสดงข้อมูลระบบ. นักพัฒนาโปรแกรมได้พยายามสร้างส่วนติดต่อกับผู้ใช้ให้มีความสวยงามน่าใช้ไม่ แพ้เครื่องที่ใช้ไมโครซอฟท์วินโดว์และแอปเปิล. การพัฒนาในรุ่นล่าสุดมีรองรับการเร่งความเร็วแสดงผลแบบสามมิติและอุปกรณ์ USB , การปรับปรุงชุดโปรแกรมระบบสามารถทำได้โดยคลิกเม้าส์เพียงครั้งเดียว, และอื่นๆ. ระบบลีนุกซ์มีความสามารถทำได้, และสื่อให้ผู้ใช้เข้าใจระบบมากขึ้นโดยผ่านโปรแกรมกราฟฟิก. ตัวอย่างข้างล่างเป็นส่วนหนึ่งของการพัฒนาโปรแกรมบนลีนุกซ์เพื่อจุดประสงค์ ดังกล่าว:

1.3. Does Linux have a future?

1.3. ทิศทางของลีนุกซ์

1.3.1. เปิดเผยซอร์สโค้ด

แนวคิดของซอฟแวร์แบบเปิดเผยซอร์สโค้ดง่ายมาก: เมื่อโปรแกรมเมอร์สามารถอ่าน, ส่งต่อ และเปลี่ยนแปลงโค้ด,  โค้ดนั้นจะถูกปรับปรุง. ทุกคนสามารถดัดแปลง, แก้ไข, ตรวจสอบ, และสามารถทำทุกอย่างได้เหมือนกับที่ทำในบริษัทผู้พัฒนาซอฟแวร์ทั่วไป. การที่เปิดเผยซอร์สโค้ดจะทำให้ซอฟแวร์มีความยึดหยุ่นและมีคุณภาพสูงกว่าซอ ฟแวร์ที่พัฒนาโดยเฉพาะในกลุ่ม, เพราะมีคนทดสอบจำนวนมากทำให้มีเงื่อนไขการทดสอบที่หลากหลายกว่าการพัฒนาแบบ ระบบปิด.

กลุ่มผู้ริเริ่มโครงการเปิดเผยซอร์สโค้ดได้พยายามเผยแพร่แนวคิดนี้ไปยัง กลุ่มบริษัทซอฟแวร์ที่ผลิตโปรแกรมในเชิงพาณิชย์, และกว่าที่จะได้รับการยอมรับก็กินเวลานาน. บริษัทซอฟแวร์เชิงพาณิชย์เริ่มมองเห็นลู่ทางการทำกำไรจากโครงการเปิดเผย ซอร์สโค้ดว่าจำเป็นต้องใช้โปรแกรมแอพพลิเคชั่นบนอินเตอร์เนท.  ปัจจุบันลีนุกซ์เป็นที่ยอมรับแล้วว่าไม่ได้เป็นซอฟแวร์ที่ใช้งานได้เฉพาะ ผู้เชี่ยวชาญ หรือมีความรู้ทางเทคนิคเท่านั้น. แต่ลีนุกซ์ให้ได้มากกว่าความเป็นระบบปฏิบัติการ: คือมีโครงสร้างที่รองรับการพัฒนาระบบปฏิบัติการ, รองรับการสร้างและทดสอบโปรแกรม, เพื่อรองรับความต้องการของผู้ใช้, เพื่อการปรับปรุงให้ดีขึ้น, การปรับเปลี่ยนให้ทันสมัยและตรงตามความต้องการของผู้ใช้, เป็นต้น. ทุกวันนี้ลีนุกซ์มีความพร้อมสำหรับการเปลี่ยนแปลงในอนาคต.

1.3.2. ประสบการณ์ในการใช้งานกว่าสิบปี

ในขณะที่ลีนุกซ์เป็นที่รู้จักแพร่หลายในชื่อโครงการเปิดเผยซอร์สโค้ด, ยังมืโครงการที่มีส่วนช่วยเสริมให้ระบบลีนุกซ์เป็นที่รู้จักอย่างกว้างขวาง. โครงการนี้ชื่อว่าโครงการ SAMBA, ซึ่งเป็นผลจากการทำ reverse engineering ของ SMB/CIFS (Server Message Block/Common Internet File System) protocol ที่ใช้ในการแชร์ไฟล์และพริ้นเตอร์บนเครื่องพีซี, ซึ่งปกติจะใช้กับไมโครซอฟท์วินโดว์ NT กับระบบปฏิบัติการ OS/2, และระบบลีนุกซ์. ชุดโปรแกรมนี้จะมีในแทบทุกระบบเพื่อให้สามารถติดต่อกับระบบอื่นได้ด้วยการ ใช้ไมโครซอฟท์วินโดว์โพรโตคอล: เพื่อรองรับไฟล์และเครื่องพิมพ์บนระบบปฏิบัติการตระกูลวินโดว์(รวมถึง วินโดว์ XP)

ยังมีอีกโครงการที่ประสบความสำเร็จยิ่งกว่าโครงการ SAMBA อีกนั่นคือโครงการ Apache HTTP server. ทำงานเป็นเซิฟเวอร์บนระบบยูนิกซ์, วินโดว์ NT และระบบปฏิบัติการอื่นๆอีกหลายตัว. แรกเริ่มรู้จักกันในชื่อ "A PAtCHy server", เนื่องจากโค้ดสร้างขึ้นจากการรวม "patch file" หลายๆตัวเข้าด้วยกัน, พอดีชื่อไปคล้องจองกับชื่อชนพื้นเมืองในอเมริกา, เลยได้ชื่อเป็นโครงการ Apache ซึ่งเป็นโปรแกรมที่ทำงานได้เร็ว, มีความเสถียร และมีความสามารถมากกว่าโปรแกรมเว็บเซิฟเวอร์อื่น. โปรแกรม Apache ใช้ในเซิฟเวอร์ที่รองรับผู้ใช้นับล้านคนในแต่ละวัน, ในขณะที่ตัวโครงการเองไม่มีการซัพพอร์ทอย่างเป็นทางการจากนักพัฒนา, จะมีเพียงชุมชนผู้ใช้งาน Apache ที่คอยตอบคำถาม. ปัจจุบันเริ่มมีการซัพพอร์ทจากผู้ให้บริการบ้างแล้ว.

ในส่วนของโปรแกรมที่ใช้งานในออฟฟิส, มีโปรแกรมที่ลอกแบบจากโปรแกรมไมโครซอฟท์ออฟฟิสให้ใช้, และสามารถใช้งานแอพพลิเคชั่นที่ใช้กับไมโครซอฟท์วินโดว์ได้เป็นส่วนมาก. นี่เป็นสาเหตุหนึ่งที่ลีนุกซ์ได้รับการยอมรับในการใช้งานกับเครื่อง คอมพิวเตอร์ตั้งโต๊ะ, เนื่องจากผู้ใช้ส่วนใหญ่ไม่ต้องการเรียนรู้กับระบบใหม่. การทำงานกับเครื่องเดสท็อปที่มีความต้องการหลากหลายในแต่ละวันก็มากพออยู่ แล้ว.

ชุมชนโอเพ่นซอร์ส, ประกอบด้วยคนจำนวนมากที่ร่วมก้นพัฒนาอย่างยาวนานกว่าทศวรรษ, ทำให้ลีนุกซ์เป็นผู้เล่นสำคัญของตลาดคอมพิวเตอร์ตั้งโต๊ะ เหมือนเป็นโปรแกรมใช้งานทั่วไป. นักพัฒนาทั้งที่เป็นมืออาชิพและอาสาสมัครทำงานกันอย่างขันแข็งทำให้ลีนุกซ์ สามารถรักษาส่วนแบ่งในตลาดได้. ยิ่งมีผู้ใช้มาก, ก็ยิ่งมีคำถามมาก. ชุมชนโอเพ่นซอร์สจะให้คำตอบแก่ทุกคำถามและตรวจสอบคำตอบแต่ละข้ออย่าง ระมัดระวัง, ทำให้โปรแกรมมีความเสถียรและแพร่หลายมากยิ่งขึ้น.

ซอฟแวร์ที่ใช้กับลีนุกซ์มีมากมายนับหมื่นโปรแกรม. ในหนังสือเล่มนี้ เราจะพูดถึงเฉพาะโปรแกรมที่ใช้งานทั่วไป, ซึ่งสามารถหามาใช้งานได้ฟรี. เพื่อให้ผู้ใช้งานไม่รู้สึกกลัวที่จะเริ่มใช้มัน, หน้าจอโปรแกรมข้างล่างเป็นหนึ่งในโปรแกรมผู้ใช้ต้องการมากที่สุด.

Figure 1-1. OpenOffice MS-compatible Spreadsheet

1.4. Properties of Linux

1.4. คุณสมบัติของลีนุกซ์

1.4.1. จุดเด่นของลีนุกซ์

จุดเด่นของลีนุกซ์มีมากมาย, เช่นเดียวกับระบบยูนิกซ์, ยกเว้นข้อแรก:

  •  ลีนุกซ์สามารถใช้ได้ฟรี

     คุณไม่จำเป็นต้องจ่ายเงินซื้อซีดี. ลีนุกซ์สามารถดาวน์โหลดจากอินเตอร์เนทได้ฟรี. ไม่มีค่าลงทะเบียน, ไม่มีค่าใช้จ่ายต่อ user, อัพเดทได้ฟรี, และยังมีซอร์สโค้ดให้ไปศึกษาได้ฟรีอีก ในกรณีที่คุณอยากปรับเปลี่ยนระบบของคุณ.

    ลิขสิทธิ์ส่วนใหญ่ลีนุกซ์จะใช้ GNU Public License (GPL). ที่อนุญาตให้ทุกคนสามารถแก้ไขดัดแปลง หรือแม้กระทั่งแจกจ่ายโปรแกรมที่แก้ไขแล้ว, โดยมีเงื่อนไขเพียงหนึ่งข้อ คือต้องเปิดเผยโค้ดหลังจากทำการแก้ไข. หมายความว่า, คุณมีสิทธิ์ที่จะนำเคอร์เนลอิมเมจ, และเพิ่มเติมส่วนที่คุณต้องการแล้วนำออกจำหน่ายเป็นโค้ดใหม่, ตราบใดที่ลูกค้าของคุณสามารถเข้าถึงโค้ดนั้นได้.

  •  ลีนุกซ์สามารถใช้งานได้กับอุปกรณ์ฮาร์ดแวร์หลากหลาย

     ผู้ผลิตที่ต้องการขายคอมพิวเตอร์รุ่นใหม่และยังไม่รู้ว่าจะใช้ระบบ ปฏิบัติการใดสำหรับเครื่อง, สามารถนำลีนุกซ์เคอร์เนลไปทดลองใช้กับเครื่องของเขา, เพราะคู่มือที่เกี่ยวกับเคอร์เนลของลีนุกซ์สามารถหาได้ฟรี.

  •  ลีนุกซ์ถูกออกแบบให้ทำงานอย่างต่อเนื่อง

     เหมือนกับระบบยูนิกซ์, ลีนุกซ์ถูกออกแบบให้ทำงานต่อเนื่องโดยไม่มีการ รีบูท. เป็นเหตุผลหนึ่งที่มี task จำนวนมากถูกสั่งให้ทำงานช่วงกลางคืน หรือถูกตั้งให้ทำงานอัตฺโนมัติในช่วงที่งานเบา, ทำให้การใช้งานระบบรองรับงานในช่วงที่มีการใช้งานหนักและเป็นการใช้งาน ฮาร์ดแวร์อย่างมีประสิทธิภาพ. คุณสมบัตินี้สามารถนำไปใช้ในสภาวะที่ผู้ใช้ไม่อยู่หน้าเครื่องทั้งวันทั้ง คืน.

  •  ลึนุกซ์ใช้งานได้อย่างยืดหยุ่นและปลอดภัย

     ความปลอดภัยในการใช้งานลีนุกซ์ถอดแบบมาจากระบบยูนิกซ์, ซึ่งเป็นที่รู้กันดีว่ามีความปลอดภัยสูง. ไม่เพียงเหมาะสำหรับใช้กันการบุกรุกจากอินเตอร์เนท: มันสามารถปรับเปลี่ยนไปใช้ในสถานะอื่น, ด้วยความสามารถด้านความปลอดภัยแบบเดียวกัน. เครื่องที่คุณพัฒนาหรือเครื่องที่ใช้งานจะมีความปลอดภัยในการใช้งานเหมือน กับเครื่องไฟร์วอลล์ของคุณเอง.

  •  ลีนุกซ์มีให้ใช้หลายระดับ

     จากเครื่องคอมพิวเตอร์พกพาที่มีหน่วยความจำ 2 เมกกะไบท์ไปจนถึงเครื่องคอมพิวเตอร์ในระบบเครือข่ายที่มีความจุข้อมูลหลาย ล้านเม็กกะไบท์ที่ประกอบจากโหนดหลายร้อยโหนด: ลีนุกซ์สามารถรองรับการเพิ่มหรือถอดชุดโปรแกรมบนเครื่องเหล่านี้. คุณไม่จำเป็นต้องใช้ซุปเปอร์คอมพิวเตอร์อีกต่อไป, เนื่องจากคุณสามารถใช้ลีนุกซ์ในการทำสิ่งที่ต้องการโดยใช้ building block ที่มีมากับระบบ. ถ้าคุณอยากทำงานเล็กๆ, เช่นการสร้างระบบปฏิบัติการสำหรับงานควบคุมเฉพาะงาน หรืออยากนำเครื่องคอมพิวเตอร์เก่าเช่นเครื่องคอมพิวเตอร์รุ่น 486 นำกลับมาใช้งาน, ลีนุกซ์สามารถใช้งานได้เช่นกัน.

  •  ระบบปฏิบัติการลีนุกซ์และแอพพลิเคชั่นบนลีนุกซ์ส่วนใหญ่จะมีช่วงการพัฒนาสั้นมาก.

    เนื่องจากลีนุกซ์ถูกพัฒนาและทดสอบโดยคนจำนวนมาก, ทำให้ตรวจพบข้อผิดพลาดและทำการแก้ไขได้เร็ว. บางทีใช้เวลาไม่กี่ชั่วโมงในการแก้ไขข้อผิดพลาด.

1.4.2. ข้อด้อยของลีนุกซ์

  •  มีลีนุกซ์หลากหลายสายพันธุ์เกินไป

    . มากคน ก็ มากความ. เริ่มจะใช้งานก็มีให้เลือกเยอะแยะ. แต่ก็มีข้อดีที่แต่ละคนจะเลือกให้ตรงตามความต้องการ. คุณไม่จำเป็นต้องลองทุกตัว.

     เมื่อถูกถามว่าชอบรุ่นใหน, ผู้ใช้ลีนุกซ์ทุกคนจะพูดว่ารุ่นที่เขาใช้อยู่นั้นดีที่สุด. แล้วรุ่นใหนล่ะที่คุณจะเลือกใช้? ไม่ต้องกังวลกับเรื่องนี้จนเกินไป: ทุกร่นแตกต่างกันเพียงมีชุดโปรแกรมพื้นฐานมากน้อยต่างกัน. โดยมีโปรแกรมพิเศษของบริษัทผู้ผลิตเป็นตัวกำหนด, ตัวอย่างเช่น, TurboLinux เหมาะใช้งานกับองค์กรขนาดเล็กและกลาง, RedHat เหมาะสำหรับเครื่องเซิฟเวอร์และ SuSE เหมาะสำหรับเครื่องเวิร์คสเตชั่น. อย่างไรก็ตาม, ความแตกต่างกันมีเพียงผิวเผิน. วิธีที่ดีที่สุดคือทดลองหลายๆรุ่น, แต่ไม่ใช่ทุกคนที่มีเวลาทำเช่นนี้. โชคยังดีที่เรามีผู้เชี่ยวชาญที่คอยแนะนำให้เลือกใช้งานลีนุกซ์. เพียงคุณพิมพ์ข้อความ "choosing your distribution" แล้วให้ Google หาคำตอบ, คุณจะพบข้อมูลคำแนะนำ. คู่มือการติดตั้ง เป็นอีกแห่งที่ให้ข้อมูลการเลือกใช้ลีนุกซ์

  •  ลีนุกซ์ดูไม่น่าใช้และทำให้ผู้ใช้สับสน:

     พูดได้ว่าลีนุกซ์, โดยเฉพาะคอร์ซิสเต็ม, ไม่น่าใช้เหมือนไมโครซอฟท์วินโดว์ และเข้าใจยากกว่า MacOS, แต่... จากจำนวนผู้ใช้ที่เริ่มเติบโตมากขึ้น, ได้มีความพยายามที่จะทำลีนุกซ์ให้ใช้งานง่าย, เฉพาะอย่างยิ่งสำหรับผู้ใช้มือใหม่, มีความพยายามทำเอกสารคู่มือลีนุกซ์อย่างต่อเนื่อง, ดังเช่นหนังสือเล่มนี้,  เพื่อเติมเต็มข้อมูลให้แก่ผู้ใช้ทุกระดับ.

  •  โครงการโอเพ่นซอร์สเชื่อถือได้แค่ใหน?

     ของฟรีจะเชื่อถือได้แค่ใหน? ผู้ใช้ลีนุกซ์มีทางเลือกว่าจะใช้ลีนุกซ์หรือไม่, นี่เป็นประโยชน์มหาศาลเทียบกับผู้ใช้ซอฟแวร์ที่ผูกขาด, ซึ่งไม่มีทางเลือก. หลังจากที่ทดลองใช้ระยะหนึ่ง, ผู้ใช้ลีนุกซ์ส่วนมากสรุปได้ว่าลีนุกซ์ไม่เพียงใช้งานได้, แต่ในบางกรณีทั้งเร็วและดีกว่าที่เคยใช้ซอฟแวร์ผูกขาด. ถ้าลีนุกซ์ไม่น่าเชื่อถือ, มันจะไม่อยู่ในตลาดได้นานขนาดนี้, จำนวนผู้ใช้นับล้านรายที่ใช้. สามารถแนะนำข้อด้อยและข้อควรปรับปรุงแก่ชุมชนผู้ใช้งาน, ทำให้ระบบมีความแข็งแกร่งขึ้นทุกวัน. โครงการลีนุกซ์เป็นโครงการต่อเนื่องไม่มีวันสิ้นสุด, นี่เป็นความจริง, แต่ในสถานะการณ์ที่มีการเปลี่ยนแปลงบ่อย, ลีนุกซ์เป็นโครงการหนึ่งที่ดำเนินอย่างต่อเนื่องที่มีความพยายามทำให้มัน สมบูรณ์แบบที่สุด.

1.5. Linux Flavors

1.5. การปรับแต่งลีนุกซ์

1.5.1. Linux and GNU

 แม้ว่าจะมีลีนุกซ์หลากหลายสายพันธุ์ในตลาด, คุณจะพบว่ามีบางส่วนที่เหมือนกัน, เนื่องจากระบบลีนุกซ์สร้างจากส่วนประกอบต่างๆที่คุณสามารถปรับแต่งให้ตรงตาม ความต้องการได้. การติดตั้งระบบเป็นเพียงจุดเริ่มต้นของการเข้าสู่ชุมชนผู้ใช้ลีนุกซ์. เพียงคุณรู้สึกว่าคุณมีระบบที่ดี, ลีนุกซ์จะปลุกจินตนาการและความคิดสร้างสรรค์ของคุณให้เจิดจ้า, และคุณจะสัมผัสพลังของระบบที่มีให้คุณ, เพื่อให้คุณเสาะหาขีดจำกัดของมัน.

 หน้าตาของลีนุกซ์อาจแตกต่างกันตามสายพันธุ์, ตามเครื่องที่ใช้และตามรสนิยมของแต่ละคน, แต่พื้นฐานของระบบกราฟฟิกและการติดต่อกับผู้ใช้, ยังคงเหมือนกัน. ระบบลีนุกซ์เป็นระบบที่ออกแบบจากเครื่องมือในโครงการ GNU (Gnu's Not UNIX), ซึ่งมีชุดพัฒนามาตรฐานสำหรับใช้พัฒนาระบบ. เครื่องมือทุกตัวของโครงการ GNU เป็นโอเพ่นซอร์สทั้งสิ้น. ทำให้สามารถติดตั้งได้กับทุกระบบ. ซอฟแวร์ลีนุกซ์ส่วนมากจะมีชุดโปรแกรมพัฒนาที่ผ่านการคอมไฟล์แล้วมาให้, เช่นชุดโปรแกรม RPM สำหรับลีนุกซ์ RedHat และชุดโปรแกรม deb หรือ dpkg สำหรับเดเบียนลีนุกซ์, ดังนั้นคุณไม่จำเป็นต้องเป็นมีความรู้ในเรื่องการเขียนโปรแกรมคุณก็สามารถ ติดตั้งชุดโปรแกรมต่างๆบนระบบของคุณได้. อย่างไรก็ตาม, ถ้าคุณอยากสร้างระบบด้วยตัวคุณเอง, คุณจะพบว่าลีนุกซ์มีความพร้อม, เนื่องจากสายพันธุ์ลีนุกซ์ส่วนมากจะมีชุดเครื่องมือพัฒนาโปรแกรมให้ด้วย, คุณสามารถติดตั้งซอฟแวร์ใหม่จากซอร์สโค้ดได้. ในกรณีที่ไม่มีชุดโปรแกรมในระบบ.

 รายการของโปรแกรมในโครงการ GNU

  • Bash: The GNU shell

  • GCC: The GNU C Compiler

  • GDB: The GNU Debugger

  • Coreutils: a set of basic UNIX-style utilities, such as ls, cat and chmod

  • Findutils: to search and find files

  • Fontutils: to convert fonts from one format to another or make new fonts

  • The Gimp: GNU Image Manipulation Program

  • Gnome: the GNU desktop environment

  • Emacs: a very powerful editor

  • Ghostscript and Ghostview: interpreter and graphical frontend for PostScript files.

  • GNU Photo: software for interaction with digital cameras

  • Octave: a programming language, primarily intended to perform numerical computations and image processing.

  • GNU SQL: relational database system

  • Radius: a remote authentication and accounting server

  • ...

 มีซอฟแวร์เชิงพาณิชย์มากมายที่ใช้งานบนลีนุกซ์, และรายละเอียดของซอฟแวร์เหล่านี้จะหาได้ในคู่มือซอฟแวร์ที่มากับซอ ฟแวร์นั้นๆ. ในหนังสือเล่มนี้เราจะพูดถึงซอฟแวร์ที่ใช้งานได้ฟรี, ซึ่งส่วนมากจะเผยแพร่ด้วยสัญญาลิขสิทธิ์ของ GNU.

. ในการติดตั้งชุดโปรแกรมที่ตกหล่นหรือติดตั้งใหม่, คุณอาจต้องมีซอฟแวร์จัดการ. ซึ่งส่วนมากแล้วจะอยู่ในแบบ RPM และ dpkg. ตัวจัดการซอฟแวร์ของ RedHat จะใช้ RPM, ซึ่งใช้งานแพร่หลายในระบบลีนุกซ์, แม้ว่าชื่ออาจไม่สื่อกับรุ่นที่ติดตั้งก็ตาม. ส่วนลีนุกซ์เดเบียนจะใช้ dpkg เป็นซอฟแวร์จัดการ, ซึ่งผู้ใช้เรียกใช้ผ่านคำสั่ง apt-get , ซึ่งสามารถใช้จัดการชุดโปรแกรม RPM ได้เหมือนกัน. สำหรับโปรแกรมกราฟฟิกที่ใช้จัดการซอฟแวร์ RPM บริษัทที่พัฒนาโปรแกรมได้แก่ Novell Ximian Red Carpet. ผู้สร้างซอฟแวร์ลีนุกซ์รายอื่นอาจมีโปรแกรมติดตั้งซอฟแวร์ของตนเอง, เพื่อใช้ติดตั้งส่วนต่างๆของโปรแกรมระบบ, ตามแบบที่นิยมใช้เหมือนการติดตั้งซอฟแวร์ของไมโครซอฟวินโดว์. ถ้าคุณเป็นนักทดลองเล่นลีนุกซ์, คุณจะได้เจอซอฟแวร์เหล่านี้ในหลากสไตล์หลายรูปแบบ.

1.5.2. GNU/Linux

 ลีนุกซ์เคอร์เนล(แก่นหรือกระดูกของระบบ, ดู หัวข้อ 3.2.3.1) ไม่ใช่ส่วนของโครงการ GNU แต่ใช้สัญญาลิขสิทธิ์เดียวกันกับซอฟแวร์ GNU. ส่วนชุดโปรแกรมสำหรับพัฒนา(ส่วนเนื้อของระบบ),  ถูกนำมาจากโครงการ GNU. เนื่องจากระบบปฏิบัติการจะต้องมีทั้งเคอร์เนลและเครื่องมือในการพัฒนาเป็น อย่างน้อย, บางคนจึงนิยมที่จะเรียกระบบลีนุกซ์ว่า GNU/Linux system.

 ในหนังสือเล่มนี้. ถ้าเราไม่ได้ระบุชื่อ GNU/Linux system, เราจะใช้ชื่อสายพันธุ์ลีนุกซ์, รุ่นหรือชื่อโปรแกรมแทน.

1.5.3. จะใช้ลีนุกซ์สายพันธุ์ใหนดี?

 ก่อนที่จะทำการติดตั้ง, องค์ประกอบที่สำคัญที่สุดคือตัวเครื่องของคุณ. เนื่องจากลีนุกซ์ทุกสายพันธุ์มีชุดโปรแกรมพื้นฐานและสามารถปรับแต่งให้เข้า กับความต้องการของคุณ(เนื่องจากใช้เคอร์เนลเดียวกัน), คุณเพียงหาข้อมูลว่าเครื่องของคุณสามารถใช้กับลีนุกซ์ได้หรือไม่. ตัวอย่างเช่น LinuxPPC ถูกสร้างเพื่อให้ใช้งานบนเครื่องแอปเปิลและเครื่อง PowerPC และไม่สามารถใช้งานบนเครื่องคอมพิวเตอร์ตระกูล x86 ทั่วไปได้. LinuxPPC ใช้ได้กับเครื่อง Macs รุ่นใหม่, แต่บางทีเครื่องแมครุ่นเก่าก็อาจใช้กับลีนุกซ์นี้ไม่ได้เนื่องจากระบบบัสที่ ล้าสมัย. ตัวอย่างในเรื่องนี้เช่นกับเครื่อง Sun, ซึ่งมีทั้งรุ่นเก่าที่ใช้ SPARC CPU และรุ่นใหม่ที่ใช้ UltraSparc, ทั้งสองเครื่องใช้ซอฟแวร์ลีนุกซ์รุ่นเดียวกันไม่ได้.

 ลีนุกซ์บางตัวถูกออกแบบเพื่อทำงานได้ดีกับชิพเฉพาะเบอร์, เช่น Athlon CPUs, แต่ก็ยังสามารถใช้งานกับ CPU 486, 586 และ 686 ของอินเทล. บางตัวก็ทำมาเฉพาะงานและไม่เสถียร, เนื่องจากมีการทดสอบจากคนไม่กี่คน.

 ลีนุกซ์ส่วนใหญ่จะมีโปรแกรมสำหรับใช้กับเครื่องคอมพิวเตอร์ส่วน บุคคลหรือที่เรียกว่าเครื่องพีซีที่ใช้ CPU ตระกูล X86 ของบริษัทอินเทล. ลีนุกซ์สายพันธุ์เหล่านี้จะถูกทดสอบและปรับปรุงเป็นอย่างดี, โดยเน้นให้ระบบมีความเสถียรและติดตั้งรวมถึงอัพเกรดง่าย. ตัวอย่างได้แก่ Debian, Ubuntu, Fefora, SuSE และ Mandriva, ซึ่งเป็นลีนุกซ์ที่นิยมใช้กันมากและเหมาะสำหรับผู้ใช้มือใหม่, แต่ก็ไม่ได้ห้ามสำหรับมือโปร. ลีนุกซ์สามารถใช้งานกับแลปท็อปและเครื่องเซิฟเวอร์ได้ด้วย. มีการเพิ่มไดรเวอร์สำหรับฮาร์ดแวร์ใหม่หลังจากผ่านการทดสอบเรียบร้อยแล้ว, ทำให้ระบบมีความเสถียรมากขึ้น.

 สำหรับการใช้งานทั่วไปของเครื่องตั้งโต๊ะจะใช้โปรแกรมกราฟฟิก Gnome หรือ KDE. ซึ่งทั้งสองตัวจะมีมากับลีนุกซ์สายพันธุ์ที่ได้รับความนิยมในตลาด. นอกจากนี้แล้วก็มีโปรแกรมจัดการหน้าจออื่นให้เลือกใช้สำหรับผู้ใช้งานที่ ต้องการศึกษาระบบ.

 วิธีการติดตั้งแบบมาตรฐานจะมีตัวเลือกให้ผู้ใช้เลือกติดตั้ง ระหว่างการติดตั้ง, เช่นติดตั้งเพื่อใช้กับเครื่องคอมพิวเตอร์ตั้งโต๊ะ, โปรแกรมที่จำเป็นต้องใช้ประจำวันและโปรแกรมสำหรับพัฒนาระบบจะถูกติดตั้ง, หรือติดตั้งเพื่อใช้กับเครื่องเซิฟเวอร์, โปรแกรมสำหรับใช้งานกับเครือข่ายต่างๆจะถูกนำมาให้เลือก. ผู้ใช้ที่มีประสบการณ์สามารถติดตั้งชุดโปรแกรมที่ต้องการในตอนติดตั้งระบบ นี้.

 จุดมุ่งหมายของหนังสือนี้เพื่อให้ใช้งานกับลีนุกซ์ทุกสายพันธุ์. เพื่อให้ง่าย, เราแนะนำว่าคุณควรเริ่มจากสายพันธุ์ที่เป็นที่นิยมในท้องตลาด, ที่รองรับฮาร์ดแวร์ทั่วไป. ตัวเลือกต่อไปนี้เหมาะสำหรับผู้เริ่มใช้ลีนุกซ์:

 ไฟล์ ISO-images สามารถดาวน์โหลดได้จาก LinuxISO.org ซีดีติดตั้งลีนุกซ์สายพันธุ์ที่เป็นที่นิยมสามารถหาซื้อได้จากแหล่งจำหน่ายซอฟแวร์ซีดีทั่วไป.

1.6. Summary

1.6. บทสรุป

 ในบทนี้เราได้เรียนรู้:

  •  ลีนุกซ์พัฒนาต่อยอดจาก UNIX

  •  ระบบปฏิบัติการลีนุกซ์เขียนขึ้นจากโปรแกรมภาษาซี

  • "De gustibus et coloribus non disputandum est": there's a Linux for everyone.

  •  ลีนุกซ์ใช้เครื่องมือจากโครงการ GNU, ซึ่งเป็นเครื่องมือในการสร้างระบบปฏิบัติการที่แจกจ่ายฟรี.

1.7. Exercises

1.7. แบบฝึกหัด

แบบฝึกหัดสำหรับผู้เริ่มต้น: ติดตั้งลีนุกซ์บนเครื่องพีซีของคุณ. อ่านคู่มือการติดตั้งสำหรับลีนุกซ์สายพันธ์ที่คุณเลือกใช้ และ/หรือ วิธีการติดตั้ง และลงมือติดตั้ง.

Note  อ่านคู่มือติดตั้ง!
 

ข้อผิดพลาดส่วนมากเกิดจากการไม่สนใจอ่านข้อมูลในระหว่างการติดตั้ง. อ่านข้อความการติดตั้งอย่างระมัดระวังเป็นก้าวแรกของการประสบผลสำเร็จในการ ใช้งาน.

 สิ่งที่คุณจะต้องรู้ก่อนที่จะเริ่มติดตั้งลีนุกซ์:

  •  ลีนุกซ์สายพันธ์นี้สามารถรันได้กับเครื่องของคุณหรือไม่?

     ตรวจสอบที่ http://www.tldp.org/HOWTO/Hardware-HOWTO/index.html เมื่อสงสัยเรื่องฮาร์ดแวร์ที่สามารถใช้งานกับลีนุกซ์.

  •  ชนิดของคีย์บอร์ดที่คุณมี (จำนวนคีย์, การวางปุ่มกด)? ชนิดของเม้าส์ (serial/ps2, จำนวนปุ่ม)? จำนวน MB ของ RAM? (ขนาดของ RAM มีหน่วยเป็นเมกกาไบท์)

  •  คุณจะติดตั้งเป็นเครื่องเวิร์คสเตชั่นสำหรับใช้งานทั่วไปหรือติดตั้งเป็น เซิฟเวอร์, หรือคุณต้องการเลือกชุดโปรแกรมเอง?

  •  คุณจะติดตั้งจากฮาร์ดดิสก์ของคุณ, จากซีดีรอม, หรือติดตั้งจากเครือข่าย? และควรปรับแต่งไบออสสำหรับการติดตั้งหรือไม่? วิธีการติดตั้งต้องการบูทดิสก์หรือไม่?

  •  คุณต้องการให้ลีนุกซ์เป็นระบบปฏิบัติการเดียวบนเครื่องคอมพิวเตอร์ หรือไม่, หรือต้องการแบบบูทสองระบบ? คุณควรสร้างพาร์ติชั่นที่ใหญ่เพื่อติดตั้ง virtual system ภายหลังหรือไม่, หรือจะติดตั้งระบบ virtual ตอนนี้เลย?

  •  เครื่องคอมพิวเตอร์นี้เป็นเครื่องที่ใช้เครือข่ายหรือไม่, ชื่อโฮสท์คืออะไร, ไอพีแอดเดรสคืออะไร? มีเกทเวย์เซิฟเวอร์อะไร หรืออุปกรณ์เครือข่ายสำคัญอะไรที่คอมพิวเตอร์ของคุณจะติดต่อด้วย?

    Caution  ระบบลีนุกซ์ถูกออกแบบมาเพื่อต่อกับเครือข่าย
     

     การไม่ใช้เครือข่ายหรือการตั้งค่าที่ผิดพลาดอาจทำให้ระบบกินเวลาสตาร์ทอัพมาก.

  •  คอมพิวเตอร์นี้ทำงานเป็น เกทเวย์/เร้าท์เตอร์/ไฟร์วอลล์? (ไม่ต้องกังวลเกี่ยวกับคำถามนี้มากนัก, เพราะไม่ได้ใช้เป็นเกทเวย์/เร้าท์เตอร์/ไฟร์วอลล์บ่อย)

  •  พาร์ติชั่น: ให้โปรแกรมติดตั้งทำงานให้คุณในตอนนี้, เราจะพูดถึงรายละเอียดพาร์ติชั่นใน บทที่ 3. มีคู่มือระบบเกี่ยวกับเรื่องนี้ถ้าคุณต้องการจะเรียนรู้. ถ้าลีนุกซ์สายพันธ์ที่คุณเลือกใช้ไม่มีค่าดีฟ้อลท์พาร์ติชั่น, หมายถึงลีนุกซ์สายพันธ์นั้นไม่เหมาะสำหรับผู้ใช้มือใหม่.

  •  เครื่องนี้จะเริ่มทำงานในโหมดเทกซ์หรือโหมดกราฟฟิก?

  •  กำหนดรหัสผ่านที่ดีสำหรับผู้ดูแลระบบของเครื่องนี้ (root). สร้างบัญชีผู้ใช้ที่ไม่ใช่ root (คือผู้ใช้ที่ไม่สามารถเปลี่ยนแปลงแก้ไขข้อมูลระบบได้).

  •  คุณจำเป็นต้องใช้ ดิสก์กู้ข้อมูลหรือไม่? (แนะนำให้สร้างดิสก์กู้ข้อมูล)

  •  ภาษาอะไรที่คุณต้องการ?

 รายการทั้งหมดสามารถหาดูได้ที่ http://www.tldp.org/HOWTO/Installation-HOWTO/index.html.

 เนื้อหาบทถัดไปเราจะได้เรียนรู้ถ้าการติดตั้งสำเร็จเรียบร้อย.

Chapter 02. Quickstart

Chapter 02. เริ่มต้นกับลีนุกซ์

เพื่อที่จะให้หนังสือนี้มีประโยชน์ต่อผู้เริ่มต้นมากที่สุด, เราจะเริ่มด้วยบทฝึกหัดเชื่อมต่อกับระบบลีนุกซ์และทำคำสั่งพื้นฐานก่อน.

เราจะพูดถึง:

  •  การเชื่อมต่อเข้าระบบ

  •  การเลิกการเชื่อมต่อกับระบบ

  •  โหมดข้อความและโหมดกราฟฟิก

  •  การเปลี่ยนรหัสผ่านของคุณ

  •  การสำรวจระบบไฟล์

  •  การแยกแยะชนิดของไฟล์

  •  การดูข้อมูลเทกซ์ไฟล์

  •  การหาตัวช่วย

2.1. Logging in, activating the user interface and logging out

2.1. ล็อกอินเข้าระบบ, ทดลองส่วนติดต่อกับผู้ใช้ของลีนุกซ์ และล็อกเอาท์

2.1.1. Introduction

ในการทำงานโดยตรงกับระบบลีนุกซ์, คุณต้องได้รับชื่อผู้ใช้และรหัสผ่าน. คุณจำเป็นต้องระบุตัวตนในการใช้ระบบ. ดังที่เราได้เอ่ยถึงในแบบฝึกหัดของ บทที่ 1, เครื่องลีนุกซ์พีซีส่วนมากมีโหมดการใช้งานพื้นฐานสองแบบสำหรับระบบที่จะ ทำงาน: โหมดเทกซ์คอนโซลที่ทั้งเร็วและจริงจังในการใช้งาน, และโหมดกราฟฟิก, ที่สามารถรันหลายงานและหลายผู้ใช้ในเวลาเดียวกัน, ซึ่งดูดีกว่าแต่ก็กินทรัพยากรเครื่องมากกว่า.

2.1.2. Graphical mode

นี่เป็นโหมดตั้งต้นหรือดีฟ้อลท์ในเครื่องเดสก์ท้อปคอมพิวเตอร์ส่วนมาก. คุณรู้ว่าคุณจะเชื่อมต่อกับระบบด้วยโหมดกราฟฟิกเมื่อมีหน้าต่างใหม่ขึ้นมา ถามชื่อผู้ใช้, และต่อมา,อีกหน้าต่าง, พิมพ์รหัสผ่านของคุณ.

ในการล็อกอิน, แน่ใจว่าเม้าส์ชี้ไปที่หน้าต่างที่กำลังล็อกอิน, ใส่ชื่อผู้ใช้และรหัสผ่านแล้วคลิก OK หรือ กด Enter.

Warning  ระวังการใช้ root account!
 

เป็นความคิดที่ผิดที่จะใช้ root เข้าใช้โหมดกราฟฟิก, หรือใช้ชื่อผู้ดูแลระบบ, เนื่องจากการใช้กราฟฟิกมีการใช้โปรแกรมพิเศษมากมาย, และผู้ใช้ root มีสิทธิ์ในการทำงานทุกอย่าง. เพื่อหลีกเลี่ยงความความเสียหายที่จะเกิด, ใช้ชื่อผู้ใช้ธรรมดาเข้าใช้โหมดกราฟฟิก. และใช้ root เมื่อจำเป็นต้องใช้สิทธิ์จริงๆ.

หลังจากใส่ชื่อผู้ใช้และรหัสผ่านแล้ว, ระบบจะใช้เวลาเล็กน้อยในการเริ่มหน้าจอโหมดกราฟฟิก, ขึ้นอยู่กับความเร็วของ CPU ของเครื่องคอมพิวเตอร์ของคุณ, ซอฟท์แวร์ที่คุณใช้และการตั้งค่าเฉพาะของคุณ.

ต่อมา, คุณจำเป็นต้องเปิด terrminal window หรือเรียกสั้นๆว่า xterm (X นำหน้าหมายถึงชื่อของซอฟท์แวร์ที่ตามมารองรับการทำงานแบบกราฟฟิก). โปรแกรมนี้จะอยู่ใน Applications->Utilityes, System Tools หรือ Internet menu, ขึ้นอยู่กับโปรแกรมจัดการวินโดว์ที่คุณใช้. อาจจะมีไอค่อนเล็กๆเป็นทางลัดเพื่อเรียกหน้าต่าง xterm ให้ใช้, และปกติการคลิกขวาบนเดสก์ท้อปแบ็คกราวน์จะมีเมนูที่โยงถึงเทอร์มินอ ลวินโดว์แอพพลิเคชั่น.

เมื่อคุณทำการสำรวจเมนู, คุณจะพบว่าสามารถทำงานหลายอย่างได้โดยไม่ต้องป้อนคำสั่งผ่านคีย์บอร์ด. สำหรับผู้ใช้งานทั่วไป, วิธีการเดิมคือ ชี้-แล้ว-คลิก เป็นวิธีทำงานกับเครื่องคอมพิวเตอร์ที่อาจเพียงพอกับการใช้งาน. แต่หนังสือเล่มนี้มีจุดประสงค์เพื่อการใช้งานเครือข่ายในขั้นสูงและทำ หน้าที่ดูแลระบบ, ผู้ที่อยากศึกษาเจาะลึกระบบ. ซึ่งต้องการเครื่องมือที่มากกว่าเม้าส์ที่จะทำงานทุกอย่างที่เขาต้องการ. เครื่องมือที่ว่านี้คือเชลล์ (shell), และเมื่ออยู่ในโหมดกราฟฟิก, เราเรียกใช้เชลล์โดยเปิดเทอร์มินอลวินโดว์.

เทอร์มินอลวินโดว์เป็นเหมือนแผงควบคุมระบบของคุณ. เทอร์มินอลวินโดว์ทำงานแทบทุกอย่างที่ตามมาได้ด้วยเครื่องมือที่ง่ายแต่เป็น เทกซ์ทูลที่มีประสิทธิภาพสูง. ปกติเทอร์มินอลวินโดว์จะแสดงเครื่องหมายพร้อมใช้งาน(prompt) เมื่อคุณเปิดหน้าต่างขึ้นมา. ตัวอย่างข้างล่างเป็น prompt มาตรฐาน, ที่แสดงชื่อผู้ใช้ที่ล็อกอิน, และไดเร็กตอรี่ปัจจุบันที่กำลังใช้งาน, ตามด้วยเครื่องหมาย twiddle (~):

Figure 2-1. Terminal window

 รูปแบบเครื่องหมาย prompt อีกแบบคือ:

[user@host dir]

ตัวอย่างด้านบน, user คือชื่อของคุณที่ใช้ล็อกอิน, hosts คือชื่อของเครื่องที่คุณกำลังทำงานอยู่, และ dir แสดงตำแหน่งปัจจุบันที่คุณอยู่ในระบบไฟล์.

เราจะพูดถึงรายละเอียดของ prompt ในบทถัดไป. ตอนนี้, รู้เพียงว่ามันสามารถแสดงข้อมูลได้ทุกชนิด, แต่มันไม่ใช่ส่วนหนึ่งของคำสั่งที่คุณจะป้อนให้ระบบ.

เพื่อยกเลิกการเชื่อมต่อกับระบบในโหมดกราฟฟิก, คุณจำเป็นต้องปิดเทอร์มินอลวินโดว์ทั้งหมดและแอพพลิเคชั่นอื่นๆ. หลังจากนั้น, กดไอค่อน logout หรือหา LogOut ในเมนู. การปิดโปรแกรมทุกโปรแกรมอาจไม่จำเป็น, เพราะระบบจะปิดให้, แต่ตัวจัดการเซสชั่นอาจเปิดแอพพลิเคชั่นที่เคยเปิดอยู่กลับมาบนหน้าจอเมื่อ คุณเชื่อมต่ออีกครั้ง, ซึ่งอาจใช้เวลานานและไม่ใช้เรื่องที่ต้องการให้เป็น. อย่างไรก็ดี, เราสามารถคอนฟิกได้.

เมื่อคุณเห็นหน้าจอล็อกอินที่ให้ใส่ชื่อผู้ใช้และรหัสผ่านอีกครั้ง, แสดงว่าการล็อกเอ้าท์สำเร็จ.

Note Gnome หรือ KDE?
 

เราได้พูดถึงหน้าจอเดสก์ท้อปแบบ Gnome และ KDE ไปหลายครั้ง. มันเป็นโปรแกรมจัดการเดสก์ท้อปที่นิยมใช้กันมากทั้งสองตัว, แม้ว่าอาจมีตัวอื่นอีกหลายตัว, เดสก์ท้อปที่คุณเลือกใช้จะทำงานได้ดีตราบใดที่คุณรู้วิธีการเปิดเทอร์มินอ ลวินโดว์. อย่างไรก็ดี, เราจะพูดถึง Gnome และ KDE สำหรับการทำงานให้บรรลุผลตามต้องการ.

2.1.3. Text mode

คุณรู้ว่าคุณอยู่ในโหมดข้อความหรือเทกซ์โหมดเมื่อหน้าจอทั้งหมดเป็นสีดำ, และแสดงตัวอักษร (ส่วนมากเป็นสีขาว). หน้าจอล็อกอินของเทกซ์โหมดปกติจะแสดงข้อมูลของเครื่องที่คุณเชื่อมต่อ, ชื่อของเครื่องและเครื่องหมาย prompt รอรับการล็อกอิน:


RedHat Linux Release 8.0 (Psyche)

blast login: _




การล็อกอินแบบนี้แตกต่างจากโหมดกราฟฟิก, ตรงที่คุณต้องกด Enter หลังจากที่คุณพิมพ์ชื่อผู้ใช้, เพราะว่ามันไม่มีปุ่มบนหน้าจอให้คุณคลิกด้วยเม้าส์. เมื่อคุณพิมพ์รหัสผ่าน, ตามด้วย Enter . คุณจะไม่เห็นเครื่องหมายใดแสดงให้เห็นว่าคุณพิมพ์อะไร, แม้แต่เครื่องหมายดอกจันทน์, และคุณจะไม่เห็นเคอร์เซอร์เคลื่อนย้าย. นี่เป็นเรื่องปกติในลีนุกซ์เพื่อความปลอดภัยของการใช้งาน.

เมื่อระบบยอมรับคุณว่าเป็นผู้ใช้ที่มีในระบบ, คุณอาจได้รับข้อมูลบางอย่าง, ที่เรียกว่า message of the day, ซึ่งเป็นข้อความอะไรก็ได้. นอกจากนี้, ในระบบยูนิกซ์นิยมแสดง fortune cookie, ซึ่งประกอบด้วยคำแนะนำทั่วไป (ขึ้นอยู่กับคุณเลือก). หลังจากนั้นคุณจะได้รับเชลล์, แสดงด้วยเครื่องหมาย prompt ตัวเดียวกับที่คุณได้รับในโหมดกราฟฟิก.

Warning อย่าล็อกอินด้วย root
 

ในโหมดข้อความ: ควรล็อกอินด้วย root เฉพาะการเซ็ทอัพและคอนฟิกต่างๆที่ต้องการใช้สิทธิ์ผู้ดูแลระบบ, เช่นการเพิ่มผู้ใช้, ติดตั้งชุดโปรแกรม, และการคอนฟิกเครือข่ายและเปลี่ยนค่าคอนฟิกของระบบ. เมื่อคุณทำงานเสร็จ, ให้ออกจากการเชื่อมต่อนั้นทันทีและกลับทำงานในสภาวะของผู้ใช้ธรรมดา. ในลีนุกซ์บางตัว, เช่น Ubuntu, บังคับให้คุณใช้ sudo, ดังนั้นคุณไม่จำเป็นต้องใช้  account ของผู้ดูแลระบบในการล็อกอิน.

การล็อกเอ้าท์ทำได้ด้วยการใช้คำสั่ง logout, ตามด้วย Enter. คุณจะรู้ว่าล็อกเอ้าท์สำเร็จเมื่อเห็นหน้าจอล็อกอินอีกครั้ง.

Caution ปุ่ม power button
 

ระบบลีนุกซ์ไม่ได้ออกแบบมาเพื่อปิดระบบโดยไม่ทำตามวิธีหยุดการทำงานระบบ ก่อน, การกดปุ่ม power มีผลเหมือนเริ่มระบบใหม่บนเครื่องใหม่. อย่างไรก็ตาม, การปิดเพาเวอร์บนระบบเก่าโดยไม่ทำตามวิธีในการหยุดการทำงานระบบก่อนอาจสร้าง ความเสียหายอย่างรุนแรง! ถ้าคุณไม่อยากให้เกิดความผิดพลาด, ให้ทำการปิดระบบเมื่อคุณล็อกเอ้าท์ออกจากโหมดกราฟฟิก, หรือ , เมื่ออยู่หน้าจอล็อกอิน (ที่ๆคุณต้องป้อนชื่อผู้ใช้และรหัสผ่าน) ให้มองหาปุ่ม shutdown.

ตอนนี้เรารู้วิธีเชื่อมต่อและตัดการติดต่อกับระบบ, เราพร้อมที่จะสั่งคำสั่งแรก.

2.2. Absolute basics

2.2. ความรู้พื้นฐาน

2.2.1.  คำสั่งเบื้องต้น

คำสั่งต่อไปนี้เป็นคำสั่งเพื่อความรวดเร็ว, ให้เราเริ่มต้นทำงานกับลีนุกซ์; เราจะลงรายละเอียดในภายหลัง

Table 2-1. Quickstart commands

Command Meaning
ls

 แสดงข้อมูลไฟล์ในไดเร็กตอรี่ปัจจุบัน, เหมือนคำสั่ง dir ใน DOS

cd directory

 เปลี่ยนไดเร็กตอรี่

passwd  เปลี่ยนรหัสผ่านของผู้ใช้
file filename   แสดงชนิดของไฟล์
cat textfile  แสดงข้อมูลของเทกซ์ไฟล์บนหน้าจอ
pwd

 แสดงข้อมูลไดเร็กตอรี่ปัจจุบัน

exit or logout  ออกจากเซสชั่นนี้
man command อ่าน man pages ของ command
info command อ่าน Info pages ของ command 
apropos string ค้นหา the whatis database สำหรับ strings

2.2.2. General remarks

คุณพิมพ์คำสั่งเหล่านี้หลังเครื่องหมาย prompt, ในหน้าต่างเทอร์มินอลในโหมดกราฟฟิกหรือในเทกซ์โหมด, ตามด้วย Enter.

คำสั่งสามารถใช้งานด้วยตัวมันเอง, เช่น ls. ผลลัพท์ของคำสั่งอาจแตกต่างออกไปเมื่อคุณระบุ option, ซึ่งปกติจะมีเครื่องหมาย dash (-) นำหน้า, เช่น ls -a. ตัวอักษรอ็อพชั่นเดียวกันอาจมีความหมายที่แตกต่างเมื่อใช้กับคำสั่งอื่น. โปรแกรมในโครงการ GNU ใช้อ็อพชั่นยาว, นำหน้าด้วย dash สองตัว (--), เช่น ls --all. บางคำสั่งก็ไม่มีอ็อพชั่น.

อาร์กิวเม้นท์ของคำสั่ง จะใช้ระบุ object ที่คุณต้องการให้คำสั่งมีผล. ตัวอย่างเช่น ls /etc, โดยที่ /etc เป็นอาร์กิวเม้นท์ของคำสั่ง ls . นี่แสดงว่าคุณต้องการดูข้อมูลของไดเร็กตอรี่ /etc, แทนที่จะเป็น ไดเร็กตอรี่ปัจจุบันซึ่งเป็นดีฟ้อลท์ไดเร็กตอรี่, บางคำสั่งต้องการอาร์กิวเม้นท์, บางคำสั่งก็ไม่ต้องการอาร์กิวเม้นท์.

คุณสามารถตรวจสอบว่าคำสั่งจะใช้อ็อพชั่นและอาร์กิวเม้นท์, โดยดู online help ของคำสั่งที่ต้องการ ดู หัวข้อ 2.3.

ในลีนุกซ์, เหมือนกันยูนิกซ์, ไดเร็กตอรี่จะแยกกันด้วยเครื่องหมาย slashes (/), เหมือนที่ใช้ในเวบแอดเดรส (URLs). เราจะอธิบายโครงสร้างไดเร็กตอรี่ในภายหลัง.

เครื่องหมายจุดเดี่ยว . และจุดคู่ .. มีความหมายพิเศษเมื่อใช้กับไดเร็กตอรี่. เราจะแสดงตัวอย่างในแบบฝึกหัด, และเพิ่มเติมในบทถัดไป.

ในการทำงานตามปกติ พยายามหลีกเลี่ยงการล็อกอินด้วยชื่อและรหัสผ่านของผู้ดูแลระบบ. root. การดูแลระบบทั่วไป, การรวบรวมข้อมูล และอื่นๆ สามารถทำโดยใช้ชื่อผู้ใช้ธรรมดาที่ไม่มีค่าอนุญาตใช้งานพิเศษ. แต่ถ้าต้องการ, ตัวอย่างเช่นเมื่อต้องการสร้างชื่อผู้ใช้ใหม่ หรือติดตั้งซอฟแวร์ใหม่, วิธีการที่ดีคือใช้สิทธิ์ผู้ดูแลระบบโดยการสลับ ID , ดู หัวข้อ 3.2.1 สำหรับตัวอย่าง.

คำสั่งทุกคำสั่งในหนังสือนี้สามารถเรียกใช้โดยไม่ต้องใช้สิทธิ์ของผู้ ดูแลระบบ. ในการทำงานส่วนมาก, เมื่อป้อนคำสั่งหรือเรียกโปรแกรมโดยผู้ใช้ไม่มีสิทธิ์เรียกใช้, ระบบจะมีข้อความเตือนหรือให้คุณใส่รหัสผ่านของ root เมื่อจำเป็นต้องใช้สิทธ์ root. เมื่อใช้เสร็จ ให้ออกจากโปรแกรมหรือเซสชั่นที่คุณใช้ root ทันที.

อ่านคู่มือให้เป็นนิสัย. โดยเฉพาะอย่างยิ่งตอนเริ่มต้น, มันสำคัญที่ต้องอ่านคู่มือของระบบ, คู่มือของคำสั่งพื้นฐาน, HOWTO และอื่นๆ. เนื่องจากจำนวนคู่มือมีมาก, เราไม่สามารถให้รายละเอียดของคู่มือที่เกี่ยวข้องได้ทั้งหมด. หนังสือเล่มนี้จะพยายามให้ข้อมูลแนวทางที่จำเป็นที่เกี่ยวข้องกับทุกเรื่อง ที่อธิบาย, เพื่อสร้างนิสัยในการอ่าน man pages.

2.2.3.  การใช้ความสามารถของ Bash

การกดปุ่มคีย์บอร์ดพิเศษพร้อมกันกับคีย์อื่น ทำให้คุณทำงานกับ GNU shell ได้ง่ายและรวดเร็ว, ปุ่มพิเศษสามารถใช้ได้กับลีนุกซ์ส่วนใหญ่, ดู หัวข้อ 3.2.3.2. ตารางด้านล่างเป็นตารางคีย์ลัดที่ใช้งานทั่วไป; คุณควรหัดใช้ให้เป็นนิสัย, เพื่อสร้างความชำนาญในการใช้ลีนุกซ์ตั้งแต่ต้น.

Table 2-2. Key combinations in Bash

Key or key combination Function
Ctrl+A  เลื่อนเคอร์เซอร์ไปยังจุดเริ่มต้นของ command line.
Ctrl+C  จบการทำงานของโปรแกรมและคืนกลับไปยัง prompt, ดู บทที่ 4
Ctrl+D  ล็อกเอาท์จากเชลล์เซสชั่นปัจจุบัน, เหมือนการพิมพ์ exit หรือ logout.
Ctrl+E  เลื่อนเคอร์เซอร์ไปยังท้ายบรรทัดของ command line.
Ctrl+H  สร้างตัวอักษร backspace.
Ctrl+L  ล้างหน้าจอเทอร์มินอล.
Ctrl+R  หาคำสั่งที่เคยใช้ไปแล้ว, ดู หัวข้อ 3.3.3.4.
Ctrl+Z  ออกจากโปรแกรม, ดู บทที่ 4
ArrowLeft and ArrowRight  เลื่อนเคอร์เซอร์ไปทางซ้ายหรือทางขวาหนึ่งตำแหน่ง, เพื่อให้คุณพิมพ์แทรกตัวอักษร.
ArrowUp and ArrowDown  เรียกดูคำสั่งที่เคยใช้. เมื่อเจอคำสั่งที่ต้องการใช้ซ้ำ, แก้ไขถ้าจำเป็น, และกด Enter เพื่อความรวดเร็ว.
Shift+PageUp and Shift+PageDown  เรียกดูหน้าจอเทอร์มินอลบัฟเฟอร์ (เพื่อหาข้อความที่ "ล้น" หน้าจอไปแล้ว).
Tab  การจบการสั่งคำสั่งหรือเรียก โปรแกรม; เมื่อมีการร้องขอตัวเลือกหลายตัว, ระบบจะส่งสัญญาณเป็นรูปภาพหรือสัญญาณเสียง, หรือถ้ามีตัวเลือกหลายตัวให้ใช้, ถามคุณถ้าคุณต้องการเห็นข้อมูลทั้งหมด.
Tab Tab  แสดงไฟล์หรือคำสั่งที่สมบูรณ์ที่น่าจะเป็น.

หัวข้อที่ใช้ tab สองเรื่องตามตัวอย่างด้านบนอาจต้องอธิบายเพิ่มเติม, ตัวอย่างเช่น, ถ้าคุณอยากเปลี่ยนไดเร็กตอรี่ไปยังไดเร็กตอรี่ ที่มีชื่อไดเร็กตอรี่ยาวมาก, คุณไม่จำเป็นต้องพิมพ์ชื่อที่ยาวนั้นทั้งหมด. คุณเพียงพิมพ์คำสั่ง cd dir, แล้วกด Tab เชลล์จะใส่ชื่อเต็มของไดเร็กตอรี่ให้คุณ, แต่ถ้าไม่มีชื่อไฟล์ที่ขึ้นต้นด้วยอักษรสามตัวตรงกับที่เรียก, คุณอาจต้องพิมพ์ cd d แล้วกด Tab. ถ้ามีชื่อไฟล์ที่มีตัวอักษรเริ่มต้นเป็นตัวเดียวกันมากกว่าหนึ่งไฟล์, เชลล์จะส่งสัญญาณบอกคุณ, เพื่อให้คุณกด Tab สองครั้งติดต่อกัน, และเชลล์จะแสดงชื่อไฟล์ให้คุณเลือก:

your_prompt> cd st
starthere stuff stuffit

ตัวอย่างด้านบน, ถ้าคุณพิมพ์ "a" หลังจากตัวอักษรสองตัวแรกและกด Tab อีกครั้ง, ตัวเลือกอื่นจะไม่มี, และเชลล์จะเติมชื่อไฟล์ที่สมบูรณ์ให้คุณ, โดยที่คุณไม่ต้องพิมพ์สตริง "rthere":

your_prompt> cd starthere

แน่นอนว่าคุณต้องกด Enter เพื่อรับการเลือก.

ในตัวอย่างเดียวกัน, ถ้าคุณพิมพ์ "u", และกด Tab, เชลล์จะเพิ่ม "ff" ให้คุณ, แต่มันยังไม่ยืนยัน, เนื่องจากยังมีทางเลือกอีก. ถ้าคุณกด Tab Tab อีกครั้ง, คุณจะเห็นตัวเลือก; ถ้าคุณเลือกตัวอักษรหนึ่งหรือมากกว่าเพื่อเลือกอักษรตามที่ระบบให้มา, และกด Tab อีกครั้ง, หรือกด Enter เมื่อคุณได้ชื่อไฟล์ที่ครบถ้วนแล้ว, เชลล์จะทำงานโดยใช้ชื่อที่สมบูรณ์นั้นในการเปลี่ยนไปในไดเร็กตอรี่ - ถ้ามันเป็นชื่อไดเร็กตอรี่จริง.

วิธีการนี้จะทำงานได้กับชื่อไฟล์ที่ใช้เป็นอาร์กิวเม้นท์ของคำสั่ง.

วิธีการเดียวกันสามารถใช้กับการเติมเต็มคำสั่ง. ตัวอย่างเช่น พิมพ์ ls และกด Tab สองครั้ง, จะแสดงรายการคำสั่งในพาธของคุณ (ดู หัวข้อ 3.2.1) ที่เริ่มต้นด้วยตัวอักษรสองตัวคือ "ls":

your_prompt> ls
ls lsdev lspci lsraid lsw
lsattr lsmod lspgpot lss16toppm
lsb_release lsof lspnp lsusb

2.3. Getting help

2.3. การขอความช่วยเหลือ

2.3.1. ข้อควรระวัง

GNU/Linux ส่งเสริมให้เรียนรู้ด้วยตัวเอง. วิธีหนึ่งในการหาตัวช่วยคือหาคนที่มีความรู้, และหาข้อมูลในชุมชนผู้ใช้ลีนุกซ์, คนส่วนใหญ่จะแนะนำให้คุณลองทำตามวิธีการในหัวข้อนี้ก่อนที่จะถาม, คำตอบที่ได้บางทีอาจห้วนเกินถ้าคุณไม่ทำตามขั้นตอนพื้นฐานนี้.

2.3.2. The man pages

คนที่เริ่มใช้ลีนุกซ์จำนวนมากที่กลัวการอ่านคู่มือ man (manual) pages, เพราะมันเป็นเอกสารคู่มือที่ยาว. แต่อย่างไรก็ตาม, มันถูกเขียนอธิบายเป็นโครงสร้างชัดเจน, ดังที่คุณเห็นได้จากตัวอย่างด้านล่างนี้: man man.

การอ่าน man pages ปกติจะทำบนเทอร์มินอลวินโดว์เมื่ออยู่ในโหมดกราฟฟิก, หรืออยู่ในเทกซ์โหมดถ้าคุณต้องการ. โดยพิมพ์คำสั่งที่คุณต้องการรู้เหมือนด้านล่างนี้, ตามด้วย Enter.

yourname@yourcomp ~> man man

คู่มือคำสั่ง man จะแสดงบนหน้าจอหลังจากคุณกด Enter:

man(1)                                                         man(1)



NAME
man - format and display the on-line manual pages
manpath - determine user's search path for man pages

SYNOPSIS
man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file]
[-M pathlist] [-P pager] [-S section_list] [section] name ...


DESCRIPTION
man formats and displays the on-line manual pages. If you specify
section, man only looks in that section of the manual.
name is normally the name of the manual page, which is typically the
name of a command, function, or file. However, if name contains a
slash (/) then man interprets it as a file specification, so that you
can do man ./foo.5 or even man /cd/foo/bar.1.gz.

See below for a description of where man looks for the manual
page files.

OPTIONS
-C config_file
lines 1-27

การดูหน้าถัดไปจะใช้การกดแป้น space bar. ถ้าคุณอยากกลับไปดูหน้าที่แล้วให้กดปุ่ม b. เมื่อถึงตอนท้ายของคู่มือ, man จะออกจากโปรแกรมและคุณจะได้เครื่องหมาย prompt คืนกลับมา. พิมพ์ q ถ้าคุณต้องการออกจากโปรแกรมก่อนที่จะถึงท้ายข้อความ, หรือถ้าจบหน้าแล้วโปรแกรมยังไม่ออกจากการดูคู่มือ man pages นั้น.

Note Pagers
 

การกดคีย์สองปุ่มพร้อมกันสำหรับการดู man pages มีการตั้งค่าไว้ในค่า pager ของลีนุกซ์ที่คุณใช้. ลีนุกซ์ส่วนมากใช้ less ในการดู man pages และการเลื่อนไปหน้าที่ต้องการ. ดู หัวข้อ 3.3.4.2. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ pagers.

 คู่มือ man pages แต่ละตัวประกอบด้วยหัวขัอมาตรฐานหลายอัน, ดังที่เราได้เห็นจากตัวอย่าง man man:

  •  บรรทัดแรกจะประกอบด้วยชื่อคำสั่งที่คุณอยากรู้, และหมายเลขไอดีของหัวข้อซึ่ง man page ตั้งอยู่. man pages จะเรียงตามลำดับเป็นบท, คำสั่งส่วนใหญ่จะมีคำอธิบายหลายชุด, เช่นคำอธิบายสำหรับผู้ใช้ทั่วไป, คำอธิบายสำหรับผู้ดูแลระบบ, และคำอธิบายสำหรับนักเขียนโปรแกรม.

  •  ชื่อของคำสั่งและคำอธิบายแบบย่อจะแสดงไว้, ซึ่งใช้สำหรับการสร้างอินเด็กซ์ของ man pages. คุณสามารถดูคำอธิบายแบบย่อของอินเด็กซ์เหล่านี้ได้ด้วยคำสั่ง apropos.

  •   บทสรุปของคำสั่งจะแสดงข้อมูลทางเทคนิคของอ็อพชั่นทั้งหมดและ/หรือ อาร์กิวเมนท์ของคำสั่งที่รองรับ. คุณอาจมองอ็อพชั่นว่าเป็นวิธีในการเอ็กซีคิ้วท์คำสั่ง. ส่วนอาร์กิวเม้นท์คืออะไรที่คุณจะเอ็กซีคิ้วท์บนมัน. บางคำสั่งไม่มีอ็อพชั่นหรือไม่มีอาร์กิวเมนท์. ข้อมูลอ็อพชั่นและอาร์กิวเม้นท์จะใส่ไว้ระหว่างเครื่องหมายปีกกา "[" และ "]" เพื่อบอกว่ามันจะใส่ก็ได้หรือไม่ใส่ก็ได้.

  •  คำอธิบายอันยึดยาวของคำสั่งจะถูกบรรยายไว้

  •  อ็อพชั่นและคำอธิบายจะแสดงตามรายการ. ปกติอ็อพชั่นสามารถใช้ร่วมกันได้, แต่ถ้าไม่ได้, หัวข้อนี้จะบอกคุณ.

  •  คำอธิบายของตัวแปรแวดล้อมของเชลล์ที่ส่งผลต่อคำสั่งนี้ (ไม่มีในทุกคำสั่ง). 

  •  บางครั้งจะมีหัวข้อเฉพาะของคำสั่งนี้.

  •  คำแนะนำอ้างอิงไปยัง man pages อื่นจะแสดงในหัวข้อ "SEE ALSO". ตัวเลขในวงเล็บคือจำนวนของหัวข้อ man page ที่จะมีคำสั่งนี้. ผู้ใช้ที่ชำนาญเลือกที่จะดูส่วน "SEE ALSO" ด้วยการใช้คำสั่ง / ตามด้วยสตริงที่ต้องการค้น SEE และกด Enter.

  •  ข้อมูลใน man pages ปกติจะมีข้อมูลของ bugs หรือข้อผิดพลาดของโปรแกรมด้วย และที่ๆคุณจะรายงานข้อผิดพลาดถ้าคุณเจอ.

  •  อาจมีข้อมูลของผู้เขียนโปรแกรมและข้อความลิขสิทธิ์.

บางคำสั่งมีข้อมูล man pages หลายหน้า. ตัวอย่าง, คำสั่ง password ,มี man page ในหัวข้อ 1 และอื่นๆในหัวข้อ 5. ปกติแล้ว, man page ที่มีหมายเลขต่ำสุดจะแสดง. ถ้าคุณต้องการเห็นหัวข้ออื่นให้ระบุหัวข้อหลังคำสั่ง man:

man 5 passwd

 ถ้าคุณต้องการเห็น man pages ทั้งหมดที่เกี่ยวข้องกับคำสั่ง, เรียงตามกัน, ใช้อ็อพชั่น -a ตามหลัง man:

man -a passwd

 วิธีนี้, เมื่อคุณอ่าน man page มาจนจบและกด Enter อีกครั้ง, man page ของหัวข้อถัดไปจะแสดงขึ้นมา.

2.3.3. More info

2.3.3.1. The Info pages

นอกเหนือจาก man pages, คุณสามารถอ่าน info pages เกี่ยวกับคำสั่ง, โดยใช้คำสั่ง info. ข้อมูลส่วนใหญ่จะประกอบด้วยข้อมูลที่อัพเดทและวิธีการใช้ให้ง่ายกว่าเดิม. man pages ของคำสั่งบางตัวจะอ้างถึง info pages.

เริ่มทดลองสั่งคำสั่ง info info ที่เทอร์มินอลวินโดว์:

File: info.info,  Node: Top,  Next: Getting Started,  Up: (dir)

Info: An Introduction
*********************

Info is a program, which you are using now, for reading
documentation of computer programs. The GNU Project distributes most
of its on-line manuals in the Info format, so you need a program called
"Info reader" to read the manuals. One of such programs you are using
now.

If you are new to Info and want to learn how to use it, type the
command `h' now. It brings you to a programmed instruction sequence.

To learn advanced Info commands, type `n' twice. This brings you to
`Info for Experts', skipping over the `Getting Started' chapter.

* Menu:

* Getting Started:: Getting started using an Info reader.
* Advanced Info:: Advanced commands within Info.
* Creating an Info File:: How to make your own Info file.
--zz-Info: (info.info.gz)Top, 24 lines --Top-------------------------------
Welcome to Info version 4.2. Type C-h for help, m for menu item.

ใช้ปุ่มลูกศรเพื่อสำรวจข้อความทั้งหมดและเลื่อนเคอร์เซอร์ไปยังบรรทัดที่ ขึ้นต้นด้วยเครื่องหมายดอกจันทน์, ที่มีคำที่คุณต้องการรู้ข้อมูล, แล้วกด Enter. ใช้คีย์ P และ N เพื่อไปยังข้อมูลก่อนหน้าหรือข้อมูลถัดไป. การกด space bar จะวิ่งไปอีกหน้า, โดยไม่สนใจว่ามันอยู่หน้าเริ่มหัวข้อใหม่หรือเป็นหน้า info page ของคำสั่งอื่น. ใช้คีย์ Q เพื่อออกจากโปรแกรม. โปรแกรม info มีรายละเอียดเพิ่มเติม.

2.3.3.2. The whatis and apropos commands

 คำอธิบายแบบย่อของคำสั่งสามารถเรียกดูโดยใช้คำสั่ง whatis, เหมือนดังตัวอย่างด้านล่างนี้:

[your_prompt] whatis ls
ls (1) - list directory contents

 นี่จะแสดงข้อมูลแบบย่อเกี่ยวกับคำสั่ง, และหัวข้อแรกของหน้า man pages ที่มีข้อมูลเกี่ยวข้องกับคำสั่ง.

ถ้าคุณไม่รู้ว่าจะเริ่มเรียก man page ของอะไร, คำสั่ง apropos จะบอกคุณได้. สมมุติว่าคุณไม่รู้ว่าจะเริ่มต้นเรียกใช้โปรแกรมบราวน์เซอร์อย่างไร, คุณสามารถใช้คำสั่งต่อไปนี้:

another prompt> apropos browser
Galeon [galeon](1) - gecko-based GNOME web browser
lynx (1) - a general purpose distributed information browser
for the World Wide Web
ncftp (1) - Browser program for the File Transfer Protocol
opera (1) - a graphical web browser
pilot (1) - simple file system browser in the style of the
Pine Composer
pinfo (1) - curses based lynx-style info browser
pinfo [pman] (1) - curses based lynx-style info browser
viewres (1x) - graphical class browser for Xt

หลังจากกด Enter คุณจะเห็นข้อมูลเกี่ยวกับบราวน์เซอร์มากมาย: ไม่เพียงเวบบราวน์เซอร์, แต่ยังมีไฟล์ และ FTP browser, และการ browser เอกสาร. ถ้าเครื่องของคุณติดตั้งชุดโปรแกรมสำหรับพัฒนา, คุณอาจเห็น man page เพิ่มเติมที่เกี่ยวข้องกับการเขียนโปรแกรมที่ต้องทำกับบราวน์เซอร์. โดยทั่วไป, คำสั่งที่อยู่ในหัวข้อที่หนึ่ง, ซึ่งระบุด้วยหมายเลขหนึ่งในวงเล็บ "(1)", จะเหมาะสำหรับผู้ใช้ทั่วไป. ผู้ใช้ที่สั่งคำสั่ง apropos ตามตัวอย่างด้านบนอาจลองสั่งคำสั่ง galeon, lynx หรือ opera ตามคำแนะนำที่ได้ในการเปิดโปรแกรมท่องอินเตอร์เนท.

2.3.3.3. The --help option

คำสั่งของ GNU ส่วนมากจะรองรับรูปแบบ --help, ซึ่งจะให้ข้อมูลสั้นๆเกี่ยวกับการใช้คำสั่งและอ็อพชั่นที่มีให้. ด้านล่างเป็นผลลัพท์ของอ็อพชั่นนี้เมื่อใช้กับคำสั่ง cat:

userprompt@host: cat --help
Usage: cat [OPTION] [FILE]...
Concatenate FILE(s), or standard input, to standard output.

-A, --show-all equivalent to -vET
-b, --number-nonblank number nonblank output lines
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-n, --number number all output lines
-s, --squeeze-blank never more than one single blank line
-t equivalent to -vT
-T, --show-tabs display TAB characters as ^I
-u (ignored)
-v, --show-nonprinting use ^ and M- notation,
except for LFD and TAB
--help display this help and exit
--version output version information and exit

With no FILE, or when FILE is -, read standard input.

Report bugs to <bug-textutils@gnu.org>.

2.3.3.4. Graphical help

อย่าเพิ่งท้อถ้าคุณชอบใช้หน้าจอกราฟฟิกในการทำงาน. โปรแกรมจัดการไฟล์ของ KDE ชื่อ Konqueror, มีหน้าจอที่น่าใช้ในการดู man pages.คุณอาจลองใส่ "info:info" ใน Location address bar, และคุณจะได้หน้าจอข้อมูลเกี่ยวกับคำสั่ง info. และถ้าคุณป้อน "man:ls" คุณจะได้ man page ของคำสั่ง ls. คุณยังจะได้ฟังชั่นการเติมเต็มคำสั่ง: คือคุณจะเห็น man page ของทุกคำสั่งที่ขึ้นต้นด้วย "ls" ในหน้าจอที่เลื่อน scroll down มาด้านล่าง. ลองใส่ "info:/dir" ในช่องใส่แอดเดรสจะทำให้แสดง info pages ทั้งหมด, เรียงตามยูทิลิตี้. เป็นข้อมูลตัวช่วยที่เยี่ยมยอด, รวมทั้งคู่มือการใช้ Konqueror. วิธีเรียกใช้โปรแกรมโดยพิมพ์คำสั่ง konqueror บนเทอร์มินอลวินโดว์, ตามด้วย Enter, จะมีหน้าจอตามด้านล่างนี้ปรากฏ.

Figure 2-2. Konqueror as help browser

 

Gnome Help Browser ก็ไม่น้อยหน้า. คุณสามารถเรียกใช้มันโดยเลือก Application->Help จากเมนู Gnome, หรือการคลิก liftguard icon บนเดสก์ท้อปหรือการสั่งคำสั่ง gnome-help ในเทอร์มินอลวินโดว์. คู่มือระบบและ man pages จะสำรวจและอ่านได้ง่าย.

โปรแกรมจัดการไฟล์ที่ชื่อ nautilus มีช่องค้นหาอินเด็กซ์ของ man และ info pages, ใช้งานหาข้อมูลได้ง่ายเนื่องจากมัน browse ได้และมีลิ้งค์เชื่อมโยงหากัน. โปรแกรม Nautilus สามารถเรียกใช้จาก command line, หรือคลิกไอค่อนโฮมไดเร็กตอรี่, หรือเรียกจาก Gnome menu.

ข้อดีที่เห็นได้ชัดของระบบข้อมูลแบบ GUI คือข้อมูลทุกอย่างสามารถเชื่อมโยงถึงกัน, คุณเพียงคลิกหัวขัอ "SEE ALSO" และเมื่อเจอลิ้งค์ไปยัง man page อื่น, คุณสามารถคลิกไปดูข้อมูลได้เลยโดยไม่ต้องเสียเวลา.

2.3.3.5.  ข้อยกเว้น

บางคำสั่งไม่มีข้อมูลตัวช่วย, เพราะมันเป็นส่วนหนึ่งของคำสั่งอื่น. cd, exit, logout และ pwd เป็นข้อยกเว้น. มันเป็นส่วนหนึ่งของเชลล์โปรแกรมที่เรียกว่า คำสั่งภายใน. สำหรับข้อมูลเกี่ยวกับคำสั่งนี้, หาได้จาก man page หรือ info page ของเชลล์ที่คุณใช้. ผู้เริ่มใช้ลีนุกซ์ส่วนใหญ่จะใช้ Bash shell . ดู หัวข้อ 3.2.3.2. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเชลล์.

ถ้าคุณทำการเปลี่ยนคอนฟิกของระบบ, อาจเป็นไปได้ว่า man page จะยังคงอยู่ที่เดิม, แต่มองไม่เห็นเนื่องจากองค์ประกอบเชลล์ถูกเปลี่ยนไป. กรณีนี้, คุณจำเป็นต้องตรวจสอบตัวแปร MANPATH. วิธีการอธิบายใน หัวข้อ 7.2.1.2.

บางโปรแกรมหรือชุดโปรแกรมมีเพียงชุดคำสั่งหรือข้อมูลอ้างอิงอยู่ในไดเร็กตอรี่ /usr/share/doc. ดู หัวข้อ 3.3.4 ในการเรียกดูข้อมูล.

กรณีแย่สุด, คุณอาจลบไฟล์ข้อมูลตัวช่วยออกจากระบบของคุณโดยบังเอิญ (หวังว่าคงเกิดจากอุบัติเหตุ, เพราะไม่ใช่ความคิดที่ดีถ้าจะลบมัน). กรณีนี้, ตรวจสอบให้แน่ว่ามันไม่มีข้อมูลหลงเหลือให้ค้นหาอยู่ในระบบ, อ่านวิธีการใน หัวข้อ 3.3.3. ถ้าเป็นเช่นนั้น, คุณอาจต้องติดตั้งชุดโปรแกรมใหม่ที่มีคำสั่งให้ติดตั้งข้อมูลตัวช่วย, ดู หัวข้อ 7.5

2.4. Summary

2.4. บทสรุป

ลีนุกซ์สามารถทำงานได้ทั้งโหมดเทกซ์หรือกราฟฟิก. เนื่องจากราคา CPU และ RAM ไม่แพงมากในปัจจุบัน, ผู้ใช้ลีนุกซ์จะนิยมใช้งานในโหมดกราฟฟิก. ซึ่งไม่ได้หมายความว่าคุณไม่จำเป็นต้องเรียนรู้คำสั่งในเทกซ์โหมด: เราจะสอนให้ทำงานในโหมดเทกซ์ตลอดคอร์สนี้, ด้วยการใช้เทอร์มินอลวินโดว์.

ลีนุกซ์ส่งเสริมให้ผู้ใช้ได้มาซึ่งความรู้และเป็นอิสระ. หลีกเลี่ยงไม่ได้, ที่คุณจะต้องอ่านเอกสารมากมายเพื่อให้ถึงเป้าหมาย; นั่นเป็นสาเหตุ, ที่คุณอาจสังเกตุเห็น, ว่าเราแนะนำให้หาข้อมูลเพิ่มเติมสำหรับแทบทุกคำสั่ง, โปรแกรมเครื่องมือและปัญหาที่แสดงรายการในหนังสือเล่มนี้. ยิ่งคุณอ่านเอกสารคู่มือมาก, ยิ่งทำให้คุณใช้ง่ายและเลิกอ่านคู่มือได้เร็ว. อ่านคู่มือให้ติดเป็นนิสัยให้เร็วที่สุดที่ทำได้. เมื่อคุณไม่รู้คำตอบของปัญหา, การอ่านคู่มือควรเป็นเรื่องที่นำมาพิจารณาให้เป็นนิสัย.

 เราได้เรียนรู้คำสั่งบางตัว:

Table 2-3. New commands in chapter 2: Basics

Command Meaning
apropos  หาข้อมูลเกี่ยวกับคำสั่งหรือหัวข้อ
cat  แสดงข้อมูลของไฟล์หนึ่งไฟล์หรือมากกว่า.
cd  เปลี่ยนเข้าไปยังไดเร็กตอรี่อื่น
exit  ออกจากเชลล์เซสชั่น.
file  เรียกดูข้อมูลเกี่ยวกับชนิดของไฟล์
info  อ่านหน้าข้อมูล info page เกี่ยวกับคำสั่ง
logout  ออกจากเชลล์เซสชั่น.
ls  แสดงรายการข้อมูลไดเร็กตอรี่.
man  อ่านหน้าคู่มือ manual page ของคำสั่ง.
passwd  เปลี่ยนรหัสผ่านของคุณ
pwd  แสดงข้อมูลไดเร็กตอรี่ปัจจุบัน.

2.5. แบบฝึกหัด

เรื่อง ที่เราได้เรียนรู้ส่วนมากจะเกิดจากการสั่งคำสั่งที่ผิดพลาดและดูว่าอะไรจะ เกิดเมื่อสั่งคำสั่งไม่ถูกต้อง. แบบฝึกหัดเหล่านี้จะสร้างเพื่อให้คุณอ่านข้อความผิดพลาดที่เกิดขึ้น. เพื่อให้คุณเห็นความสำคัญของแบบฝึกหัด.

อย่าลืมใช้จุดเด่นของ Bash ในการสั่งคำสั่ง: พยายามทำแบบฝึกหัดด้วยการพิมพ์อักษรให้น้อยที่สุด!

2.5.1.  การเชื่อมต่อและยกเลิกการเชื่อมต่อ

 

  •  พิจารณาดูว่าคุณทำงานในโหมดเทกซ์หรือในโหมดกราฟฟิก.

     คุณทำงานในโหมดเทกซ์/โหมดกราฟฟิก (ขีดฆ่าโหมดใหนที่ใช้ไม่ได้)

  •  ล็อกอินด้วยชื่อผู้ใช้และรหัสผ่านที่คุณกำหนดตอนติดตั้ง.

  •  ล็อกเอ้าท์

  •  ล็อกอินอีกครั้ง, ด้วยชื่อผู้ใช้ที่ไม่มีในระบบ

     ->เกิดอะไรขึ้น?

2.5.2.  รหัสผ่าน

 ล็อกอินอีกครั้งด้วยชื่อผู้ใช้และรหัสผ่านของคุณ.

  •  เปลี่ยนรหัสผ่านของคุณเป็น P6p3.aa! และกด Enter .

     -> เกิดอะไรขึ้น?

  •  ลองอีกครั้ง, คราวนี้ใช้รหัสผ่านที่เดาได้ง่าย, เช่น 123 หรือ aaa.

     -> เกิดอะไรขึ้น?

  •  ลองอีกครั้ง, คราวนี้ไม่ใส่รหัสผ่านแต่กด Enter เลย.

     -> เกิดอะไรขึ้น?

  •  ลองพิมพ์คำสั่ง psswd แทนที่จะพิมพ์ passwd  

     -> เกิดอะไรขึ้น?

Warning รหัสผ่านใหม่
 

 ถ้าคุณไม่ได้เปลี่ยนรหัสผ่านกลับเป็นของเดิมก่อนที่จะทำแบบฝึกหัด นี้, รหัสผ่านจะเป็น "P6p3.aa!". ให้เปลี่ยนรหัสผ่านหลังจากทำแบบฝึกหัดนี้!

 หมายเหตุ ในบางระบบไม่อนุญาตให้ใช้รหัสผ่านเดิมนำมาใช้ใหม่, คือการเปลี่ยนรหัสผ่านกลับไปเป็นรหัสเดิมภายในจำนวนครั้งที่กำหนดหรือภายใน จำนวนครั้งที่เปลี่ยน, หรือทั้งสองอย่างจะทำไม่ได้.

2.5.3.  ไดเร็กตอรี่

 แบบฝึกหัดต่อไปนี้จะช่วยให้คุณได้เรียนรู้และสำผัสกับไดเร็กตอรี่

  •  ป้อนคำสั่ง cd blah

     -> เกิดอะไรขึ้น?

  • ป้อนคำสั่ง cd ..

     ระวังต้องมีช่องว่างระหว่าง "cd" และ ".."! และใช้คำสั่ง pwd.

     -> เกิดอะไรขึ้น?

  •  แสดงข้อมูลของไดเร็กตอรี่ด้วยคำสั่ง ls.

     ->  คุณเห็นอะไร?

    ->   คุณคิดว่ามันคืออะไร?

    ->  ตรวจสอบด้วยคำสั่ง pwd.

  • ป้อนคำสั่ง cd

     -> เกิดอะไรขึ้น?

  •  ทำซ้ำอีกสองรอบ

     -> เกิดอะไรขึ้น?

  •  แสดงข้อมูลของไดเร็กตอรี่นี้.

  •  ลองสั่งคำสั่ง cd root

     -> เกิดอะไรขึ้น?

    ->  ไดเร็กตอรี่อะไรที่คุณจะเข้าไป?

  •  ทำขั้นตอนที่ 4 อีกครั้ง.

     คุณมีวิธีที่จะหาว่าคุณอยู่ตำแหน่งใหนในระบบไฟล์แบบอื่นหรือไม่?

2.5.4. Files

  •  เปลี่ยนไดเร็กตอรี่เป็น / และเข้าไปใน etc. สั่งคำสั่ง ls; ถ้าผลลัพท์มีมากจนล้นหน้าจอ, ทำให้หน้าต่างยาวขึ้น, หรือลองกด Shift+PageUp และ Shift+PageDown.

     ไฟล์ inittab มีคำตอบของคำถามแรกในรายการนี้. ลองใช้คำสั่ง file กับไฟล์ inittab.

      -> ชนิดของไฟล์ inittab คือ .....

  •  ใช้คำสั่ง cat inittab และอ่านข้อมูลไฟล์.

     -> อะไรคือดีฟ้อลท์โหมดของคอมพิวเตอร์คุณ?

  •  กลับไปยังโฮมไดเร็กตอรี่ด้วยการใช้คำสั่ง cd

  •  ใช้คำสั่ง file .

     -> คำสั่งนี้ช่วยในการหาความหมายของ "." หรือไม่?

  •  คุณสามารถดูข้อมูลของ "." ด้วยคำสั่ง cat ได้หรือไม่?

  •  แสดงข้อมูลตัวช่วยของคำสั่ง cat ด้วยอ็อพชั่น --help. ใช้อ็อพชั่นสำหรับแสดงหมายเลขบรรทัดของเอาท์พุทเพื่อนับจำนวนผู้ใช้ที่แสดง ในไฟล์ /etc/passwd.

2.5.5. Getting help

  • อ่าน man intro

  • อ่าน man ls

  • อ่าน info passwd

  • ลองสั่งคำสั่ง apropos pwd

  • ลองคำสั่ง man หรือ info ของ cd.

    -> คุณได้รายละเอียดเพิ่มเติมอะไรบ้าง?เกี่ยวกับ cd

  • อ่าน ls --help and try it out.

Chapter 3. About files and the file system

Chapter 03.  ไฟล์และระบบไฟล์

หลังจากเริ่มต้นสำรวจระบบใน บทที่ 2, เราก็พร้อมที่จะเรียนรู้ระบบไฟล์และไดเร็กตอรี่บนระบบลีนุกซ์ในรายละเอียด. ผู้ใช้ส่วนใหญ่จะคิดว่าลีนุกซ์ใช้ยากเพราะเขาไม่เข้าใจภาพรวมของข้อมูลว่า อะไรที่เก็บไว้ส่วนใหน. เราจะอธิบายให้เห็นภาพของการจัดหมวดหมู่ของไฟล์ในระบบไฟล์ของลีนุกซ์.

เราจะพูดถึงไฟล์และไดเร็กตอรี่ที่มีความสำคัญ และใช้วิธีต่างๆในการดูข้อมูลของไฟล์เหล่านั้น, เราจะเรียนรู้วิธีสร้างไฟล์และไดเร็กตอรี่, การย้ายและการลบไฟล์และไดเร็กตอรี่.

 หลังจากจบบทและแบบฝึกหัด, คุณจะสามารถ:

 

  • อธิบายโครงสร้างของระบบไฟล์ลีนุกซ์

  • แสดงและตั้งค่าพาธ

  •  อธิบายถึงไฟล์ที่มีความสำคัญ, รวมทั้งเคอร์เนลและเชลล์

  •  หาไฟล์ที่ lost และ hidden files

  •  สร้าง, ย้าย, ลบไฟล์และไดเร็กตอรี่

  •  แสดงข้อมูลของไฟล์

  •  เข้าใจการใช้ลิ้งค์ชนิดต่างๆ

  •  หาข้อมูลคุณสมบัติของไฟล์และเปลี่ยนค่าเพอร์มิชชั่น (permission) ของไฟล์

3.1. General overview of the Linux file system

3.1.  ภาพรวมทั่วไปของระบบไฟล์บนลีนุกซ์

3.1.1. Files

3.1.1.1. General

 คำอธิบายง่ายๆของระบบยูนิกซ์, ใช้ได้กับระบบลีนุกซ์, คือ:

  "บนระบบยูนิกซ์, ทุกสิ่งคือไฟล์; ถ้ามีบางสิ่งไม่ใช่ไฟล์, มันคือโพรเซส."

ประโยคนี้เป็นความจริงเพราะยังมีไฟล์พิเศษที่เป็นมากกว่าไฟล์ (ตัวอย่างเช่น named pipes และ sockets), แต่เพื่อให้จำง่าย, พูดโดยรวมว่าทุกอย่างคือไฟล์เป็นที่ยอมรับกันทั่วไป. ระบบลีนุกซ์, เหมือนกับยูนิกซ์, ที่มองไฟล์และไดเร็กตอรี่เหมือนกัน, เพราะว่าไดเร็กตอรี่เป็นเพียงไฟล์ที่เก็บชื่อของไฟล์อื่น. โปรแกรม, เซอร์วิส, เทกซ์, อิมเมจ, และอื่นๆ, ล้วนเป็นไฟล์. อุปกรณ์อินพุทและเอ๊าท์พุท, และอุปกรณ์ทั่วไปทุกอย่าง, ถูกมองให้เป็นไฟล์, ที่ขึ้นอยู่กับระบบ.

ในการจัดการไฟล์เหล่านั้นอย่างเป็นระเบียบ, ให้จินตนาการมองภาพเหมือนโครงสร้างต้นไม้บนฮาร์ดดิสก์, เหมือนอย่างที่เรารู้จาก MS-DOS (Disk Operating System). กิ่งก้านสาขาที่แตกออกไปจะประกอบด้วยกิ่งเล็กกิ่งน้อยที่แยกย่อย, และปลายสุดของกิ่งคือใบไม้หรือไฟล์ข้อมูลปกตินั่นเอง. ตอนนี้เราให้นึกภาพของต้นไม้, แต่ตอนหลังเราจะอธิบายในรายละเอียดว่ามันอาจเป็นภาพที่คลาดเคลื่อนไปบ้าง.

3.1.1.2.  ชนิดของไฟล์

ไฟล์ส่วนมากเป็นเพียงไฟล์ธรรมดา; มันมีข้อมูลอยู่ภายใน, ตัวอย่างเช่น ไฟล์ข้อความหรือเทกซ์ไฟล์, ไฟล์ที่เอ็กซีคิ้วท์ได้หรือโปรแกรมไฟล์, ไฟล์สำหรับอินพุทหรือไฟล์สำหรับเอาท์พุทเป็นต้น.

การมองทุกอย่างในระบบลีนุกซ์เป็นไฟล์เป็นเรื่องที่ดี, แต่มีข้อยกเว้นบางส่วน.

  • ไดเร็กตอรี่: คือไฟล์ที่เก็บรายการของไฟล์อื่น
  • ไฟล์พิเศษ: เป็นกลไกใช้สำหรับอุปกรณ์อินพุทและอุปกรณ์เอาท์พุท. ไฟล์พิเศษส่วนมากจะอยู่ใน /dev, เราจะพูดถึงเรื่องนี้ตอนหลัง
  • ลิ้งค์: เป็นระบบการสร้างไฟล์หรือไดเร็กตอรี่ให้มองเห็นในหลายส่วนของระบบกิ่งก้านไฟล์. เราจะพูดเกี่ยวกับลิ้งค์ในภายหลัง.
  • (โดเมน) ซ็อคเก็ต: เป็นไฟล์พิเศษ, คล้ายกับ TCP/IP ซ็อคเก็ต, ทำหน้าที่เชื่อมการส่งข้อมูลระหว่างโพรเซสภายในเครือข่ายโดยใช้การเข้าถึง ระบบไฟล์เป็นตัวควบคุม.
  • Named pipes: ทำหน้าที่คล้ายซ็อคเก็ตและสร้างทางสำหรับให้โพรเซสติดต่อระหว่างกัน, โดยไม่ใช้แบบซ็อคเก็ต.

 คำสั่ง ls -l , ใช้แสดงชนิดของไฟล์, โดยดูจากอักษรตัวแรกของแต่ละบรรทัด:

jaime:~/Documents> ls -l
total 80
-rw-rw-r-- 1 jaime jaime 31744 Feb 21 17:56 intro Linux.doc
-rw-rw-r-- 1 jaime jaime 41472 Feb 21 17:56 Linux.doc
drwxrwxr-x 2 jaime jaime 4096 Feb 25 11:50 course

 ตารางด้านล่างนี้แสดงภาพรวมของตัวอักษรที่อธิบายชนิดของไฟล์:

Table 3-1. File types in a long list

Symbol Meaning
- Regular file
d Directory
l Link
c Special file
s Socket
p Named pipe
b Block device

ในการดูชนิดของไฟล์โดยไม่แสดงรายการไฟล์ที่ยาว, ให้ใช้คำสั่ง ls -F, ตัวอักษรท้ายชื่อไฟล์ที่มีตัวอักษร "/=*|@" จะแสดงชนิดของไฟล์. เพื่อให้ง่ายต่อผู้เริ่มต้น, ควรใช้อ็อพชั่น -F และ --color ควบคู่กัน, ดู หัวข้อ 3.3.1.1. เราจะใช้ ls -F ตลอดในหนังสือเล่มนี้เพื่อให้อ่านง่าย.

ในฐานะผู้ใช้, ส่วนมากคุณจะทำงานกับไฟล์ข้อความ, ไฟล์ที่เอ็กซีคิ้วท์ได้, ไดเร็กตอรี่และลิ้งค์. ส่วนไฟล์พิเศษที่อยู่ในระบบสำหรับทำงานให้คุณจะดูแลโดยผู้ดูแลระบบและนัก เขียนโปรแกรม.

ตอนนี้, ก่อนที่เราจะพูดถึงไฟล์และไดเร็กตอรี่ที่สำคัญ, เราจำเป็นต้องรู้จักพาร์ติชั่น.

3.1.2.  เกี่ยวกับพาร์ติชั่น

3.1.2.1.  ทำไมต้องพาร์ติชั่น?

คนส่วนใหญ่รู้จักพาร์ติชั่นแบบคลุมเครือ, เนื่องจากระบบปฏิบัติการทุกตัวมีความสามารถในการสร้างและลบพาร์ติชั่น. มันดูแปลกที่ลีนุกซ์ใช้พาร์ติชั่นมากกว่าหนึ่งพาร์ติชั่นบนดิสก์เดียวกัน, แม้ว่าจะติดตั้งด้วยวิธีมาตรฐาน, ดังนั้นเราต้องเข้าใจมัน.

หนึ่งในเป้าหมายของการมีหลายพาร์ติชั่นคือการรักษาความปลอดภัยของข้อมูล ที่มีประสิทธิภาพกรณีเกิดความเสียหาย. โดยแบ่งฮาร์ดดิสก์ออกเป็นพาร์ติชั่น, ข้อมูลจะรวบรวมเป็นหมวดหมู่และแยกกันอยู่. เมื่อเกิดเหตุไม่คาดฝัน, ข้อมูลที่อยู่ในพาร์ติชั่นที่ถูกโจมตีจะเสียหาย, ขณะที่ข้อมูลบนพาร์ติชั่นอื่นยังคงอยู่.

หลักการนี้คิดค้นเมื่อตอนลีนุกซ์ยังไม่มี journaled files system และมีปัญหากับระบบไฟ. การใช้พาร์ติชั่นยังคงใช้เพื่อความปลอดภัยของข้อมูล, ดังนั้นการที่มีบางส่วนของระบบเสียหายไม่ได้หมายความว่าระบบคอมพิวเตอร์ ทั้งหมดจะเสียหายตาม. นี่ยังคงเป็นหลักการที่ใช้ได้จนถึงปัจจุบัน. ตัวอย่างง่ายๆ: ผู้ใช้สร้างสคริป, โปรแกรมหรือเวบแอพพลิเคชั่นที่มีการบันทึกข้อมูลลงในดิสก์. ถ้าดิสก์มีพาร์ติชั่นเดียว, ระบบทั้งหมดจะหยุดทำงานเมื่อดิสก์เต็ม. ถ้าผู้ใช้เก็บข้อมูลบนพาร์ติชั่นที่แยกออกไป, จะทำให้มีผลเฉพาะพาร์ติชั่นที่เก็บข้อมูลนั้น, ในขณะที่พาร์ติชั่นของระบบและพาร์ติชั่นข้อมูลอื่นยังคงทำงานต่อไป.

จำไว้ว่าการมีระบบ journaled file system ทำให้มีความปลอดภัยของข้อมูลกรณีไฟดับและเมื่อเกิดเหตุขาดการติดต่อกับ อุปกรณ์เก็บข้อมูลกะทันหัน. แต่ไม่ได้ป้องกันข้อมูลของคุณเสียหายจากการมี bad blocks และ logical errors ในระบบไฟล์. ในกรณีหลัง, คุณควรใช้ RAID (Redundant Array of Inexpensive Disks) ในการป้องกันปัญหา.

3.1.2.2. Partition layout and types

ในระบบลีนุกซ์มีพาร์ติชั่นหลักสองชนิด:

  • ด้าต้า พาร์ติชั่น: ระบบข้อมูลปกติของลีนุกซ์, รวมทั้ง root partition ประกอบด้วยข้อมูลทั้งหมดที่จะเริ่มสตาร์ทอัพและรันระบบทำงาน; และอีกอันคือ
  • สว้อป พาร์ติชั่น: ส่วนขยายของหน่วยความจำบนเครื่องคอมพิวเตอร์, เป็นหน่วยความจำพิเศษบนฮาร์ดดิสก์.

ระบบส่วนมากจะประกอบด้วย root partition, พาร์ติชั่นข้อมูลหนึ่งพาร์ติชั่นหรือมากกว่า และสว้อปพาร์ติชั่นหนึ่งอันหรือมากกว่า. ระบบในเครือข่ายผสมอาจมีพาร์ติชั่นแบบอื่นสำหรับข้อมูล, เช่นพาร์ติชั่นระบบไฟล์แบบ FAT หรือ VFAT สำหรับข้อมูลระบบปฏิบัติการไมโครซอฟท์วินโดว์.

ระบบลีนุกซ์ส่วนมากใช้โปรแกรม fdisk ตอนติดตั้งในการ ตั้งค่าพาร์ติชั่น. ดังที่คุณอาจสังเกตุระหว่างการทำแบบฝึกหัดในบทที่ 1, ซึ่งจะทำโดยอัตโนมัติ. แต่อย่างไรก็ตาม, ในบางเหตุการณ์, คุณอาจโชคไม่ดี. ที่คุณต้องทำการแบ่งพาร์ติชั่นด้วยตัวเอง. พาร์ติชั่นมาตรฐานของลีนุกซ์ใช้หมายเลข 82 สำหรับสว้อปและหมายเลข 83 สำหรับข้อมูล, ซึ่งเป็นได้ทั้งแบบ journaled (ext3) หรือ normal (ext2, ในระบบเก่า). โปรแกรม fdisk มี built-in help, ถ้าคุณลืมตัวเลขเหล่านี้.

นอกเหนือจากพาร์ติชั่นสองชนิดที่กล่าวไปแล้ว, ลีนุกซ์รองรับระบบไฟล์อีกหลากหลาย, เช่นระบบไฟล์ใหม่ๆ, JFS, NFS, FATxx และระบบไฟล์อื่นๆอีกมากที่ระบบปฏิบัติการอื่นใช้อยู่.

พาร์ติชั่น root มาตรฐาน (แสดงด้วยเครื่องหมาย slash, /) ใช้เนื้อที่ประมาณ 100-500 MB, และประกอบด้วยคอนฟิกไฟล์ของระบบ, คำสั่งพื้นฐานและโปรแกรมของเซิฟเวอร์, ไลบรารี่ระบบ, เนื้อที่เก็บข้อมูลชั่วคราวและโฮมไดเร็กตอรี่ของผู้ดูแลระบบ. การติดตั้งมาตรฐานทั่วไปใช้เนื้อที่ประมาณ 250 MB สำหรับ root พาร์ติชั่น.

พื้นที่สว้อป (swap) ถูกใช้โดยระบบเอง, มันถูกซ่อนไว้ถ้ามองจากการทำงานปกติ. พื้นที่นี้ถูกใช้เพื่อให้การทำงานของคุณราบรื่นโดยไม่มีข้อความ Out of memory, please close some applications first and try again มารบกวน. ปัจจุบันการทำงานโดยใช้พื้นที่บนฮาร์ดดิสก์สำรองใช้งานแทนเนื้อที่หน่วยความ จำระบบนี้ถูกดัดแปลงให้ใช้กับระบบปฏิบัติการนอกเหนือจากยูนิกซ์เช่นกัน.

การใช้หน่วยความจำบนฮาร์ดดิสก์จะทำให้ระบบช้ากว่าการใช้ชิพหน่วยความจำ ของคอมพิวเตอร์, แต่การใช้งานนี้มีประโยชน์มาก. เราจะเรียนรู้เพิ่มเติมเกี่ยวกับ swap ใน บทที่ 4

ปกติลีนุกซ์จะตั้งค่าพื้นที่ swap ไว้ที่สองเท่าของจำนวนความจุหน่วยความจำจริงของเครื่องคอมพิวเตอร์. เมื่อติดตั้งระบบ, คุณต้องรู้ว่าคุณจะตั้งค่าอย่างไร, ตัวอย่างเช่นระบบมีหน่ายความจำ RAM 512 MB:

  •  วิธีที่หนึ่ง: มี 1 swap partition ตั้งค่าที่ 1 GB

  •  วิธีที่สอง: มี 2 swap partition ตั้งค่าที่ 512 MB

  •  วิธีที่สาม: ถ้ามีฮาร์ดดิสก์สองลูก: ตั้งค่า 512 MB บนดิสก์แต่ละลูก.

 วิธีที่สามเป็นวิธีที่ให้ผลดีที่สุดเมื่อมีการใช้งานอ่านเขียนข้อมูลจำนวนมาก.

อ่านคู่มือซอฟแวร์ที่เกี่ยวข้องเป็นแนวทาง. บางแอพพลิเคชั่น, เช่นระบบฐานข้อมูล, อาจต้องการพื้นที่สว้อปมากกว่าปกติ ในขณะที่ระบบอื่นเช่นเครื่องคอมพิวเตอร์พกพา, อาจไม่มีพื้นที่สว้อปเลยเนื่องจากไม่มีฮาร์ดดิสก์. พื้นที่สว้อปอาจขึ้นอยู่กับรุ่นของเคอร์เนลด้วย.

เคอร์เนลในลีนุกซ์หลายสายพันธ์อาจติดตั้งแยกพาร์ติชั่น, เพราะว่ามันเป็นไฟล์ที่สำคัญของระบบ. กรณีนี้, คุณจะพบว่ามีพาร์ติชั่น /boot , ที่เก็บเคอร์เนลและข้อมูลประกอบต่างๆ.

ปกติข้อมูลที่เหลือทั้งหมดของฮาร์ดดิสก์จะแบ่งเป็น data partitions, แม้ว่ามันอาจเป็นพาร์ติชั่นข้อมูลที่ไม่สำคัญต่อระบบที่อยู่บน พาร์ติชั่นเดียว, ตัวอย่างเมื่อคุณติดตั้งระบบเพื่อใช้เป็นเวิร์คสเตชั่น. ส่วนมากจะมีการแบ่งพาร์ติชั่นดังนี้:

  •  พาร์ติชั่นสำหรับโปรแกรมของผู้ใช้ (/usr)

  •  พาร์ติชั่นที่เก็บข้อมูลส่วนตัวของผู้ใช้ (/home)

  •  พาร์ติชั่นที่เก็บข้อมูลชั่วคราวเช่น print- และ mail-queues (/var)

  •  พาร์ติชั่นสำหรับโปรแกรมเสริมอื่นๆ (/opt)

เมื่อพาร์ติชั่นถูกสร้างขึ้น, คุณสามารถสร้างพาร์ติชั่นเพิ่มได้. การเปลี่ยนขนาดหรือคุณสมบัติของพาร์ติชั่นที่มีอยู่สามารถทำได้แต่ไม่แนะนำ ให้ทำ.

การแบ่งฮาร์ดดิสก์ออกเป็นพาร์ติชั่นเป็นเรื่องที่ผู้ดูแลระบบจะพิจารณา. ในระบบใหญ่, ผู้ดูแลระบบอาจกระจายหนึ่งพาร์ติชั่นครอบคลุมฮาร์ดดิสก์หลายตัว, โดยใช้โปรแกรมที่ทำหน้าที่เฉพาะเป็นตัวจัดการ. ลีนุกซ์ส่วนมากมีการติดตั้งมาตรฐานที่ออกแบบมาเพื่อเป็นเวิร์คสเตชั่น (ผู้ใช้ทั่วไป) และสำหรับใช้เป็นเซิฟเวอร์เอนกประสงค์, แต่ก็สามารถทำการปรับแต่งพาร์ติชั่นได้. ระหว่างการติดตั้งคุณสามารถกำหนดขนาดพาร์ติชั่นเองจากโปรแกรมติดตั้งที่มีมา กับระบบ, ซึ่งส่วนใหญ่จะเป็นระบบกราฟฟิกอินเตอร์เฟส, หรือใช้โปรแกรม fdisk, ในการสร้างพาร์ติชั่นและกำหนดค่าต่างๆที่เกี่ยวกับพาร์ติชั่น.

การติดตั้งเครื่องเวิร์คสเตชั่นหรือเครื่องไคลเอนท์โดยหลักจะใช้สำหรับ ผู้ใช้คนเดียว. ซอฟแวร์ที่เลือกติดตั้งจะเป็นซอฟแวร์ที่ใช้ทั่วไปสำหรับชุดโปรแกรมของผู้ใช้ , เช่นโปรแกรมปรับแต่งหน้าจอ, โปรแกรมเครื่องมือในการพัฒนาระบบ, โปรแกรมไคลเอนท์ในการรับ-ส่งอีเมล์, โปรแกรมดูหนังฟังเพลง, โปรแกรมท่องอินเตอร์เนทและอื่นๆ.( desktop themes, development tools, client programs for E-mail, multimedia software, web and other services. ) ทุกอย่างจะใส่ลงไปในพาร์ติชั่นเดียวที่มีขนาดใหญ่, พื้นที่สว้อปที่มีขนาดเป็นสองเท่าของ RAM จะถูกสร้างเพื่อให้ระบบเวิร์คสเตชั่นของคุณสมบูรณ์แบบมีเนื้อที่ฮาร์ดิสก์ เหลือเฟือเพียงพอสำหรับใช้งานส่วนตัว, แต่วิธีการแบ่งพาร์ติชั่นแบบนี้มีข้อเสียคืออาจเกิดการสูญหายของข้อมูลในบาง สถานะการณ์.

บนเครื่องเซิฟเวอร์, ระบบข้อมูลจะถูกแบ่งออกจากข้อมูลผู้ใช้. โปรแกรมที่ให้บริการเซอร์วิสจะถูกเก็บในพื้นที่ต่างหากจากข้อมูลที่ใช้โดย เซอร์วิสนี้. พาร์ติชั่นต่างๆจะถูกสร้างขึ้นในระบบดังนี้:

  •  พาร์ติชั่นข้อมูลที่จำเป็นในการบูทเครื่อง

  •  พาร์ติชั่นที่เก็บข้อมูลคอนฟิกและโปรแกรมของเซิฟเวอร์

  •  พาร์ติชั่นหนึ่งหรือสองตัวที่ไว้เก็บข้อมูลเซิฟเวอร์เช่น ตารางฐานข้อมูล, เมล์ของผู้ใช้, ข้อมูลเอกสาร ftp เป็นต้น.

  •  พาร์ติชั่นที่ไว้เก็บโปรแกรมของผู้ใช้และแอพพลิเคชั่น

  •  พาร์ติชั่นหนึ่งหรือมากกว่าสำหรับเก็บข้อมูลผู้ใช้ (โฮมไดเร็กตอรี่)

  •  สว้อปพาร์ติชั่นหนึ่งหรือสองตัว

ปกติเครื่องเซิฟเวอร์จะมีหน่วยความจำมาก ทำให้มีพื้นที่ swap space มากตามไปด้วย. เซิฟเวอร์โพรเซสบางตัว, เช่น ฐานข้อมูล, อาจต้องการพื้นที่สว้อปมากกว่าปกติ; ดูคู่มือที่เกี่ยวข้องสำหรับรายละเอียด. เพื่อให้ระบบทำงานมีประสิทธิภาพสูงสุด, พื้นที่สว้อปอาจแบ่งได้หลายตัว.

3.1.2.3. Mount points

พาร์ติชั่นทุกตัวจะเชื่อมกับระบบผ่าน mount point. จุด mount point จะกำหนดสถานที่ของชุดข้อมูลที่เกี่ยวข้องในระบบไฟล์. ปกติแล้ว, ทุกพาร์ติชั่นจะเชื่อมต่อผ่านพาร์ติชั่น root. ในพาร์ติชั่นนี้, ที่แสดงด้วยสัญญลักษณ์ slash (/), ไดเร็กตอรี่จะถูกสร้างขึ้น. ไดเร็กตอรี่ที่ว่างเปล่านี้จะเป็นจุดเริ่มของพาร์ติชั่นที่เชื่อมต่อกับมัน. ตัวอย่าง: พาร์ติชั่นที่เก็บไดเร็กตอรี่ต่อไปนี้:

videos/		cd-images/	pictures/

เราต้องการเชื่อมพาร์ติชั่นนี้ในระบบไฟล์ที่ไดเร็กตอรี่ที่เรียกว่า /opt/media. วิธีการทำ, ผู้ดูแลระบบต้องแน่ใจว่าไดเร็กตอรี่ /opt/media มีอยู่ในระบบ, และควรจะเป็นไดเร็กตอรี่ว่างเปล่า. หลังจากนั้นใชัคำสั่ง mount, ผู้ดูแลระบบจะสามารถเชื่อมพาร์ติชั่นเข้ากับระบบได้. เมื่อคุณดูข้อมูล /opt/media ที่เดิมเคยว่างเปล่า, จะเห็นว่ามันมีไฟล์และไดเร็กตอรี่ที่อยู่บนอุปกรณ์ที่ถูก mounted เข้าไปแล้ว (ข้อมูลของ mounted medium มีทั้งข้อมูลฮาร์ดดิสก์หรือพาร์ติชั่นของฮาร์ดดิสก์, CD, DVD, flash card, USB หรืออุปกรณ์เก็บข้อมูลอื่น).

ในตอนระบบเริ่มทำงาน, พาร์ติชั่นทุกตัวจะถูก mounted, ดังที่ได้กำหนดไว้ในไฟล์ /etc/fstab. บางพาร์ติชั่นจะไม่ได้ถูก mounted โดยดีฟ้อลท์, ตัวอย่างเช่นถ้ามันยังไม่ได้เชื่อมต่อกับระบบ, เช่นอุปกรณ์เก็บข้อมูลของกล้องถ่ายรูปดิจิตอล. ถ้าระบบคอนฟิกถูกต้อง, อุปกรณ์จะ mounted เมื่อระบบตรวจพบว่ามันเชื่อมต่อเข้าระบบแล้ว, หรือมันอาจเป็นการ mount โดยผู้ใช้, คือคุณไม่จำเป็นต้องใช้สิทธิ์ผู้ดูแลระบบในการเชื่อมหรือถอดอุปกรณ์ออกจาก ระบบ. ดังมีตัวอย่างใน หัวข้อ 9.3.

ในระบบที่ทำงานตามปกติ, ข้อมูลเกี่ยวกับพาร์ติชั่นและจุดที่ mount points สามารถเรียกดูได้ด้วยคำสั่ง df (ซึ่งย่อมาจาก disk full หรือ disk free). ในลีนุกซ์, df เป็นคำสั่งในเวอร์ชั่น GNU, และรองรับอ็อพชั่น -h หรือ human readable ที่มีประโยชน์ในการอ่านข้อมูลมาก. ข้อสังเกตุคือในเครื่องยูนิกซ์ส่วนมากจะมีคำสั่ง df เฉพาะของตัวเอง. ผลลัพท์อาจได้เหมือนกัน, แต่คำสั่งเวอร์ชั่น GNU มีประสิทธิภาพมากกว่า.

คำสั่ง df แสดงข้อมูลของ active non-swap partition เท่านั้น. นี่รวมถึงพาร์ติชั่นที่เชื่อมต่อจากเครือข่ายอื่น, ดังตัวอย่างด้านล่างที่โฮมไดเร็กตอรี่ถูก mounted จากไฟล์เซิฟเวอร์บนเครือข่าย, เหตุการณ์นี้เกิดได้บ่อยในเครือข่ายขององค์กร.

freddy:~> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda8 496M 183M 288M 39% /
/dev/hda1 124M 8.4M 109M 8% /boot
/dev/hda5 19G 15G 2.7G 85% /opt
/dev/hda6 7.0G 5.4G 1.2G 81% /usr
/dev/hda7 3.7G 2.7G 867M 77% /var
fs1:/home 8.9G 3.7G 4.7G 44% /.automount/fs1/root/home

3.1.3. More file system layout

3.1.3.1. Visual

เพื่อความสะดวก, ระบบไฟล์ของลีนุกซ์ปกติจะมองเหมือนโครงสร้างต้นไม้. ในระบบลีนุกซ์มาตรฐานคุณจะพบว่าโครงสร้างของระบบไฟล์ทั่วไปจะมีรูปแบบดัง แสดงด้านล่าง.

Figure 3-1. Linux file system layout

นี่เป็นโครงร่างจากระบบ RedHat. โครงสร้างไดเร็กตอรี่อาจมีหรือไม่มีการเปลี่ยนแปลง ขึ้นอยู่กับผู้ดูแลระบบ, ระบบปฏิบัติการและเป้าหมายของเครื่องยูนิกซ์. ชือของไดเร็กตอรี่อาจเหมือนกันหรือแตกต่างจากชื่อดั้งเดิม.

จุดตั้งต้นของระบบไฟล์เริ่มจากลำตัวหรือ slash, แสดงด้วยเครื่องหมาย forward slash (/). ไดเร็กตอรี่นี้, ประกอบด้วยไดเร็กตอรี่ที่อยู่ภายใต้และไฟล์, มันถูกเรียกว่า root directory  หรือ "the root" ของระบบไฟล์.

ไดเร็กตอรี่ที่อยู่ต่ำกว่า root หนึ่งระดับจะใช้เครื่องหมาย slash นำหน้าบ่อยๆ, เพื่อแสดงตำแหน่งของมันเพื่อป้องกันความสับสนกับไดเร็กตอรี่อื่นที่อาจมี ชื่อตรงกัน. เมื่อเริ่มระบบใหม่, ควรสำรวจไดเร็กตอรี่ root. มาดูว่าคุณจะเห็นอะไร:

emmy:~> cd /
emmy:/> ls
bin/ dev/ home/ lib/ misc/ opt/ root/ tmp/ var/
boot/ etc/ initrd/ lost+found/ mnt/ proc/ sbin/ usr/

Table 3-2. Subdirectories of the root directory

Directory Content
/bin  โปรแกรมพื้นฐาน, สำหรับใช้ในระบบ, ผู้ดูแลระบบและผู้ใช้ทั่วไป.
/boot  ไฟล์เริ่มการทำงานและเคอร์เนล, vmlinuz. ในลีนุกซ์รุ่นใหม่มีข้อมูล grub ด้วย. Grub ย่อมาจาก GRand Unified Boot loader เป็นตัวที่จะมาแทนโปรแกรม boot loader เก่า.
/dev  ประกอบด้วยไฟล์อ้างอิงถึง CPU peripheral hardware, ซึ่งแทนด้วยไฟล์ที่มีคุณสมบัติพิเศษ.
/etc  ไฟล์คอนฟิกของระบบที่สำคัญส่วนมากจะอยู่ใน /etc, ไดเร็กตอรี่นี้มีข้อมูลคล้ายกับข้อมูลในคอนโทรลพาเนลของวินโดว์.
/home  โฮมไดเร็กตอรี่ของผู้ใช้ทั่วไป.
/initrd  (มีเฉพาะลีนุกซ์บางรุ่น) ข้อมูลสำหรับการบูทระบบ. ห้ามลบทิ้ง!
/lib  ไฟล์ไลบรารี่, ไฟล์ที่จำเป็นต้องรวมเข้ากับโปรแกรมทุกชนิดในการใช้งานของระบบและโปรแกรมของผู้ใช้.
/lost+found  พาร์ติชั่นทุกตัวจะมี ไดเร็กตอรี่ lost+found อยู่ที่ไดเร็กตอรี่บนสุด. ไฟล์ที่อยู่ภายในคือไฟล์ที่เก็บข้อมูลเมื่อเกิดข้อผิดพลาดในระบบ.
/misc  สำหรับการใช้งานเอนกประสงค์.
/mnt  จุด mount point มาตรฐานสำหรับระบบไฟล์ภายนอก, คือสำหรับใช้กับ CD-ROM หรือ กล้องดิจิตอล.
/net  จุด mount point มาตรฐานสำหรับระบบไฟล์ข้ามเครื่อง (remote file systems)
/opt  ปกติจะเป็นที่เก็บโปรแกรมพิเศษและโปรแกรมที่มีขายสำหรับใช้เพิ่มเติมจากโปรแกรมทั่วไป.
/proc . ระบบไฟล์เสมือน ประกอบด้วยข้อมูลเกี่ยวกับทรัพยากรในระบบ. ข้อมูลเพิ่มเติมเกี่ยวกับความหมายของไฟล์ใน proc หาอ่านได้จากการใช้คำสั่ง man proc ในเทอร์มินอลวินโดว์. ไฟล์ proc.txt มีรายละเอียดของ virtual file system.
/root  โฮมไดเร็กตอรี่ของผู้ดูแลระบบ. จำไว้ว่าไดเร็กตอรี่ / แตกต่างจาก /root อย่างแรกคือไดเร็กตอรี่ root ส่วนอันที่สองคือไดเร็กตอรี่โฮมของผู้ใช้ที่ชื่อ root.
/sbin  โปรแกรมใช้โดยระบบและผู้ดูแลระบบ.
/tmp  พื้นที่ชั่วคราวใช้โดยระบบ, ข้อมูลจะถูกล้างตอนรีบูท, ดังนั้นอย่าใช้สำหรับเก็บข้อมูลใดๆในไดเร็กตอรี่นี้!
/usr  โปรแกรม, ไลบรารี่, เอกสารประกอบ, เป็นต้น.
/var . พื้นที่เก็บข้อมูลไฟล์ต่างๆและไฟล์ชั่วคราวที่สร้างโดยผู้ใช้, เช่น log files, mail queue, the print spooler area, พื้นที่ชั่วคราวสำหรับไฟล์ที่ดาวน์โหลดจากอินเตอร์เนท, หรือที่เก็บอิมเมจไฟล์ของซีดีก่อนที่จะเขียนแผ่นซีดี.

คุณจะรู้ได้อย่างไรว่าไดเร็กตอรี่อยู่ในพาร์ติชั่นใหน? เราสามารถใช้คำสั่ง df และอ็อพชั่นจุด (.) เพื่อแสดงพาร์ติชั่นที่ไดเร็กตอรี่อยู่, และข้อมูลเกี่ยวกับพื้นที่บนพาร์ติชั่นที่ถูกใช้งาน.

sandra:/lib> df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/hda7 980M 163M 767M 18% /

เป็นเรื่องธรรมดา, ทุกไดเร็กตอรี่ภายใต้ root จะอยู่บน root partition, ยกเว้นมันถูกแยกให้อยู่ในรายการจาก df (หรือคำสั่ง df -h)

 รายละเอียดอ่านเพิ่มเติมได้จาก man hier.

3.1.3.2. The file system in reality

สำหรับผู้ใช้ส่วนใหญ่และสำหรับงานทั่วไปของผู้ดูแลระบบ, การมองไฟล์และไดเร็กตอรี่เป็นโครงสร้างแบบต้นไม้เป็นเรื่องที่พอใช้ได้. อย่างไรก็ตาม, เครื่องคอมพิวเตอร์ไม่เข้าใจเกี่ยวกับต้นไม้หรือโครงสร้างแบบต้นไม้นี้.

พาร์ติชั่นทุกตัวมีระบบไฟล์ของมันเอง. ลองนึกภาพมองระบบไฟล์เหล่านั้นรวมกัน, เราจะเห็นภาพรวมของระบบเป็นเหมือนโครงร่างของต้นไม้, แต่ในการทำงานจริงมันไม่ง่ายอย่างนั้น. ในระบบไฟล์, ไฟล์จะอ้างถึงด้วย inode, ซึ่งเป็นตัวเลขของข้อมูลเกี่ยวกับข้อมูลจริงที่สร้างเป็นไฟล์: ใครเป็นเจ้าของไฟล์และข้อมูลเกี่ยวกับพื้นที่ที่ใช้เก็บในฮาร์ดดิสก์.

ทุกพาร์ติชั่นมีชุดของ inodes ของตัวเอง; เมื่อใช้ในระบบที่มีพาร์ติชั่นหลายพาร์ติชั่น, ไฟล์ที่มีไอโหนดซ้ำกันสามารถเกิดขึ้นได้.

ไอโหนดแต่ละตัวแสดงโครงสร้างข้อมูลบนฮาร์ดดิสก์, เก็บคุณสมบัติของไฟล์, รวมทั้งตำแหน่งจริงที่ใช้เก็บข้อมูลไฟล์. เมื่อฮาร์ดดิสก์ถูกล้างข้อมูลเพื่อรองรับการเก็บข้อมูล, ซึ่งส่วนใหญ่จะทำตอนเริ่มติดตั้งระบบ หรือเมื่อเพิ่มฮาร์ดดิสก์พิเศษเข้าไประบบ, จะมีการสร้างไอโหนดขึ้นมาจำนวนหนึ่งต่อพาร์ติชั่นที่สร้างขึ้น. จำนวนนี้จะเป็นจำนวนสูงสุดของไฟล์, ของทุกชนิดไฟล์ (รวมทั้งไดเร้กตอรี่, ไฟล์พิเศษ, ลิ้งค์เป็นต้น) ที่สามารถมีได้ในเวลาเดียวกันบนพาร์ติชั่น. เราสามารถคำนวนหาจำนวนไอโหนดได้จาก 1 ไอโหนดต่อ 2 ถึง 8 กิโลไบท์ของฮาร์ดดิสก์.

 เมื่อมีการสร้างไฟล์ใหม่, มันจะได้รับไอโหนดที่ยังไม่มีการใช้. ในไอโหนดนั้นจะมีข้อมูลต่อไปนี้:

  •  เจ้าของและกลุ่มของเจ้าของไฟล์.

  •  ชนิดของไฟล์ (ไฟล์ธรรมดา, ไดเร็กตอรี่, ...)

  • ค่าเพอร์มิชชั่นของไฟล์ ดู หัวข้อ 3.4.1

  •  วันที่และเวลาที่สร้างไฟล์, เวลาที่อ่านครั้งสุดท้ายและมีการเปลี่ยนแปลงข้อมูล.

  •  วันที่และเวลาที่ข้อมูลนี้มีการเปลี่ยนแปลงในไอโหนด.

  •  จำนวนของลิ่งค์ที่ชี้มาไฟล์นี้ (ดูตอนหลังของบทนี้).

  •  ขนาดไฟล์

  •  ที่อยู่ที่ชี้ไปยังข้อมูลสถานที่จริงของไฟล์ข้อมูล

ข้อมูลที่ไม่ได้รวมอยู่ในไอโหนด, คือชื่อไฟล์และไดเร็กตอรี่. ข้อมูลนี้จะเก็บอยู่ในไดเร็กตอรี่ไฟล์พิเศษ. โดยการเปรียบเทียบชื่อไฟล์กับหมายเลขไอโหนด, ระบบสามารถสร้างเป็นโครงร่างต้นไม้ที่ผู้ใช้เข้าใจ. ผู้ใช้สามารถแสดงหมายเลขไอโหนดด้วยคำสั่ง ls และใช้อ็อพชั่น -i. ไอโหนดมีพื้นที่เก็บบนฮาร์ดดิสก์แยกไว้โดยเฉพาะเป็นของมันเอง.

3.2. Orientation in the file system

3.2.  การทำงานกับระบบไฟล์

3.2.1. The path

เมื่อคุณอยากให้ระบบทำงานตามสั่ง, โดยมากคุณไม่จำเป็นต้องใส่พาธที่เก็บคำสั่งแบบเต็ม. ยกตัวอย่าง, เรารู้แล้วว่าคำสั่ง ls อยู่ในไดเร็กตอรี่ /bin (จากการตรวจสอบด้วยคำสั่ง which -a ls), เวลาใช้เราไม่จำเป็นต้องใช้คำสั่ง /bin/ls เพื่อเรียกดูข้อมูลของไดเร็กตอรี่ปัจจุบัน.

ตัวแปร environment ที่ชื่อ PATH จะทำงานเกี่ยวข้องกับเรื่องนี้. ข้อมูลในตัวแปรจะมีรายการของไดเร็กตอรี่ที่มีไฟล์ที่เอ็กซีคิ้วท์ได้บรรจุ อยู่, และส่งผลให้ผู้ใช้ประหยัดเวลาในการพิมพ์และไม่ต้องจำว่าคำสั่งอยู่ในไดเร็ก ตอรี่ใหน. ดังนั้นข้อมูลตัวแปร path จะมีไดเร็กตอรี่หลายอันที่มีชื่อ bin อยู่ในชื่อของมัน, ดังตัวอย่างด้านล่าง. คำสั่ง echo ใช้แสดงข้อมูล ("$") ของตัวแปร PATH:

rogier:> echo $PATH
/opt/local/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin/:/bin

ในตัวอย่างนี้, ไดเร็กตอรี่ /opt/local/bin, /usr/X11R6/bin, /usr/bin, /usr/sbin และ /bin จะถูกใช้สำหรับค้นหาคำสั่งหรือโปรแกรมเรียงตามลำดับ. เมื่อไรที่มันค้นเจอ, การค้นจะหยุด, แม้ว่ามันจะไม่ได้ค้นทุกไดเร็กตอรี่ที่มีในพาธ. วิธีการนี้อาจทำให้เกิดสถานะการณ์แปลกๆ. ตัวอย่างแรกตามด้านล่างนี้, ผู้ใช้บางคนที่รู้ว่ามีโปรแกรม sendsms อยู่สามารถเรียกใช้งานเพื่อส่งข้อความ SMS , ส่วนอีกคนแม้ว่าจะอยู่บนระบบเดียวกัน, แต่เธอไม่สามารถเรียกใช้งานได้. ข้อแตกต่างที่เป็นสาเหตุให้เรียกไม่ได้คือการคอนฟิกตัวแปร PATH ที่แตกต่างกัน.

[jenny@blob jenny]$ sendsms
bash: sendsms: command not found
[jenny@blob jenny]$ echo $PATH
/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/home/jenny/bin
[jenny@blob jenny]$ su - tony
Password:
tony:~>which sendsms
sendsms is /usr/local/bin/sendsms

tony:~>echo $PATH
/home/tony/bin.Linux:/home/tony/bin:/usr/local/bin:/usr/local/sbin:\
/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin

ให้สังเกตุ การใช้คำสั่ง su (switch user), ซึ่งอนุญาตให้คุณรันเชลล์ใน environment ของผู้ใช้คนอื่น, บนสถานะที่คุณรู้รหัสผ่านของผู้ใช้อื่นนั้น.

เครื่องหมาย bachslash แสดงการต่อเนื่องของบรรทัดไปยังบรรทัดต่อไป, โดยไม่มี Enter แยกบรรทัดออกจากกัน.

ตัวอย่างถัดมา, ผู้ใช้ต้องการเรียกใช้คำสั่ง wc (word count) เพื่อตรวจสอบจำนวนบรรทัดของไฟล์, แต่ไม่มีอะไรเกิดขึ้น และเขาได้ยกเลิกคำสั่งโดยการกด Ctrl+C:

jumper:~> wc -l test

(Ctrl-C)
jumper:~> which wc
wc is hashed (/home/jumper/bin/wc)

jumper:~> echo $PATH
/home/jumper/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin

การใช้คำสั่ง which แสดงให้เราเห็นว่าผู้ใช้รายนี้มีไดเร็กตอรี่ bin อยู่ในโฮมไดเร็กตอรี่, และมีโปรแกรมที่เรียกว่า wc เหมือนกัน. เนื่องจากโปรแกรมในโฮมไดเร็กตอรี่ถูกหาเจอในการหาพาธสำหรับเรียกใช้โปรแกรม wc, โปรแกรม ("ทำเอง") จะถูกเรียกใช้งาน, โดยอาจไม่เข้าใจข้อมูลอินพุท, ดังนั้นเราจึงต้องหยุดการทำคำสั่ง. มีหลายวิธีในการแก้ปัญหานี้ (ปกติมีหลายวิธีในการแก้ปัญหาในระบบยูนิกซ์/ลีนุกซ์): ทางหนึ่งคือการเปลี่ยนชื่อของโปรแกรม wc ที่ผู้ใช้สร้างขึ้น, หรือผู้ใช้ป้อนพาธเต็มของคำสั่งที่ต้องการเรียกใช้งาน, ซึ่งพาธเต็มสามารถหาได้ด้วยคำสั่ง which และตามด้วยอ็อพชั่น -a.

ถ้าผู้ใช้มีการใช้งานโปรแกรมในไดเร็กตอรี่อื่นบ่อยๆ, เขาสามารถเปลี่ยนค่าพาธให้มาดูไดเร็กตอรี่ของเขาในตอนท้าย:

jumper:~> export PATH=/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin:/home/jumper/bin

Note Changes are not permanent!
 

หมายเหตุ เมื่อใช้คำสั่ง export ในเชลล์, การเปลี่ยนแปลงจะมีผลชั่วคราวเฉพาะเซ็สชั่นนั้นเท่านั้น(จนกว่าคุณจะ ล๊อกเอ้าท์). เมื่อเปิดเซสชั่นใหม่, แม้ว่าเซสชั่นเก่าจะยังทำงาน, ค่าพาธใหม่จะไม่มีผลต่อเซสชั่นใหม่. เราจะอธิบายใน หัวข้อ 7.2 ในการทำให้การเปลี่ยนแปลง environment นี้มีผลถาวร, โดยเพิ่มบรรทัดเหล่านี้ลงในคอนฟิกไฟล์.

3.2.2. Absolute and relative paths

พาธ, ซึ่งเป็นแนวทางที่คุณต้องการตามดูโครงร่างต้นไม้เพื่อไปยังไฟล์ที่ต้องการ, สามารถอ้างถึงทั้งจากลำต้นของต้นไม้ (คือไดเร็กตอรี่ / หรือ root directory). วิธีนี้, จะเริ่มพาธด้วยเครื่องหมาย slash และจะเรียกว่าพาธจริงหรือ absolute path, เพราะว่ามันไม่มีทางผิดพลาด: มีเพียงหนึ่งไฟล์ในระบบที่ตรงกับที่ต้องการ.

ในกรณีอื่น, ค่าพาธไม่ได้เริ่มต้นด้วยเครื่องหมาย slash และอาจสับสนระหว่าง ~/bin/wc (ในโฮมไดเร็กตอรี่ของผู้ใช้) และ bin/wc ใน /usr, จากตัวอย่างที่แล้ว. ค่าพาธที่ไม่ได้เริ่มต้นด้วย slash จะเป็นพาธที่อ้างอิงกับตัวอื่น.

ในพาธอ้างอิงหรือ relative path มีการใช้เครื่องหมายจุดเดี่ยว . และจุดคู่ .. สำหรับแทนไดเร็กตอรี่ปัจจุบันและไดเร็กตอรี่แม่. โดยมีตัวอย่างดังนี้:

  • เมื่อคุณต้องการคอมไพล์ซอร์สโค้ด, คู่มือการติดตั้งมักจะบอกให้คุณรันคำสั่ง ./configure, ซึ่งจะรันโปรแกรม configure ที่อยู่ในไดเร็กตอรี่ปัจจุบัน (ที่มากับโค้ดใหม่), ไม่เหมือนกับการรันโปรแกรมคอนฟิกอื่นในระบบ.

  •  ในไฟล์ HTML, พาธอ้างอิงมักใช้เพื่อสร้างโฮมเพจให้ง่ายต่อการย้ายไปยังส่วนอื่นของเวบ:

    <img alt="Garden with trees" src="../images/garden.jpg">

  •  สังเกตุความแตกต่างอีกครั้ง:

    theo:~> ls /mp3
    ls: /mp3: No such file or directory
    theo:~>ls mp3/
    oriental/ pop/ sixties/

3.2.3. ไฟล์และไดเร็กตอรี่ที่มีความสำคัญสูงสุด

3.2.3.1. The kernel

เคอร์เนลเป็นหัวใจของระบบ. มันจัดการสื่อสารระหว่างฮาร์ดแวร์ภายใต้การควบคุมและอุปกรณ์รอบข้าง. เคอร์เนลยังมีหน้าที่ควบคุมโพรเซสและเดมอน (server processes) ให้เริ่มทำงานหรือหยุดทำงานในเวลาที่ถูกต้อง. เคอร์เนลมีหน้าที่สำคัญอื่นๆอีกมาก, มากจนมีการส่งเมล์หางว่าวเป็นพิเศษของกลุ่มพัฒนาเคอร์เนลนี้อย่างเดียว, เพื่อแลกเปลี่ยนข้อมูลซึ่งมีจำนวนมาก. รายละเอียดของเคอร์เนลมีมากเกินที่จะบรรยายในหนังสือนี้. ตอนนี้ให้เรารู้เพียงว่าเคอร์เนลเป็นไฟล์ที่สำคัญมากที่สุดของระบบ.

3.2.3.2. The shell

3.2.3.2.1.  เชลล์คืออะไร

เมื่อผู้เขียนดูคำอธิบายถึงแนวคิดของ เชลล์, มันสร้างความสับสนเกินกว่าที่คาด. คำอธิบายต่างๆ, ไม่ว่าจะเป็นการเปรียบเทียบง่ายๆ "เชลล์เปรียบเหมือนแกนบังคับล้อของรถยนต์", ไปจนถึงการกล่าวอย่างคลุมเครือในคู่มือ Bash ที่พูดว่า "Bash เป็น อินเตอร์พรีทเตอร์ภาษาคำสั่งที่ทำงานได้กับ sh-compatible", หรือคำประโยค, "เชลล์จัดการเรื่องการติดต่อระหว่างระบบและผู้ใช้". แต่เชลล์มีความหมายมากกว่านั้น.

วิธีมองเชลล์ที่ดีที่สุดคือเปรียบเทียบเป็นวิธีการพูดกับเครื่อง คอมพิวเตอร์, ภาษา. ผู้ใช้ส่วนมากรู้ว่ามีภาษาอื่น, เช่นภาษา ชี้-แล้ว-คลิก ของเดสก์ท้อป. แต่กับภาษาที่จะคุยกับคอมพิวเตอร์, ขณะที่ผู้ใช้รอเลือกสิ่งที่คอมพิวเตอร์หยิบยื่นให้. มันเป็นเรื่องยากสำหรับนักเขียนโปรแกรมที่จะรวมอ็อพชั่นทุกอย่างของการสั่ง งานให้อยู่ในรูป GUI-format. ดังนั้น, GUI ส่วนมากจึงมีความสามารถน้อยกว่าคำสั่งหรือคำสั่งที่กำหนดการทำงานในส่วน หลัง.

เชลล์, ในทางกลับกัน, เป็นวิธีติดต่อกับระบบในระดับก้าวหน้า, เนื่องจากมันอนุญาตให้ติดต่อแบบสองทางและผู้ใช้สามารถเริ่มการติดต่อได้. คู่สนทนาทั้งสองด้านมีสิทธิ์เท่ากัน, ดังนั้นการทดสอบแนวทางใหม่ๆสามารถทำได้. เชลล์ทำให้ผู้ใช้ทำงานกับระบบได้อย่างคล่องตัว. และยังทำให้ผู้ใช้สร้างคำสั่งใช้งานแบบอัตโนมัติได้.

3.2.3.2.2.  ชนิดของเชลล์

 เหมือนกับผู้คนที่รู้ภาษาอื่นและภาษาถิ่น, คอมพิวเตอร์รู้จักเชลล์หลายชนิด:

  • sh หรือ Bourne Shell: เชลล์รุ่นแรกที่ยังมีใช้ในระบบยูนิกซ์และใน UNIX related environments. เป็นเชลล์พื้นฐาน, โปรแกรมมีขนาดเล็กและมีความสามารถจำกัด. เมื่อใช้กับโหมด POSIX-compatible, bash จะเลียนแบบการทำงานของเชลล์นี้.

  • bash หรือ Bourne Again SHell: เชลล์มาตรฐานของโครงการ GNU, ทันสมัยและใช้งานได้คล่องตัว. เป็นเชลล์ที่แนะนำสำหรับผู้เริ่มต้นใช้ลีนุกซ์และขณะเดียวกันผู้ใช้ที่ชำนาญ แล้วก็สามารถใช้ได้อย่างมีประสิทธิภาพ. บนลีนุกซ์, bash เป็นเชลล์มาตรฐานสำหรับผู้ใช้ทั่วไป. เชลล์นี้ถูกเรียกว่า superset ของ Bourne shell, เนื่องจากมันมี add-ons และ plug-ins เพิ่มเติม. นี่หมายความว่า Bourne Again SHell ทำงานเข้ากันได้กับ Bourne Shell: คำสั่งที่ทำงานได้กับ sh, จะทำงานได้กับ bash. แต่ในทางกลับกันอาจใช้กันไม่ได้. ตัวอย่างในหนังสือนี้ใช้ bash.

  • csh หรือ C SHell: รูปแบบของเชลล์นี้ลอกแบบมาจากภาษาซี. บางครั้งนักเขียนโปรแกรมก็ต้องการใช้งาน.

  • tcsh หรือ Turbo C SHell: เป็นรุ่นปรับปรุงของ C SHell, มีหน้าจอติดต่อกับผู้ใช้ที่ใช้งานง่ายและทำงานรวดเร็ว.

  • ksh หรือ Korn SHell: บางครั้งเป็นที่ต้องการของคนที่มีพื้นจากระบบยูนิกซ์มาก่อน. เป็นรุ่นปรับปรุงของ Bourne Shell; มีคอนฟิกมาตรฐานที่ซับซ้อนไม่เหมาะกับคนที่เริ่มใช้งานใหม่.

 ในไฟล์ /etc/shells มีข้อมูลภาพรวมของเชลล์ที่ใช้บนระบบลีนุกซ์:

mia:~> cat /etc/shells
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh

Note  บอร์นเชลล์หลอก
 

 หมายเหตุ /bin/sh ปกติจะลิ้งค์ไป Bash, ซึ่งจะทำงานใน Bourne shell compatible mode เมื่อถูกเรียกวิธีนี้.

 เชลล์ดีฟ้อลท์ของคุณจะถูกตั้งค่าไว้ในไฟล์ /etc/passwd, ดังตัวอย่างด้านล่างสำหรับผู้ใช้ mia:

mia:L2NOfqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash

ในการเปลี่ยนจากเชลล์หนึ่งไปอีกเชลล์, ทำได้โดยการป้อนชื่อเชลล์ใหม่ในเทอร์มินอลที่ใช้. ระบบจะหาไดเร็กตอรี่ที่มีชื่อไฟล์นั้นด้วยการใช้ค่าในตัวแปร PATH, และเนื่องจากเชลล์เป็นไฟล์ที่เอ็กซีคิ้วท์ได้ (โปรแกรม), เชลล์ปัจจุบันจะสั่งเอ็กซีคิ้วท์มัน. ปกติหลังการเอ็กซีคิ้วท์จะได้ prompt ใหม่, เพราะว่าเชลล์แต่ละตัวมี prompt ที่เป็นเอกลักษณ์:

mia:~> tcsh
[mia@post21 ~]$

3.2.3.2.3. Which shell am I using?

ถ้าคุณไม่รู้ว่าตัวเองใช้เชลล์อะไรอยู่, ให้ตรวจสอบจากบรรทัดข้อมูล account ของคุณในไฟล์ /etc/passwd หรือจะใช้คำสั่ง

echo $SHELL

3.2.3.3. Your home directory

โฮมไดเร็กตอรี่ของคุณเป็นดีฟ้อลท์ไดเร็กตอรี่เมื่อคุณเข้าระบบ. โดยมากมันจะเป็นไดเร็กตอรี่ย่อยของ /home, แม้ว่าบางครั้งก็อาจมีการเปลี่ยนแปลง. โฮมไดเร็กตอรี่ของคุณอาจอยู่บนฮาร์ดดิสก์ของเซิฟเวอร์ในเครือข่าย. ในกรณีนั้นโฮมไดเร็กตอรี่ของคุณอาจเป็น /nethome/your_user_name. หรืออาจเป็น /disk5/HU/07/jgillard. ขึ้นอยู่กับการตั้งค่าโดยผู้ดูแลระบบ.

ไม่ว่าจะเป็นไดเร็กตอรี่ใหน, คุณไม่ต้องกังวลในเรื่องนี้. พาธถูกต้องที่ชี้ไปโฮมไดเร็กตอรี่ของคุณจะเก็บไว้ในตัวแปร HOME, กรณีโปรแกรมอาจต้องการข้อมูลพาธนี้. คุณสามารถตรวจดูข้อมูลของตัวแปรนี้ด้วยคำสั่ง echo:

orlando:~> echo $HOME
/nethome/orlando

คุณสามารถทำอะไรก็ได้ในโฮมไดเร็กตอรี่ของคุณ. สามารถใส่ไฟล์และไดเร็กตอรี่เท่าไรก็ได้ตามที่คุณต้องการ, แม้กระนั้นจำนวนข้อมูลสูงสุดจะถูกจำกัดเพราะฮาร์ดแวร์และขนาดของพาร์ติชั่น, และบางครั้งก็ถูกจำกัดด้วยโควต้าที่ผู้ดูแลระบบตั้งไว้. การจำกัดขนาดพื้นที่บนฮาร์ดดิสก์เป็นเรื่องปกติที่ทำกันเนื่องจากพื้นที่ ฮาร์ดดิสก์ยังคงมีราคาแพง. ทุกวันนี้, การจำกัดพื้นที่จะถูกใช้กันอย่างกว้างขวาง. คุณสามารถตรวจสอบถ้าคุณถูกจำกัดพื้นที่ใช้งานได้ด้วยคำสั่ง quota:

pierre@lamaison:/> quota -v
Diskquotas for user pierre (uid 501): none

กรณ๊ที่มีการใช้โควต้า, คุณจะได้รายการของพาร์ติชั่นที่จำกัดและค่าจำกัดเฉพาะอื่นๆ. การใช้เกินค่าที่จำกัดไว้อาจทำได้หากใช้งานในช่วงที่ระบบทำงานเบา. รายละเอียดเพิ่มเติมสามารถดูด้วยคำสั่ง info quota หรือ man quota.

Note No Quota?
 

 ถ้าระบบของคุณไม่มีคำสั่ง quota, แสดงว่าไม่มีการจำกัดการใช้งานระบบไฟล์.

เครื่องหมายแสดงโฮมไดเร็กตอรี่ของคุณแสดงด้วย tilde (~), เป็นทางลัดไป /path_to_home/user_name. ข้อมูลพาธเดียวกันนี้เก็บไว้ในตัวแปร HOME, ดังนั้นคุณไม่ต้องทำอะไรในการนำมาใช้. ตัวอย่าง: การเปลี่ยนไดเร็กตอรี่จาก /var/music/albums/arno/2001 ไปยังไดเร็กตอรี่ images ในโฮมไดเร็กตอรี่ของคุณสามารถสั่งด้วยคำสั่ง:

rom:/var/music/albums/arno/2001> cd ~/images

rom:~/images> pwd
/home/rom/images

 ตอนหลังๆของบทนี้ เราจะพูดถึงคำสั่งในการจัดการไฟล์และไดเร็กตอรี่เพื่อให้โฮมไดเร็กตอรี่ของคุณดูเป็นระเบียบมากขึ้น.

3.2.4. The most important configuration files

ดังที่เราได้พูดไปแล้ว, คอนฟิกไฟล์ส่วนมากจะเก็บไว้ในไดเร็กตอรี่ /etc. การดูข้อมูลในไฟล์สามารถดูด้วยคำสั่ง cat, ซึ่งเป็นคำสั่งส่งเทกซ์ไฟล์ไปยังเอาท์พุทมาตรฐาน (ปกติแล้วคือจอมอนิเตอร์). รูปแบบคำสั่งก็ไม่ยุ่งยาก:

cat file1 file2 ... fileN

ในบทนี้เราจะพูดถึงภาพรวมของไฟล์คอนฟิกที่ใช้ทั่วไป. อาจไม่ใช่รายการที่สมบูรณ์นัก. เมื่อเพิ่มชุดโปรแกรมพิเศษในระบบ อาจต้องเพิ่มไฟล์คอนฟิกพิเศษลงไปในไดเร็กตอรี่ /etc. เมื่ออ่านคอนฟิกไฟล์, คุณจะพบว่ามันมีคำอธิบายค่าต่างๆที่เขียนได้ดี. บางไฟล์ยังมี man page ซึ่งมีคู่มือเฉพาะ, เช่น man group.

Table 3-3. Most common configuration files

File Information/service
aliases

ไฟล์รายการชื่อเมล์สำหรับใช้กับเซิฟเวอร์ Sendmail และ Postfix. ระบบยูนิกซ์ส่วนใหญ่จะทำหน้าที่เป็นเมล์เซิฟเวอร์ด้วย, และระบบลีนุกซ์แทบทุกสายพันธ์จะมีชุดโปรแกรม Sendmail มาด้วย. ในไฟล์นี้ ชื่อของผู้ใช้ระบบจะจับคู่กับชื่อจริงที่ใช้ใน E-mail address.

apache  คอนฟิกไฟล์ของ Apache web server.
bashrc

คอนฟิกไฟล์ของระบบสำหรับ Bourne Again SHell. มีรายละเอียดของฟังชั่นและ aliases สำหรับผู้ใช้ทั้งหมด. เชลล์อื่นๆอาจมีคอนฟิกไฟล์ของตัวเองเช่น cshrc.

crontab and the cron.* directories

ค่าคอนฟิกของงานที่ต้องทำตามเวลาที่กำหนดเช่น - การสำรองข้อมูล, อัพเดทฐานข้อมูลระบบ, ลบข้อมูลระบบ, หมุนเวียน logs เป็นต้น.

default  ค่าดีฟ้อลท์อ็อพชั่นสำหรับคำสั่งบางคำสั่ง, เช่น useradd.
filesystems  ระบบไฟล์ที่ระบบรู้จัก: ext3, vfat, iso9660 เป็นต้น.
fstab  รายการพาร์ติชั่นและ mount points ของพาร์ติชั่น.
ftp*  คอนฟิกของ ftp-server: ใครที่สามารถเชื่อมต่อ, ส่วนใหนของระบบที่จะให้เข้าใช้งาน เป็นต้น.
group  คอนฟิกไฟล์ของกลุ่มผู้ใช้. ใช้คำสั่ง groupadd, groupmod และ groupdel ในการแก้ไขไฟล์นี้. การแก้ไขด้วยอีดิเตอร์อื่นอาจทำได้ถ้าคุณมั่นใจ.
hosts

รายการของเครื่องที่ติดต่อผ่านเครือข่าย, โดยไม่ต้องใช้บริการหาชื่อโดเมน. This has nothing to do with the system's network configuration, which is done in /etc/sysconfig

inittab  ข้อมูลของการบูทระบบ: โหมด, จำนวนของเทกซ์คอนโซล เป็นต้น.
issue  ข้อมูลเกี่ยวกับรุ่นลีนุกซ์ (เวอร์ชั่น และ/หรือ ข้อมูลเคอร์เนล).
ld.so.conf  ตำแหน่งที่เก็บไลบรารี่ไฟล์.
lilo.conf, silo.conf, aboot.conf etc.  ข้อมูลสำหรับ LInux LOader, ระบบการบูทเดิมที่ตอนนี้ค่อยๆเปลี่ยนมาใช้ GRUB แทน.
logrotate.*  การวนของ logs, ระบบการป้องกันข้อมูล logs เต็ม.
mail  ไดเร็กตอรี่ประกอบด้วยคำสั่งสำหรับการทำงานของเมล์เซิฟเวอร์.
modules.conf  คอนฟิกของโมดูลที่ไว้เปิดความสามารถพิเศษ (drivers).
motd  ข้อความประจำวัน: แสดงแก่ผู้ใช้ทุกคนที่เชื่อมเข้าระบบ (ใน textmode), อาจใช้โดยผู้ดูแลระบบในการประกาศข่าวสารการบริการ/บำรุงรักษาระบบ เป็นต้น.
mtab  ระบบไฟล์ที่ mounted ในระบบปัจจุบัน.
nsswitch.conf  ลำดับในการติดต่อกับระบบหาชื่อโดเมนเมื่อมีความต้องการหาข้อมูลชื่อโฮสท์.
pam.d  คอนฟิกของ authentication modules.
passwd  รายการของผู้ใช้ในระบบ. สามารถแก้ไขได้โดยใช้คำสั่ง useradd, usermod, และ userdel. อาจใช้อิดิเตอร์อื่นในการแก้ไขได้ถ้าคุณมั่นใจ.
printcap  คอนฟิกไฟล์ของเครื่องพิมพ์ที่ใช้. ไม่จำเป็นอย่าแก้ไขไฟล์นี้.
profile  คอนฟิกของระบบสำหรับองค์ประกอบของเชลล์: ตัวแปร, คุณสมบัติเริ่มต้นของไฟล์, ข้อจำกัดของทรัพยากร เป็นต้น.
rc*  ไดเร็กตอรี่ข้อมุลบริการที่ active สำหรับแต่ละระดับการทำงาน.
resolv.conf  ลำดับในการเรียกใช้บริการ DNS (Domain Name Servers only).
sendmail.cf  คอนฟิกไฟล์หลักสำหรับ Sendmail server.
services  การเชื่อมต่อที่เครื่องนี้รองรับ (พอร์ทที่เปิด).
sndconfig or sound  คอนฟิกของการ์ดเสียงและเรื่องเกี่ยวกับระบบเสียง.
ssh  ไดเร็กตอรี่ที่ประกอบด้วยคอนฟิกไฟล์สำหรับ secure shell client และ server.
sysconfig  ไดเร็กตอรี่ประกอบด้วยคอนฟิกไฟล์ ระบบ: เม้าส์, คีย์บอร์ด, เครือข่าย, เดสก์ท้อป, สัญญาณนาฬิการะบบ, การจัดการระบบไฟ เป็นต้น (เฉพาะลีนุกซ์ RedHat)
X11

การตั้งค่าสำหรับ graphical server, X. ลีนุกซ์ RedHat จะใช้โปรแกรม XFree, ซึ่งจะสื่อถึงชื่อของคอนฟิกไฟล์หลักคือ XFree86Config. ยังมีข้อมูลไดเร็กตอรี่ทั่วไปสำหรับโปรแกรมจัดการวินโดว์ที่ใช้ในระบบ, เช่น gdm, fvwm, twm เป็นต้น.

xinetd.* or inetd.conf

คอนฟิกไฟล์สำหรับอินเตอร์เนทเซอร์วิสที่รันจาก อินเตอร์เนทเซอร์วิสเดมอนของระบบ (extended)

เนื้อหาในหนังสือเล่มนี้จะมีข้อมูลเกี่ยวกับไฟล์เหล่านี้และเจาะลึกบางตัวในรายละเอียด.

3.2.5. The most common devices

อุปกรณ์หรือ Device, หมายถึงอุปกรณ์รอบข้างที่เชื่อมต่อกับพีซีที่ไม่ใช่ตัว CPU เอง, จะถูกใส่ในระบบที่ไดเร็กตอรี่ /dev. วิธีการจัดการของยูนิกซ์แบบนี้มีประโยชน์คือทั้งผู้ใช้และระบบไม่ต้องกังวล เกี่ยวกับสเป็คของอุปกรณ์มากนัก.

ผู้ใช้ลีนุกซ์หรือยูนิกซ์มือใหม่จะมึนกับชื่อใหม่ๆมากมายที่เขาจะต้อง เรียนรู้. เพื่อให้ง่ายเราจะสรุปรายการของอุปกรณ์ทั่วไปดังตารางด้านล่าง.

Table 3-4. Common devices

Name Device
cdrom CD drive
console Special entry for the currently used console.
cua* Serial ports
dsp* Devices for sampling and recording
fd* Entries for most kinds of floppy drives, the default is /dev/fd0, a floppy drive for 1.44 MB floppies.
hd[a-t][1-16] Standard support for IDE drives with maximum amount of partitions each.
ir* Infrared devices
isdn* Management of ISDN connections
js* Joystick(s)
lp* Printers
mem Memory
midi* midi player
mixer* and music Idealized model of a mixer (combines or adds signals)
modem Modem
mouse (also msmouse, logimouse, psmouse, input/mice, psaux) All kinds of mouses
null Bottomless garbage can
par* Entries for parallel port support
pty* Pseudo terminals
radio* For Radio Amateurs (HAMs).
ram* boot device
sd* SCSI disks with their partitions
sequencer For audio applications using the synthesizer features of the sound card (MIDI-device controller)
tty* Virtual consoles simulating vt100 terminals.
usb* USB card and scanner
video* For use with a graphics card supporting video.

3.2.6. The most common variable files

ในไดเร็กตอรี่ /var เราจะพบชุดของไดเร็กตอรี่ที่เก็บข้อมูลเฉพาะของ non-constant data ข้อมูลที่ไม่คงที่ (ตรงข้ามกับโปรแกรมหรือคอนฟิกไฟล์, ที่เปลี่ยนไม่บ่อยหรือไม่เปลี่ยนเลย). ทุกไฟล์ที่มีการเปลี่ยนแปลงบ่อย, เช่น log ไฟล์, เมล์บ็อกซ์, lock files, spooler เป็นต้น. ถูกเก็บไว้ในไดเร็กตอรี่ย่อยของ /var.

ในแง่ความปลอดภัย ไฟล์เหล่านี้ปกติจะเก็บแยกส่วนจากระบบไฟล์หลัก, ดังนั้นเราจึงไม่ต้องกังวลและตั้งค่า permission ที่เข้มงวดถ้าจำเป็น. มีไฟล์จำนวนหนึ่งที่ต้องการเปิดใช้งานมากกว่าปกติ, เช่น /var/tmp, ซึ่งต้องการให้ทุกคนสามารถเขียนได้. การอ่านเขียนโดยผู้ใช้จะเกิดขึ้นที่นี่, ซึ่งอาจเป็นการกระทำของผู้ใช้อินเตอร์เนทนิรนามที่เชื่อมต่อกับระบบของคุณ. นี่เป็นเหตุผลส่วนหนึ่งว่าทำไมไดเร็กตอรี่ /var รวมทั้งไดเร็กตอรี่ย่อยจึงอยู่ในพาร์ติชั่นแยกต่างหาก. ด้วยวิธีนี้, จะทำให้ไม่เกิดความเสียหายต่อระบบที่เกิดจากมีคนส่งเมล์ขยะจำนวนมากมาให้ ระบบคุณ,

Note /var/tmp and /tmp
 

ไฟล์ใน /tmp สามารถลบได้โดยไม่ต้องแจ้งเตือน, ด้วยการทำงานปกติของระบบหรือเพราะระบบรีบูท. ในบางระบบ (เฉพาะงาน), จะทำการลบข้อมูลใน /var/tmp โดยไม่แจ้งเตือนล่วงหน้า. อย่างไรก็ตาม, เพราะมันไม่ใช่การทำงานตามค่าดีฟ้อลท์, เราแนะนำให้ใช้ไดเร็กตอรี่ /var/tmp สำหรับเก็บข้อมูลไฟล์ที่ใช้ชั่วคราว. เมื่อสงสัย, ตรวจสอบกับผู้ดูแลระบบของคุณ. ถ้าคุณจัดการระบบด้วยตัวคุณเอง, คุณสามารถแน่ใจได้ว่ามันเป็นที่ปลอดภัยถ้าคุณไม่เปลี่ยนมัน

ไม่ว่าจะทำอะไร, พยายามเข้มงวดกับสิทธิ์ที่ให้แก่ผู้ใช้ทั่วไป - ไม่ควรเก็บไฟล์ใต้ไดเร็กตอรี่ root (/) โดยตรงของระบบไฟล์. อย่าเก็บในไดเร็กตอรี่ /usr หรือไดเร็กตอรี่ย่อยบางตัวหรือในที่หวงห้าม. จะทำให้ระบบมีความปลอดภัย.

หนึ่งในระบบความปลอดภัยของระบบยูนิกซ์, ซึ่งถูกนำมาใช้กับเครื่องลีนุกซ์ด้วยเหมือนกัน, คือวิธีการเก็บ log, ซึ่งเก็บการทำงานทุกอย่างของผู้ใช้, โพรเซส, system events เป็นต้น. คอนฟิกไฟล์ที่เรียกว่า syslogdaemon จะพิจารณาว่าข้อมูล log อะไรจะเก็บไว้นานแค่ใหน. ที่เก็บ log ตามค่าดีฟ้อลท์จะอยู่ที่ /var/log, ประกอบด้วยไฟล์ต่างๆสำหรับ access log, server logs, system message เป็นต้น.

ในไดเร็กตอรี่ /var เรามักจะพบข้อมูลดาต้าเซิฟเวอร์, ซึ่งจะเก็บไว้ที่นี่เพื่อแยกมันจากข้อมูลสำคัญเช่นโปรแกรมของเซิฟเวอร์และ คอนฟิกไฟล์. ตัวอย่างเช่นไดเร็กตอรี่ /var/www ในระบบลีนุกซ์, ซึ่งประกอบด้วยหน้าเพจ HTML จริง, สคริปและอิมเมจของเวบเซิฟเวอร์ที่แสดงข้อมูล. ชุดไดเร็กตอรี่ของ FTP server (ข้อมูลให้เครื่องอื่นดาวน์โหลดไฟล์ข้ามเครื่อง) จะเก็บไว้ในไดเร็กตอรี่ย่อยหนึ่งของ /var เช่นกัน. เพราะข้อมูลนี้เข้าถึงได้จากบุคคลภายนอกและมีการเปลี่ยนแปลงบ่อย, มันจึงปลอดภัยที่จะเก็บข้อมูลที่นี่, แยกจากพาร์ติชั่นหรือไดเร็กตอรี่ที่ข้อมูลมีผลกับระบบ.

ในการติดตั้งใช้งานเป็นเครื่องเวิร์คสเตชั่น, ไดเร็กตอรี่ /var/spool อย่างน้อยจะมีไดเร็กตอรี่ cron อยู่, ประกอบด้วยตารางงานที่ทำเป็นประจำ. ในการทำงานออฟฟิสปกติไดเร็กตอรี่นี้จะมี lpd ด้วย, ซึ่งจะเก็บข้อมูลคิวในการพิมพ์ และคอนฟิกไฟล์ของเครื่องพิมพ์เช่นเดียวกับ log files ของเครื่องพิมพ์.

ในระบบเซิฟเวอร์ เรามักจะพบไดเร็กตอรี่ /var/spool/mail, ประกอบด้วยเมล์ที่เข้ามาของผู้ใช้, เรียงแบบหนึ่งไฟล์ต่อหนึ่งอินบอกซ์ของผู้ใช้, ไดเร็กตอรี่ที่เกี่ยวข้องคือ mqueue, ซึ่งเป็นพื้นที่รวบรวมเมล์ที่ยังไม่ได้ส่ง. ส่วนนี้ของระบบเป็นส่วนที่ข้อมูลวิ่งเข้าออกมากบนระบบเมล์เซิฟเวอร์ที่มีผู้ ใช้หลายคน. ระบบเซิฟเวอร์ใหม่ๆยังใช้ไดเร็กตอรี่ /var/spool ในการจัดการข้อมูลจำนวนมากด้วย.

ไดเร็กตอรี่ /var/lib/rpm มีข้อมูลเฉพาะของลีนุกซ์สายพันธ์ RPM-based (RedHat Package Manager) ; มันเป็นที่ที่เก็บข้อมูลของชุดโปรแกรม RPM. โปรแกรมจัดการแพ็กเกจอื่นก็เก็บในไดเร็กตอรี่ย่อยบางที่ของ /var เหมือนกัน.

3.3. Manipulating files

3.3.  การทำงานกับไฟล์

3.3.1. Viewing file properties การตรวจดูคุณสมบัติของไฟล์

3.3.1.1. More about ls

นอกจากแสดงชื่อของไฟล์, คำสั่ง ls ด้วยการใช้อ็อพชั่น -a สามารถให้ข้อมูลอื่นอีกมาก, เช่นชนิดของไฟล์, ดังที่เราได้อธิบายไปแล้ว. ยังสามารถแสดงค่าอนุญาตใช้ไฟล์, ขนาดไฟล์, หมายเลขไอโหนด, วันที่และเวลาที่สร้างไฟล์, เจ้าของไฟล์และจำนวนลิ้งค์มายังไฟล์.  ข้อมูลไฟล์ที่ซ่อนตัวในการดูตามปกติจะแสดงด้วยเช่นกัน. ชื่อของไฟล์ซ่อนตัวเหล่านี้จะเริ่มต้นด้วยเครื่องหมายจุด. ตัวอย่างได้แก่คอนฟิกไฟล์ในโฮมไดเร็กตอรี่ของคุณ. เมื่อทำงานกับระบบไปซักพัก, คุณจะสังเกตุเห็นไฟล์นับสิบและไดเร็กตอรี่ถูกสร้างขึ้น แต่ไม่ได้อยู่ในไดเร็กตอรี่อินเด็กซ์โดยอัตโนมัติ. ยิ่งกว่านั้น, ทุกไดเร็กตอรี่จะมีชื่อไฟล์เป็นแค่จุด(.) และจุดจุด (..) ซึ่งใช้ผสมกันกับหมายเลขไอโหนดเพื่อหาตำแหน่งไดเร็กตอรี่ในระบบโครงสร้าง ไฟล์แบบกิ่งไม้.

คุณควรอ่านคู่มือคำสั่ง ls, เนื่องจากมันเป็นคำสั่งพื้นฐานที่สุดที่มีอ็อพชั่นหลากหลายที่มีประโยชน์. อ็อพชั่นสามารถผสมกัน, เหมือนกับที่ระบบยูนิกซ์ส่วนใหญ่ใช้. การใช้ทั่วไปคือ ls -al; จะแสดงรายการของไฟล์และคุณสมบัติแบบยาวรวมทั้งข้อมูลปลายทางที่ symbolic link ชี้ไป. ส่วนคำสั่ง ls -latr แสดงข้อมูลเดียวกัน, แต่กลับลำดับของข้อมูลที่มีการเปลี่ยนแปลง, ดังนั้นไฟล์ที่มีการเปลี่ยนแปลงล่าสุดจะแสดงในส่วนท้ายของรายการ. ตัวอย่างเช่น:

krissie:~/mp3> ls
Albums/ Radio/ Singles/ gene/ index.html

krissie:~/mp3> ls -a
./ .thumbs Radio gene/
../ Albums/ Singles/ index.html

krissie:~/mp3> ls -l Radio/
total 8
drwxr-xr-x 2 krissie krissie 4096 Oct 30 1999 Carolina/
drwxr-xr-x 2 krissie krissie 4096 Sep 24 1999 Slashdot/

krissie:~/mp3> ls -ld Radio/
drwxr-xr-x 4 krissie krissie 4096 Oct 30 1999 Radio/

krissie:~/mp3> ls -ltr
total 20
drwxr-xr-x 4 krissie krissie 4096 Oct 30 1999 Radio/
-rw-r--r-- 1 krissie krissie 453 Jan 7 2001 index.html
drwxrwxr-x 30 krissie krissie 4096 Oct 20 17:32 Singles/
drwxr-xr-x 2 krissie krissie 4096 Dec 4 23:22 gene/
drwxrwxr-x 13 krissie krissie 4096 Dec 21 11:40 Albums/

บนลีนุกซ์แทบทุกสายพันธ์ คำสั่ง ls  จะ แปลงเป็น color-ls โดยดีฟ้อลท์. ทำให้ดูชนิดไฟล์ได้โดยไม่ต้องใช้อ็อพชั่นกับคำสั่ง ls. ในการแยกประเภท, ทุกชนิดไฟล์จะมีสีของตัวเอง. ตามมาตรฐานที่กำหนดใน /dtc/DIR_COLORS:

Table 3-5. Color-ls default color scheme

Color File type
blue directories
red compressed archives
white text files
pink images
cyan links
yellow devices
green executables
flashing red broken links

ข้อมูลเพิ่มเติมสามารถดูได้ใน man page. วิธีแสดงข้อมูลเดียวกันนี้ก่อนนั้นถูกใช้ในด้วยการแสดงด้วยเครื่องหมายพิเศษ ตามหลังชื่อไฟล์ที่ไม่ใช้ชื่อมาตรฐาน. สำหรับใช้กับจอขาวดำ, รูปแบบนี้ยังคงใช้ดังมีรายละเอียดตามตาราง:

Table 3-6. Default suffix scheme for ls

Character File type
nothing regular file
/ directory
* executable file
@ link
= socket
| named pipe

คำอธิบายของรูปแบบการใช้งานเต็มของคำสั่ง ls สามารถอ่านได้ด้วยคำสั่ง info coreutils ls.

3.3.1.2. More tools

เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับชนิดของข้อมูลที่เรากำลังทำงาน, เราใช้คำสั่ง file. โดยใส่ข้อมูลเพื่อตรวจเช็คคุณสมบัติของไฟล์ในระบบไฟล์, ตัวอย่าง:

mike:~> file Documents/
Documents/: directory

mike:~> file high-tech-stats.pdf
high-tech-stats.pdf: PDF document, version 1.2

mike:~> file Nari-288.rm
Nari-288.rm: RealMedia file

mike:~> file bijlage10.sdw
bijlage10.sdw: Microsoft Office Document

mike:~> file logo.xcf
logo.xcf: GIMP XCF image data, version 0, 150 x 38, RGB Color

mike:~> file cv.txt
cv.txt: ISO-8859 text

mike:~> file image.png
image.png: PNG image data, 616 x 862, 8-bit grayscale, non-interlaced

mike:~> file figure
figure: ASCII text

mike:~> file me+tux.jpg
me+tux.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI),
"28 Jun 1999", 144 x 144

mike:~> file 42.zip.gz
42.zip.gz: gzip compressed data, deflated, original filename,
`42.zip', last modified: Thu Nov 1 23:45:39 2001, os: Unix

mike:~> file vi.gif
vi.gif: GIF image data, version 89a, 88 x 31

mike:~> file slide1
slide1: HTML document text

mike:~> file template.xls
template.xls: Microsoft Office Document

mike:~> file abook.ps
abook.ps: PostScript document text conforming at level 2.0

mike:~> file /dev/log
/dev/log: socket

mike:~> file /dev/hda
/dev/hda: block special (3/0)

คำสั่ง file มีอ็อพชั่นหลายตัว, หนึ่งในนั้นคืออ็อพชั่น -z เพื่อดูลึกลงไปในไฟล์ที่บีบอัดข้อมูล. ดู info file ในรายละเอียด. จำไว้ว่าผลของคำสั่ง file เป็นเพียงข้อมูลนำทาง. พูดอีกอย่างคือคำสั่ง file อาจให้ผลผิดพลาดได้.

Note  ทำไมต้องรู้ชนิดและฟอร์แมทของไฟล์
 

อธิบายสั้นๆ, ถ้าเราจะใช้คำสั่ง command line tools ที่จะดูข้อมูลของ ไฟล์ข้อความ, tools นี้จะไม่ทำงานถ้าใช้กับไฟล์ผิดประเภท. กรณีแย่สุด, มันจะป่วนหน้าจอเทอร์มินอลและ/หรือ มีเสียงบี้บ. ถ้าเกิดเหตุการณ์นี้กับคุณ, ให้ปิดเทอร์มินอลเซสชั่นและเปิดอันใหม่. ถ้าทำได้พยายามหลีกเลี่ยงไม่ให้มันเกิดขึ้น, เพราะมันจะไปกวนสมาธิคนอื่น.

3.3.2.  การลบและสร้างไฟล์และไดเร็กตอรี่

3.3.2.1. Making a mess...

ไม่ใช่เรื่องยากที่จะทำ. ทุกวันนี้ระบบแทบทั้งหมดเชื่อมต่อก้นเป็นเครือข่าย, ดังนั้นไฟล์จะสามารถคัดลอกจากเครื่องหนึ่งไปอีกเครื่องได้. โดยเฉพาะอย่างยิ่งถ้าทำงานกับระบบกราฟฟิก, การสร้างไฟล์ใหม่เป็นเรื่องที่ทำประจำโดยไม่ต้องรอตรวจสอบจากผู้ใช้. เพื่ออธิบายปัญหาที่เกิด, สมมุติเรามีข้อมูลเต็มของไดเร็กตอรี่ใหม่ของผู้ใช้, สร้างบนระบบ RedHat:

[newuser@blob user]$ ls -al
total 32
drwx------ 3 user user 4096 Jan 16 13:32 .
drwxr-xr-x 6 root root 4096 Jan 16 13:32 ..
-rw-r--r-- 1 user user 24 Jan 16 13:32 .bash_logout
-rw-r--r-- 1 user user 191 Jan 16 13:32 .bash_profile
-rw-r--r-- 1 user user 124 Jan 16 13:32 .bashrc
drwxr-xr-x 3 user user 4096 Jan 16 13:32 .kde
-rw-r--r-- 1 user user 3511 Jan 16 13:32 .screenrc
-rw------- 1 user user 61 Jan 16 13:32 .xauthDqztLr

 เมื่อดูครั้งแรก, ข้อมูลของโฮมไดเร็กตอรี่ที่ถูกใช้จะดูสะอาดตา:

olduser:~> ls
app-defaults/ crossover/ Fvwm@ mp3/ OpenOffice.org638/
articles/ Desktop/ GNUstep/ Nautilus/ staroffice6.0/
bin/ Desktop1/ images/ nqc/ training/
brol/ desktoptest/ Machines@ ns_imap/ webstart/
C/ Documents/ mail/ nsmail/ xml/
closed/ Emacs@ Mail/ office52/ Xrootenv.0

แต่เมื่อรวมไดเร็กตอรี่ทุกตัวและไฟล์ที่เริ่มต้นด้วยจุด, มันมีจำนวน 185 อันในไดเร็กตอรี่นี้. นี่เป็นเพราะแอพลลิเคชั่นส่วนมากมีไดเร็กตอรี่และไฟล์ของตัวเอง, ประกอบด้วยข้อมูลที่ผู้ใช้สร้างขึ้น, ในโฮมไดเร็กตอรี่ของผู้ใช้นั้น. ปกติแล้วไฟล์เหล่านี้จะถูกสร้างขึ้นเมื่อแรกที่คุณเรียกแอพพลิเคชั่นใช้งาน. ในบางกรณีคุณอาจสังเกตุเห็นเมื่อเจอไดเร็กตอรี่แปลกๆปรากฏ, แต่ส่วนมากแล้วทุกอย่างจะทำโดยอัตโนมัติ.

นอกจากนี้, ไฟล์ใหม่ยังถูกสร้างขึ้นอย่างต่อเนื่องเพราะผู้ใช้ต้องการเก็บข้อมูลไฟล์, ให้แตกต่างจากเดิมเพื่อเก็บงานเก่า, ใช้งานอินเตอร์เนท, และดาวน์โหลดไฟล์และไฟล์แนบลงมายังเครื่องที่ใช้งาน. มันจะเพิ่มไปเรื่อย. จำเป็นต้องมีกฏเกณฑ์เพื่อรักษาภาพรวมของข้อมูล.

ในหัวข้อถัดไป, เราจะพูดถึงวิธีการในการทำงานกับข้อมูล, ที่แล้วมาเราพูดถึงเฉพาะโปรแกรมเทกซ์ที่มีใช้ในเชลล์, เพราะโปรแกรมกราฟฟิกใช้งานได้ง่ายและให้ความรู้สึกเหมือนระบบ ชี้-และ-คลิก คล้ายกับโปรแกรมจัดการไฟล์ของไมโครซอฟท์, รวมทั้งมีตัวช่วยแบบกราฟฟิกและความสามารถอื่นที่ครบครันแบบที่คุณต้องการจาก โปรแกรมประเภทนี้. รายการต่อไปนี้เป็นโปรแกรมจัดการไฟล์ที่นิยมใช้กันมากสำหรับ GNU/Linux. โปรแกรมจัดการไฟล์ส่วนใหญ่จะเรียกใช้งานได้จากเมนูของโปรแกรมจัดการ เดสก์ท้อป, หรือคลิกไอค่อนโฮมไดเร็กตอรี่, หรือเรียกจาก command line, เรียกคำสั่งดังนี้;

  • nautilus:  โปรแกรมจัดการไฟล์ที่เป็นโปรแกรมดีฟ้อลท์ใน Gnome, รายละเอียดการใช้งานสามารถหาได้ที่ http://www.gnome.org.

  • konqueror:  โปรแกรมจัดการไฟล์ที่ใช้บน KDE เดสก์ท้อป. คู่มือใช้งานอยู่ที่ http://docs.kde.org.

  • mc: Midnight Commander,  โปรแกรมจัดการไฟล์ของยูนิกซ์หน้าตาคล้ายโปรแกรมนอร์ตันคอมมานเดอร์. คู่มือใช้งานหาได้ที่ http://gnu.org/directory/  หรือ http://www.ibiblio.org.

 แอพพลิเคชั่นเหล่านี้มีความสามารถสูงและสร้างความประทับใจให้ผู้ ใช้ลีนุกซ์มือใหม่, เนื่องจากมันใช้งานมายาวนาน, ขณะที่โปรแกรมอื่นกำลังพัฒนา.  เราจะดูรายละเอียดภายในของโปรแกรมกราฟฟิกเหล่านี้ว่ามันใช้คำสั่งยูนิกซ์อ ย่างไร.

3.3.2.2. The tools

3.3.2.2.1. Creating directories

วิธีการเก็บข้อมูลคือการให้พื้นที่เฉพาะสำหรับไฟล์โดยการสร้างไดเร็กตอ รี่และไดเร็กตอรี่ย่อย (หรือจะเรียกว่าโฟลเดอร์และโฟลเดอร์ย่อยถ้าคุณถนัด). วิธีการทำได้โดยใช้คำสั่ง mkdir.

richard:~> mkdir archive

richard:~> ls -ld archive
drwxrwxrwx 2 richard richard 4096 Jan 13 14:09 archive/

Creating directories and subdirectories in one step is done using the -p option:

richard:~> cd archive

richard:~/archive> mkdir 1999 2000 2001

richard:~/archive> ls
1999/ 2000/ 2001/

richard:~/archive> mkdir 2001/reports/Restaurants-Michelin/
mkdir: cannot create directory `2001/reports/Restaurants-Michelin/':
No such file or directory

richard:~/archive> mkdir -p 2001/reports/Restaurants-Michelin/

richard:~/archive> ls 2001/reports/
Restaurants-Michelin/

ถ้าไฟล์ใหม่ต้องการมีค่า permission แตกต่างจากค่าดีฟ้อลท์ของไฟล์ใหม่, เราสามารถกำหนดได้โดยยังใช้คำสั่ง mkdir เหมือนเดิม, ดูหน้า info ในรายละเอียด. เราจะพูดถึงการเข้าถึงไฟล์ในหัวข้อถัดไปเกี่ยวกับความปลอดภัยของไฟล์.

ชื่อของไดเร็กตอรี่จะตั้งตามกฏที่ใช้กับชื่อไฟล์. หนึ่งในข้อกำหนดที่สำคัญที่สุดคือคุณไม่สามารถมีไฟล์สองไฟล์ที่มีชื่อ เดียวกันในหนึ่งไดเร็กตอรี่ (จำไว้ว่าในลีนุกซ์, เหมือนกับยูนิกซ์, คือเป็นระบบปฏิบัติการที่ใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความหมายแตกต่าง กัน). ชื่อของไฟล์สามารถยาวได้ไม่จำกัด, แต่ปกติจะตั้งไม่เกิน 80 ตัวอักษร, เพื่อให้แสดงหนึ่งบรรทัดพอดีในหน้าจอเทอร์มินอล. คุณสามารถใช้ตัวอักษรอะไรก็ได้ในชื่อไฟล์, แต่เราแนะนำว่าให้หลีกเลี่ยงตัวอักษรที่มีความหมายพิเศษกับเชลล์, เมื่อคุณสับสน, ให้ตรวจสอบกับ Appendix C.

3.3.2.2.2. Moving files

เมื่อเรามีโครงสร้างที่เหมาะสมในโฮมไดเร็กตอรี่ของเราแล้ว, ก็เป็นเวลาที่จะล้างไฟล์ที่เราไม่ต้องการ โดยการใช้คำสั่ง mv:

richard:~/archive> mv ../report[1-4].doc reports/Restaurants-Michelin/

 คำสั่งนี้ใช้สำหรับการเปลี่ยนชื่อไฟล์ด้วยเหมือนกัน:

richard:~> ls To_Do
-rw-rw-r-- 1 richard richard 2534 Jan 15 12:39 To_Do

richard:~> mv To_Do done

richard:~> ls -l done
-rw-rw-r-- 1 richard richard 2534 Jan 15 12:39 done

 เห็นได้ชัดเจนว่ามีเพียงชื่อไฟล์เท่านั้นที่เปลี่ยนไป. ส่วนคุณสมบัติอื่นยังคงเหมือนเดิม.

ข้อมูลรายละเอียดเกี่ยวกับรูปแบบคำสั่งและความสามารถของคำสั่ง mv สามารถหาได้ใน man หรือ info pages. เมื่อคุณเจอปัญหาการใช้งานคำสั่ง คุณควรอ่านคู่มือคำสั่งเป็นอย่างแรก. คำตอบส่วนใหญ่จะมีในคู่มือ. แม้คนที่ใช้งานมานานก็ยังต้องอ่านทุกวัน, ดังนั้นผู้ใช้มือใหม่ควรอ่านมันทุกครั้ง หลังจากนั้นไม่นาน, คุณจะรู้จักอ็อพชั่นมาตรฐานที่ใช้กันทั่วไป, แต่คู่มือคำสั่งก็ยังเป็นแหล่งข้อมูลแรกที่คุณต้องการ. หมายเหตุ ข้อมูลที่ประกอบใน HOWTOs, FAQs, man pages และข้อมูลจากแหล่งอื่น ได้ถูกรวบรวมไว้ใน info pages เป็นระยะ, ทำให้มันเป็นข้อมูลที่อัพเดทที่สุด.(ที่มีมากับระบบ).

3.3.2.2.3. Copying files

การคัดลอกไฟล์และไดเร็กตอรี่สามารถทำได้ด้วยคำสั่ง cp. อ็อพชั่นหนึ่งที่มีประโยชน์มากคือ recursive copy (copy ไฟล์ที่เน้นทั้งหมดและไฟล์ในไดเร็กตอรี่ย่อยด้วย), ด้วยการใช้อ็อพชั่น -R. รูปแบบทั่วไปคือ

cp [-R] fromfile tofile

ตัวอย่างเช่น ผู้ใช้ newguy, ต้องการมีหน้าจอ Gnome เดสก์ท้อป เหมือนกับที่ oldguy มี. วิธีการทำวิธีหนึ่งคือการคัดลอกไฟล์ตั้งค่าเดสก์ท้อปของ oldguy ไปยังโฮมไดเร็กตอรี่ ของ newguy:

victor:~> cp -R ../oldguy/.gnome/ .

คำสั่งนี้จะแสดงข้อความผิดพลาดเกี่ยวกับ file permissions, เราจะพูดถึงในส่วนถัดไปถึงวิธีเปลี่ยนค่า permission เพื่อแก้ปัญหา.

3.3.2.2.4. Removing files

ใช้คำสั่ rm เพื่อลบไฟล์หนึ่งไฟล์, ส่วนคำสั่ง rmdir ใช้ลบไดเร็กตอรี่ที่ว่างเปล่า. (ใช้คำสั่ง ls -a เพื่อตรวจดูว่าไดเร็กตอรี่นั้นว่างหรือไม่). คำสั่ง rm ก็มีอ็อพชั่นเพื่อลบไดเร็กตอรี่ที่มีข้อมูลและไดเร็กตอรี่ย่อยทั้งหมดด้วย เหมือนกัน, อ่าน info pages ในการใช้งานและอ็อพชั่นที่อันตราย.

Note How empty can a directory be?
 

เป็นเรื่องปกติที่ไดเร็กตอรี่ .  (จุด) และ .. (จุดจุด) ไม่สามารถลบได้, เนื่องจากมันจำเป็นต้องมีในไดเร็กตอรี่ว่างเพื่อเป็นตัวกำหนดลำดับใน โครงสร้างระบบไฟล์.

บนลีนุกซ์, เหมือนกับบนยูนิกซ์, คือมันจะไม่เหลือร่อยรอยทิ้งไว้ , แม้ว่าโปรแกรมกราฟฟิกสามารถทำได้, แต่ไม่ใช่สำหรับเชลล์. ดังนั้นเมื่อไฟล์ถูกลบ, มันจะหายไปจริงๆ, และโดยทั่วไปมันจะไม่มีทางที่จะนำกลับมายกเว้นคุณมีการสำรองข้อมูลไว้, หรือคุณเร็วพอและมีผู้ดูแลระบบที่ดี. เพื่อป้องกันความเสียหายจากผู้ใช้มือใหม่ที่อาจเผลอลบไฟล์, การใช้คำสั่งแบบที่ต้องยืนยันคำสั่งของ rm, cp, และ mv สามารถทำได้โดยใส่อ็อพชั่น -i. ซึ่งจะทำให้ระบบไม่ทำงานทันทีที่ได้รับคำสั่ง. แต่จะถามเพื่อยืนยัน, ให้ผู้ใช้กด Enter อีกครั้งเพื่อบังคับให้ทำงาน:

mary:~> rm -ri archive/
rm: descend into directory `archive'? y
rm: descend into directory `archive/reports'? y
rm: remove directory `archive/reports'? y
rm: descend into directory `archive/backup'? y
rm: remove `archive/backup/sysbup200112.tar'? y
rm: remove directory `archive/backup'? y
rm: remove directory `archive'? y

เราจะพูดถึงการทำคำสั่งนี้ให้เป็นคำสั่งดีฟ้อลท์ใน บทที่ 7, ซึ่งเป็นเรื่องการปรับแต่ง รูปแบบเชลล์ตามแบบที่คุณต้องการ.

3.3.3. Finding files การค้นหาไฟล์

3.3.3.1. Using shell features

ในตัวอย่างของการย้ายไฟล์ เราได้เห็นวิธีที่เชลล์สามารถจัดการไฟล์หลายไฟล์ได้ภายในคำสั่งเดียว. ในตัวอย่างนั้น, เชลล์จะหาไฟล์ที่ผู้ใช้กำหนดโดยดูจากข้อมูลระหว่างวงเล็บ "[" และ "]" โดยอัตโนมัติ. เชลล์สามารถเปลี่ยนย่านของตัวเลขและตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กได้. มันยังสามารถเปลี่ยนตัวอักษรจำนวนมากที่คุณต้องการได้ด้วยการใช้เครื่องหมาย ดอกจันทน์, หรือเปลี่ยนตัวอักษรตัวเดียวได้ด้วยเครื่องหมายคำถาม.

แหล่งข้อมูลที่จะเปลี่ยนสามารถใช้พร้อมกันได้; เชลล์จะทำงานตรงไปตรงมา. ตัวอย่างเช่น Bash shell, สามารถใช้นิพจน์เช่น ls dirname/*/*/*[2-3].

In other shells, the asterisk is commonly used to minimize the efforts of typing: people would enter cd dir* instead of cd directory. In Bash however, this is not necessary because the GNU shell has a feature called file name completion. It means that you can type the first few characters of a command (anywhere) or a file (in the current directory) and if no confusion is possible, the shell will find out what you mean. For example in a directory containing many files, you can check if there are any files beginning with the letter A just by typing ls A and pressing the Tab key twice, rather than pressing Enter. If there is only one file starting with "A", this file will be shown as the argument to ls (or any shell command, for that matter) immediately.

ในเชลล์อื่น, ปกติเครื่องหมายดอกจันทน์จะใช้เพื่อลดการพิมพ์ข้อความยาว: เช่นผู้ใช้จะพิมพ์ cd dir* แทนที่จะพิมพ์ cd directory. แต่ใน Bash, ไม่จำเป็นต้องใช้แบบนี้เพราะ GNU shell ใช้วิธีที่เรียกว่า การเติมเต็มชื่อ (file name completion). หมายความว่าคุณสามารถพิมพ์ตัวอักษรเริ่มต้นของคำสั่งหรือของไฟล์ (ในไดเร็กตอรี่ปัจจุบัน) ไม่กี่ตัว และถ้าไม่มีข้อผิดพลาด, เชลล์จะหาว่าคุณหมายถึงอะไร. ตัวอย่างเช่นในไดเร็กตอรี่มีไฟล์เป็นจำนวนมาก, คุณสามารถตรวจว่ามีไฟล์ใหนที่มีชื่อขึ้นต้นด้วยตัวอักษรตัว A ด้วยการ พิมพ์ ls A แล้วกดคีย์ Tab สองครั้ง, แทนที่จะกด Enter ถ้ามีไฟล์เพียงไฟล์เดียวที่มีชื่อเริ่มต้นด้วยอักษร "A", ไฟล์นี้จะแสดงเป็นอาร์กิวเม้นท์ของคำสั่ง ls (หรือคำสั่งเชลล์อื่น, ที่สั่ง) ทันที.

3.3.3.2. Which

วิธีที่ง่ายมากในการหาไฟล์คือการใช้คำสั่ง which, เพื่อหาไฟล์ที่ต้องการในไดเร็กตอรี่ที่ระบุในพาธของผู้ใช้. แต่เนื่องจากพาธของผู้ใช้มีเพียงพาธชี้ไปยังไดเร็กตอรี่ที่มีโปรแกรมที่เอ็ก ซีคิ้วท์ได้, คำสั่ง which จะใช้ไม่ได้กับไฟล์ธรรมดา. คำสั่ง which มีประโยชน์เมื่อเจอปัญหา "Command not Found". ตัวอย่างด้านล่าง, ผู้ใช้ tina ไม่สามารถใช้โปรแกรม acroread, ในขณะที่คู่หูของเธอใช้งานได้ในระบบเดียวกัน. ปัญหาเหมือนกับปัญหาของ PATH ในบทที่ผ่านมา: เพื่อนของ Tina บอกเธอว่าเขามองเห็นโปรแกรมที่ต้องการอยู่ในไดเร็กตอรี่ /opt/acroread/bin, แต่ไดเร็กตอรี่นี้ไม่มีในพาธของเธอ:

tina:~> which acroread
/usr/bin/which: no acroread in (/bin:/usr/bin:/usr/bin/X11)

ปัญหาสามารถแก้ได้โดยเรียกพาธเต็มเพื่อสั่งคำสั่ง, หรือการ export ข้อความของตัวแปร PATH ใหม่:

tina:~> export PATH=$PATH:/opt/acroread/bin

tina:~> echo $PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin

การใช้คำสั่ง which สามารถใช้ตรวจสอบการแทนคำสั่งหรือ alias โดยคำสั่งอื่นได้ด้วย.

gerrit:~> which -a ls
ls is aliased to `ls -F --color=auto'
ls is /bin/ls

ถ้าคำสั่งข้างบนไม่ทำงานในระบบของคุณ, ใช้คำสั่ง alias :

tille@www:~/mail$ alias ls
alias ls='ls --color'

3.3.3.3. Find and locate

คำสั่งต่อไปนี้เป็นคำสั่งเพื่อใช้หาไฟล์ที่ไม่ได้อยู่ในพาธของผู้ใช้. คำสั่ง find, เป็นที่รู้จักดีจากยูนิกซ์, ว่ามีประโยชน์มาก, แต่อาจมีรูปแบบการใช้ที่ยุ่งยากบ้าง, อย่างไรก็ตาม โปรแกรม GNU find, แก้ปัญหาของรูปแบบคำสั่งแล้ว. คำสั่งนี้ไม่เพียงทำให้คุณสามารถหาไฟล์, มันยังหาขนาดไฟล์, วันที่ของการเปลี่ยนแปลงครั้งล่าสุดและคุณสมบัติของไฟล์ เป็นเงื่อนไขในการค้นหาได้ด้วย. รูปแบบทั่วไปคือการใช้หาชื่อไฟล์:

find <path> -name <searchstring>

 คำสั่งนี้อธิบายได้ว่า "หาทุกไฟล์และไดเร็กตอรี่ในพาธที่ระบุ, และแสดงชื่อของไฟล์ตามที่ระบุในชื่อที่ต้องการค้นหา" (ไม่ใช่ข้อมูลในไฟล์).

อีกความสามารถหนึ่งของ find คือใช้ค้นหาไฟล์ที่มีขนาดที่แน่นอน, ดังตัวอย่างข้างล่าง, ที่ผู้ใช้ peter ต้องการหาทุกไฟล์ในไดเร็กตอรี่ปัจจุบัน, ที่มีขนาดมากกว่า 5 MB:

peter:~> find . -size +5000k
psychotic_chaos.mp3

ถ้าคุณดูใน man pages, คุณจะเห็นว่า find สามารถใช้คำสั่งเพิ่มเติมทำงานกับไฟล์ที่หาพบ. ตัวอย่างเช่นการลบไฟล์. เป็นเรื่องที่ควรทดสอบก่อนโดยไม่ใช้อ็อพชั่น -exec , หลังจากนั้นคำสั่งสามารถเรียกกลับมาและเพิ่มการลบไฟล์เข้าไป. ด้านล่างเป็นตัวอย่างของการค้นหาไฟล์ที่มีนามสกุล .tmp:

peter:~>  find . -name "*.tmp" -exec rm {} \;

peter:~>

Tip Optimize!
 

คำสั่งนี้จะเรียกใช้ rm ทุกครั้งที่เจอไฟล์ที่ค้นหา. ซึ่งบางทีมันก็อาจเป็นจำนวนพันหรือล้านครั้ง. บางครั้งก็ทำให้ระบบคุณทำงานหนัก.

วิธีใช้งานที่ดีกว่าคือ การใช้ไปป์ (|) และ คำสั่ง xargs กับคำสั่ง rm เป็นอาร์กิวเม้นท์. วิธีนี้, rm จะ ถูกเรียกใช้เมื่อได้รับข้อมูล command line เต็ม, แทนที่จะเป็นทุกไฟล์. ดู บทที่ 5 สำหรับการใช้ I/O redirection เพื่อทำให้งานประจำวันง่ายขึ้น.

ต่อมา (ในปี 1999 ตามที่บันทึกใน man pages, หลังจากที่ใช้ find มา 20 ปี), คำสั่ง locate ถูกพัฒนาขึ้น. โปรแกรมนี้ใช้ง่าย, แต่มีข้อจำกัดมากกว่า find, เนื่องจากผลลัพท์ที่ได้จะขึ้นอยู่กับ file index database ที่อัพเดทเพียงหนึ่งครั้งต่อวัน. ในทางกลับกัน, การค้นในฐานข้อมูลของ locate ใช้ทรัพยากรน้อยกว่าคำสั่ง find ดังนั้นจะแสดงผลลัพท์ได้ทันใจ.

ลีนุกซ์รุ่นใหม่จะใช้คำสั่ง slocate, เป็นคำสั่ง locate รุ่นปรับปรุงด้านความปลอดภัยป้องกันผู้ใช้ไม่ให้เข้าถึงผลของคำสั่งถ้าเขา ไม่มีสิทธิ์ในการอ่าน. ตัวอย่างเช่นไฟล์ในโฮมไดเร็กตอรี่ของ root's, ซึ่งเป็นพื้นที่หวงห้าม. ตัวอย่างการใช้คำสั่ง locate .cshrc เป็นการหาผู้ใช้ที่ใช้ C shell , จะทำให้แสดงชื่อไฟล์ /home/jenny/.cshrc ออกมา และไม่รวมไฟล์ใน root's. ในระบบส่วนใหญ่, คำสั่ง locate คือ symbolic link ไปยังโปรแกรม slocate:

billy:~> ls -l /usr/bin/locate
lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate*

 ผู้ใช้ tina ใช้คำสั่ง locate เพื่อหาโปรแกรมแอพพลิเคชั่นที่เธอต้องการ:

tina:~> locate acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread

จะเห็นว่าไดเร็กตอรี่ที่ไม่มีชื่อ bin จะไม่มีโปรแกรมเก็บ - มันไม่มีไฟล์ที่เอ็กซีคิ้วท์ได้. จึงเหลือตัวเลือก 3 ไฟล์. ไฟล์ใน /usr/local/bin เป็นไฟล์ที่ tina ต้องการ: มันลิ้งค์ไปยังเชลล์สคริปที่เรียกโปรแกรมจริงทำงาน: 

tina:~> file /usr/local/bin/acroread
/usr/local/bin/acroread: symbolic link to ../Acrobat4/bin/acroread

tina:~> file /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: Bourne shell script text executable

tina:~> file /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: ELF 32-bit LSB
executable, Intel 80386, version 1, dynamically linked (uses
shared libs), not stripped

เพื่อที่จะทำชื่อพาธให้สั้นที่สุดเท่าที่ทำได้, เพื่อระบบจะไม่ทำการค้นไดเร็กตอรี่จำนวนมากทุกครั้งที่ผู้ใช้ต้องการเอ็กซี คิ้วท์คำสั่ง, เราเพิ่ม /usr/local/bin ที่มีไฟล์โปรแกรมเพียงไฟล์เดียว,ไปในพาธและไม่ใส่ไดเร็กตอรี่อื่น,  เนื่องจากไดเร็กตอรี่ /usr/local/bin มีโปรแกรมที่มีประโยชน์เป็นจำนวนมาก.

 รายละเอียดเพิ่มเติมของคำสั่ง find และ locate หาดูได้ใน info pages

3.3.3.4. The grep command

3.3.3.4.1. General line filtering

คำสั่งที่ง่ายแต่มีประสิทธิภาพสูง, grep ใช้ในการกรองบรรทัดที่อินพุทและให้ผลตามที่ต้องการแก่เอาท์พุท. มีโปรแกรมจำนวนมากที่ใช้โปรแกรม grep. ตัวอย่างด้านล่าง, jerry ใช้คำสั่ง grep เพื่อดูว่าเขาเคยสั่งคำสั่ง find:

jerry:~> grep -a find .bash_history
find . -name userinfo
man find
find ../ -name common.cfg

Tip Search history
 

การค้นหาอีกแบบคือฟังชั่นค้นหาใน bash, เรียกใช้โดยกด Ctrl+R ครั้งเดียว, ดังตัวอย่างด้านล่างที่เราจะค้นหาว่าเคยใช้คำสั่ง find :

thomas ~> ^R 
(reverse-i-search)`find': find `/home/thomas` -name *.xml

พิมพ์สตริงที่คุณต้องการค้นหาที่ช่อง search prompt. ยิ่งพิมพ์ตัวอักษรมาก, การค้นจะได้ผลแคบลง. นี่เป็นการอ่านคำสั่งที่เคยสั่งของเชลล์เซสชั่นนี้ (ซึ่งเขียนไว้ในไฟล์ .bash_history ในโฮมไดเร็กตอรี่ของคุณเมื่อคุณออกจากเซสชั่น). คำสั่งที่คุณเคยเรียกเพื่อค้นหาสตริงจะแสดงออกมา. ถ้าคุณอยากเห็นคำสั่งก่อนหน้าที่ประกอบด้วยสตริงเดียวกัน, พิมพ์ Ctrl+R อีกครั้ง.

 ดูเพิ่มเติมใน info pages ของ bash.

ระบบยูนิกซ์ที่ดีจะมีดิกชันนารีออนใลน์ในตัว. รวมทั้งลีนุกซ์. ดิกชันนารีคือรายการของคำที่ระบบรู้จักและเก็บไว้ในไฟล์ที่ชื่อ words, อยู่ในไดเร็กตอรี่ /usr/share/dict. เพื่อตรวจสอบการสะกดคำที่ถูกต้อง, การเรียกใช้ไม่จำเป็นต้องใช้โปรแกรมกราฟฟิก:

william:~> grep pinguin /usr/share/dict/words

william:~> grep penguin /usr/share/dict/words
penguin
penguins

Tip Dictionary vs. word list
 

 ลีนุกซ์บางสายพันธ์มีคำสั่ง dict, ซึ่งมีลูกเล่นมากกว่าแค่หาคำในรายการ.

  ตัวอย่างใช้คำสั่ง grep ดูรายละเอียดของผู้ใช้บางคน

lisa:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne, tel 203234:/home/gdbruyne:/bin/bash

 หรือใช้หาอีเมล์แอดเดรส?

serge:~/mail> grep -i arno *
sent-mail: To: <Arno.Hintjens@celeb.com>
sent-mail: On Mon, 24 Dec 2001, Arno.Hintjens@celeb.com wrote:

คำสั่ง find และ locate จะใช้ร่วมกันบ่อยๆกับคำสั่ง grep เพื่อเจาะจงผลลัพท์. ดูเพิ่มเติมใน บทที่ 5 เกี่ยวกับ I/O redirection.

3.3.3.4.2. Special characters

ตัวอักษรที่มีความหมายพิเศษกับเชลล์ ต้องทำการถอดความหมายพิเศษหรือ escaped. ตัวอักษร escape ใน Bash คือเครื่องหมาย backslash, เหมือนเชลล์ทั่วไป; มีผลให้ตัวอักษรที่ตามมาไม่มีผลพิเศษ. เชลล์รู้จักตัวอักษรพิเศษเช่น /, ., ? และ *. รายการอักษรพิเศษทั้งหมดหาดูได้ใน info pages และเอกสารของเชลล์ที่คุณใช้.

ตัวอย่าง, สมมุติคุณต้องการหาไฟล์ที่มีเครื่องหมายดอกจันทน์ แทนที่จะหาทุกไฟล์ในไดเร็กตอรี่, คุณจะใช้คำสั่ง

less \*

คำสั่งเดียวกันสำหรับไฟล์ที่มี space อยู่ในชื่อไฟล์:

cat This\ File

3.3.4. More ways to view file content วิธีเรียกดูข้อมูลในไฟล์

3.3.4.1. General

นอกจากคำสั่ง cat, ที่ทำการส่งไฟล์ออกไปยัง standard output, ยังมีโปรแกรมอื่นที่จะดูข้อมูลในไฟล์.

แน่นอนว่าวิธีที่ง่ายที่สุดคือการใช้โปรแกรมกราฟฟิกแทนการใช้ command line. ในบทนำเราได้เกริ่นถึงโปรแกรมออฟฟิสแอพพลิเคชั่น, Openoffice.org. โปรแกรมอื่นก็เช่น GIMP (เรียกใช้โดยสั่ง gimp จาก command line), เป็นโปรแกรมตัดแต่งภาพของ GNU; โปรแกรม xpdf ที่ไว้ใช้ดูไฟล์ Portable Document Format (PDF); โปรแกรม GhostView (gv) สำหรับดูไฟล์ PostScript; โปรแกรม Mozilla/FireFox, โปรแกรม links (โปรแกรม บราวน์เซอร์แบบเทกซ์), โปรแกรม Konqueror, โปรแกรม Opera และอื่นๆอีกมากสำหรับเรียกดูหน้าเวบเพจ; โปรแกรม XMMS, ไว้เล่นซีดีและเล่นไฟล์มัลติมีเดีย; โปรแกรม AbiWord, Gnumeric, KOffice เป็นต้น. สำหรับงานออฟฟิสทุกชนิดและอื่นๆอีกมาก. มีโปรแกรมแอพพลิเคชั่นอีกนับพันที่ใช้กับลีนุกซ์; ถ้าจะดูทั้งหมดต้องใช้เวลาเป็นวัน.

แต่เราจะเน้นการดูด้วยเชลล์ หรือโปรแกรมแอพพลิเคชั่นบนเทกซ์โหมด, ซึ่งเป็นพื้นฐานของโปรแกรมแอพพลิเคชั่นอื่น. คำสั่งเหล่านี้ทำงานได้ดีใน text environment กับไฟล์ข้อความ. เมื่อไม่แน่ใจ, ตรวจชนิดของไฟล์ก่อนด้วยคำสั่ง file.

 มาดูกันว่าโปรแกรมเทกซ์อะไรที่เรามีที่ใช้ดูข้อมูลภายในไฟล์.

Note Font problems
 

โปรแกรมทำงานกับข้อความที่เราจะพูดถึง, มักมีปัญหากับไฟล์ข้อความทั่วไป เพราะการใช้ฟ้อนท์ตัวอักษรที่ใช้ในไฟล์เหล่านั้น. ตัวอักษรพิเศษ, เช่นตัวพยัญชนะเน้นตัวอักษร, อักษรภาษาจีน และตัวอักษรอื่นจากภาษาที่ใช้ตัวอักษรแตกต่างจากอักษรที่ใช้ดีฟ้อลท์โค้ด en_US และอื่นๆ, จะทำให้กาแสดงผลผิดพลาดหรือเห็นเป็นตัวอักษรยึกยือ. ปัญหานี้จะอธิบายใน หัวข้อ 7.4.

3.3.4.2. "less is more"

อย่าเพิ่งงง ถ้าคุณได้ยินใครบางคนพูดประโยคนี้เมื่อทำงานกับยูนิกซ์. เรื่องราวในอดิตของยูนิกซ์อธิบายคำนี้ได้:

  •  คำสั่งแรกที่ใช้คือ cat . ได้ผลลัพท์ที่ออกมาเป็นสาย และควบคุมไม่ได้.

  •  ต่อมาก็มีคำสั่ง pg, ที่ยังมีใช้ในยูนิกซ์รุ่นเก่า. คำสั่งนี้ให้ผลข้อความเป็นหน้าในแต่ละครั้ง.

  •  คำสั่ง more เป็นคำสั่งที่ปรับปรุงจาก pg. และยังมีใช้บนระบบลีนุกซ์ทุกตัว.

  • less เป็นโปรแกรม more ในเวอร์ชั่น GNU และมีความสามารถอื่นในการเน้นสตริงที่ต้องการค้นหา. รูปแบบคำสั่งก็ใช้ง่าย:

    less name_of_file

     รายละเอียดเพิ่มเติมดูได้ใน info pages.

 คุณได้เรียนรู้เกี่ยวกับหน้าข้อความ, เพราะมันจำเป็นในการดู man pages.

3.3.4.3. The head and tail commands

สองคำสั่งนี้แสดงบรรทัดแรก/บรรทัดสุดท้ายของไฟล์ตามลำดับ. หากต้องการดูข้อมูลสิบบรรทัดสุดท้ายให้ใช้คำสั่ง:

tony:~> tail -10 .bash_history 
locate configure | grep bin
man bash
cd
xawtv &
grep usable /usr/share/dict/words
grep advisable /usr/share/dict/words
info quota
man quota
echo $PATH
frm

คำสั่ง head ทำงานคล้ายกัน. คำสั่ง tail มีความสามารถที่จะดูบรรทัดสุดท้ายจำนวน n บรรทัดอย่างต่อเนื่องของไฟล์ที่มีการเปลี่ยนแปลงอยู่ตลอด. ผู้ดูแลระบบมักจะใช้กับอ็อพชั่น -f ในการตรวจสอบ log files. ข้อมูลเพิ่มเติมหาได้ในคู่มือระบบ.

3.3.5. Linking files

3.3.5.1. Link types

จากที่เรารู้เกี่ยวกับไฟล์และการแสดงตัวในระบบไฟล์, เข้าใจบางส่วนของลิ้งค์ (หรือที่เรียกว่า shortcuts). ลิ้งค์ไม่มีความหมายเป็นอย่างอื่นนอกจากการจับคู่ชื่อไฟล์สองไฟล์หรือมาก กว่าให้ชี้ไปหาชุดข้อมูลเดียวกัน. โดยวิธีการทำมีสองแบบ:

  • Hard link:  คือการชี้ไฟล์ที่เกี่ยวข้องสองไฟล์หรือมากกว่าด้วยไอโหนดเดียวกัน. ฮาร์ดลิ้งค์จะแชร์ด้าต้าบล็อคเดียวกันบนฮาร์ดดิสก์, ขณะที่ทำตัวเหมือนไฟล์ที่อิสระจากกัน.

     วิธีนี้มีข้อเสีย: คือฮาร์ดดิสก์ไม่สามารถขยายพาร์ติชั่น, เพราะหมายเลขไอโหนดมีเพียงหนึ่งเดียวต่อพาร์ติชั่น.

  • ซอฟท์ลิ้งค์หรือ symbolic link (เรียกสั้นๆว่า :symlink): เป็นไฟล์เล็กๆที่ชี้ไปยังไฟล์อื่น. synbolic link มีข้อมูลพาธไปยังไฟล์เป้าหมายแทนที่จะชี้ไปเนื้อที่จริงบนฮาร์ดดิสก์. เพราะไม่ได้ใช้ไอโหนดในวิธีนี้, ซอฟท์ลิ้งค์สามารถชี้ข้ามพาร์ติชั่นได้.

 ลิ้งค์สองชนิดนี้มีหน้าที่คล้ายกัน, แต่ไม่เหมือนกัน, ดังแสดงด้วยแผนผังข้างล่าง:

Figure 3-2. Hard and soft link mechanism

 หมายเหตุ การลบไฟล์ที่เป็นไฟล์ปลายทางของ symbolic link จะทำให้ลิ้งค์นั้นใช้ไม่ได้.

 ไฟล์ธรรมดามีพื้นฐานของฮาร์ดลิ้งค์. ฮาร์ดลิ้งค์ไม่สามารถขยายข้ามพาร์ติชั่นได้, เพราะมันอ้างอิงกับไอโหนด, และหมายเลขไอโหนดเป็นจำนวนที่ไม่ซ้ำกันในพาร์ติชั่นใดๆ.

บางทีอาจมีคนค้านว่ายังมีลิ้งค์ชนิดที่สาม, user-space link, ที่คล้ายกับ shortcut ในไมโครซอฟท์วินโดว์. ไฟล์เหล่านี้มี ข้อมูล meta-data ที่โปรแกรมจัดการไฟล์แบบกราฟฟิกอ่านเข้าใจ. แต่กับเคอร์เนลและเชลล์ไฟล์เหล่านี้เป็นเหมือนไฟล์ธรรมดา. ที่มีนามสกุลลงท้ายด้วย .destop หรือ .lnk ตัวอย่างหาดูได้ใน ~/.gnome-desktop:

[dupont@boulot .gnome-desktop]$ cat La\ Maison\ Dupont
[Desktop Entry]
Encoding=Legacy-Mixed
Name=La Maison Dupont
Type=X-nautilus-home
X-Nautilus-Icon=temp-home
URL=file:///home/dupont

 นี่เป็นตัวอย่างจาก KDE desktop

[lena@venus Desktop]$ cat camera
[Desktop Entry]
Dev=/dev/sda1
FSType=auto
Icon=memory
MountPoint=/mnt/camera
Type=FSDevice
X-KDE-Dynamic-Device=true

 การสร้างลิ้งค์ชนิดนี้ทำได้ง่ายด้วยความสามารถของโปรแกรมกราฟฟิก. หรือถ้าคุณต้องการคำแนะนำ, คู่มือการใช้งานโปรแกรมจะมีให้ดูในรายละเอียด.

 ในหัวข้อต่อไป, เราจะเรียนรู้วิธีสร้าง symbolic link แนวยูนิกซ์โดยใช้ command line.

3.3.5.2. Creating symbolic links

symbolic link คือส่วนที่ผู้ใช้มือใหม่ให้ความสนใจ: เพราะมันงานได้กว้างและคุณไม่ต้องห่วงเรื่องพาร์ติชั่น.

 คำสั่งในการสร้างลิ้งค์คือคำสั่ง ln. ในการสร้าง symlinks, คุณจำเป็นต้องใช้อ็อพชั่น -s:

ln -s targetfile linkname

 ตัวอย่างด้านล่างนี้, ผู้ใช้ freddy สร้างลิ้งค์ในไดเร็กตอรี่ย่อยของโฮมไดเร็กตอรี่ชี้ไปยังส่วนอื่นของระบบ:

freddy:~/music> ln -s /opt/mp3/Queen/ Queen

freddy:~/music> ls -l
lrwxrwxrwx 1 freddy freddy 17 Jan 22 11:07 Queen -> /opt/mp3/Queen

Symbolic links ปกติจะเป็นไฟล์เล็กๆ, ขณะที่ฮาร์ดลิ้งค์มีขนาดเดียวกับไฟล์ต้นฉบับ.

ประโยชน์ของ symbolic links มีมากมาย. ใช้บ่อยในการลดขนาดพื้นที่ฮาร์ดดิสก์, การคัดลอกไฟล์กรณีที่การติดตั้งโปรแกรมใหม่ต้องการไฟล์ในสถานที่อื่น, ใช้ในการแก้ปัญหาสคริปที่ต้องทำงานใน environment ใหม่และทำให้ลดงานซ้ำซ้อนลงได้มาก. ผู้ดูแลระบบอาจตัดสินใจย้ายไดเร็กตอรี่ของผู้ใช้ไปที่ใหม่, ตัวอย่างเช่น disk2, แต่ถ้าเขาต้องการให้ทุกอย่างทำงานเหมือนเมื่อก่อน, เช่นไฟล์ /etc/passwd, วิธีที่ง่ายสุดคือการสร้าง symbolic link จาก /home ไปที่ใหม่ /disk2/home.

3.4. File security

3.4. File security ระบบความปลอดภัยของไฟล์

3.4.1. Access rights: Linux's first line of defense สิทธิในการเข้าถึง: ด่านแรกของลีนุกซ์ในการป้องกัน

ระบบความปลอดภัยของลีนุกซ์ยึดตามแบบของระบบยูนิกซ์, และคงความแข็งแกร่งเช่นเดียวกับความปลอดภัยตามแบบยูนิกซ์ (บางทีก็ดีกว่า), ซึ่งมีความทนทานดีอยู่แล้ว. บนระบบลีนุกซ์, ทุกไฟล์เป็นเจ้าของโดยผู้ใช้และกลุ่มผู้ใช้. และยังมีอีกกลุ่มที่สาม, คือไม่ได้เป็นทั้งตัวผู้ใช้และกลุ่มผู้ใช้ที่เป็นเจ้าของ. ผู้ใช้แต่ละระดับสามารถให้สิทธิ์หรือไม่ให้สิทธิ์, อ่าน, เขียนและเอ็กซีคิ้วท์ได้.

เราได้ลองใช้คำสั่ง ls -l ในการแสดงรายการไฟล์แบบยาว, เพื่อดูข้อมูลไฟล์. คำสั่งนี้สามารถใช้ดูค่า file permission ของผู้ใช้ทั้งสามกลุ่มด้วยเหมือนกัน; ตัวอักษรแสดงโดยอักษร 9 ตัวตามหลังตัวอักษรแรก, ซึ่งเป็นอักษรแสดงชนิดของไฟล์ที่อักษรตัวแรกของบรรทัดคุณสมบัติของไฟล์. ดังแสดงในตัวอย่างด้านล่าง, ตัวอักษรสามตัวแรกของชุดอักษรทั้งเก้าแสดงสิทธิ์ในการเข้าถึงของผู้ใช้ที่ เป็นเจ้าของไฟล์. ตัวอักษรสามตัวถัดมาสำหรับกลุ่มของผู้ใช้ที่เป็นเจ้าของไฟล์, ส่วนสามตัวอักษรสุดท้ายเป็นของผู้ใช้อื่น. ค่าเปอร์มิชชั่นจะเรียงตามลำดับเสมอ: อ่าน, เขียน, เอ็กซีคิ้วท์ สำหรับผู้ใช้, กลุ่มของผู้ใช้ และผู้ใช้อื่น. ดูตัวอย่าง:

marise:~> ls -l To_Do
-rw-rw-r-- 1 marise users 5 Jan 15 12:39 To_Do
marise:~> ls -l /bin/ls
-rwxr-xr-x 1 root root 45948 Aug 9 15:01 /bin/ls*

ไฟล์แรกเป็นไฟล์ธรรมดา (อักษรตัวแรกเป็น dash (-)). ผู้ใช้ที่มีชื่อว่า marise หรือผู้ใช้ที่ขึ้นกับกลุ่ม users สามารถอ่านและเขียน (แก้ไข/ย้าย/ลบ) ไฟล์, แต่มันจะไม่สามารถเอ็กซีคิ้วท์ไฟล์ได้ ( dash ตัวที่สองและสาม). ผู้ใช้อื่นสามารถอ่านไฟล์นี้ได้เท่านั้น. แต่ไม่สามารถเขียนหรือเอ็กซีคิ้วท์ไฟล์ได้ (dash ตัวที่สี่และห้า).

ตัวอย่างที่สองเป็นตัวอย่างของไฟล์ที่เอ็กซีคิ้วท์ได้, ข้อแตกต่างคือ: ทุกคนสามารถรันโปรแกรมนี้ได้, และคุณต้องใช้สิทธิ์ root ในการแก้ไขไฟล์นี้.

ใน info pages อธิบายการใช้คำสั่ง ls แสดงค่าการเข้าถึงไฟล์ในรายละเอียด, ดูหัวข้อ What information is listed.

 เพื่อให้เข้าใจง่าย, ทั้งสิทธิ์ในการเข้าถึงหรือโหมดและกลุ่มผู้ใช้มีโค้ด. ตามตารางด้านล่าง.

Table 3-7. Access mode codes

Code Meaning
0 or -  ไม่ให้สิทธิ์ในการเข้าถึงของตำแหน่งนี้
4 or r  ผู้ใช้ที่ตำแหน่งนี้ได้สิทธิ์ในการอ่าน
2 or w  ผู้ใช้ที่ตำแหน่งนี้ได้สิทธิ์ในการเขียน
1 or x  ผู้ใช้ที่ตำแหน่งนี้ได้สิทธิ์ในการเอ็กซีคิ้วท์

Table 3-8. User group codes

Code Meaning
u user permissions
g group permissions
o permissions for others

เงื่อนไขที่ตรงไปตรงมาแบบนี้ถูกใช้อย่างเข้มงวด, ทำให้มีความปลอดภัยของข้อมูลในระดับสูงแม้ว่าจะไม่มีการป้องกันของเครือข่าย . นอกจากนี้, เงื่อนไขความปลอดภัยยังดูเรื่องผู้ใช้เข้าถึงโปรแกรม, มันสามารถบริการไฟล์ตามความต้องการและป้องกันข้อมูลที่อ่อนใหวเช่นไดเร็กตอ รี่โฮมและคอนฟิกไฟล์ของระบบ.

คุณควรรู้ว่าชื่อผู้ใช้ของคุณคืออะไร. ถ้าคุณไม่รู้, คุณสามารถใช้คำสั่ง id ในการแสดงผล, ซึ่งคำสั่งนี้จะแสดงกลุ่มดีฟ้อลท์ของคุณและกลุ่มอื่นที่คุณเป็นสมาชิก:

tilly:~> id
uid=504(tilly) gid=504(tilly) groups=504(tilly),100(users),2051(org)

 ชื่อผู้ใช้ของคุณมีเก็บไว้ในตัวแปร USER ด้วย:

tilly:~> echo $USER
tilly

3.4.2. The tools

3.4.2.1. The chmod command

การจำกัดการเข้าถึงไฟล์บางครั้งก็สร้างความรำคาญ, เมื่อเวลาต้องการเปลี่ยนค่าการเข้าถึงไฟล์ไม่ว่าจะด้วยเหตุผลใด. เราใช้คำสั่ง chmod ในการเปลี่ยน. คำสั่งนี้สามารถใช้กับอ๊อพชั่นแบบตัวอักษรหรือตัวเลข แล้วแต่คุณถนัด.

 ตัวอย่างด้านล่างใช้อ๊อพชั่นตัวอักษรในการแก้ปัญหาที่มักเกิดกับผู้ใช้มือใหม่:

asim:~> ./hello
bash: ./hello: bad interpreter: Permission denied

asim:~> cat hello
#!/bin/bash
echo "Hello, World"

asim:~> ls -l hello
-rw-rw-r-- 1 asim asim 32 Jan 15 16:29 hello

asim:~> chmod u+x hello

asim:~> ./hello
Hello, World

asim:~> ls -l hello
-rwxrw-r-- 1 asim asim 32 Jan 15 16:29 hello*

เครื่องหมาย + และ - ใช้สำหรับให้สิทธิ์หรือยกเลิกสิทธิ์ที่ให้แก่กลุ่มที่ต้องการ. สามารถใช้หลายคำสั่งโดยคั่นด้วยเครื่องหมายคอมม่า. ดังตัวอย่างต่อไปนี้, ซึ่งให้สิทธิ์ส่วนตัวในไฟล์แก่ผู้ใช้ asim:

asim:~> chmod u+rwx,go-rwx hello

asim:~> ls -l hello
-rwx------ 1 asim asim 32 Jan 15 16:29 hello*

เมื่อมีปัญหาเกิดขึ้นและมีข้อความ permission denied โดยทั่วไปปัญหามาจากสิทธิ์ในการเข้าถึงไฟล์. อีกกรณีได้แก่ "เมื่อวานมันยังทำงานได้," และ "ถ้าใช้สิทธิ์ root มันใช้ได้" ก็มีปัญหาจากสิทธิ์การเข้าถึงไฟล์ที่ไม่ถูกต้องนั่นเอง.

เมื่อใช้คำสั่ง chmod กับอาร์กิวเม้นท์แบบตัวเลข, ค่าของสิทธิ์ที่ให้จะแบ่งออกเป็นกลุ่ม. ดังนั้นเราจะได้ตัวเลข 3 จำนวน, ซึ่งคือค่า symbolic value สำหรับตั้งค่าที่ chmod จะสร้างขึ้น. ตารางต่อไปนี้แสดงรายการที่ใช้ตั้งค่าทั่วไป:

Table 3-9. File protection with chmod

Command Meaning
chmod 400 file  เพื่อป้องกันไฟล์จากการเขียนทับโดยไม่ตั้งใจ
chmod 500 directory  เพื่อป้องกันคุณเองที่เผลอลบ, เปลี่ยนชื่อหรือย้ายไฟล์จากไดเร็กตอรี่นี้.
chmod 600 file  ไฟล์ส่วนตัวที่สามารถแก้ไขได้เฉพาะผู้ใช้ที่สั่งคำสั่งนี้.
chmod 644 file  ไฟล์ที่ทุกคนอ่านได้ แต่แก้ไขได้เฉพาะผู้ใช้ที่สั่งคำสั่งนี้.
chmod 660 file  ผู้ใช้ที่อยู่กลุ่มเดียวกับคุณสามารถแก้ไขไฟล์นี้ได้, กลุ่มอื่นเข้าถึงไม่ได้โดยสิ้นเชิง.
chmod 700 file  ป้องกันไฟล์จากผู้ใช้อื่นไม่ให้ใช้งาน, ขณะที่ผู้ใช้ที่สั่งคำสั่งนี้สามารถใช้งานได้เต็มรูปแบบ.
chmod 755 directory  สำหรับไฟล์ที่ควรจะอ่านและเอ็กซีคิ้วท์ได้โดยบุคคลอื่น, แต่ผู้ใช้ที่ป้อนคำสั่งเท่านั้นที่สามารถแก้ไขได้.
chmod 775 file  มาตรฐานการแชร์ไฟล์สำหรับกลุ่ม
chmod 777 file  ทุกคนสามารถทำได้ทุกอย่างกับไฟล์นี้.

ถ้าคุณใส่หมายเลขน้อยกว่าสามหลัก, ตัวอักษรที่ขาดไปจะแทนด้วยศูนย์เริ่มจากหลักซ้ายมือ. ที่จริงมีหลักที่สี่บนระบบลีนุกซ์, ที่อยู่ก่อนหน้าค่าแอกเซสโหมดทั้งสามชุด. ข้อมูลทั้งหมดมีอยู่ใน info pages.

3.4.2.2. Logging on to another group

เมื่อคุณพิมพ์คำสั่ง id บน command line, คุณจะได้รายการทั้งหมดของกลุ่มที่คุณสังกัดอยู่, นำหน้าด้วยชื่อผู้ใช้ของคุณและหมายเลขไอดีและชื่อกลุ่มกับไอดีที่คุณสังกัด อยู่. อย่างไรก็ตาม, บนระบบลีนุกซ์ส่วนใหญ่คุณสามารถล็อกอินเข้ากลุ่มได้เพียงหนึ่งกลุ่มในเวลา เดียวกัน. ตามค่าดีฟ้อลท์, คุณจะเข้าด้วย primary group ซึ่งเป็นค่าที่ตั้งไว้จากไฟล์ /etc/passwd. ช่องที่สี่ของไฟล์นี้จะเก็บค่า primary group ID, ซึ่งจะใช้เปิดดูในไฟล์ /etc/group. ตัวอย่าง:

asim:~> id
uid=501(asim) gid=501(asim) groups=100(users),501(asim),3400(web)

asim:~> grep asim /etc/passwd
asim:x:501:501:Asim El Baraka:/home/asim:/bin/bash

asim:~> grep 501 /etc/group
asim:x:501:

 ข้อมูลช่องที่สี่ของ /etc/passwd มีค่า "501", ซึ่งแทนกลุ่ม asim ในตัวอย่างข้างบน. และจาก /etc/group เราจะได้ชื่อที่ตรงกับไอดีของกลุ่มนี้. เมื่อเริ่มเชื่อมต่อกับระบบ, นี่คือกลุ่มที่ asim สังกัดอยู่.

Note User private group scheme
 

เพื่อที่จะให้ใช้งานได้อย่างคล่องตัว, ระบบลีนุกซ์ส่วนใหญ่จะทำตามกฎที่เรียกว่า user private group scheme, โดยตั้งค่าไพรมารี่ของกลุ่มผู้ใช้ให้แก่กลุ่มของเขาหรือเธอเสมอ. กลุ่มนี้จะมีสมาชิกเพียงคนเดียวคือผู้ใช้แต่ละคน, ดังนั้นจึงได้ชื่อว่า "กลุ่มส่วนตัว". ปกติแล้วกลุ่มนี้จะมีชื่อเดียวกันกับชื่อผู้ใช้ที่ล็อกอิน, ทำให้สับสนในบางครั้ง.

นอกจากกลุ่มส่วนตัวแล้ว, ผู้ใช้ asim ยังอยู่ในกลุ่ม users และ web. เพราะกลุ่มเหล่านี้เป็นกลุ่มเซคคันดารี่ของผู้ใช้รายนี้, เมื่อเวลาจะเข้ากลุ่มที่สองนี้เขาต้องใช้คำสั่ง newgrp เพื่อล็อกอินไปยังกลุ่มที่สอง (ใช้คำสั่ง gpasswd สำหรับตั้งรหัสผ่านของกลุ่มก่อน). ในตัวอย่าง, ผู้ใช้ asim ต้องการสร้างไฟล์ที่กลุ่ม web เป็นเจ้าของ.

asim:/var/www/html> newgrp web

asim:/var/www/html> id
uid=501(asim) gid=3400(web) groups=100(users),501(asim),3400(web)

เมื่อ asim สร้างไฟล์ใหม่ตอนนี้, มันจะมีกลุ่ม web เป็นกลุ่มเจ้าของไฟล์ แทนที่จะเป็นกลุ่ม asim:

asim:/var/www/html> touch test

asim:/var/www/html> ls -l test
-rw-rw-r-- 1 asim web 0 Jun 10 15:38 test

 การล็อกอินเข้าไปยังกลุ่มใหม่ ทำให้คุณไม่ต้องใช้คำสั่ง chown (ดู หัวข้อ 3.4.2.4) หรือเรียกผู้ดูแลระบบให้มาเปลี่ยนเจ้าของไฟล์ให้คุณ.

 ดู manpage ของคำสั่ง newgrp สำหรับข้อมูลเพิ่มเติม.

3.4.2.3. The file mask

เมื่อไฟล์ใหม่ถูกเก็บไว้ที่ใดที่หนึ่ง, มันจะถูกควบคุมโดยมาตรฐานความปลอดภัย. ไฟล์ที่ไม่มีค่าไฟล์เปอร์มิชชั่นไม่มีในระบบลีนุกซ์. ค่าไฟล์เปอร์มิชชั่นมาตรฐานดูได้จากการ mask สำหรับการสร้างไฟล์ใหม่. ค่าของ mask นี้สามารถดูได้ด้วยคำสั่ง umask:

bert:~> umask
0002

แทนที่จะเพิ่ม symbolic value ลงไปเหมือนคำสั่ง chmod, การคำนวนค่าเปอร์มิชชั่นของไฟล์ใหม่จะทำการลบจากจำนวนเต็มของสิทธิ์ในการ เข้าถึงไฟล์. อย่างไรก็ตาม, ในตัวอย่างด้านบน, เราเห็นตัวเลข 4 ตัว, แต่มีเพียงค่าเปอร์มิชชั่นเพียง 3 ชนิด: user, group และ other. ตัวเลขศูนย์ตัวแรกคือส่วนของค่าแสดงชนิดไฟล์พิเศษ (special file attribute settings), ซึ่งเราจะพูดถึงใน หัวข้อ 3.4.2.4 และ หัวข้อ 4.1.6. มันคงดีถ้าคำสั่ง umask แสดงผลเป็นตัวเลข 3 ตัวคุณจะได้ไม่สับสน.

ระบบเลียนแบบยูนิกซ์แต่ละตัวมีฟังชั่นระบบที่สร้างไฟล์ใหม่, ซึ่งถูกเรียกใช้เมื่อผู้ใช้ใช้โปรแกรมที่สร้างไฟล์ใหม่, เมื่อดาวน์โหลดไฟล์จากอินเตอร์เนท, หรือเมื่อเก็บข้อความเอกสารใหม่ เป็นต้น. ฟังชั่นนี้สร้างทั้งไฟล์ใหม่และไดเร็กตอรี่ใหม่. โดยให้สิทธิ์เต็มในการอ่าน, เขียน และเอ็กซิคิ้วท์แก่ทุกคนเมื่อสร้างไดเร็กตอรี่ใหม่. เมื่อสร้างไฟล์ใหม่, ฟังชั่นนี้จะให้สิทธิ์การอ่านและเขียนแก่ทุกคน, แต่ไม่ให้สิทธิ์ในการเอ็กซีคิ้วท์แก่ใครเลย. นี่เป็นค่าก่อนที่จะมีการใช้ mask, ไดเร็กตอรี่มีค่า permission เป็น 777 หรือ rwxrwxrwx, ไฟล์ข้อความมีค่า permission 666 หรือ rw-rw-rw-.

ค่า umask จะลบออกจากค่าดีฟ้อลท์เปอร์มิชชั่นเหล่านี้หลังจากฟังชั่นสร้างไฟล์หรือได เร็กตอรี่ใหม่. ดังนั้น, ไดเร็กตอรี่จะมีดีฟ้อลท์เปอร์มิชชั่นเป็น 777, ส่วนไฟล์มีค่า 664 ถ้าค่า mask คือ (0)002. ดูตัวอย่างด้านล่าง:

bert:~> mkdir newdir

bert:~> ls -ld newdir
drwxrwxr-x 2 bert bert 4096 Feb 28 13:45 newdir/

bert:~> touch newfile

bert:~> ls -l newfile
-rw-rw-r-- 1 bert bert 0 Feb 28 13:52 newfile

Note Files versus directories
 

ไดเร็กตอรี่จะได้สิทธิ์มากกว่าโดยดีฟ้อลท์: มันอนุญาตให้ เอ็กซีคิ้วท์ เสมอ. ถ้ามันไม่ได้สิทธิ์นี้, มันจะเข้าใช้ไม่ได้. ลองศึกษาโดยเปลี่ยนเปอร์มิชชั่นของไดเร็กตอรี่เป็น 644!

ถ้าคุณล็ออินไปกลุ่มอื่นด้วยคำสั่ง newgrp, ค่า mask จะยังคงไม่เปลี่ยน. ดังนั้นถ้ามันตั้งไว้ที่ 002, ไฟล์และไดเร็กตอรี่ที่คุณสร้างในขณะที่อยู่ในกลุ่มใหม่จะยังคงเข้าถึงได้โดยสมาชิกอื่นของกลุ่มนั้น: คือคุณไม่จำเป็นต้องใชัคำสั่ง chmod.

ปกติผู้ใช้ root จะมีค่าดีฟ้อลท์สำหรับการสร้างไฟล์ใหม่ที่เข้มงวดมากกว่าผู้ใช้ทั่วไป:

[root@estoban root]# umask
022

ค่าดีฟ้อลท์เหล่านี้ตั้งไว้ใช้ในระบบทั้งหมดในไฟล์คอนฟิกของเชลล์, ที่ไฟล์ /etc/bashrc หรือ /etc/profile. คุณสามารถเปลี่ยนค่าของไฟล์คอนฟิกของเชลล์คุณได้, ดู บทที่ 7 เรื่องการปรับแต่งการทำงานของเชลล์.

3.4.2.4. Changing user and group ownership

เมื่อไฟล์ถูกเซ็ทค่าผู้ใช้และกลุ่มผิด, สามารถทำการเปลี่ยนได้ด้วยคำสั่ง chown (เปลี่ยนเจ้าของ) และ chgrp (เปลี่ยนกลุ่ม). คำสั่งเปลี่ยนเจ้าของผู้ดูแลระบบจะใช้บ่อยเมื่อต้องการแชร์ไฟล์ในกลุ่ม. ทั้งสองคำสั่งใช้งานได้ง่าย, ตามที่อธิบายด้วยอ็อพชั่น --help.

คำสั่ง chown สามารถใช้เปลี่ยนทั้งผู้ใช้และกลุ่มเจ้าของไฟล์, ขณะที่คำสั่ง chgrp เปลี่ยนได้เฉพาะกลุ่มที่เป็นเจ้าของไฟล์. แน่นอนว่าระบบจะทำการตรวจสอบสิทธิ์ผู้ใช้คำสั่งนี้ว่ามีสิทธิ์เพียงพอในไฟล์ ที่ต้องการเปลี่ยนหรือเปล่า.

ในการเปลี่ยนเฉพาะผู้ใช้ที่เป็นเจ้าของไฟล์, ใช้คำสั่งแบบนี้:

chown newuser file

ถ้าคุณใช้เครื่องหมายโคล่อนหลังจากชื่อผู้ใช้ (ดูใน info pages), จะสามารถเปลี่ยนกลุ่มผู้ใช้ให้เป็นกลุ่มไพรมารีของผู้ใช้ที่สั่งคำสั่ง, ในระบบลีนุกซ์, ผู้ใช้แต่ละคนมีกลุ่มของตัวเอง, การใช้คำสั่งแบบนี้จึงเป็นวิธีทำไฟล์ไว้ใช้ส่วนตัว.

jacky:~> id
uid=1304(jacky) gid=(1304) groups=1304(jacky),2034(pproject)

jacky:~> ls -l my_report
-rw-rw-r-- 1 jacky project 29387 Jan 15 09:34 my_report

jacky:~> chown jacky: my_report

jacky:~> chmod o-r my_report

jacky:~> ls -l my_report
-rw-rw---- 1 jacky jacky 29387 Jan 15 09:34 my_report

 ถ้า jacky ต้องการแชร์ไฟล์นี้, โดยไม่ต้องให้คนอื่นสามารถเขียนได้, เขาสามารถใช้คำสั่ง chgrp:

jacky:~> ls -l report-20020115.xls
-rw-rw---- 1 jacky jacky 45635 Jan 15 09:35 report-20020115.xls

jacky:~> chgrp project report-20020115.xls

jacky:~> chmod o= report-20020115.xls

jacky:~> ls -l report-20020115.xls
-rw-rw---- 1 jacky project 45635 Jan 15 09:35 report-20020115.xls

 วิธีนี้, ผู้ใช้ที่อยู่ในกลุ่ม project จะสามารถทำงานกับไฟล์นี้ได้. ผู้ใช้อื่นที่ไม่อยู่ในกลุ่มนี้จะไม่สามารถทำอะไรได้.

ทั้ง chwon และ chgrp สามารถใช้เปลี่ยนเจ้าของได้หลายระดับ, ด้วยการใช้อ็อพชั่น -R. ซึ่งมีผลให้ไฟล์ภายใต้และไดเร็กตอรี่ย่อยของไดเร็กตอรี่ที่ต้องการจะกลาย เป็นของผู้ใช้หรือกลุ่มผู้ใช้ตามที่กำหนด.

Note Restrictions
 

บนระบบส่วนมาก, การใช้คำสั่ง chown และ chgrp จะจำกัดการใช้สำหรับผู้ใช้ทั่วไป. ถ้าคุณไม่มีหน้าที่ดูแลระบบ, คุณไม่สามารถเปลี่ยนผู้ใช้หรือกลุ่มของไฟล์ด้วยเหตุผลทางความปลอดภัยของ ข้อมูล. ถ้าไม่มีการจำกัดการใช้งาน, ผู้ใช้ที่ไม่ประสงค์ดีอาจเปลี่ยนสิทธิ์เจ้าของไฟล์ของผู้ใช้อื่นและเปลี่ยน ข้อมูลของผู้ใช้เหล่านั้นทำให้เกิดความเสียหายต่อข้อมูลไฟล์ของผู้ใช้.

3.4.2.5. Special modes

สำหรับผู้ดูแลระบบที่ไม่อยากแก้ปัญหาการเปอร์มิชชั่นบ่อยๆ, สามารถตั้งค่าการใช้งานพิเศษให้ทั้งไดเร็กตอรี่, หรือโปรแกรมที่ต้องการ. โดยสามารถตั้งได้สามโหมด:

  • Sticky bit mode: หลังจากทำการเอ็กซีคิ้วท์งานแล้ว, คำสั่งจะเก็บไว้ในหน่วยความจำระบบ. เดิมทีการทำงานแบบนี้จะใช้มากเพื่อเก็บลงหน่วยความจำ: งานใหญ่จะโหลดลงหน่วยความจำเพียงครั้งเดียว. แต่ทุกวันนี้ราคาหน่วยความจำถูกลงมาก และมีเทคนิคที่ดีกว่าในการจัดการ, ดังนั้นจึงไม่ได้ใช้วิธีนี้ในการจัดการไฟล์เดี่ยวอีกต่อไป. อย่างไรก็ตาม, เมื่อใช้โหมดนี้กับทั้งไดเร็กตอรี่, ความหมายของ sticky bit จะเปลี่ยนไป. กรณีนี้, ผู้ใช้สามารถเปลี่ยนไฟล์ในไดเร็กตอรี่นี้เมื่อเธอเป็นเจ้าของไฟล์หรือเมื่อ ไฟล์มีค่าเปอร์มิชชั่นที่เหมาะสมเท่านั้น, ความสามารถพิเศษนี้ใช้กับไดเร็กตอรี่เช่น /var/tmp, ที่ทุกคนสามารถเข้าใช้งานได้, แต่ไม่อนุญาตที่ผู้ใช้จะไปลบไฟล์ของคนอื่น. sticky bit นี้จะแสดงโดยอักษร t  ที่ท้ายค่าไฟล์เปอร์มิชชั่น:
  • mark:~> ls -ld /var/tmp
    drwxrwxrwt 19 root root 8192 Jan 16 10:37 /var/tmp/

    คำสั่งที่ใช้เซ็ท sticky bit คือ chmod o+t directory.

  • SUID (set user ID) และ SGID (set group ID): แสดงด้วยตัวอักษร s ในช่อง permission ของผู้ใช้หรือกลุ่มผู้ใช้. เมื่อโหมดนี้ถูกเซ็ทบนไฟล์ที่เอ็กซีคิ้วท์ได้, มันจะรันด้วยสิทธิ์ของผู้ใช้และกลุ่มที่อนุญาตบนไฟล์แทนที่จะใช้สิทธิ์ของ ผู้ใช้ที่สั่งคำสั่ง, ดังนั้นจะทำให้สามารถเข้าใช้ทรัพยากรระบบได้. เราจะพูดถึงเรื่องนี้เพิ่มเติมใน บทที่ 4.

  •  SGID (set group ID) บนไดเร็กตอรี่: ในโหมดพิเศษนี้ทุกไฟล์ที่สร้างขึ้นในไดเร็กตอรี่จะมีเจ้าของกลุ่มเดียวกัน กับเจ้าของไดเร็กตอรี่ (ขณะที่ไฟล์ใหม่จะเป็นเจ้าของโดยผู้ใช้ที่สร้างมันในการทำงานปกติ) วิธีนี้, ผู้ใช้ไม่ต้องกังวลเกี่ยวกับเจ้าของไฟล์เมื่อแชร์ไดเร็กตอรี่:

    mimi:~> ls -ld /opt/docs
    drwxrws--- 4 root users 4096 Jul 25 2001 docs/

    mimi:~> ls -l /opt/docs
    -rw-rw---- 1 mimi users 345672 Aug 30 2001-Council.doc

    นี่เป็นวิธีมาตรฐานในการแชร์ไฟล์บนยูนิกซ์.

    Note Existing files are left unchanged!
     

    ไฟล์ที่ถูกย้ายเข้าไปในไดเร็กตอรี่ที่มี SGID จะมีคุณสมบัติตามเจ้าของไดเร็กตอรี่ แต่ไฟล์ต้นฉบับยังคงสิทธิ์เจ้าของและกลุ่มเจ้าของเดิม. พึงระมัดระวัง อาจทำให้สับสนได้.

3.5. Summary

3.5. บทสรุป

บนยูนิกซ์, เหมือนกับลีนุกซ์, ทุกอย่างจะมองเป็นไฟล์ที่มีคุณสมบัติที่เหมาะสม. การใช้พาธ (ที่ตั้งค่าไว้แล้ว) ทำให้ผู้ใช้และผู้ดูแลระบบสามารถหาไฟล์, อ่านไฟล์ และเปลี่ยนแปลงแก้ไขไฟล์ได้.

เราเริ่มก้าวแรกของการเรียนรู้: เราศึกษาโครงสร้างจริงและโครงร่างเทียมของระบบไฟล์, เราเรียนรู้เกี่ยวกับวิถีทางแห่งระบบความปลอดภัยข้อมูลของลีนุกซ์, เช่นเดียวกับข้อควรระวังอื่นที่ใช้บนทุกระบบโดยค่าดีฟ้อลท์.

เชลล์เป็นเครื่องมือที่สำคัญในการติดต่อกับระบบ. เราเรียนรู้คำสั่งเชลล์หลายคำสั่งในบทนี้, ซึ่งได้แสดงตามตารางด้านล่าง.

Table 3-10. New commands in chapter 3: Files and the file system

Command Meaning
bash GNU shell program.
cat file(s)  ส่งข้อมูลของไฟล์ออกไปยังเอาท์พุทมาตรฐาน
cd directory  เข้าไปในไดเร็กตอรี่. คำสั่ง cd เป็นคำสั่งภายในของ bash shell.
chgrp newgroup file(s)  เปลี่ยนกลุ่มเจ้าของไฟล์เป็น newgroup.
chmod mode file(s) เปลี่ยนค่าการเข้าถึงไฟล์(access permission)สำหรับไฟล์.
chown newowner[:[newgroup]] file(s)  เปลี่ยนเจ้าของไฟล์และกลุ่มเจ้าของไฟล์.
cp sourcefile targetfile  คัดลอก sourcefile ไปยัง targetfile.
df file  รายงานการใช้พื้นที่ดิสก์บนพาร์ติชั่นที่ไฟล์อยู่
echo string  แสดงข้อมูลออกหน้าจอ
export  ส่วนของ bash ที่ประกาศตัวแปรและค่าของมันส่งไปยังระบบ
file filename  ตรวจสอบชนิดของไฟล์.
find path expression  หาไฟล์ในระบบโครงสร้างไฟล์
grep PATTERN file  พิมพ์ข้อมูลบรรทัดของไฟล์ที่มีข้อมูลตรงกับแพทเทิร์นที่ให้.
head file  ส่งส่วนแรกของไฟล์ออกไปยังเอาท์พุทมาตรฐาน(หน้าจอ)
id  แสดงชื่อผู้ใช้และกลุ่มผู้ใช้จริง.
info command  อ่านเอกสารคู่มือเกี่ยวกับ command
less file  ดูข้อมูลไฟล์ด้วยโปรแกรมที่มีประสิทธิภาพสูง.
ln targetfile linkname  สร้างลิ้งค์ที่ชื่อ linkname ไปยัง target file
locate searchstring  พิมพ์ไฟล์ที่ตรงกับแพทเทิร์นที่ให้
ls file(s)  แสดงข้อมูลไดเร็กตอรี่.
man command  คู่มือระบบแบบออนไลน์สำหรับ command.
mkdir newdir  สร้างไดเร็กตอรี่ว่างอันใหม่ขึ้นมา.
mv oldfile newfile  เปลี่ยนชื่อหรือย้าย oldfile.
newgrp groupname  ล็อกอินเข้ากลุ่มใหม่.
pwd  แสดงข้อมูลไดเร็กตอรี่ปัจจับัน.
quota  แสดงข้อมูลการใช้งานดิสก์และข้อจำกัดของดิสก์.
rm file  ลบไฟล์และไดเร็กตอรี่.
rmdir file  ลบไดเร็กตอรี่.
tail file  แสดงข้อมูลส่วนท้ายของไฟล์.
umask [value]  แสดงหรือเปลี่ยนค่าโหมดการสร้างไฟล์.
wc file  นับบรรทัด, คำและตัวอักษรใน file.
which command  แสดงพาธเต็มของ command

เราได้เน้นประเด็นที่คุณควร อ่านคู่มือคำสั่ง (READ THE MAN PAGES) เอกสารนี้เป็นชุดแก้ปัญหาฉุกเฉินที่มีคำตอบให้หลายๆคำถาม. ตารางด้านบนเป็นคำสั่งพื้นฐานที่คุณจะใช้ในการทำงานประจำวัน, แต่มันสามารถทำงานได้มากกว่าที่เราได้อธิบายที่นี่. การอ่านเอกสารคู่มือจะทำให้คุณสามารถควบคุมระบบได้ตามต้องการ.

สุดท้ายแต่ไม่ท้ายสุด, ภาพรวมของ file permissions:

Table 3-11. File permissions

Who\What r(ead) w(rite) (e)x(ecute)
u(ser) 4 2 1
g(roup) 4 2 1
o(ther) 4 2 1

3.6. Exercises

3.6. แบบฝึกหัด

 ล็อกอินด้วยชื่อผู้ใช้ของคุณ

3.6.1. Partitions

  •  พาร์ติชั่นใหนคือพาร์ติชั่นที่โฮมไดเร็กตอรี่ของคุณอยู่?

  •  ในระบบของคุณมีกี่พาร์ติชั่น?

  •  ลีนุกซ์ที่ติดตั้งบนระบบของคุณมีขนาดเนื้อที่ทั้งหมดเท่าไร?

3.6.2. Paths

  •  แสดงพาธที่ใช้ในการ search ของคุณ.

  •  ทำการ export พาธที่ไม่มีนัยสำคัญโดยสั่งคำสั่งเช่น export PATH=blah และลองสั่งคำสั่งดูรายการไดเร็กตอรี่.

  •  อะไรคือพาธที่ชี้ไปยังโฮมไดเร็กตอรี่ของคุณ? ถ้าผู้ใช้อื่นต้องการเข้ามาที่โฮมไดเร็กตอรี่ของคุณจากโฮมไดเร็กตอรี่ของเขา , จะใช้คำสั่งอะไรโดยการใช้ relative path?

  •  ไปยังไดเร็กตอรี่ tmp ใน /var.

  •  สั่งคำสั่งเดียวเพื่อไปที่ไดเร็กตอรี่ /usr. แล้วเข้าไดเร็กตอรี่ doc . ตอนนี้ไดเร็กตอรี่ปัจจุบันของคุณคืออะไร?

3.6.3. Tour of the system

  •  เปลี่ยนไดเร็กตอรี่ เป็น /proc.

  •  ระบบทำงานบน CPU อะไร?

  •  จำนวน RAM ที่ถูกใช้งานไปมีเท่าไร?

  •  จำนวนพื้นที่ SWAP ของคุณมีเท่าไร?

  •  มีไดรเวอร์อะไรที่ถูกโหลด?

  •  ระบบทำงานมาทั้งหมดใช้เวลาเท่าไร?

  •  ระบบของคุณรู้จักระบบไฟล์อะไรบ้าง?

  •  เปลี่ยนเข้าไดเร็กตอรี่ /etc/rc.d | /etc/init.d | /etc/runlevels และเลือกไดเร็กตอรี่ที่เหมาะสมสำหรับระดับการรันของคุณ.

  •  เซอร์วิสอะไรที่ควรจะรันที่ระดับนี้?

  •  เซอร์วิสอะไรที่ไม่ได้รันในโหมดเทกซ์?

  • เปลี่ยนเป็น /etc

  •  ระบบจะเก็บล็อกไฟล์ที่ผู้ใช้ล็อกอินไว้นาทนเท่าไร?

  •  เวอร์ชั่นใหนที่กำลังรันอยู่?

  •  มีข้อความประจำวันทำงานอยู่หรือไม่?

  •  มีผู้ใช้กี่คนที่กำหนดให้ใช้ในระบบของคุณ? อย่านับมัน, ให้คอมพิวเตอร์นับให้!

  •  มีกลุ่มกี่กลุ่ม

  •  ข้อมูลโซนเวลาเก็บไว้ที่ไหน?

  • ข้อมูล HOWTO มีในระบบของคุณหรือไม่?

  •  เปลี่ยนไปไดเร็กตอรี่ /usr/share/doc.

  •  จงแสดงชื่อโปรแกรมสามชื่อที่มากับชุดโปรแกรม GNU coreutils .

  •  เวอร์ชั่นใหนของ bash ที่ติดตั้งบนระบบนี้?

3.6.4. Manipulating files

  •  สร้างไดเร็กตอรี่ใหม่ในโฮมไดเร็กตอรี่ของคุณ.

  •  คุณสามารถย้ายไดเร็กตอรี่ไปยังระดับเดียวกันกับโฮมไดเร็กตอรี่ของคุณได้หรือไม่?

  •  คัดลอกไฟล์ XPM จากไดเร็กตอรี่ /usr/share/pixmaps ไปยังไดเร็กตอรี่ใหม่.

  •  แสดงรายการไฟล์โดยเรียงลำดับตามตัวอักษรแบบย้อนกลับ.

  •  เปลี่ยนไปโฮมไดเร็กตอรี่ของคุณ, สร้างไดเร็กตอรี่และก้อปปี้ไฟล์ทุกไฟล์ของไดเร็กตอรี่ /etc ไปยังไดเร็กตอรี่ใหม่. แน่ใจว่าคุณได้ก้อปปี้ไฟล์และไดเร็กตอรี่ย่อยใน /etc ด้วย! (คือการก้อปปี้แบบ recursive)

  •  เปลี่ยนเข้าไปในไดเร็กตอรี่ใหม่และสร้างไดเร็กตอรี่สำหรับไฟล์ที่ เริ่มต้นด้วยตัวพิมพ์ใหญ่และไดเร็กตอรี่สำหรับไฟล์ที่เริ่มต้นด้วยตัวพิมพ์ เล็ก. ย้ายไฟล์ทั้งหมดเข้าในไดเร็กตอรี่ที่เหมาะสม. โดยใช้คำสั่งให้น้อยที่สุด.

  •  ลบไฟล์ที่เหลือ.

  •  ลบไดเร็กตอรี่และข้อมูลทั้งหมดโดยใช้คำสั่งเดียว.

  • ใช้คำสั่ง grep เพื่อหาสคริปที่สตาร์ท Font Server ใน graphic run level.

  •  โปรแกรม sendmail อยู่ที่ใหน?

  •  สร้าง symbolic link ในโฮมไดเร็กตอรี่ของคุณชี้ไปที่ /var/tmp. ตรวจดูว่ามันทำงานใหม.

  •  สร้าง symbolic link อื่นในโฮมไดเร็กตอรี่ของคุณที่ชี้ไปลิ้งค์นี้. ตรวจสอบดูว่ามันทำงานหรือเปล่า. ลบลิ้งค์แรกและสั่งคำสั่งดูรายการไดเร็กตอรี่. เกิดอะไรขึ้นกับลิ้งค์ที่สอง?

3.6.5. File permissions

  •  คุณสามารถเปลี่ยนไฟล์เพอร์มิชชั่นของไดเร็กตอรี่ /home ได้หรือไม่?

  •  อะไรคือโหมดมาตรฐานของไฟล์ที่คุณสร้างขึ้น?

  •  เปลี่ยนเจ้าของไดเร็กตอรี่ /etc เป็นชื่อคุณและกลุ่มของคุณ.

  •  เปลี่ยนไฟล์เพอร์มิชชั่นของ ~/.bashrc ที่ทำให้คุณและกลุ่มของคุณเท่านั้นที่มีสิทธิ์ อ่านมัน.

  •  ลองใช้คำสั่ง locate root. สังเกตุว่ามีอะไรพิเศษหรือเปล่า?

  •  สร้าง symbolic link ชี้ไปที่ /root ตรวจสอบว่ามันทำงานหรือไม่?

Chapter 04. Processes

Chapter 4. Processes

นอกจากระบบไฟล์แล้ว, โพรเซสเป็นส่วนสำคัญของระบบ Unix/Linux. ในบทนี้, เราจะเจาะลึกในรายละเอียดของโพรเซส. เราจะเรียนรู้ในเรื่อง:

  • Multi-user processing and multi-tasking

  • Process types

  • Controlling processes with different signals

  • Process attributes

  • The life cycle of a process

  • System startup and shutdown

  • SUID and SGID

  • System speed and response

  • Scheduling processes

  • The Vixie cron system

  • How to get the most out of your system

4.1. Processes inside out

4.1.  การทำงานของโพรเซส

4.1.1. Multi-user and multi-tasking

ถึงตอนนี้เราเริ่มทำความคุ้นเคยกับระบบบ้างแล้ว ในบทนี้เราจะเรียนรู้การทำงานของโพรเซสในรายละเอียด. คำสั่งบางคำสั่งสามารถสร้างโพรเซสขึ้นจำนวนมาก เช่น mozilla ส่วนคำสั่งอื่นเช่น ls, จะเอ็กซีคิ้วท์เหมือนคำสั่งเดียว.

เนื่องจากการสร้างลีนุกซ์จะอ้างอิงกับยูนิกซ์, เป็นเรื่องปกติที่ระบบจะใช้งานกับผู้ใช้หลายคนและหลายงานในเวลาเดียวกัน, บนระบบเดียวกัน. โดยมี CPU จัดการโพรเซสเหล่านี้, มีกลไกที่ทำให้ผู้ใช้สามารถสลับการทำงานของโพรเซสต่างๆได้. ในบางกรณี, โพรเซสสามารถทำงานอย่างต่อเนื่องแม้ว่าผู้ใช้ที่สั่งให้มันทำงานจะล็อก เอ้าท์ไปแล้ว.

 เราจะอธิบายโครงสร้างของลีนุกซ์โพรเซสในหัวข้อถัดไป.

4.1.2. ชนิดของโพรเซส

4.1.2.1.  โพรเซสชนิดอินเตอร์แอ็กทิฟ

อินเตอร์แอ็กทิฟโพรเซสจะถูกสร้างและควบคุมผ่านเทอร์มินอล. กล่าวคือ, จะต้องมีคนล็อกอินเข้าระบบและสั่งให้โพรเซสทำงาน; โพรเซสจะไม่ทำงานอัตโนมัติเหมือนฟังชั่นของระบบ. โปรเซสเหล่านี้สามารถทำงานในโหมด foreground, และต้องใช้เทอร์มินอลในการสั่งให้เริ่มทำงาน, และคุณไม่สามารถสั่งแอพพลิเคชั่นอื่นให้ทำงานตราบใดที่โพรเซสนี้ทำงานในโหมด foreground. อีกทางเลือกหนึ่งในการสั่งโพรเซสให้ทำงานคือให้ทำงานในโหมด background, ทำให้เทอร์มินอลที่คุณสั่งให้โปรแกรมทำงานสามารถรับคำสั่งอื่นได้ในขณะที่ โปรแกรมกำลังทำงาน. เวลานี้เราจะเน้นโปรแกรมที่รันในโหมด foreground - เนื่องจากเวลาที่ใช้ในการรันคำสั่งสั้นมากที่จะทันสังเกตุ - คำสั่ง less เป็นตัวอย่างคำสั่งที่ดีในการใช้งานเทอร์มินอล. กรณีนี้, โปรแกรมจะทำงานและรอให้คุณสั่งงานเพื่อทำต่อ. โปรแกรมจะยังเชื่อมต่ออยู่กับเทอร์มินอลที่มันถูกสั่งให้ทำงาน, และเทอร์มินอลเป็นอุปกรณ์ที่ใช้สำหรับป้อนคำสั่งที่โปรแกรมนี้จะเข้าใจได้. ถ้าสั่งคำสั่งอื่นที่โปรแกรมไม่รองรับจะให้ผลลัพท์ errors หรือ ข้อมูลที่ระบบไม่ตอบสนอง.

แต่ถ้าคุณสั่งโพรเซสให้รันในโหมด background, คุณสามารถสั่งคำสั่งอื่นต่อได้ในขณะที่โพรเซสนั้นกำลังทำงานอยู่.

โปรแกรมเชลล์จะมีความสามารถที่เรียกว่า job control ซึ่งใช้ทำงานกับโพรเซสหลายๆตัวได้ง่าย. กลไกนี้สามารถสลับโพรเซสระหว่าง foreground และ background. หรือสั่งให้โปรแกรมทำงานในโหมด background ได้ทันที.

การสั่งให้โพรเซสทำงานในโหมด background มีประโยชน์สำหรับโปรแกรมที่ไม่ต้องการรับค่าอินพุทจากผู้ใช้(ผ่าน shell). ส่วนมากแล้วจะใช้กับคำสั่งที่ทำงานใช้เวลานาน. เพื่อให้เทอร์มินอลสามารถใช้กับโปรแกรมอื่นได้หลังจากสั่งคำสั่ง, วิธีการคือใช้เครื่องหมาย & ตามหลังคำสั่ง. ตามตัวอย่าง, เป็นคำสั่งใช้กราฟฟิกโหมด, โดยสั่งให้สร้างกราฟฟิกเทอร์มินอลจากเทอร์มินอลที่ใช้อยู่เดิม:

billy:~> xterm &
[1] 26558

billy:~> jobs
[1]+ Running xterm &

 รายละเอียดของ job control หาอ่านได้จากคู่มือคำสั่ง bash, ในที่นี้จะพูดถึงคำสั่งที่ใช้บ่อยเท่านั้น:

Table 4-1. Controlling processes

(part of) command Meaning
regular_command  สั่งให้คำสั่งทำงานในโหมด forground.
command &  สั่งให้คำสั่งทำงานในโหมด background.(เทอร์มินอลจะใช้ต่อได้เลย)
jobs  แสดงคำสั่งที่ทำงานในโหมด  background.
Ctrl+Z  หยุด(หยุด, แต่ไม่ออกจากโปรแกรม) โพรเซสที่ทำงานในโหมด foreground.
Ctrl+C  หยุด(หยุด, และออกจากโปรแกรม) โพรเซสที่ทำงานในโหมด foreground.
%n

ทุกโพรเซสที่ทำงานในโหมด background มีหมายเลขโพรเซสกำกับ. เราสามารถอ้างถึงโพรเซสเหล่านี้ได้ด้วยการใช้หมายเลข, ตัวอย่าง fg %2.

bg  สั่งให้โปรแกรมที่ถูกหยุดให้ไปทำงานต่อในโหมด background.
fg  สั่งให้ job กลับมาทำงานในโหมด foreground.
kill  สั่งจบโพรเซส(รายละเอียดดูในคู่มือคำสั่ง info ของ bash)

 คำสั่งเพื่อฝึกการใช้จะอยู่ในแบบฝึกหัดท้ายบท.

ระบบยูนิกซ์ส่วนใหญ่จะมีความสามารถทำคำสั่ง screen, ซึ่งมีประโยชน์เมื่อคุณอยากใช้เชลล์อื่นทำงาน. หลังจากเรียกคำสั่ง screen. ระบบจะสร้างเซสชั่นใหม่ตามที่เชลล์และ/หรือคำสั่งระบุ, เพื่อให้คุณทำงาน. คำสั่งที่ทำงานในเซสชั่นนี้จะเป็นอิสระจากเชลล์ที่สร้างมัน. แม้ว่าคุณจะล็อกเอ้าท์จากเชลล์แรกที่เรียกคำสั่งนี้. เซสชั่นของ screen จะยังคงอยู่.

โปรแกรมนี้เกิดจากตอนที่ยังไม่มี virtual console ใช้งาน, และทุกอย่างต้องทำงานบน text terminal. เลยติดมากับระบบเช่นลีนุกซ์, แม้ว่าเราจะมี virtual console ใช้มากว่าสิบปีแล้ว.

4.1.2.2.  โพรเซสอัตโนมัติ

โพรเซสอัตโนมัติหรือที่เรียกว่า batch process จะไม่ทำงานเชื่อมต่อกับเทอร์มินอล. แต่มันจะทำงานตามลำดับอยู่ใน spooler area, ซึ่งจะรอทำงานในตามคิวแบบ FIFO(เข้าก่อน-ออกก่อน). การทำคำสั่งของโพรเซสชนิดนี้แบ่งได้สองเงื่อนไข:

  •  ทำงานเมื่อถึงวันและเวลาที่กำหนด: ด้วยการใช้คำสั่ง at , ซึ่งเราจะอธิบายในส่วนที่สองของบทนี้.

  •  ทำงานเมื่องานทั้งหมดของระบบเบาพอที่จะทำงานพิเศษได้: ใช้คำสั่ง batch. การทำงานตามค่าดีฟ้อลท์, งานจะถูกใส่ไว้ในคิวและรอจนโหลดของระบบต่ำกว่า 0.8. ในระบบที่มีผู้ใช้งานมาก, ผู้ดูแลระบบนิยมใช้ batch processing เมื่อต้องทำงานกับข้อมูลจำนวนมากหรืองานที่กินทรัพยากรเครื่องมากบนระบบที่ ทำงานหนัก. ทำให้ระบบถูกใช้งานอย่างมีประสิทธิภาพ.

4.1.2.3.  เดมอน

เดมอนคือโพรเซสของเซิฟเวอร์ที่ทำงานตลอดเวลา. ส่วนมากแล้ว, มันจะถูกสั่งให้เริ่มทำงานตอนเริ่มระบบและทำงานในโหมด background จนกระทั่งงานของมันถูกเรียกใช้. ตัวอย่างเช่น network deamon, xinetd , ซึ่งจะถูกเรียกให้ทำงานทุกครั้งที่มีการ boot เครื่อง. หลังจากระบบบูทแล้ว, network daemon จะนั่งรอจนกระทั่งโปรแกรมลูก, เช่นโปรแกรม FTP client, ต้องการเชื่อมต่อ.

4.1.3. Process attributes

 โพรเซสมีรายละเอียดภายใน, ซึ่งสามารถดูได้ด้วยคำสั่ง ps คือ:

  •  The process ID or PID: ตัวเลขเฉพาะมีค่าไม่ซ้ำกันเพื่ออ้างถึงโพรเซส

  •  The parent process ID or PPID: หมายเลขโพรเซสแม่ที่เป็นตัวสั่งเริ่มสตาร์ทโพรเซสนี้

  •  nice number: ระดับของการทำงานของโพรเซสนี้เทียบกับโพรเซสอื่น (อย่าสับสนกับ process priority, ซึ่งคำนวณจากตัวเลข nice numberและการใช้งาน CPU กับโพรเซสนี้).

  •  Terminal or TTY: เทอร์มินอลที่โพรเซสนี้เชื่อมต่อ

  • User name of the real and effective user (RUID and EUID): ชื่อผู้ใช้ที่เป็นเจ้าของโพรเซส. เจ้าของจริงคือผู้ใช้คนที่สั่งคำสั่งนี้, ส่วน effective user คือผู้ที่จะใช้สำหรับการเข้าใช้ทรัพยากรของระบบ. ปกติแล้ว RUID และ EUID จะเป็นคนเดียวกัน, และโพรเซสจะสามารถใช้ทรัพยากรตามสิทธิ์ของผู้ใช้คนที่สั่ง. ตัวอย่างเพื่อให้เห็นได้ชัด: บราวเซอร์ mozilla ใน /usr/bin มี root เป็นเจ้าของ:

    theo:~> ls -l /usr/bin/mozilla
    -rwxr-xr-x 1 root root 4996 Nov 20 18:28 /usr/bin/mozilla*

    theo:~> mozilla &
    [1] 26595

    theo:~> ps -af
    UID PID PPID C STIME TTY TIME CMD
    theo 26601 26599 0 15:04 pts/5 00:00:00 /usr/lib/mozilla/mozilla-bin
    theo 26613 26569 0 15:04 pts/5 00:00:00 ps -af

     เมื่อผู้ใช้ theo สั่งโปรแกรมนี้ทำงาน, ตัวโพรเซสเองและโพรเซสลูกที่เกิดจากโพรเซสแรก, จะเป็นของผู้ใช้ theo ไม่ใช่ผู้ดูแลระบบ. เมื่อ mozilla ต้องการใช้ข้อมูลจากไฟล์, สิทธิ์ในการใช้จะคิดจากสิทธิ์ของ theo ไม่ใช่สิทธิ์ของ root.

  • Real and effective group owner (RGID and EGID): . เจ้าของ group ของโพรเซสคือ group ของผู้ใช้ที่สั่งให้โพรเซสทำงาน. ปกติ effective group owner จะเหมือนกับ real group owner, ยกเว้นเมื่อมีการใช้ SGID access mode กับไฟล์.

4.1.4. Displaying process information การแสดงข้อมูลโพรเซส

 คำสั่ง ps ใช้ดูรายละเอียดโพรเซส. คำสั่งนี้มีอ็อพชั่นหลายตัวเพื่อดูแอททริบิวท์ต่างๆของโพรเซส.

 ถ้าไม่ใส่อ็อพชั่น, คำสั่ง ps จะให้ข้อมูลเกี่ยวกับเชลล์ปัจจุบันและโพรเซสท้ายสุด.

theo:~> ps
PID TTY TIME CMD
4245 pts/7 00:00:00 bash
5314 pts/7 00:00:00 ps

 เนื่องจากคำสั่งนี้ไม่ได้ให้ข้อมูลเพียงพอ - โดยทั่วไปแล้ว, จะมีโพรเซสที่วิ่งในระบบกว่าร้อยโพรเซส - ปกติเราจะเลือกดูเฉพาะที่เราสนใจจากโพรเซสทั้งหมด, ด้วยการใช้คำสั่ง grep ในเครื่องหมาย pipe, ดู หัวข้อ 5.1.2.1, ดังตัวอย่างข้างล่าง, ซึ่งจะเลือกดูโพรเซสที่ระบุชื่อผู้ใช้:

ps -ef | grep username

 ตัวอย่างการแสดงทุกโพรเซสที่ชื่อโพรเซสคือ bash, ซึ่งเป็นเชลล์ที่ใช้บ่อยในระบบลีนุกซ์:

theo:> ps auxw | grep bash
brenda 31970 0.0 0.3 6080 1556 tty2 S Feb23 0:00 -bash
root 32043 0.0 0.3 6112 1600 tty4 S Feb23 0:00 -bash
theo 32581 0.0 0.3 6384 1864 pts/1 S Feb23 0:00 bash
theo 32616 0.0 0.3 6396 1896 pts/2 S Feb23 0:00 bash
theo 32629 0.0 0.3 6380 1856 pts/3 S Feb23 0:00 bash
theo 2214 0.0 0.3 6412 1944 pts/5 S 16:18 0:02 bash
theo 4245 0.0 0.3 6392 1888 pts/7 S 17:26 0:00 bash
theo 5427 0.0 0.1 3720 548 pts/7 S 19:22 0:00 grep bash

ในกรณีนี้, คำสั่ง grep  จะหาบรรทัดที่มีตัวหนังสือ bash และแสดงผลได้เร็วถ้าระบบไม่ทำงานหนัก. แต่ถ้าระบบทำงานหนักคุณอาจใช้คำสั่ง pgrep เพื่อดู process ID แทน.

 Bash shell เป็นเชลล์ที่แตกต่างจากเชลล์ทั่วไป: โดยคำสั่งแสดงรายการโพรเซสมันจะแสดงเชลล์ที่ใช้ในการล็อกอิน(คือเชลล์ที่คุณ ต้องป้อนชื่อผู้ใช้และรหัสผ่านตอนเข้าใช้งาน)แตกต่างจากเชลล์ที่ไม่ได้ใช้ ล็อกอินซึ่งเปิดจากการคลิกเปิดเทอร์มินอลไอคอน. โดยการแสดงล็อกอินเชลล์ด้วยการใส่เครื่องหมาย - นำหน้าเชลล์.

Note |?
 

 เราจะอธิบายการใช้เครื่องหมายไปป์ในบทถัดไป, ดู บทที่ 5

 รายละเอียดเพิ่มเติมหาดูได้จากคำสั่ง ps --help หรือคำสั่ง man ps. คำสั่ง ps รองรับอ็อพชั่นหลายตัว;

 หมายเหตุ คำสั่ง ps จะให้ข้อมูลของโพรเซสที่แอ็กทิฟในขณะนั้น, มันจะเก็บข้อมูลเพียงครั้งเดียว. ส่วนคำสั่ง top จะแสดงผลละเอียดกว่าโดยการอัพเดทผลลัพท์ของคำสั่ง ps (สามารถเพิ่มอ็อพชั่นได้อีก) ทุกๆ 5 วินาที, และสร้างผลลัพท์แสดงโพรเซสที่กินกำลังงานของระบบเป็นระยะ, และยังแสดงข้อมูลของพื้นที่ swap ในการใช้งานของ CPU, จาก proc file system:

 12:40pm up 9 days, 6:00, 4 users, load average: 0.21, 0.11, 0.03
89 processes: 86 sleeping, 3 running, 0 zombie, 0 stopped
CPU states: 2.5% user, 1.7% system, 0.0% nice, 95.6% idle
Mem: 255120K av, 239412K used, 15708K free, 756K shrd, 22620K buff
Swap: 1050176K av, 76428K used, 973748K free, 82756K cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
5005 root 14 0 91572 15M 11580 R 1.9 6.0 7:53 X
19599 jeff 14 0 1024 1024 796 R 1.1 0.4 0:01 top
19100 jeff 9 0 5288 4948 3888 R 0.5 1.9 0:24 gnome-terminal
19328 jeff 9 0 37884 36M 14724 S 0.5 14.8 1:30 mozilla-bin
1 root 8 0 516 472 464 S 0.0 0.1 0:06 init
2 root 9 0 0 0 0 SW 0.0 0.0 0:02 keventd
3 root 9 0 0 0 0 SW 0.0 0.0 0:00 kapm-idled
4 root 19 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
5 root 9 0 0 0 0 SW 0.0 0.0 0:33 kswapd
6 root 9 0 0 0 0 SW 0.0 0.0 0:00 kreclaimd
7 root 9 0 0 0 0 SW 0.0 0.0 0:00 bdflush
8 root 9 0 0 0 0 SW 0.0 0.0 0:05 kupdated
9 root -1-20 0 0 0 SW< 0.0 0.0 0:00 mdrecoveryd
13 root 9 0 0 0 0 SW 0.0 0.0 0:01 kjournald
89 root 9 0 0 0 0 SW 0.0 0.0 0:00 khubd
219 root 9 0 0 0 0 SW 0.0 0.0 0:00 kjournald
220 root 9 0 0 0 0 SW 0.0 0.0 0:00 kjournald

The first line of top contains the same information displayed by the uptime command: บรรทัดแรกของผลลัพท์คำสั่ง top แสดงข้อมูลเดียวกับผลของคำสั่ง uptime:

jeff:~> uptime
3:30pm, up 12 days, 23:29, 6 users, load average: 0.01, 0.02, 0.00

 ข้อมูลของโปรแกรมจะเก็บไว้ใน /var/run/utmp (ข้อมูลของผู้ใช้ที่ใช้งานปัจจุบัน) และใน virtual file system /proc, ตัวอย่าง /proc/loadavg (ค่าโหลดโดยเฉลี่ย). มีโปรแกรมแอพพลิเคชั่นหลายตัวที่แสดงข้อมูลในแบบกราฟฟิก, เช่น Gnome System Monitor และ lavaps. ไปดูที่ Freshmeat และ SourceForge คุณจะพบแอพพลิเคชั่นนับสิบที่สามารถเก็บข้อมูลจากเซิฟเวอร์อื่นรวบรวมไว้ในเวิร์คสเตชั่นตัวเดียว.

 ความสัมพันธ์ของโพรเซส สามารถดูได้ด้วยคำสั่ง pstree:

sophie:~> pstree
init-+-amd
|-apmd
|-2*[artsd]
|-atd
|-crond
|-deskguide_apple
|-eth0
|-gdm---gdm-+-X
| `-gnome-session-+-Gnome
| |-ssh-agent
| `-true
|-geyes_applet
|-gkb_applet
|-gnome-name-serv
|-gnome-smproxy
|-gnome-terminal-+-bash---vim
| |-bash
| |-bash---pstree
| |-bash---ssh
| |-bash---mozilla-bin---mozilla-bin---3*[mozilla-bin]
| `-gnome-pty-helper
|-gpm
|-gweather
|-kapm-idled
|-3*[kdeinit]
|-keventd
|-khubd
|-5*[kjournald]
|-klogd
|-lockd---rpciod
|-lpd
|-mdrecoveryd
|-6*[mingetty]
|-8*[nfsd]
|-nscd---nscd---5*[nscd]
|-ntpd
|-3*[oafd]
|-panel
|-portmap
|-rhnsd
|-rpc.mountd
|-rpc.rquotad
|-rpc.statd
|-sawfish
|-screenshooter_a
|-sendmail
|-sshd---sshd---bash---su---bash
|-syslogd
|-tasklist_applet
|-vmnet-bridge
|-xfs
`-xinetd-ipv6

 อ็อพชั่น -u และ -a จะให้ข้อมูลเพิ่มเติม. รายละเอียดของอ็อพชั่นดูได้จาก คู่มือคำสั่ง.

 หัวข้อถัดไป, เราจะดูว่าหนึ่งโพรเซสสามารถสร้างโพรเซสอื่นได้.

4.1.5.  การเกิดและสิ้นสุดของโพรเซส

4.1.5.1.  การสร้างโพรเซส

 โพรเซสใหม่ถูกสร้างขึ้นเพราะโพรเซสเดิมสร้างโพรเซสใหม่โดยก็อปปี้ ตัวมันเอง. โพรเซสลูกจะมี environment เหมือนโพรเซสแม่, ต่างกันเพียงหมายเลขโพรเซส. วิธีการนี้เรียกว่า forking.

 หลังจากกระบวนการ forking, พื้นที่ของโพรเซสลูกจะถูกเขียนทับด้วยข้อมูลของโพรเซสใหม่. ด้วยการใช้คำสั่ง exec ของระบบ.

 กลไกของ fork-and-exec จะสลับคำสั่งเก่าด้วยคำ สั่งใหม่, ในขณะที่ environment ของโปรแกรมใหม่ยังเหมือนเดิม, รวมทั้งโครงสร้างของอุปกรณ์อินพุทและเอ้าท์พุท, ตัวแปร environment และ priority. กลไกนี้ใช้ในการสร้างโพรเซสของ UNIX ทุกตัว, และใช้กับระบบปฏิบัติการลีนุกซ์ด้วย. แม้กระทั่งโพรเซสแรก, คือโพรเซส init, ซึ่งมีหมายเลขโพรเซสเป็น 1, ก็ถูกสร้างโดยการ fork ระหว่างที่ระบบทำการบูท ที่เรียกว่า bootstrapping .

 ไดอะแกรมข้างล่างแสดงกลไก fork-and-exec. หมายเลขโพรเซสจะเปลี่ยนหลังจากการ fork:

Figure 4-1. Fork-and-exec mechanism

 มีหลายกรณีที่ทำให้ init กลายเป็นโพรเซสแม่, โดยที่โพรเซสไม่ได้ถูก start โดยโพรเซส init, ดังที่เราเห็นในผลลัพท์ของคำสั่ง pstree. โปรแกรมหลายตัว, จะ daemonize โพรเซสลูก ทำให้โพรเซสลูกยังทำงานโดยโพรเซสแม่หยุดไปแล้ว. ยกตัวอย่างโปรแกรมจัดการวินโดว์ มันจะสร้างโพรเซส xterm ที่สร้างเชลล์เพื่อรับคำสั่ง. โปรแกรมจัดการวินโดว์จะหมดหน้าที่และส่งต่อโพรเซสลูกให้แก่ init . และด้วยวิธีนี้, ทำให้สามารถเปลี่ยนแปลงโปรแกรมจัดการวินโดว์ได้โดยไม่ขัดจังหวะการทำงานของแอพพลิเคชั่นลูก .

 เมื่อเกิดข้อผิดพลาดขึ้น, เช่นโพรเซสลูกเสร็จการทำงานแต่โพรเซสแม่ไม่ได้รอการจบของโพรเซสนี้. โพรเซสจะค้างในระบบเรียกว่า zombie process.

4.1.5.2.  การจบโพรเซส

 เมื่อโพรเซสจบการทำงานตามปกติ(ไม่ได้ถูกขัดจังหวะหรือถูก kill), โปรแกรมจะคืนค่า exit status ไปยังโพรเซสแม่. ค่าจบการทำงานนี้เป็นตัวเลขที่ส่งโปรแกรมเพื่อรายงานผลลัพท์ของการทำงาน. ระบบการคืนค่าหลังจากทำงานนี้เป็นส่วนหนึ่งของภาษาซี ที่ใช้สร้างระบบยูนิกซ์.

ค่าที่ส่งกลับจะถูกตรวจสอบโดยโพรเซสแม่, หรือตรวจสอบโดยสคริป. ค่านี้จะมีความหมายตามการโปรแกรม. ปกติข้อมูลความหมายของโค้ดจะมีในคู่มือคำสั่ง man pages ของโปรแกรมนั้นๆ, ตัวอย่างเช่นคำสั่ง grep จะคืนค่า -1 ถ้าไม่มีค่าตรงกับรูปแบบที่ตรวจ, เพื่อสคริปจะได้ส่งข้อความ "No files found" แสดงให้แก่ผู้ใช้. อีกตัวอย่างคือคำสั่ง true, ซึ่งไม่ได้ทำอะไรนอกจากส่งคืนค่า exit status เป็น 0, หมายความว่าทำงานสำเร็จ.

4.1.5.3. Signals

โพรเซสจบการทำงานเพราะได้รับสัญญาณ. มี signal หลายตัวที่คุณสามารถส่งไปยังโพรเซส. คำสั่ง kill จะส่ง signal ไปยังโพรเซส. คุณสามารถใช้คำสั่ง kill -l เพื่อ ดูรายการของ signal. ส่วนมาก signal จะใช้ภายในระบบ, หรือโปรแกรมเมอร์ที่เขียนโปรแกรม. ส่วนผู้ใช้ทั่วไป, จะใช้ signal ต่อไปนี้:

Table 4-2. Common signals

Signal name Signal number Meaning
SIGTERM 15 หยุดการทำงานของโพรเซสตามลำดับ
SIGINT 2  ขัดจังหวะการทำงานของโพรเซส. แต่โพรเซสอาจไม่สนใจ signal นี้
SIGKILL 9  ขัดจังหวะการทำงานของโพรเซส. โดยโพรเซสต้องตอบสนอง.
SIGHUP 1  สำหรับเดมอน: ให้ทำการอ่านไฟล์ configuration ใหม่

คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับดีฟ้อลท์การตอบสนองของโพรเซสเมื่อได้รับ signal ในคู่มือคำสั่ง man 7 signal.

4.1.6. SUID and SGID

ต่อเนื่องจากบทที่แล้ว, เราจะมาพูดถึงรายละเอียดของ SUID และ SGID ในโหมดพิเศษ. โหมดนี้สร้างขึ้นเพื่อให้ผู้ใช้ธรรมดาสามารถทำงานที่ปกติแล้วจะไม่อนุญาตให้ ทำเนื่องจากถูกจำกัดโดยค่า file permission ในระบบยูนิกซ์. ในทางทฤษฎีจะพยายามหลีกเลี่ยงการใช้โหมดพิเศษนี้, เนื่องจากอาจเสี่ยงในด้านความปลอดภัยของระบบ. นักพัฒนาลีนุกซ์ก็พยายามหลีกเลี่ยงเช่นกัน. ตัวอย่างเช่น คำสั่ง ps จะใช้ข้อมูลจากไฟล์ระบบ /proc , ซึ่งทุกคนสามารถเข้าถึงได้, ทำให้หลีกเลี่ยงการเปิดเผยข้อมูลที่เป็นข้อมูลระบบได้. ในระบบยูนิกซ์รุ่นเก่า, คำสั่ง ps จะใช้ข้อมูลจากไฟล์ /dev/mem และ /dev/kmem, ซึ่งมีข้อเสียเนื่องจากต้องแก้ไขค่า permission และ ownership ของไฟล์.

rita:~> ls -l /dev/*mem
crw-r----- 1 root kmem 1, 2 Aug 30 22:30 /dev/kmem
crw-r----- 1 root kmem 1, 1 Aug 30 22:30 /dev/mem

 คำสั่ง ps รุ่นเก่า, ผู้ใช้ทั่วไปจะไม่สามารถใช้คำสั่งนี้, ถ้าไม่มีการใช้โหมดพิเศษ.

แม้ว่าเราพยายามหลีกเลี่ยงการใช้โหมดพิเศษ, แต่ก็มีบางครั้งที่จำเป็นต้องใช้ SUID. ตัวอย่างเช่นการเปลี่ยนรหัสผ่าน. เพราะผู้ใช้ต้องการเปลี่ยนรหัสด้วยตัวเองมากกว่าที่จะให้ผู้ดูแลระบบเปลี่ยน ให้. อย่างที่เรารู้, ไฟล์ที่เก็บชื่อผู้ใช้และรหัสผ่านคือไฟล์ /etc/passwd, ซึ่งจำกัดการใช้งานเฉพาะ root.

bea:~> ls -l /etc/passwd
-rw-r--r-- 1 root root 1267 Jan 16 14:43 /etc/passwd

 วิธีแก้ปัญหาเพื่อให้ผู้ใช้สามารถเปลี่ยนแปลงข้อมูลตัวเองในไฟล์นี้. โดยการให้โปรแกรม passwd มีความสามารถพิเศษ:

mia:~> which passwd
passwd is /usr/bin/passwd

mia:~> ls -l /usr/bin/passwd
-r-s--x--x 1 root root 13476 Aug 7 06:03 /usr/bin/passwd*

 เมื่อถูกเรียกใช้, คำสั่ง passwd จะทำงานโดยใช้ค่าอนุญาตใช้งานของ root, ทำให้ผู้ใช้ทั่วไปสามารถแก้ไขไฟล์ /etc/passwd ที่มีผู้ดูแลระบบเป็นเจ้าของ.

การใช้ SGID บนไฟล์มีไม่บ่อยเท่า SUID, เพราะส่วนใหญ่ SGID จะเกี่ยวข้องในการสร้างกรู้ปพิเศษ. ในบางกรณี, เราอาจต้องเจอสถานะการ์ณที่ต้องใช้(ไม่ต้องกังวลในเรื่องนี้มากนัก - การสร้างกรู้ปที่จำเป็นส่วนมากจะทำตอนติดตั้งใหม่). เช่นกรณีของการใช้คำสั่ง write และคำสั่ง wall, ซึ่งใช้สำหรับส่งข้อความไปยังผู้ใช้อื่นที่ล็อกอินเข้าเทอร์มินอล(ttys). คำสั่ง write จะส่งข้อความไปยังผู้ใช้คนเดียว, ส่วนคำสั่ง wall จะส่งข้อความไปยังผู้ใช้ทุกคนที่เชื่อมต่อเข้าระบบ.

ปกติการส่งข้อความไปยังผู้ใช้อื่นที่ใช้เทอร์มินอลทั้งแบบกราฟฟิกหรือ text จะทำไม่ได้. วิธีแก้คือ, สร้างกลุ่มขึ้นใหม่, ซึ่งเป็นเจ้าของอุปกรณ์เทอร์มินอล. เมื่อคำสั่ง write และคำสั่ง wall ถูกให้สิทฺธิ์ SGID permission, คำสั่งจะทำงานโดยสิทธิ์ของกลุ่มนี้, เช่นกลุ่ม tty. เนื่องจาก group สามารถใช้งานเทอร์มินอลได้, โดยผู้ใช้ไม่สามารถใช้วิธีอื่นในการส่งข้อความไปยังเทอร์มินอลได้.

ในตัวอย่างข้างล่าง, ครั้งแรกผู้ใช้ joe ตรวจสอบว่าผู้รับข้อความเชื่อมต่อกับเทอร์มินอลใหน, ด้วยคำสั่ง who . หลังจากนั้นเขาส่งข้อความด้วยคำสั่ง write . ตัวอย่างยังแสดงให้เห็นการอนุญาตให้ใช้คำสั่ง write บนเทอร์มินอลที่ใช้งานโดยผู้ใช้ที่จะรับข้อความ: จะเห็นว่านอกจากผู้ใช้ที่เป็นเจ้าของอุปกรณ์คนอื่นไม่มีสิทธิ์ใช้อุปกรณ์ นั้น, ยกเว้นคนที่อยู่ใน group owner, ซึ่งสามารถส่งข้อความไปหาอุปกรณ์ได้.

joe:~> which write
write is /usr/bin/write

joe:~> ls -l /usr/bin/write
-rwxr-sr-x 1 root tty 8744 Dec 5 00:55 /usr/bin/write*

joe:~> who
jenny tty1 Jan 23 11:41
jenny pts/1 Jan 23 12:21 (:0)
jenny pts/2 Jan 23 12:22 (:0)
jenny pts/3 Jan 23 12:22 (:0)
joe pts/0 Jan 20 10:13 (lo.callhost.org)

joe:~> ls -l /dev/tty1
crw--w---- 1 jenny tty 4, 1 Jan 23 11:41 /dev/tty1

joe:~> write jenny tty1
hey Jenny, shall we have lunch together?
^C

 ที่หน้าจอของผู้รับข้อความ jenny จะแสดงข้อความ:

Message from joe@lo.callhost.org on ptys/1 at 12:36 ...
hey Jenny, shall we have lunch together?
EOF

หลังจากรับข้อความ, สามารถลบข้อความบนหน้าจอได้โดยการกด Ctrl+L พร้อมกัน. ถ้าไม่ต้องการรับข้อความอื่น(ยกเว้นจากผู้ดูแลระบบ), ใช้คำสั่ง mesg. ส่วนคำสั่งเพื่อดูว่าผู้ใช้คนใหนรับข้อความจากคนอื่น ใช้คำสั่ง who -w. รายละเอียดหาอ่านได้จากคู่มือคำสั่งของแต่ละคำสั่ง.

Note  ชื่อกลุ่มอาจไม่เหมือนกัน
 

 ชื่อกลุ่มจะแตกต่างกันไปตามสายพันธ์ลีนุกซ์. วิธีการและชื่ออาจแตกต่างกันไป

4.2. Boot process, Init and shutdown

4.2.  กระบวนการบูทระบบ, init และ shutdown

4.2.1. Introduction

จุดเด่นของลีนุกซ์อีกอย่างคือวิธีที่ลีนุกซ์ใช้ starting และ stopping ตัวระบบ, เนื่องจากมันโหลดโปรแกรมต่างๆโดยใช้ค่าจากไฟล์คอนฟิก, คุณสามารถเปลี่ยนไฟล์คอนฟิกที่เกี่ยวข้องเพื่อปรับแต่งกระบวนการในการบูท, และปิดระบบอย่างเรียบร้อยและเป็นระบบ.

หากจะหาคำตอบของการควบคุมการบูทหรือปิดระบบ, คุณสมบัติของลีนุกซ์ที่เปิดเผยซอร์สโค้ดทำให้หาสาเหตุของปัญหาตอนบูทหรือปิด ระบบได้ง่าย. การทำความเข้าใจกระบวนการบูทและชัทดาวน์ระบบเป็นสิ่งที่ผู้ใช้ลีนุกซ์ทุกคน ควรเรียนรู้.

มีลีนุกซ์จำนวนมากใช้ lilo, ย่อมาจาก LInux LOader ในการบูทระบบ. ในหนังสือนี้เราจะพูดถึงเฉพาะ GRUB, ซึ่งใช้ง่ายและปรับเปลี่ยนได้มากกว่า. ถ้าคุณสนใจอยากรู้เรื่อง lilo , ดูในคู่มือคำสั่ง และหนังสือ HOWTO. ทั้ง lilo และ grub รองรับการบูทสองระบบ, เราจะพูดถึงเรื่องนี้พอสังเขป.

4.2.2. The boot process

เมื่อคอมพิวเตอร์ x86 เริ่มบูท, ระบบจะหาจุดสุดท้ายของหน่วยความจำของ BIOS(Basic Input/Output System) และรันคำสั่ง. โปรแกรมใน BIOS ถูกเขียนไว้ในหน่วยความจำที่อ่านได้อย่างเดียว ทำให้สามารถใช้งานได้ตลอด. โปรแกรม BIOS จะทำงานที่ระดับต่ำสุดที่ติดต่อกับอุปกรณ์รอบข้างและควบคุมขั้นตอนแรกในการ บูท.

โปรแกรม BIOS จะทดสอบระบบ, ทำการค้นหาและทดสอบอุปกรณ์พ่วงของระบบ, และตรวจหา drive ที่จะใช้เพื่อบูทเครื่อง. ปกติมันจะเช็คหาจากฟล้อปปี้ดิสก์(หรือ CD-ROM สำหรับเครื่องรุ่นใหม่) สำหรับแผ่นโปรแกรมที่จะบูท, ถ้าไม่มีจึงจะค้นหาฮาร์ดดิสก์. ลำดับในการค้นหาสำหรับการบูทปกติจะขึ้นอยู่กับการตั้งค่าในไบออส. ถ้าลีนุกซ์ถูกติดตั้งอยู่ในฮาร์ดดิสก์ของเครื่อง, โปรแกรม BIOS จะค้นหา Master Boot Record(MBR) เริ่มจากเซ็คเตอร์แรกของฮาร์ดดิสก์ตัวแรก, โหลดข้อมูลลงหน่วยความจำ, และส่งต่อการควบคุมไปยังโปรแกรมที่โหลดนั้น.

ข้อมูลใน MBR นี้จะประกอบด้วยคำสั่งว่าจะโหลด GRUB (หรือ LILO) boot-loader อย่างไร, เพื่อเลือกระบบปฏิบัติการที่ติดตั้งไว้. MBR จะโหลด boot-loader, ซึ่งจะรับช่วงโพรเซสต่อ(ถ้า boot-loader ติดตั้งใน MBR). ในค่าดีฟ้อลท์ของ Red Hat Linux configuration, GRUB ใช้การตั้งค่าใน MBR เพื่อแสดงเมนูเป็นอ็อพชั่นสำหรับบูท. เมื่อ GRUB ได้รับคำสั่งที่ตรงสำหรับระบบปฏิบัติการที่จะเริ่มทำงาน, ไม่ว่าจาก command line หรือ จาก configuration file, มันจะหาไฟล์ที่จำเป็นในการบูทและส่งต่อการควบคุมไปยังระบบปฏิบัติการนั้น.

4.2.3.  จุดเด่นของ GRUB

วิธีการบูทแบบนี้เรียกว่า direct loading เพราะว่าคำสั่งถูกใช้ในการโหลดระบบปฏิบัติการโดยตรง, โดยไม่มีโปรแกรมคั่นกลางระหว่าง boot-loader โปรแกรม และ โปรแกรมหลักของระบบปฏิบัติการ(คือตัวเคอร์เนล). กระบวนการบูทของระบบปฏิบัติการอื่นที่ไม่ใช่ลีนุกซ์อาจแตกต่างจากข้างบน, เช่น ระบบปฏิบัติการ DOS และ วินโดว์ของไมโครซอฟท์ ที่เขียนทับข้อมูลบน MBR เมื่อมันติดตั้งบนเครื่องโดยไม่สนใจข้อมูลเก่าใน MBR.  นี่จะทำให้ข้อมูลเก่าบน MBR ถูกทำลาย. ระบบปฏิบัติการของไมโครซอฟท์, และระบบปิดอีกหลายตัว, จะใช้การโหลดที่เรียกว่า chain loading boot. วิธีนี้, ข้อมูลใน MBR จะชี้ไปยังเซ็คเตอร์แรกของพาร์ทิชั่นที่เก็บระบบปฏิบัติการ, ที่มันจะหาไฟล์พิเศษที่จำเป็นในการบูทระบบปฏิบัติการอีกที.

GRUB รองรับการบูททั้งสอบแบบ, ทำให้คุณใช้ได้กับระบบปฏิบัติการที่มีอยู่ได้แทบทั้งหมด, มันรู้จักระบบไฟล์ที่นิยมใช้กันทั่วไปทุกตัว, และรู้จักฮาร์ดดิสก์ส่วนใหญ่ที่ BIOS สามารถตรวจพบ.

 จุดเด่นของ GRUB มีหลายอย่าง รวมถึง:

  • GRUB เป็นระบบ command-based, ทำงานก่อนระบบปฏิบัติการจริงในเครื่องคอมพิวเตอร์ X86 เพื่อปรับแต่งการโหลดระบบปฏิบัติการด้วยอ็อพชั่นที่ตรงหรืออ็อพชั่นจาก ข้อมูลระบบ.
  • GRUB รองรับโหมด Logical Block Addressing (LBA), ที่จำเป็นในการติดต่อกับฮาร์ดดิสก์ IDE หลายๆตัวและฮาร์ดดิสก์ SCSI ทุกตัว. ก่อนหน้าที่จะมีการใช้ LBA, ฮาร์ดดิสก์เจอปัญหาของการจำกัดของจำนวน cylinder ที่ 1024, เนื่องจาก BIOS ไม่สามารถหาไฟล์ที่อยู่เกินจากจุดนั้น.
  • ไฟล์คอนฟิกสำหรับ GRUB จะถูกอ่านจากดิสก์ทุกครั้งที่มีการบูทระบบ, เพื่อป้องกันไม่ให้คุณเขียนข้อมูลทับ MBR ทุกครั้งที่คุณเปลี่ยนบูทอ็อพชั่น.

รายละเอียดของ GRUB ดูได้จากคำสั่ง info grub หรือที่ Grub site. ส่วนโครงการหนังสือสำหรับลีนุกซ์ก็มี Multiboot with GRUB Mini-HOWTO.

4.2.4. Init

 เคอร์เนล, เมื่อมันโหลดขึ้นมา, มันจะหา init ใน sbin และทำการเอ็กซีคิ้วท์.

เมื่อ init เริ่มทำงาน, มันจะกลายเป็นโพรเซสแม่หรือต้นตระกูลของโพรเซสทุกตัวที่ start up โดยอัตโนมัติบนระบบลีนุกซ์ของคุณ. สิ่งแรกที่ init ทำ, คือการอ่านไฟล์สำหรับการเริ่มระบบ, /etc/initab. ซึ่งจะสั่งให้ init ไปอ่านสคริปสำหรับเริ่มต้นระบบ สำหรับการสร้าง environment, ซึ่งจะทำการตั้งค่า path, start swapping, ตรวจสอบระบบไฟล์, เป็นต้น. โดยรวมแล้ว, ขั้นตอนนี้จะตรวจสอบทุกอย่างที่ระบบของคุณต้องใช้เมื่อตอนเริ่มระบบ: เช่น ตั้งนาฬิกา, ทำการ initialize serial port เป็นต้น.

หลังจากนั้น init จะอ่านไฟล์ /etc/initab ต่อ, ซึ่งจะบอกให้ระบบตั้งค่าสำหรับการทำงานในแต่ละระดับ และตั้งค่าดีฟ้อลท์ run level. ระดับการทำงานหรือ run level คือการตั้งค่าคอนฟิกกูเรชั่นของโพรเซส. ระบบที่เลียนแบบยูนิกซ์สามารถทำงานในโหมดที่แตกต่างกันของ process configurations, เช่นโหมดผู้ใช้คนเดียวหรือซิงเกิ้ลยูสเซอร์, ซึ่งหมายถึงระดับการทำงานระดับที่ 1 หรือระดับ S(หรือ s). ในโหมดนี้, มีเพียงผู้ดูแลระบบที่สามารถเชื่อมต่อกับระบบได้. ใช้สำหรับดูแลระบบโดยไม่เสี่ยงกับการทำให้ข้อมูลผู้ใช้หรือข้อมูลระบบ เสียหาย. ปกติแล้ว, โหมดนี้จะไม่เปิดให้ผู้ใช้เข้ามาใช้, ส่วนมากจะปิดไว้. ระดับการทำงานอื่นได้แก่โหมด reboot, หรือระดับการทำงานหมายเลข 6, ซึ่งจะปิดการทำงานของ service ทุกตัวที่กำลังทำงานอยู่ตามลำดับแล้วทำการ restart ระบบ.

 คำสั่ง who ใช้เพื่อตรวจสอบระดับการทำงานที่คุณกำลังทำอยู่

willy@ubuntu:~$ who -r
run-level 2 2006-10-17 23:22 last=S

 รายละเอียดเพิ่มเติมเกี่ยวกับ run level อยู่ในหัวข้อถัดไป, ดู หัวข้อ 4.2.5.

หลังจากตรวจสอบค่าระดับการทำงานดีฟ้อลท์ในระบบ, init จะทำการสั่งให้ background process ที่จำเป็นทั้งหมดให้เริ่มทำงานโดยดูจากไดเร็กตอรี่ r c ที่เกี่ยวข้องกับระดับการทำงานนั้น. init จะ สั่งสคริป kill script(ชื่อของสคริปเหล่านี้จะขึ้นต้นด้วย K)แต่ละตัวพร้อมค่า stop parameter ให้ทำงาน. หลังจากนั้นมันจะสั่ง start script(ชื่อสคริปเริ่มต้นด้วย S)ทุกตัวใน run level directory ให้ทำงาน ดังนั้นเซอร์วิสทุกตัวและแอพพลิเคชั่นจะทำงานได้อย่างถูกต้อง. ที่จริงหลังจากระบบเสร็จสิ้นการบูท คุณสามารถสั่งสคริปเดียวกันนี้ได้ด้วยคำสั่งจากเทอร์มินอล เช่น /etc/init.d/http stop หรือ service httpd stop. โดยต้องล็อกอินด้วย root. ถ้าคุณต้องการหยุดการทำงานของ web server.

Note Special case
 

 ตอนที่ระบบเริ่มทำงาน. ปกติสคริปใน rc2.d และ rc3.d จะถูกเอ็กซีคิ้วท์. ทำให้ service ทุกตัวตามสคริปทำงาน.

ที่จริงไม่มีสคริปที่สั่งให้ service start หรือ stop ในไดเร็กตอรี่ /etc/rc<x>.d. เนื่องจาก, ทุกไฟล์ใน /etc/rc<x>.d เป็น symbolic link ที่ชี้ไปยังสคริปจริงที่อยู่ในไดเร็กตอรี่ /etc/init.d. ไฟล์ symbolic link เป็นเพียงไฟล์ที่ชี้ไปยังไฟล์อื่น, และใช้ในงานนี้เพราะมันสามารถสร้างและลบได้โดยไม่มีผลต่อไฟล์สคริปจริงที่จะ start หรือ stop services. ไฟล์ symbolic link ที่ชี้ไปยังสคริปต่างๆนี้จะถูกตั้งชื่อเรียงตามลำดับเพื่อให้มันทำงานตามคิว . คุณสามารถเปลี่ยนลำดับของการ start script หรือ kill script ด้วยการเปลี่ยนชื่อของ symbolic link ที่ชี้ไปสคริปจริงที่ควบคุมเซอร์วิส. คุณสามารถใช้หมายเลขเดียวกันได้ ถ้าคุณอยากให้เซอร์วิสที่ต้องการ start หรือ stop ก่อนหรือหลังเซอร์วิสอื่น. ดังตัวอย่างด้านล่าง, เป็นข้อมูลของ /etc/rc5.d. ที่ crond และ xfs จะทำงานจากลิ้งที่ชื่อขึ้นต้นด้วย "S90". ในกรณีนี้, สคริปจะเริ่มทำงานตามลำดับตัวอักษร.

[jean@blub /etc/rc5.d] ls
K15httpd@ K45named@ S08ipchains@ S25netfs@ S85gpm@
K16rarpd@ K46radvd@ S08iptables@ S26apmd@ S90crond@
K20nfs@ K61ldap@ S09isdn@ S28autofs@ S90xfs@
K20rstatd@ K65identd@ S10network@ S30nscd@ S95anacron@
K20rusersd@ K74ntpd@ S12syslog@ S55sshd@ S95atd@
K20rwalld@ K74ypserv@ S13portmap@ S56rawdevices@ S97rhnsd@
K20rwhod@ K74ypxfrd@ S14nfslock@ S56xinetd@ S99local@
K25squid@ K89bcm5820@ S17keytable@ S60lpd@
K34yppasswdd@ S05kudzu@ S20random@ S80sendmail@

หลังจาก init  เข้าสู่ run level ตามค่าดีฟ้อลท์แล้ว, สคริป /etc/inittab จะทำการ fork โพรเซส getty สำหรับ virtual console แต่ละตัว (สำหรับล็อกอินใน text mode). โพรเซส getty จะควบคุมการล็อกอินของผู้ใช้อาทิ, การตั้งค่า tty, แสดง prompt สำหรับล็อกอิน, เก็บค่าชื่อผู้ใช้และทำกระบวนการล็อกอินเข้าระบบ. ทำให้สามารถระบุตัวผู้ใช้ที่จะเข้าใช้ระบบ. ตามปกติ, ระบบส่วนใหญ่จะมี virtual console ให้  6 console, แต่คุณสามารถปรับเปลี่ยนได้, ตามข้อมูลในไฟล์ inittab.

ข้อมูลใน /etc/inittab จะมีวิธีการทำงานเมื่อผู้ใช้กดปุ่ม Ctrl+Alt+Delete. เพื่อให้ระบบปิดตัวและ restart อย่างเป็นระบบมากกว่าที่จะปิดทันที. ยกตัวอย่าง, เมื่อผู้ใช้กดปุ่ม Ctrl+Alt+Delete โพรเซส init จะถูกสั่งให้ทำคำสั่ง /sbin/shutdown -t3 -r now. นอกจากนี้ยังมีข้อมูลให้ init ทำงานเมื่อเกิดเหตุไฟดับ, ถ้าระบบของคุณมี UPS ต่อไช้งาน.

ระบบส่วนมากที่ใช้ RPM-based มีหน้าจอกราฟฟิกให้ผู้ใช้ล็อกอินและเข้าใช้งานในระดับ 5, ซึ่ง /etc/inittab จะรันสคริปที่ชื่อ /etc/X11/prefdm. สคริปนี้จะรันโปรแกรม X display manager, ตามข้อมูลในไดเร็กตอรี่ /etc/sysconfig/desktop . ซึ่งจะเป็น gdm ถ้าคุณใช้ GNOME หรือ kdm ถ้าคุนใช้ KDE, แต่สามารถใช้ผสมกันได้, และยังมีโปรแกรม xdm ซึ่งเป็นโปรแกรมมาตรฐานของ x วินโดว์.

การทำงานในระบบอื่นอาจแตกต่างไปบ้าง. ตัวอย่างเช่นในลีนุกซ์เดเบียน จะมี init สคริปสำหรับ display manager แต่ละตัว, โดยมีข้อมูลใน /etc/X11/default-display-manager เป็นตัวบอกว่าจะใช้ตัวใหนในการ start. รายละเอียดของการใช้กราฟฟิกอินเตอร์เฟสสามารถอ่านใน หัวข้อ 7.3. รายละเอียดการทำงานของ init สามารถหาดูได้จากคู่มือระบบ.

ไดเร็กตอรี่ /etc/default และ/หรือ /etc/sysconfig มีรายการของฟังชั่นและเซอร์วิส, ซึ่งทั้งหมดจะถูกอ่านตอนบูทระบบ. ไดเร็กตอรี่ที่เก็บข้อมูลดีฟ้อลท์ของระบบอาจแตกต่างกันไปตามสายพันธุ์ ลีนุกซ์.

นอกจากโปรแกรมติดต่อกับผู้ใช้แบบกราฟฟิก, เซอร์วิสอื่นๆอาจถูก start ด้วยเหมือนกัน. ถ้าการทำงานระบบเป็นปกติ. คุณจะเห็นเครื่องหมาย prompt ให้ทำการล็อกอินที่หน้าจอ เมื่อกระบวนการบูทเสร็จสิ้น.

Note Other procedures
 

การทำงานของ init ของระบบ SysV บนเครื่องคอมพิวเตอร์ X86, สคริป startup อาจแตกต่างกันตามรุ่นและโครงสร้าง. ในระบบอื่น init อาจ ทำงานในแบบ BSD-style, ซึ่ง startup file จะไม่แยกเก็บไนไดเร็กตอรี่ /etc/rc<LEVEL>.d หลายตัว. และอาจเป็นไปได้ที่ระบบของคุณใช้ไดเร็กตอรี่ /etc/rc.d/init.d แทน /etc/init.d

4.2.5. Init run levels

แนวคิดการทำงานของเซอร์วิสใน run level ที่แตกต่างกันมีเซอร์วิสไม่เหมือนกันมาจากความต้องการใช้งานระบบแบบต่างๆ. บางเซอร์วิสจะใช้งานได้เฉพาะเหตการณ์หรือ mode, เช่นเมื่อระบบพร้อมสำหรับผู้ใช้มากกว่าหนึ่งคนหรือระบบเชื่อมต่อกับ เนทเวิร์ค.

มีบางครั้งที่คุณอาจต้องทำงานในโหมดต่ำ. ตัวอย่างเช่นการซ่อมแซมฮาร์ดดิสก์จะทำใน run level 1 ที่ไม่มีผู้ใช้อื่นในระบบ. หรือรันระบบ server ใน level 3 โดยไม่มี X session ทำงาน. ในสถานะการณ์เหล่านี้, การรันเซอร์วิสทั้งหลายของโหมดสูงจะไม่มีประโยชน์เท่าที่ควร. การแบ่งเซอร์วิสออกตามระดับ run level จึงเป็นสิ่งจำเป็น, ทำให้คุณสามารถปรับเปลี่ยนระดับการทำงานได้อย่างรวดเร็วโดยไม่ต้องกังวล เกี่ยวกับเซอร์วิสที่ให้บริการว่าจะให้เซอร์วิสใด start หรือ stop.

 ระดับการทำงานหรือ run level ปกติจะมีรายละเอียดอยู่ในไฟล์ /etc/inittab, ดังแสดงด้านล่างนี้:


#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.

# Default run level. The run levels are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS
# (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
<--cut-->

ถ้าคุณต้องการปรับแต่ง run level คุณสามารถใช้ run level ที่ยังไม่มีการใช้งาน(ปกติคือ run level 4). ผู้ใช้ส่วนมากจะทดลองกับ level นี้โดยไม่เปลี่ยนแปลงค่าดีฟ้อลท์ของ standard run level. ทำให้ทดลองระบบได้รวดเร็วโดยไม่กระทบชุดเซอร์วิสของ run level มาตรฐาน.

ถ้าระบบของคุณบูทไม่ได้เนื่องจากไฟล์ /etc/inittab เสียหายหรือคุณล็อกเข้าระบบไม่ได้เพราะไฟล์ /etc/passwd เสีย, คุณสามารถแก้ไขโดยเข้าระบบ single-user mode.

Tip No graphics?
 

เมื่อคุณทำงานกับ text mode เพราะไม่มีกราฟฟิกล็อกอินปรากฏที่หน้าจอ, คุณสามารถเปลี่ยนไปที่ console 7 หรือมากกว่าเพื่อใช้การล็อกอินแบบกราฟฟิก. ถ้ายังไม่ได้ผล, ตรวจสอบ run level ปัจจุบันโดยใช้คำสั่ง who -r. ถ้าปรากฏว่าค่าไม่ตรงกับค่าดีฟ้อลท์ที่ตั้งในไฟล์  /etc/inittab, แสดงว่าระบบไม่ได้ startup ในโหมดกราฟฟิกตามค่าดีฟ้อลท์. ติดต่อผู้ดูแลระบบหรืออ่านคู่มือคำสั่ง man init. เพื่อหาข้อมูล. หมายเหตุ การสลับ run level จะใช้คำสั่ง telinit. ส่วนการสลับระหว่าง text ไปยังกราฟฟิกโหมดหรือกลับกันไม่เกี่ยวข้องกับการสลับ run level.

การทำงานของ run levels, สคริปและคอนฟิกูเรชั่นในหนังสือนี้จะอธิบายกว้างๆ. ในรายละเอียดมีข้อแตกต่างอีกมาก. ตัวอย่างเช่น, สคริปของ Gentoo Linux จะอยู่ใน /etc/runlevels. ในขณะที่ระบบอื่นอาจจะรันตั้งแต่ run level ต่ำและทำสคริปทั้งหมดก่อนที่จะขึ้นไปรันสคริปที่ run level สุดท้าย. ขึ้นอยู่กับข้อมูลเอกสารของระบบ. คุณสามารถหาข้อมูลระบบได้โดยดูที่ไฟล์ /etc/inittab. เพื่อทำความเข้าใจว่าเกิดอะไรขึ้นกับระบบของคุณ

4.2.5.1. Tools

โปรแกรมยูทิลิตี้ chkconfig หรือ update-rc.d, ถ้าติดตั้งในระบบของคุณ, จะมีชุดคำสั่งง่ายๆในการดูแลโครงสร้างไดเร็กตอรี่ /etc/init.d. ช่วยให้ผู้ดูแลระบบจัดการ symbolic link ในไดเร็กตอรี่ /etc/rc[x].d ได้ง่าย.

ในบางระบบมีชุดเครื่องมือ ntsysv, ซึ่งติดต่อกับผู้ใช้แบบ text based; คุณจะพบว่ามันใช้ง่ายกว่าการใช้คำสั่ง chkconfig. ใน SuSe Linux, คุณจะพบเครื่องมือ yast และ insserv. ส่วนลีนุกซ์ mandrake ชุดโปรแกรม DrakConf จะใช้สลับ run level 3 กับ run level 5. เรียกอีกอย่างว่า Mandriva Linux Control Center.

ลีนุกซ์ส่วนมากจะมีระบบติดต่อกับผู้ใช้แบบกราฟฟิกสำหรับการปรับแต่งโพรเซส, รายละเอียดดูในคู่มือระบบของคุณ.

โปรแกรมยูทิลิตี้ทั้งหมดต้องสั่งทำงานด้วยสิทธิ์ root. ผู้ดูแลระบบอาจสร้างลิ้งค์เพิ่มลงในไดเร็กตอรี่ run level แต่ละตัวเพื่อสั่ง start หรือ stop เซอร์วิสใน run level นั้นๆ.

4.2.6. Shutdown

Uระบบยูนิกซ์ไม่ได้ออกแบบมาให้ทำการปิดระบบ, แต่ถ้าจำเป็น, ให้ใช้คำสั่ง shutdown. หลังกระบวนการปิดระบบเสร็จสิ้น, ถ้าใช้อ็อพชั่น -h จะทำให้ระบบหยุด, ในขณะที่อ็อพชั่น -r จะทำการ reboot ระบบ.

คำสั่ง reboot และ halt สามารถสั่งให้ระบบทำคำสั่ง shutdown ถ้าระบบรันใน level 1-5, เพื่อให้การปิดระบบอย่างถูกต้อง. อย่างไรก็ตาม, คำสั่งนี้ไม่ได้มีในระบบยูนิกซ์/ลีนุกซ์ทุกตัว.

ถ้าเครื่องคอมพิวเตอร์ของคุณไม่ได้ปิดไฟของเครื่องเอง, คุณไม่ควรปิดเครื่องคอมพิวเตอร์จนกว่าจะเป็นข้อความของระบบที่แสดงว่าระบบ ได้หยุด(halt) หรือได้เสร็จสิ้นการ shutdown แล้ว, เพื่อให้ระบบมีเวลาในการ unmount ทุกพาร์ติชั่นก่อน. การปิดไฟโดยไม่ถูกวิธีอาจทำให้ข้อมูลสูญหายได้.

4.3. Managing processes

4.3.  การจัดการโพรเซส

4.3.1. งานสำหรับผู้ดูแลระบบ

แม้การจัดการทรัพยากรระบบ, รวมทั้งโพรเซส, จะเป็นหน้าที่ของผู้ดูแลระบบ, ถ้าผู้ใช้ได้เรียนรู้ไว้บ้างก็ไม่มีผลเสียหายอะไร, โดยเฉพาะเกี่ยวกับโพรเซสของผู้ใช้และการใช้งานให้เกิดประสิทธิภาพสูงสุด.

เราจะอธิบายทางทฤษฎีเกี่ยวกับ system performance, โดยไม่เจาะลึกในรายละเอียดของ hardware optimization หรือการปรับแต่งขั้นสูง, แต่เราจะเรียนรู้วิธีแก้ปัญหาเบื้องต้นที่ผู้ใช้อาจพบในการใช้งานประจำวัน, และวิธีการให้ผู้ใช้สามารถเข้าใช้ทรัพยากรของระบบได้อย่างมีประสิทธิภาพ

Figure 4-2. Can't you go faster?

4.3.2. How long does it take?

Bash shell มีคำสั่งภายใน time ในการแสดงเวลาที่ใช้ในการเอ็กซีคิ้วท์คำสั่ง. เวลาที่แสดงจะเที่ยงตรงมากและสามารถใช้กับคำสั่งอะไรก็ได้. ตัวอย่างข้างล่าง, ใช้เวลาประมาณหนึ่งนาทีครึ่งในการสร้างหนังสือเล่มนี้:

tilly:~/xml/src> time make
Output written on abook.pdf (222 pages, 1619861 bytes).
Transcript written on abook.log.

real 1m41.056s
user 1m31.190s
sys 0m1.880s

ส่วนคำสั่ง time ของ GNU ในไดเร็กตอรี่ /usr/bin (คนละตัวกับของ Bash shell) จะแสดงข้อมูลรายละเอียดมากกว่าและสามารถปรับรูปแบบให้แสดงค่าแบบต่างๆได้. และยังแสดงค่า exit status ของคำสั่ง, และเวลาที่ใช้ทั้งหมด. ด้านล่างเป็นตัวอย่างการใช้คำสั่ง time เหมือนกันแต่เป็นของ GNU:

tilly:~/xml/src> /usr/bin/time make
Output written on abook.pdf (222 pages, 1595027 bytes).
Transcript written on abook.log.

Command exited with non-zero status 2
88.87user 1.74system 1:36.21elapsed 94%CPU
(0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (2192major+30002minor)pagefaults 0swaps

 ข้อมูลเพิ่มเติมหาอ่านได้จากคู่มือคำสั่ง.

4.3.3. Performance

ในส่วนผู้ใช้, performance หมายถึงการทำคำสั่งได้รวดเร็ว. แต่ในส่วนผู้ดูแลระบบ, มีความหมายมากกว่านั้น: ผู้ดูแลระบบจะปรับแต่ง system performance สำหรับทั้งระบบ, รวมทั้งผู้ใช้, โปรแกรมทุกตัวและเดมอน. ตัวแปรที่มีผลกับ system performance มีมากมายและไม่สามารถตรวจสอบได้ด้วยคำสั่ง time อาทิ:

  • the program executing is badly written or doesn't use the computer appropriately

  • access to disks, controllers, display, all kinds of interfaces, etc.

  • reachability of remote systems (network performance)

  • amount of users on the system, amount of users actually working simultaneously

  • time of day

  • ...

4.3.4. Load

โหลดหรือการทำงานของระบบจะขึ้นอยู่กับว่าอะไรคืองานปกติของระบบ. เครื่องคอมพิวเตอร์เก่าของผู้เขียน P133 รันไฟร์วอลล์, SSH server, ไฟล์เซิฟเวอร์, a route daemon, a sendmail server, a proxyserver และเซอร์วิสอื่นอีกนิดหน่อย สามารถทำงานได้ดีถ้ามีผู้ใช้งานไม่เกิน 7 คน; ค่าเฉลี่ยของโหลดจะประมาณ 0. ผูเขียนเคยเห็นในบางระบบที่มี CPU หลายตัวอาจรับโหลดเฉลี่ยได้ถึง 67. วิธีที่จะหาค่าโหลดที่ระบบรับได้ - คือการตรวจสอบค่าโหลดเป็นประจำถ้าคุณอยากรู้ค่าปกติ. ถ้าคุณไม่ตรวจสอบ, คุณจะรู้ได้แค่เวลาในการตอบสนองคำสั่งผ่าน command line , ซึ่งเป็นการตรวจแบบหยาบๆ เนื่องจากความเร็วในการทำงานช้าเร็วมีผลจากสาเหตุมากมาย.

จำไว้ว่าระบบที่แตกต่างกันจะมีความสามารถต่างกันในการรับโหลด. ตัวอย่าง, ระบบที่มีการ์ดเร่งความเร็วกราฟฟิกจะทำงานกับโปรแกรม rendering 3D images ได้อย่างราบรื่น, ขณะที่ระบบเดียวกันที่ใช้การ์ด VGA ราคาถูกจะทำงานช้าอย่างเห็นได้ชัด. เครื่อง P133 เก่าของผู้เขียนจะทำงานอย่างแย่ เมื่อผู้เขียนใช้โปรแกรม X server, แม้ว่าคุณจะมีเครื่องรุ่นใหม่ใช้ พยายามสังเกตุค่าโหลดในระบบที่เปลี่ยนแปลง จะทำให้รู้ปัญหาได้เร็วหากเกิดปัญหาของ system performance.

4.3.5. Can I do anything as a user?

การตั้งค่า environment ที่ไม่เหมาะสมอาจทำให้ระบบคุณช้าลง. ถ้าคุณตั้งค่าตัวแปร environment เยอะเกิน(แทนการใช้ตัวแปรเชลล์), การตั้งค่า search path ยาวๆโดยไม่ได้ตรวจสอบความถูกต้อง และส่วนมากการตั้งค่าจะทำแบบ "ทำแล้วทดลองใช้เลย", ระบบจะเสียเวลามากในการค้นหาและอ่านข้อมูล.

โปรแกรมจัดการกราฟฟิก X วินโดว์ และ destop environment เป็นตัวกิน CPU. ยิ่งมีสีสันแปลกตาก็ยิ่งเปลืองกำลังในการประมวลผล, แม้ว่ามันจะดาวน์โหลดมาใช้ได้ฟรี, ดังนั้นควรใช้คอมพิวเตอร์อย่างพอเพียงถ้าคุณไม่ได้ซื้อคอมพิวเตอร์ใหม่ทุก ปี.

4.3.5.1. Priority

ลำดับความสำคัญหรือ priority ของ job ดูได้จากหมายเลข nice number. โปรแกรมที่มีตัวเลข nice number สูงจะไม่รบกวนโปรแกรมอื่นมาก; เนื่องจากมันไม่ใช่โปรแกรมที่สำคัญมากนัก. ส่วนโปรแกรมที่มี nice number ต่ำ, จะมีความสำคัญมากกว่าและกินทรัพยากรมากกว่าโดยไม่แชร์กับโปรแกรมอื่น.

การลดตัวเลข nice number จะมีประโยชน์สำหรับโพรเซสที่ใช้งาน CPU มาก(คอมไพเลอร์, โปรแกรมการคำนวณ). โปรแกรมที่ใช้เวลากับอุปกรณ์ I/O มากจะได้ค่า nice number จากระบบให้มีความสำคัญมากกว่า(ตัวเลข nice number ต่ำ), ตัวอย่างเช่นคียบอร์ดจะมีความสำคัญสูงสุดในระบบ.

 การจัดลำดับความสำคัญของโปรแกรมจะใช้คำสั่ง nice .

ระบบส่วนมากจะมีคำสั่ง renice เหมือน BSD, ซึ่งทำให้คุณสามารถเปลี่ยนค่า niceness ของคำสั่งที่รันได้. รายละเอียดเพิ่มเติมหาอ่านในคู่มือระบบ.

Caution Interactive programs
 

 ไม่ใช่ความคิดที่ดีนักถ้าจะ nice หรือ renice โปรแกรมที่ติดต่อกับผู้ใช้หรือโปรแกรมที่รันในโหมด foreground.

การใช้คำสั่งเหล่านี้จะเป็นหน้าที่ของผู้ดูแลระบบ. อ่าน man page สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหน้าที่พิเศษของผู้ดูแลระบบก่อน.

4.3.5.2. CPU resources

ในระบบลีนุกซ์ทุกตัว,โปรแกรมหลายโปรแกรมต้องการใช้ CPU ในเวลาเดียวกัน, แม้ว่าคุณจะเป็นเพียงผู้ใช้คนเดียวในระบบ. ทุกโปรแกรมต้องการจำนวนไซเคิลที่แน่นอนของ CPU ในการรัน. บางทีเวลาที่ได้ก็ไม่พอใช้งานเนื่องจาก CPU ทำงานหนัก. คำสั่ง uptime ส่วนมากจะไม่ค่อยตรง(มันเพียงแสดงค่าเฉลี่ย, คุณควรจะรู้ค่าปกติอยู่แล้ว). ถ้าระบบของคุณไม่ตอบสนองการทำงาน คุณสามารถหลีกเลี่ยงได้ด้วยวิธี:

  •  ทำงานที่ใช้ทรัพยากรระบบมากเมื่อโหลดต่ำ. เช่นตอนกลางคืน. ดูหัวข้อถัดไปสำหรับการทำงานตามตารางเวลา.

  •  ป้องกันไม่ให้ระบบทำงานที่ไม่จำเป็น: โดยหยุดเดมอนและโปรแกรมที่คุณไม่ได้ใช้, เช่นใช้คำสั่ง locate แทนคำสั่ง find ,...

  •  สั่ง job ใหญ่ๆให้มีค่า priority ต่ำ

ถ้าไม่มีตัวเลือกเหล่านี้ในระบบคุณ, คุณอาจต้องอัพเกรด CPU. ในเครื่องยูนิกซ์นี่เป็นหน้าที่ของผู้ดูแลระบบ

4.3.5.3. Memory resources

เมื่อโปรแกรมที่รันต้องการใช้หน่วยความจำของระบบมากกว่าที่ระบบมี, ระบบลีนุกซ์จะไม่หยุดทำงาน: มันจะเริ่มทำการ paging, หรือ swapping, โดยให้โพรเซสใช้หน่วยความจำบนดีสก์หรือพื้นที่สำหรับ swap ที่จัดไว้, ย้ายข้อมูลจากหน่วยความจำ(พื้นที่บางส่วนของโปรแกรมหรือทั้งหมดในกรณี swapping) ไปยังดิสก์, ดังนั้นหน่วยความจำหลักจึงยังมีรองรับโพรเซสอื่นได้อีก. วิธีนี้ทำให้การทำงานของระบบช้าลงอย่างเห็นได้ชัดเนื่องจากการอ่านเขียน ข้อมูลกับดิสก์จะช้ากว่าอ่านเขียนกับหน่วยความจำ. คำสั่ง top สามารถใช้สำหรับแสดงข้อมูลของหน่วยความจำและพื้นที่ swap ที่ใช้. ระบบที่ใช้ glibc มีคำสั่ง memusage และ memusagestat ในการดูการใช้งานของหน่วยความจำระบบ.

 ถ้าคุณพบว่ามีการใช้งานหน่วยความจำและพื้นที่ swap เยอะมาก, คุณสามารถลอง:

  • ทำการ kill, stopping หรือ renicing โปรแกรมที่กินหน่วยความจำ.

  •  เพิ่มเมมโมรี่(และเพิ่มพื้นที่ swap ในบางกรณี)ให้ระบบ.

  •  ปรับแต่ง system performance, รายละเอียดอยู่นอกเหนือเป้าหมายของหนังสือเล่มนี้, ซึ่งวิธีการหาอ่านได้ในหนังสือตามรายการใน Appenddix A.

4.3.5.4. I/O resources

ขณะที่ขีดจำกัดการใช้งาน I/O เป็นเรื่องหลักของผู้ดูแลระบบ, ระบบลีนุกซ์มีวิธีการวัดการใช้งาน I/O ที่ค่อนข้างแย่. คำสั่ง ps, vmstat และ top แสดงข้อมูลจำนวนโปรแกรมที่รอใช้ I/O; netstat แสดงสถิติของ network interface, แต่ไม่มีคำสั่งเฉพาะเพื่อวัดการตอบสนองของ I/O ต่อ system load, ส่วนคำสั่ง iostat ให้ข้อมูลคร่าวๆของการใช้ทั่วไปของ I/O. โปรแกรมหลายโปรแกรมที่เก็บข้อมูลจากคำสั่งเหล่านี้และแสดงผลทางกราฟฟิกให้ ผู้ใช้เข้าใจได้ง่าย.

แต่ละอุปกรณ์ล้วนมีปัญหาของตัวมันเอง, แต่ปัญหาคอขวดส่วนใหญ่จะเกิดจากแบนด์วิธความเร็วข้อมูลที่ติดต่อกับ เครือข่ายและแบนด์วิธข้อมูลที่ติดต่อกับดิสก์จะเป็นสองเรื่องหลักที่สร้าง ปัญหาคอขวดของ I/O performance.

 ปัญหาเครือข่าย I/O:

  •  ระบบเครือข่ายทำงานหนักเกิน:

     จำนวนข้อมูลที่รับส่งผ่านเครือข่ายมีจำนวนมากกว่าที่เครือข่ายจะ รับได้, ทำให้งานผู้ใช้ที่เกี่ยวข้องกับเครือข่ายของผู้ใช้ทุกคนทำงานช้า. ปัญหาแก้ด้วยการ cleaning up ระบบเครือข่ายใหม่(หลักๆจะเกี่ยวข้องกับการ disable โพรโตคอลและเซอร์วิสที่ไม่ได้ใช้) หรือการจัดระบบเครือข่ายใหม่(ตัวอย่างเช่นการใช้ subnet, เปลี่ยน hub เป็น switches, การอัพเกรดอุปกรณ์อินเตอร์เฟสเครือข่าย เป็นต้น)

  • Network integrity problems:

     เกิดขึ้นเมื่อมีการส่งข้อมูลไม่ถูกต้อง. วิธีแก้มีวิธีเดียวคือแยกอุปกรณ์ที่เสียออกและเปลี่ยนตัวใหม่.

 ปัญหาของ Disk I/O:

  •  อัตราการส่งข้อมูลแต่ละโพรเซสช้ามาก:

      การอ่านหรือเขียนสำหรับโพรเซสเดี่ยวไม่เพียงพอ.

  •  ผลรวมการส่งข้อมูลช้ามาก:

     แบนด์วิธรวมสูงสุดที่ระบบสามารถรองรับการทำงานของทุกโปรแกรมไม่เพียงพอ.

ปัญหานี้ตรวจพบได้ยาก, และปกติจะใช้เครื่องมือพิเศษเพื่อแยกสายข้อมูลออกจากบัส, controller และ disks, ถ้าการโอเวอร์โหลดเกิดจากอุปกรณ์ hardware. ทางแก้หนึ่งคือการปรับแต่ง RAID array ให้มีความเร็วรับส่งดีที่สุด. วิธีนี้, คุณจะยังใช้ฮาร์ดแวร์เดิม. ส่วนการปรับปรุงให้บัสทำงานเร็วขึ้น, อาจปรับเปลี่ยน controller และ disks .

ถ้าการโอเวอร์โหลดไม่ใช่สาเหตุ, บางทีอาจเกิดจากฮาร์ดแวร์ของคุณอาจเริ่มทำงานผิดพลาด, หรือเชื่อมต่อกับระบบไม่ดี. ให้ตรวจเช็ค contact, connectors และ ปลั๊ก เพื่อหาสาเหตุต่อไป.

4.3.5.5. Users

 การใช้งานของผู้ใช้สามารถแบ่งออกเป็นหลายกลุ่ม, ขึ้นอยู่กับหน้าที่และการใช้ทรัพยากร:

  •  ผู้ใช้ที่ทำงานเล็กๆ แต่หลายงาน: ตัวอย่างเช่นผู้ใช้มือใหม่เช่นคุณ.

  •  ผู้ใช้ที่ใช้งานน้อยแต่เป็นงานใหญ่: ได้แก่ผู้ใช้ที่รันโปรแกรม simulations, calculations, emulators หรือโปรแกรมอื่นที่กินหน่วยความจำมาก, และผู้ใช้พวกนี้ปกติจะทำงานกับไฟล์ข้อมูลจำนวนมาก.

  •  ผู้ใช้ที่ทำงานน้อยแต่กินเวลาของ CPU มาก(เช่นนักพัฒนาโปรแกรม).

คุณจะเห็นว่าความต้องการใช้ระบบอาจเปลี่ยนแปลงตามระดับของผู้ใช้, และมันยากที่จะให้ทุกคนพอใจ.

4.3.5.6. Graphical tools

สำหรับการใช้งานแบบกราฟฟิก, มีโปรแกรมประเภท monitoring tools ในแบบกราฟฟิกให้ใช้มากมาย. ข้างล่างนี้เป็นหน้าจอของ Gnome System Monitor, ซึ่งมีจุดเด่นสำหรับการแสดงและค้นหาข้อมูลโพรเซส, และรายงานการใช้ทรัพยากรระบบ:

Figure 4-3. Gnome System Monitor

คุณยังสามารถเลือกติดตั้งไอค่อนเล็กๆบน task bar , เช่น disk, memory, และ loadmonitor. โปรแกรม xload เป็นอีกโปรแกรมหนึ่งที่สามารถรายงานการใช้ทรัพยากรระบบ. ลองใช้แล้วแต่ชอบ!

4.3.5.7. Interrupting your processes

ตามสิทธิ์ที่ได้, คุณสามารถควบคุมโพรเซสของคุณเท่านั้น. เราได้แสดงวิธีที่คุณจะดูโพรเซสและเลือกดูโพรเซสที่เป็นของผู้ใช้เฉพาะราย, และจะมีข้อจำกัดอะไรบ้าง. เมื่อคุณเห็นโพรเซสของคุณกินทรัพยากรระบบมากเกิน, คุณมีสองทางเลือกที่จะทำคือ:

  1.  ทำให้โพรเซสกินทรัพยากรน้อยลงโดยไม่ขัดจังหวะโพรเซส

  2.  หยุดโพรเซสนั้น

ในกรณีที่คุณอยากให้โพรเซสนั้นทำงานต่อ, แต่ก็อยากให้โพรเซสอื่นได้ใช้ทรัพยากรระบบด้วย, คุณสามารถ renice โพรเซส. นอกจากการใช้คำสั่ง nice  หรือ renice , คำสั่ง top เป็นวิธีที่ง่ายในการตีกรอบของปัญหาและลดระดับความสำคัญของโปรแกรม.

ดูช่องข้อมูลแถว "NI", ซึ่งส่วนมากจะแสดงค่า priority เป็นลบ. พิมพ์ r และใส่หมายเลขโพรเซส ID ที่คุณอยากจะ renice. แล้วใส่ค่า nice value, ตัวอย่างเช่น "20". จะมีผลให้, โพรเซสนี้จะได้ CPU ไซเคิลจำนวน 1 ใน 5 ของไซเคิลทั้งหมด.

 ตัวอย่างของโพเซสที่คุณอยากให้มันทำงานต่อเนื่องคือโปรแกรม emulators, virtual machines, compiler เป็นต้น.

ถ้าคุณอยากจะเลิกการทำงานของโพรเซสเพราะมันค้างหรือมันกิน I/O เกิน, หรือสร้างไฟล์และใช้ทรัพยากรระบบเปลืองมาก, ใช้คำสั่ง kill. โดยพยายาม kill แบบนุ่มนวลก่อน, โดยส่งสัญญาณ SIGTERM. คำสั่งนี้จะหยุดการทำงานของโพรเซสไม่ว่ามันจะทำอะไรอยู่, มันจะตอบสนองตามที่ได้โปรแกรมไว้.

joe:~> ps -ef | grep mozilla
joe 25822 1 0 Mar11 ? 00:34:04 /usr/lib/mozilla-1.4.1/mozilla-

joe:~> kill -15 25822

 ในตัวอย่างด้านบน, ผู้ใช้ชื่อ joe สั่งให้บราวน์เซอร์ Mozilla หยุดการทำงานเพราะมันค้าง.

บางโพรเซสอาจไม่หยุดทำงาน, ถ้ามีทางเลือก, คุณอาจใช้การส่งสัญญาณ SIGINT เพื่อขัดจังหวะมัน. ถ้ายังไม่ได้ผล, ใช้คำสั่งแรงสุด, SIGKILL. ตัวอย่างข้างล่าง, joe สั่งให้ Mozilla หยุดทำงานเพราะมันค้างในระบบ.

joe:~> ps -ef | grep mozilla
joe 25915 1 0 Mar11 ? 00:15:06 /usr/lib/mozilla-1.4.1/mozilla-

joe:~> kill -9 25915

joe:~> ps -ef | grep 25915
joe 2634 32273 0 18:09 pts/4 00:00:00 grep 25915

ตามตัวอย่าง, คุณอาจต้องการตรวจสอบว่าโพรเซสนั้นตายจริงหรือเปล่า, ด้วยการใช้ grep หา PID อีกครั้ง. ถ้าผลลัพท์ได้เฉพาะโพรเซสที่ ใช้คำสั่ง grep , แสดงว่าคุณสั่งหยุดโพรเซสสำเร็จ.

ถ้าคุณไม่เจอโพรเซสที่ kill ให้หยุดการทำงานได้ยากในเชลล์.ซึ่งเป็นเรื่องที่ดี: ถ้าโพรเซสนั้น kill ได้ง่าย, คุณจะกลับเข้าสู่เชลล์ทุกครั้งที่คุณกด Ctrl-C, เนื่องจากมันเหมือนกับการส่งสัญญาณ SIGINT.

Note  ระบบยูนิกซ์นิยมใช้เครื่องหมายไปป์
 

 วิธีการใช้ เครื่องหมายไปป์ ( | ) เพื่อส่งผลลัพท์ของคำสั่งหนึ่งไปเป็นอินพุทของอีกคำสั่ง อธิบายใน บทที่ 5

ในโปรแกรมแบบกราฟฟิก, คำสั่ง xkill เป็นคำสั่งที่ใช้งานง่ายมาก. เพียงพิมพ์ชื่อของคำสั่ง, ตามด้วย Enter และเลือกหน้าต่างแอพพลิเคชั่นที่คุณต้องการจะหยุดโพรเซส. คำสั่งนี้จะส่งสัญญาณ SIGKILL , ดังนั้นควรใช้เมื่อโปรแกรมแแอพพลิเคชั่นนั้นค้าง.

4.4. Scheduling processes

4.4. การจัดลำดับการทำงานของโพรเซส

4.4.1. Use that idle time!

การทำงานกับระบบลีนุกซ์อาจต้องอดทน, ถ้าคุณใช้งานในช่วงเวลาทำงาน. นอกนั้นไม่ว่าจะเป็นช่วงเช้า, เย็น, กลางคืนและช่วงวันหยุดระบบจะทำงานได้ดี. การใช้งานระบบในช่วงที่งานระบบเบาจะมีค่าใช้จ่ายถูกกว่าการซื้อเครื่องใหม่ เพื่อมาใช้งานหลายอย่างพร้อมกันในเวลาทำงาน.

 ถ้าระบบทำงานช้ามีวิธีแก้ 3 วิธี:

  •  รอแป็ปนึงแล้วจึงสั่งให้ระบบทำงาน, ปกติการรอจะใช้คำสั่ง sleep.

  • สั่งให้ทำงานที่เวลาที่กำหนด, ด้วยการใช้คำสั่ง at. เป็นการสั่งให้ทำงานตามเวลาของระบบ ไม่ใช่ตอนที่สั่งคำสั่ง.

  •  สั่งให้ทำงานทุกๆ เดือน, สัปดาห์, วัน หรือทุกชั่วโมง, ด้วยการใช้ cron facilities.

หัวข้อถัดไปจะอธิบายแต่ละข้อ

4.4.2.  คำสั่ง sleep

 คำอธิบายเกี่ยวกับการใช้คำสั่ง sleep มีไม่มาก. ที่ sleep ทำคือรอ. ปกติค่าที่รอจะนับเป็นวินาที.

 เพื่อให้เห็นภาพความจำเป็นของคำสั่งนี้ มาดูตัวอย่าง:

 สมมุติมีคนคุยกับคุณทางโทรศัพท์, คุณบอกเขาว่า "เจอกันอีกครึ่งชั่วโมง" แต่คุณมีงานต้องทำและคุณไม่อยากพลาดมื้อเที่ยง:

(sleep 1800; echo "Lunch time..") &

 เมื่อคุณไม่สามารถใช้คำสั่ง at ด้วยเหตุผลบางอย่าง, ตอนนี้เป็นเวลา 5 โมง, คุณอยากกลับบ้านแต่ยังมีเรื่องงานต้องทำและตอนนี้ระบบถูกใช้งานหนักจากงานของคนอื่น:

(sleep 10000; myprogram) &

 ตรวจสอบให้แน่ว่าระบบมีการล็อกเอ๊าท์อัตโนมัติ, และคุณได้ล็อกเอ๊าท์หรือสั่ง lock เครื่องคอมพิวเตอร์ของคุณหรือจะสั่งคำสั่งนี้ใน screen session.

 เมื่อคุณสั่งพิมพ์ไฟล์ขนาดใหญ่หลายไฟล์, แต่คุณอยากให้ผู้ใช้อื่นพิมพ์แทรกระหว่างไฟล์ที่พิมพ์ได้.

lp lotoftext; sleep 900; lp hugefile; sleep 900; lp anotherlargefile

 การพิมพ์ไฟล์อธิบายใน บทที่ 8.

นักเขียนโปรแกรมมักจะใช้คำสั่ง sleep เพื่อหยุดสคริปชั่วระยะเวลาที่กำหนดไว้.

4.4.3.  คำสั่ง at

 คำสั่ง at สั่งให้ทำคำสั่ง ณ เวลาที่กำหนด, ด้วยการใช้เชลล์ดีฟ้อลท์ยกเว้นคุนจะระบุเป็นอย่างอื่น(ดูในคู่มือ).

 อ็อพชั่นของคำสั่ง at เข้าใจได้ไม่ยาก, ดังตัวอย่างข้างล่าง:

steven@home:~> at tomorrow + 2 days
warning: commands will be executed using (in order) a) $SHELL
b) login shell c) /bin/sh
at> cat reports | mail myboss@mycompany
at> <EOT>
job 1 at 2001-06-16 12:36

 กด Ctrl+D เพื่อออกจาก at utility และสร้างอักษร "EOT" ให้กับข้อความ.

 ผู้ใช้ steven ใช้คำสั่งสองคำสั่งที่ดูไม่คุ้นเท่าไร; เราจะเรียนการใช้คำสั่งแนวนี้ใน บทที่ 5 การ รีไดเร็กชั่นอินพุทและเอาท์พุท.

steven@home:~> at 0237
warning: commands will be executed using (in order) a) $SHELL
b) login shell c) /bin/sh
at> cd new-programs
at> ./configure; make
at> <EOT>
job 2 at 2001-06-14 02:00

 ถ้าใช้อ็อพชั่น -m จะหมายถึงให้ส่งเมล์หาผู้ใช้เมื่อทำงานเสร็จ, หรือบอกสาเหตุเมื่องานไม่สำเร็จ. คำสั่ง atq มีไว้แสดงรายการของคำสั่งที่อยู่ในคิว; ควรใช้คำสั่งนี้ตรวจสอบก่อนที่จะสั่งคำสั่งเพื่อป้องกันการทำงานในเวลา เดียวกันกับคำสั่งอื่น. ส่วนคำสั่ง atrm ใช้ยกเลิกคำสั่งที่คุณสั่งไปแล้วถ้าคุณเกิดเปลี่ยนใจในภายหลัง.

เป็นความคิดที่ดีถ้าจะตั้งให้คำสั่งทำงานในเวลาแปลกๆ, เนื่องจากงานของระบบมักจะทำงานตอนเวลาต้นชั่วโมง, ดังที่คุณเห็นใน หัวข้อ 4.4.4 หัวข้อถัดไป. ตัวอย่าง, งานมักจะทำในเวลา 1 นาฬิกาในช่วงเช้า(คือระบบมีกำหนดการอัพเดทดาต้าเบสตอนเช้า), ดังนั้นถ้าเราตั้งให้คำสั่งทำงานที่เวลา 0100 อาจทำให้ระบบทำงานช้ามากกว่าที่จะทำงานเร็ว. เพื่อป้องกันไม่ให้ jobs ทำงานพร้อมกัน, คุณอาจใช้คำสั่ง batch , ซึ่งจะเรียงลำดับโพรเซสและทำงานตามคิวในระบบแบ่งตามโหลด, เพื่อป้องกันการทำงานหนักในช่วงเวลาสั้นๆ. ดูคู่มือคำสั่งในรายละเอียด.

4.4.4. Cron and crontab

ระบบ cron จะมีเดมอน cron เป็นตัวจัดการ. มันเอาข้อมูลเกี่ยวกับโปรแกรมและเวลาที่จะทำคำสั่งจากระบบและตาราง cron ที่ผู้ใช้บันทึกไว้. ผู้ที่จะใช้ cron ของระบบได้คือ root เท่านั้น, ส่วนผู้ใช้ทั่วไปจะใช้ cron ของตัวเองได้เท่านั้น. ในบางระบบ ผู้ใช้ไม่อนุญาตให้ใช้ cron.

ตอนระบบเริ่มทำงาน เดมอน cron จะค้นหา /var/spool/cron/ สำหรับ crontab ที่มีชื่อตามบัญชีผู้ใช้ใน /etc/passwd, มันจะค้นไดเร็กตอรี่ /etc/cron.d/ และไดเร็กตอรี่ /etc/crontab, และใช้ข้อมูลนี้ทุกนาทีในการตรวจสอบว่ามีอะไรให้ทำ. การเอ็กซีคิ้วท์คำสั่งจะใช้สิทธิ์ของผู้ใช้นั้นซึ่งเป็นเจ้าของไฟล์ crontab และส่งเมล์ผลลัพท์ของคำสั่งไปยังผู้ใช้ที่เป็นเจ้าของ.

ในระบบที่ใช้ Vixie cron, งานที่ต้องทำทุกชั่วโมง, วัน, สัปดาห์และเดือน จะเก็บในไดเร็กตอรี่แยกกันใน /etc เพื่อให้ดูง่าย, ต่างจาก cron ของระบบยูนิกซ์มาตราฐาน, ที่ทุกงานจะเก็บไว้ในไฟล์ขนาดใหญ่ไฟล์เดียว.

 ตัวอย่างของ Vixie crontab file:

[root@blob /etc]# more crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
# commands to execute every hour
01 * * * * root run-parts /etc/cron.hourly
# commands to execute every day
02 4 * * * root run-parts /etc/cron.daily
# commands to execute every week
22 4 * * 0 root run-parts /etc/cron.weekly
commands to execute every month
42 4 1 * * root run-parts /etc/cron.monthly

Note Alternative
 

 คุณสามารถใช้คำสั่ง crontab -l เพื่อแสดงค่า crontab ที่ตั้งไว้

ตัวแปรบางตัวจะถูกเซ็ท, หลังจากนั้นการทำงานจริงจะเริ่ม, หนึ่งบรรทัดต่องาน, เริ่มต้นด้วยวันคูณด้วย 5 ช่อง. ช่องแรกประกอบด้วยนาที(จาก 0 ถึง 59), ช่องสองระบุชั่วโมงที่จะทำงาน(0-23), ช่องที่สามเป็นวันที่ในเดือน(1-31), หลังจากนั้นเป็นเดือนที่(1-12), สุดท้ายเป็นวันในสัปดาห์(0-7,โดยทั้ง 0 และ 7 หมายถึงวันอาทิตย์). เครื่องหมายดอกจันทน์ในช่องที่ปรากฏหมายถึงทำงานทุกย่านของช่องนั้น. สามารถใช้รายการ: เช่นให้ทำจากวันจันทร์ถึงวันศุกร์ ใช้ค่า 1-5 ในช่องสุดท้าย, แต่ถ้าอยากให้ทำในวันจันทร์, พุธ, และศุกร์ ให้ใช้ค่า 1,3,5.

หลังจากนั้นจะเป็นชื่อผู้ใช้ที่จะรันโพรเซสตามช่องท้ายสุด. ตัวอย่างข้างบนเป็นโครงสร้าง Vixie cron ที่จะรันโปรแกรม run-parts เป็นประจำ, ด้วยการระบุไดเร็กตอรี่อ็อพชั่น. ในไดเร็กตอรี่เหล่านี้, งานที่จะให้ทำจะเก็บไว้ในรูปเชลล์สคริป, เหมือนกับสคริปเล็กๆที่สั่งให้อัพเดทฐานข้อมูลที่ใช้คำสั่ง locate

billy@ahost cron.daily]$ cat slocate.cron
#!/bin/sh
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e \
"/tmp,/var/tmp, /usr/tmp,/afs,/net"

ผู้ใช้จะแก้ไขตาราง crontab ของตัวเองด้วยคำสั่ง crontab -e. การใช้คำสั่งโดยไม่ระบุชื่อไฟล์จะป้องกันไม่ให้เปิดไฟล์ผิดพลาด. โปรแกรมสำหรับแก้ไขไฟล์ที่เป็นตัวดีฟ้อลท์คือ vi (ดู บทที่ 6. แต่คุณสามารถใช้ text editor ไหนก็ได้, เช่น gvim หรือ gedit ถ้าคุณอยากใช้โปรแกรมกราฟฟิกในการทำงาน.

เมื่อคุณออกจากการแก้ไข, ระบบจะมีข้อความบอกให้คุณรู้ว่ามี crontab ตัวใหม่ติดตั้งเข้าไปแล้ว.

 ตัวอย่างเป็น crontab ที่จะเตือน billy ไปออกกำลังที่สปอร์ทคลับทุกๆคีนของวันพฤหัส:

billy:~> crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.20264 installed on Sun Jul 20 22:35:14 2003)
# (Cron version -- $Id: chap4.xml,v 1.28 2007/09/19 12:22:26 tille Exp $)
38 16 * * 3 mail -s "sports evening" billy

หลังจากเพิ่มตารางการทำงานใหม่, ระบบจะบอกคุณว่ามี crontab ใหม่ติดตั้งแล้ว. คุณไม่จำเป็นต้องสั่งรีสตาร์ท cron เพื่อให้มันมีผล. ตัวอย่างข้างล่าง, billy เพิ่มบรรทัดใหม่ชี้ไปยังสคริปเพื่อการแบ็คอัพข้อมูล:

billy:~> crontab -e
45 15 * * 3 mail -s "sports evening" billy
4 4 * * 4,7 /home/billy/bin/backup.sh

<--write and quit-->

crontab: installing new crontab

billy:~>

สคริปสำหรับการแบ็คอัพ backup.sh จะทำงานทุกวันพฤหัสและวันอาทิตย์. ดู หัวข้อ 7.2.5 สำหรับการเขียนเชลล์สคริปเบื้องต้น. จำไว้ว่าถ้ามีผลลัพท์ของคำสั่ง, มันจะส่งเมล์ไปหาเจ้าของไฟล์ crontab. ถ้าระบบไม่มีบริการเมล์, คุณอาจพบผลลัพท์ของคำสั่งของคุณใน local mailbox, ที่ไดเร็กตอรี่ /var/spool/mail/<your_username>,ในรูปไฟล์ข้อความ.

Note Who runs my commands?
 

 ถ้าคุณไม่ได้ระบุชื่อผู้ใช้ที่จะรันคำสั่ง. ระบบจะใช้สิทธิ์เจ้าของไฟล์ในการเอ็กซีคิ้วท์.

4.5. Summary

4.5. บทสรุป

ลีนุกซ์เป็นระบบปฏิบัติการหลายผู้ใช้, หลายงานในเวลาเดียวกันหรือ multi-user, multi-tasking มีการทำงานคล้ายระบบยูนิกซ์. ความเร็วในการทำงานมีปัจจัยเกี่ยวข้องกับสิ่งเล็กๆน้อยๆนับพันอย่าง. ในบทนี้, เราเรียนการใช้คำสั่งที่จะดูและทำงานกับโพรเซส ตามรายการด้านล่าง:

Table 4-3. New commands in chapter 4: Processes

Command Meaning
at Queue jobs for later execution.
atq Lists the user's pending jobs.
atrm Deletes jobs, determined by their job number.
batch Executes commands when system load level permits.
crontab Maintain crontab files for individual users.
halt Stop the system.
init run level Process control initialization.
jobs Lists currently executing jobs.
kill Terminate a process.
mesg Control write access to your terminal.
netstat Display network connections, routing tables, interface statistics, masquerade connections and multicast memberships.
nice Run a program with modified scheduling priority.
pgrep Display processes.
ps Report process status.
pstree Display a tree of processes.
reboot Stop the system.
renice Alter priority of running processes.
shutdown Bring the system down.
sleep Delay for a specified time.
time Time a command or report resource usage.
top Display top CPU processes.
uptime Show how long the system has been running.
vmstat Report virtual memory statistics.
w Show who is logged on and what they are doing.
wall Send a message to everybody's terminals.
who Show who is logged on.
write Send a message to another user.

4.6. Exercises

4.6. แบบฝึกหัด

 มีแบบฝึกหัดบางตัวที่ช่วยให้คุณรับรู้เกี่ยวกับโพรเซสที่วิ่งบนระบบของคุณ

4.6.1. General

  •  สั่งคำสั่ง top ในเทอร์มินอลหนึ่ง ขณะที่ทำแบบฝึกหัดในเทอร์มินอลอื่น.

  •  สั่งคำสั่ง ps.

  • อ่านคู่มือคำสั่งเพื่อหาคำสั่งที่ใช้ในการแสดงโพรเซสทั้งหมดของระบบคุณ

  •  รันคำสั่ง find / ดูว่าคำสั่งนี้มีผลต่อ system load? แล้วสั่งหยุดคำสั่งนี้.

  •  ในโหมดกราฟฟิก, สั่งให้โปรแกรม xclock ทำงานในโหมดฉากหน้า(foreground). แล้วสั่งให้ทำงานในโหมด backgroud. สั่งให้โปรแกรมหยุดทำงานด้วยคำสั่ง kill

  •  สั่งให้โปรแกรม xcalc ทำงานในโหมด background ดังนั้นจะมี prompt ปรากฏที่เทอร์มินอล.

  •  คำสั่ง kill -9 -1 ทำอะไร?

  •  เปิดเทอร์มินอลสองอันแล้วใช้คำสั่ง write เพื่อส่งข้อความจากเทอร์มินอลหนึ่งไปอีกเทอร์มินอลหนึ่ง.

  •  ใช้คำสั่ง dmesg ข้อมูลที่ได้คืออะไร?

  • เมื่อใช้คำสั่ง ls ในไดเร็กตอรี่ปัจจุบัน ใช้เวลาในการทำงานเท่าไร?

  •  จากข้อมูลโพรเซสใน /proc, ที่มี UID ของคุณเป็นเจ้าของโพรเซส, คุณมีวิธีการอย่างไรในการหาว่าโพรเซสใหนมีอยู่จริง?

  •  ระบบของคุณทำงานมาเป็นเวลานานเท่าไร?

  • อะไรคือ TTY ที่คุณใช้อยู่

  •  ให้แสดงชื่อโพรเซส 3 โพรเซสที่ไม่มี init เป็นโพรเซสแม่

  •  ให้แสดงคำสั่ง 3 คำสั่งที่ใช้ SUID mode. อธิบายว่าทำไมจึงเป็นเช่นนี้.

  • บอกชื่อคำสั่งที่ทำให้ระบบทำงานหนักที่สุดบนระบบคุณ.

4.6.2. Booting, init etc.

  •  คุณสามารถสั่งรีบูทระบบด้วยสิทธิ์ผู้ใช้ธรรมดาได้หรือไม่? ทำใมจึงเป็นเช่นนั้น?

  •  ตามระดับที่คุณรันอยู่, บอกขั้นตอนที่จะทำเมื่อมีการสั่ง shutdown.

  •  คุณมีวิธีเปลี่ยน run level อย่างไร? เปลี่ยนระดับการทำงานจากดีฟ้อลท์ไปเป็นระดับ 1 และเปลี่ยนกลับ.

  • จงแสดงรายการของเซอร์วิสและเดมอนทั้งหมดที่ startup เมื่อระบบของคุณ booted.

  •  เคอร์เนลอะไรที่ใช้งานตอนสตาร์ทอัพ?

  •  สมมุติคุณต้องสั่งให้เซิฟเวอร์ทำงานบางอย่างตอนบูทระบบ. จนถึงตอนนี้, คุณล็อกอินหลังจากระบบบูทและทำการสั่งให้สคริปที่ชื่อ deliver_pizza ในโฮมไดเร็กตอรี่ของคุณทำงาน. ถ้าคุณอยากให้การทำงานนี้ทำโดยอัตโนมัติใน run level 4 คุณจะทำอย่างไร?

4.6.3. Scheduling

  •  ใช้คำสั่ง sleep เพื่อเตือนว่าพาสต้าของคุณจะเรียบร้อยในสิบนาที.

  •  สร้างงานด้วยคำสั่ง at เพื่อก้อปปี้ไฟล์ทุกไฟล์ในโฮมไดเร็กตอรี่ของคุณไปยัง /var/tmp ภายในครึ่งชั่วโมง. คุณอาจต้องสร้างไดเร็กตอรี่ย่อยใน /var/tmp.

  •  สร้าง cronjob ที่ทำงานตอนเที่ยงของทุกวันจันทร์และวันศุกร์

  •  ตรวจสอบว่ามันทำงานหรือเปล่า

  •  ลองใส่ข้อมูลใน cronjob ที่ผิดๆ, เช่นใช้คำสั่งที่ไม่มีในระบบอย่าง coppy แทนคำสั่ง cp. ตรวจสอบว่าเกิดอะไรขึ้นเมื่อมีการทำคำสั่งนั้น?

Chapter 05. I/O redirection

Chapter 5. I/O redirection

ในบทนี้อธิบายถึงกลไกที่สำคัญของ UNIX ในการเปลี่ยนทิศข้อมูลหรือ redirecting input, output และ errors. เนื้อหาครอบคลุมถึง:

  • Standard input, output and errors

  •  เครื่องหมายเปลี่ยนทิศข้อมูล

  •  การใช้ผลลัพท์ของคำสั่งหนึ่งไปเป็นอินพุทของอีกคำสั่ง

  • วิธีส่งผลลัพท์ของคำสั่งไปเก็บลงไฟล์เพื่อใช้งานในภายหลัง

  •  วิธีเก็บผลลัพท์ของหลายคำสั่งต่อกันลงในไฟล์

  • Input redirection

  •  การทำงานกับ standard error messages

  •  การใช้รีไดเร็กชั่นแบบผสมของ input, output และ error streams

  • Output filters

5.1. Simple redirections

5.1. การรีไดเร็กชั่นอย่างง่าย

5.1.1. อะไรคืออินพุทมาตรฐานและเอาท์พุทมาตรฐาน

คำสั่งลีนุกซ์ส่วนมากจะอ่านอินพุท, เช่นไฟล์หรือข้อมูลอื่นสำหรับคำสั่ง, และเขียนผลลัพท์. ตามค่าดีฟ้อลท์, อินพุทจะรับจากคีย์บอร์ด, และเอาท์พุทจะแสดงบนหน้าจอคอมพิวเตอร์. คีย์บอร์ดจะเรียกว่าอุปกรณ์อินพุทมาตรฐาน standard input (stdin), และหน้าจอคอมพิวเตอร์หรือหน้าต่างเทอร์มินอลคืออุปกรณ์เอาท์พุทมาตรฐาน standard output (stdout).

อย่างไรก็ตาม, เนื่องจากลีนุกซ์เป็นระบบที่ปรับเปลี่ยนได้, ค่าดีฟ้อลท์เหล่านี้อาจไม่ได้ใช้. ตัวอย่างเช่น standard output, ของเครื่องเซิฟเวอร์ที่ทำงาน monitor ระบบอาจเป็นเครื่อง printer ก็ได้.

5.1.2.  เครื่องหมายรีไดเร็กชั่น

5.1.2.1. Output redirection with > and |

บางครั้งคุณอาจต้องการส่งผลลัพท์ของคำสั่งไปเก็บไว้ในไฟล์, หรือคุณอาจต้องการให้ผลลัพท์ของคำสั่งหนึ่งนำไปใช้เป็นข้อมูลของอีกคำสั่ง. นี่เรียกว่าการแปลงทิศทางของผลลัพท์หรือรีไดเร็กชั่น. การรีไดเร็กชั่นทำได้โดยใช้เครื่องหมาย ">" (เครื่องหมายมากกว่า), หรือใช้เครื่องหมาย "|" (pipe) ซึ่งจะส่ง standard output ของคำสั่งหนึ่งไปเป็น standard input ของอีกคำสั่ง.

ดังที่เราเห็นก่อนหน้านี้, คำสั่ง cat จะรวมไฟล์และส่งออกไปยัง standard output. ถ้ามีการรีไดเร็กผลลัพท์ไปยังไฟล์, ไฟล์จะถูกสร้างขึ้น - หรือเขียนทับถ้ามีไฟล์นั้นอยู่แล้ว, ดังนั้นต้องระวังนิด.

nancy:~> cat test1
some words

nancy:~> cat test2
some other words

nancy:~> cat test1 test2 > test3

nancy:~> cat test3
some words
some other words

Warning Don't overwrite!
 

ควรระวังอย่าไปเขียนทับไฟล์สำคัญเมื่อใช้รีไดเร็กเอาท์พุท. เชลล์หลายตัว, รวมทั้ง Bash, มีความสามารถในการป้องกันความเสียหายจากการเขียนทับ: โดยใช้คำสั่ง noclobber. ดูคู่มือคำสั่งในรายละเอียด. ใน Bash, คุณควรจะเพิ่มข้อความคำสั่ง set -o noclobber ลงไปในไฟล์คอนฟิก .bashrc เพื่อป้องกันการเขียนทับไฟล์โดยบังเอิญ.

 การสั่งรีไดเร็กโดยไม่มีข้อมูล จะเหมือนกับการล้างข้อมูลไฟล์:

nancy:~> ls -l list
-rw-rw-r-- 1 nancy nancy 117 Apr 2 18:09 list

nancy:~> > list

nancy:~> ls -l list
-rw-rw-r-- 1 nancy nancy 0 Apr 4 12:01 list

 วิธีการนี้เรียกว่า truncating.

 วิธีการเดียวกันถ้ารีไดเร็กไปยังไฟล์ที่ยังไม่มี จะเหมือนการสร้างไฟล์ใหม่ในชื่อนั้นโดยไฟล์จะเป็นไฟล์ว่างเปล่า.

nancy:~> ls -l newlist
ls: newlist: No such file or directory

nancy:~> > newlist

nancy:~> ls -l newlist
-rw-rw-r-- 1 nancy nancy 0 Apr 4 12:05 newlist

 บทที่ 7 มีตัวอย่างอีกมากในการใช้รีไดเร็ก.

 บางตัวอย่างใช้เครื่องหมายไปป์:

 ในการหาคำในข้อความ, แสดงบรรทัดที่มีคำ "pattern1", แต่ไม่รวมบรรทัดที่มีคำ "pattern2" ใช้คำสั่ง:

grep pattern1 file | grep -v pattern2

 คำสั่งแสดงรายการของไดเร็กตอรี่ทีละหน้า :

ls -la | less

 ค้นหาไฟล์ในไดเร็กตอรี่:

ls -l | grep part_of_file_name

5.1.2.2. Input redirection

ในบางกรณี, คุณอาจต้องการให้ข้อมูลในไฟล์เป็นข้อมูลอินพุทสำหรับคำสั่งที่ไม่รับไฟล์ เป็นอินพุท. วิธีการคือใช้การรีไดเร็กอินพุทด้วยเครื่องหมาย "<"(เครื่องหมายน้อยกว่า).

 ตัวอย่างด้านล่างจะส่งไฟล์ไปหาใครบางคน, ด้วยการรีไดเร็กอินพุท.

andy:~> mail mike@somewhere.org < to_do

ถ้า mike เป็นผู้ใช้คนหนึ่งในระบบ, คุณไม่จำเป็นต้องพิมพ์ชื่อเต็ม. แต่ถ้าคุณต้องการติดต่อใครบางคนบนอินเตอร์เนท, คุณต้องระบุชื่อเต็มเพื่อใช้บอกคำสั่ง mail.

รูปแบบคำสั่งอาจดูยากสำหรับผู้เริ่มใช้ใหม่ที่ชอบแบบนี้ cat file | mail someone, แต่การรีไดเร็กอินพุทก็เป็นอีกทางเลือกที่น่าใช้.

5.1.2.3. Combining redirections

ตัวอย่างต่อไปนี้รวมการรีไดเร็กอินพุทและเอาท์พุท. ไฟล์ text.txt จะถูกตรวจไวยากรณ์หาคำผิด, และส่งผลลัพท์ไปยังไฟล์ error.log.

spell < text.txt > error.log

 คำสั่งต่อไปนี้แสดงรายการคำสั่งที่คุณสามารถสั่งเพื่อดูว่าใน help ของคำสั่ง less มีข้อความ "examine" อยู่

mike:~> less --help | grep -i examine
:e [file] Examine a new file.
:n * Examine the (N-th) next file from the command line.
:p * Examine the (N-th) previous file from the command line.
:x * Examine the first (or N-th) file from the command line.

 อ็อพชั่น -i ใช้เพื่อการค้นหาโดยไม่ต้องสนใจตัวอักษรตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ - จำไว้ว่าระบบยูนิกซ์เป็นระบบที่ให้แยกความหมายตัวอักษรพิมพ์เล็กและตัวอักษร พิมพ์ใหญ่.

ถ้าคุณต้องการเก็บข้อมูลเอาท์พุทของคำสั่งเพื่อใช้เป็นข้อมูลอ้างอิงในอนาคต, ใช้การรีไดเร็กเอาท์พุทไปยังไฟล์:

mike:~> less --help | grep -i examine > examine-files-in-less

mike:~> cat examine-files-in-less
:e [file] Examine a new file.
:n * Examine the (N-th) next file from the command line.
:p * Examine the (N-th) previous file from the command line.
:x * Examine the first (or N-th) file from the command line.

ผลลัพท์ของคำสั่งหนึ่งสามารถไปป์ไปยังคำสั่งอีกคำสั่งได้หลายครั้งเท่า ที่คุณต้องการ, เหมือนกับการอ่านอินพุทจาก standard input และเขียนผลลัพท์ไปยัง standard output. แต่บางทีก็อาจทำไม่ได้, ดังนั้นควรอ่านคู่มือ( man info page )ถ้าคุณใช้แล้วพบข้อความ errors.

เตือนอีกครั้ง, ตรวจสอบให้แน่ใจว่าชื่อไฟล์ที่คุณใช้ไม่ซ้ำกับไฟล์ที่มีอยู่. การรีไดเร็กเอาท์พุทไปยังไฟล์ที่มีอยู่แล้วจะเขียนทับข้อมูลของไฟล์เดิม.

5.1.2.4. The >> operator

 แทนที่จะเขียนข้อมูลทับ, คุณสามารถเขียนข้อมูลต่อท้ายไฟล์ที่มีอยู่แล้วด้วยการใช้เครื่องหมายมากกว่าสองอัน:

 ตัวอย่าง:

mike:~> cat wishlist
more money
less work

mike:~> date >> wishlist

mike:~> cat wishlist
more money
less work
Thu Feb 28 20:23:07 CET 2002

  คำสั่ง date ปกติจะแสดงผลที่บรรทัดสุดท้ายของหน้าจอ; การรีไดเร็กทำให้ข้อมูลไปต่อท้ายไฟล์ wishlist แทน.

5.2. Advanced redirection features

5.2.  การใช้รีไดเร็กชั่นขั้นสูง

5.2.1.  การใช้ file descriptors

 ชนิดของ I/O มี 3 แบบ, ซึ่งแต่ละแบบมีตัวระบุ, ที่เรียกว่า file descriptor:

  • standard input: 0

  • standard output: 1

  • standard error: 2

โดยมีคำจำกัดความดังนี้, ถ้าไม่ระบุหมายเลข file descriptor, และตัวอักษรแรกของเครื่องหมายรีไดเร็กชั่นคือ <, การรีไดเร็กชั่นจะหมายถึง standard input (file descriptor 0). ถ้าตัวอักษรแรกของเครื่องหมายรีไดเร็กชั่นคือ >, การรีไดเร็กชั่นหมายถึง standard output (file descriptor 1).

 ตัวอย่างเพื่อให้เห็นได้ชัด:

ls > dirlist 2>&1

  จะทำการรีไดเร็ก standard output และ startdard error ไปยังไฟล์ dirlist, ส่วนคำสั่ง

ls 2>&1 > dirlist

. จะรีไดเร็ก standard output ไปยังไฟล์ dirlist เท่านั้น.

ดูแล้วอาจซับซ้อน, อย่าสับสนการใช้ เครื่องหมาย ampersand (&) ที่นี่กับการใช้ใน หัวข้อ 4.1.2.1, ซึ่งใช้ ampersand เพื่อรันโพรเซสในโหมด background. ที่นี่, ใช้แสดงว่าตัวเลขที่ตามมาไม่ใช่ชื่อไฟล์, แต่เป็นตัวแสดงตำแหน่งข้อมูลที่ data stream ชี้ไป.

[nancy@asus /var/tmp]$ ls 2> tmp

[nancy@asus /var/tmp]$ ls -l tmp
-rw-rw-r-- 1 nancy nancy 0 Sept 7 12:58 tmp

[nancy@asus /var/tmp]$ ls 2 > tmp
ls: 2: No such file or directory

คำสั่งแรกที่ nancy สั่งทำงานได้ถูกต้อง(แม้ว่าจะไม่มี error และไฟล์ที่สร้างขึ้นจากการรีได้เร็กจะไม่มีข้อมูล). ส่วนคำสั่งที่สองจะมองตัวเลข 2 เป็นชื่อไฟล์, ซึ่งกรณีนี้ไม่มีในระบบ, ดังนั้นข้อความแสดงความผิดพลาดจะแสดงที่หน้าจอ.

รายละเอียดดูได้ในคู่มือคำสั่งของ Bash.

5.2.2.  ตัวอย่าง

5.2.2.1.  การวิเคราะห์หาข้อผิดพลาด

ถ้าโพรเซสของคุณสร้าง error จำนวนมาก, วิธีการหาข้อผิดพลาดใช้คำสั่ง:

command 2>&1 | less

 คำสั่งนี้ใช้บ่อยตอนสร้างซอฟแวร์ใหม่ด้วยคำสั่ง make, อย่างเช่น:

andy:~/newsoft> make all 2>&1 | less
--output ommitted--

5.2.2.2.  การแยก standard output จาก standard error

เป็นวิธีที่โปรแกรมเมอร์ใช้, ทำให้แยกหน้าต่างที่แสดงผลลัพท์ของคำสั่ง, และอีกหน้าต่างแสดง error. ก่อนใช้คำสั่งควรหาว่าเทอร์มินอลที่คุณใช้เป็นอุปกรณ์อะไรด้วยคำสั่ง tty:

andy:~/newsoft> make all 2> /dev/pts/7

5.2.2.3.  แสดงผลเอาท์พุทและเก็บลงไฟล์ในเวลาเดียวกัน

คุณสามารถใช้คำสั่ง tee เพื่อสำเนาผลลัพท์คำสั่ง(standard output)ไปยังไฟล์ได้ในเวลาเดียวกัน. ใช้อ็อพชั่น -a ของคำสั่ง tee จะมีผลให้เขียนข้อมูลต่อท้ายไฟล์. คำสั่งนี้มีประโยชน์เมื่อคุณต้องการเห็นผลลัพท์แสดงที่หน้าจอและเก็บลงไฟล์ ในเวลาเดียวกัน. เครื่อหมาย > และ >> จะใช้งานพร้อมกันไม่ได้.

 การใช้คำสั่ง tee ปกติจะใช้คู่กับเครื่องหมายไปป์ ดังตัวอย่างด้านล่าง

mireille ~/test> date | tee file1 file2
Thu Jun 10 11:10:34 CEST 2004

mireille ~/test> cat file1
Thu Jun 10 11:10:34 CEST 2004

mireille ~/test> cat file2
Thu Jun 10 11:10:34 CEST 2004

mireille ~/test> uptime | tee -a file2
11:10:51 up 21 days, 21:21, 57 users, load average: 0.04, 0.16, 0.26

mireille ~/test> cat file2
Thu Jun 10 11:10:34 CEST 2004
11:10:51 up 21 days, 21:21, 57 users, load average: 0.04, 0.16, 0.26

5.3. Filters

5.3. Filters

เมื่อโปรแกรมทำงานโดยรับอินพุทและเขียนผลลัพท์ออกทาง standard output, เราเรียกการทำงานนี้ว่า filter. การทำงานโดยทั่วไปของการใช้ filter คือการปรับแต่ง output. เราจะอธิบายถึงการ filter ที่เด่นๆ ดังนี้

5.3.1. More about grep

ดังที่เราเห็นใน หัวข้อ 3.3.3.4. คำสั่ง grep ตรวจผลลัพท์แต่ละบรรทัด, หาข้อมูลเทียบกับ pattern ที่ให้. ทุกบรรทัดที่มี pattern ตรงกันจะถูกสั่งพิมพ์ออกทาง standard output. โดยใช้อ็อพชั่น -v ถ้าต้องการยกเว้น.

 ตัวอย่าง: ถ้าเราต้องการหาไฟล์ที่มีการแก้ไขในเดือนกุมภาพันธ์:

jenny:~> ls -la | grep Feb

เหมือนกับคำสั่งอื่น, คำสั่ง grep, เป็นคำสั่งที่ case sensitive (อักษรพิมพ์เล็กและพิมพ์ใหญ่มีความหมายต่างกัน). แต่ถ้าใช้อ็อพชั่น -i จะทำให้คำสั่งไม่สนใจตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก. ยังมีส่วนขยายคำสั่งอีกหลายตัวเช่น --colour, ซึ่งมีประโยชน์ในการเน้นข้อความที่แสดงในบรรทัดยาวๆ, และ --after-context, ซึ่งพิมพ์หมายเลขบรรทัดหลังบรรทัดสุดท้ายที่ pattern ตรงกัน. คุณสามารถใช้อ็อพชั่น -r สำหรับการค้นลึกลงในไดเร็กตอรี่ย่อย. เหมือนกับอ็อพชั่นที่ใช้ตามปกติ.

เราสามารถใช้ Regular expression เพื่อระบุตัวอักษรที่จะเป็นตัวเปรียบเทียบ. วิธีที่ดีที่สุดในการใช้ regular expression คืออ่านคู่มือคำสั่ง grep. ที่อธิบายได้ละเอียด. คุณควรทำความเข้าใจกับ regular expression ตามคู่มือคำสั่ง. ส่วนหนังสือเล่มนี้จะไม่ลงลึกมากนัก.

ทดลองเล่นกับคำสั่ง grep, จะทำให้เข้าใจพื้นฐานการใช้คำสั่งในการ filter. แบบฝึกหัดท้ายบทจะช่วยคุณได้มาก ดู หัวข้อ 5.5.

5.3.2. Filtering output

 คำสั่ง sort ปรับผลลัพท์ให้เรียงตามลำดับตัวอักษร:

thomas:~> cat people-I-like | sort
Auntie Emmy
Boyfriend
Dad
Grandma
Mum
My boss

sort สามารถทำอย่างอื่นได้อีก. เช่น ดูขนาดไฟล์. คำสั่งนี้สามารถใช้ดูไดเร็กตอรี่แล้วเรียงไฟล์ที่เล็กสุดก่อน, ตามด้วยไฟล์ใหญ่ตอนท้าย:

ls -la | sort -nk 5

Note Old sort syntax
 

คุณอาจใช้คำสั่ง ls -la | sort +4n, และได้ผลลัพท์เดียวกัน, แต่วิธีนี้เป็นแบบเก่าซึ่งใช้กับรุ่นมาตรฐานไม่ได้.

เมื่อใช้คำสั่ง sort ร่วมกับโปรแกรม uniq (หรือ sort -u) ผลที่ได้จะเป็นข้อมูลการเรียงลำดับและตัดข้อมูลที่ซ้ำกันทิ้งไป:

thomas:~> cat itemlist
1
4
2
5
34
567
432
567
34
555

thomas:~> sort itemlist | uniq
1
2
34
4
432
5
555
567

5.4. Summary

5.4. บทสรุป

ในบทนี้เราเรียนวิธีการที่คำสั่งสามารถส่งข้อมูลไปหากัน, และการทำอินพุทจากคำสั่งหนึ่งให้เป็นเอาท์พุทของอีกคำสั่ง.

การรีไดเร็กชั่น input/output เป็นเรื่องปกติในระบบยูนิกซ์และลีนุกซ์. วิธีการนี้เป็นกลไกที่ทำให้โครงสร้างระบบยูนิกซ์สามารถปรับเปลี่ยนการทำงาน ได้อย่างมีประสิทธิภาพ.

การรีไดเร็กชั่นที่ใช้ทั่วไปคือ > และ |. ดู Appendix C สำหรับภาพรวมของคำสั่งรีไดเร็กชั่นและคำสั่งเชลล์.

Table 5-1.  คำสั่งใหม่ในบทที่ 5: I/O redirection

Command Meaning
date  แสดงข้อมูลเวลาและวันที่.
set  ปรับแต่งอ็อพชั่นของเชลล์.
sort  เรียงลำดับข้อมูลตามตัวอักษร.
uniq  ตัดบรรทัดที่ข้อมูลซ้ำกัน.

5.5. Exercises

5.5. แบบฝึกหัด

แบบฝึกหัดต่อไปนี้จะมีตัวอย่างการผสมคำสั่งที่หลากหลาย. เป้าหมายคือให้ทดลองและใช้ปุ่ม Enter ให้น้อยที่สุด.

 ทุกคำสั่งในแบบฝึกหัดจะใช้สิทธิ์ผู้ใช้ธรรมดา, บางครั้งทำให้เกิดข้อความแสดงข้อผิดพลาด. เมื่อถึงตอนนั้น, อย่าลืมอ่านคู่มือคำสั่งประกอบ!

  •  ใช้คำสั่ง cut บนผลลัพท์ของการแสดงรายการไดเร็กตอรี่แบบยาวเพื่อให้แสดงเฉพาะค่า ไฟล์เพอร์มิชชั่น. และทำการไปป์ผลลัพท์ไปยังคำสั่ง sort และ uniq เพื่อกรองบรรทัดที่ซ้ำกัน. หลังจากนั้นใช้คำสั่ง wc เพื่อนับชนิดของเพอร์มิชชั่นในไดเร็กตอรี่นี้.

  •  ใส่ผลลัพท์ของคำสั่ง date ไว้ในไฟล์. แล้วใส่ข้อมูลของคำสั่ง ls ต่อท้ายไฟล์นี้. ส่งไฟล์ไปยังเมล์บ็อกซ์ของคุณ (ไม่ต้องระบุชื่ออะไร<@domain>, ให้ใส่ชื่อผู้ใช้ก็พอ). เมื่อใช้ Bash, คุณจะเห็นข้อความเตือนว่ามีเมล์ใหม่ถ้าคำสั่งทำงานถูกต้อง.

  • แสดงรายการของอุปกรณ์ใน /dev ซึ่งถูกใช้งานด้วย UID ของคุณ. ไปป์ไปยังคำสั่ง less เพื่อเลือกดูให้เหมาะสม.

  •  สั่งคำสั่งต่อไปนี้โดยใช้สิทธิ์ผู้ใช้ธรรมดา. พิจารณา standard input, output และ error ของแต่ละคำสั่ง.

    • cat nonexistentfile

    • file /sbin/ifconfig

    • grep root /etc/passwd /etc/nofiles > grepresults

    • /etc/init.d/sshd start > /var/tmp/output

    • /etc/init.d/crond start > /var/tmp/output 2>&1

    •  ต่อมาให้ทำคำสั่งซ้ำอีกครั้ง, และทำการ redirect standardoutput ไปยังไฟล์ /var/tmp/output และรีไดเร็ก standard error ไปยังไฟล์ /var/tmp/error.

  •  มีโพรเซสกี่ตัวที่กำลังทำงานในระบบของคุณ?

  •  มีไฟล์ที่มองเห็นได้กี่ไฟล์ในโฮมไดเร็กตอรี่ของคุณ?

  •  ใช้คำสั่ง locate ในการค้นหาคู่มือของเคอร์เนล.

  •  ค้าหาว่าไฟล์ใดมีข้อความต่อไปนี้:

    root:x:0:0:root:/root:/bin/bash

     และข้อความนี้:

    system:		root

  •  ดูว่าเมื่อใช้คำสั่งต่อไปนี้แล้วเกิดอะไรขึ้น:

    > time; date >> time; cat < time

  •  คำสั่งอะไรที่ใช้ในการตรวจสอบสคริปใน /etc/init.d เพื่อหาคำสั่งสตาร์ทสคริปที่ต้องการ?

Chapter 06. Text editors

Chapter 6. โปรแกรมแก้ไขข้อความหรือเทกซ์อีดิเตอร์

ในบทนี้เราจะพูดถึงความสำคัญของโปรแกรมแก้ไขข้อความ. เราจะเน้นไปที่ vi editor.

 หลังจากจบบทนี้, คุณจะเรียนรู้:

 

  •  การเปิดและปิดไฟล์ใน text mode

  •  การแก้ไขไฟล์

  •  การค้นหาข้อความ

  • Undo errors

  • Merge files

  • Recover lost files

  • Find a program or suite for office use

6.1. Text editors

6.1. โปรแกรมแก้ไขข้อความ

6.1.1. ทำไมต้องใช้โปรแกรมแก้ไขข้อความ

มันสำคัญอย่างยิ่งที่จะต้องมีโปรแกรมแก้ไขข้อความอย่างน้อยหนึ่งโปรแกรม. การเรียนรู้ที่จะใช้โปรแกรมแก้ไขข้อความหรืออีดิเตอร์ในระบบของคุณเป็นขั้น แรกที่จะเป็นอิสระจากระบบเดิม.

เราจะรู้จักอีดิเตอร์มากขึ้นในบทถัดไปเพราะเราต้องใช้มันในการแก้ไขไฟล์ ที่มีผลกับ environment ของระบบ. ในมุมของผู้ใช้ที่ชำนาญ, คุณอาจต้องการเขียนสคริป, หรือหนังสือ, พัฒนาเวบไซด์หรือเขียนโปรแกรมใหม่. ถ้าใช้โปรแกรมอีดิเตอร์ได้อย่างชำนาญจะเพิ่มขีดความสามารถในการสร้างสรรค์ ได้เป็นอย่างดี.

6.1.2.  ควรใช้อีดิเตอร์ตัวใหนดี

เราจะเน้นโปรแกรมแก้ไขข้อความหรือเท็กซ์อีดีเตอร์, ซึ่งสามารถใช้งานบนระบบที่ไม่มีกราฟฟิกรองรับ. ประโยชน์อีกอย่างของการใช้เท็กซ์อีดิเตอร์คือการใช้งานต่างเซิฟเวอร์. เนื่องจากคุณไม่ต้องส่งข้อมูลหน้าจอกราฟฟิกผ่านเครือข่าย, และการใช้เท็กซ์อีดิเตอร์จะทำงานได้เร็วมากหากทำงานผ่านเครือข่าย.

 ปกติแล้ว, จะมีหลายโปรแกรมให้เราเลือกใช้. มาดูว่าอีดิเตอร์ตัวไหนที่มีใช้ทั่วไป:

6.1.2.1. GNU Emacs

โปรแกรม Emacs มีความสามารถขยายได้, ปรับแต่งได้, มีคู่มือใช้งานในตัว, แสดงผลแบบเรียลไทม์, เป็นที่รู้จักทั่วไปในระบบยูนิกซ์และระบบอื่น. ข้อความที่กำลังแก้ไขจะมองเห็นบนหน้าจอและอัพเดทอัตโนมัติเมื่อคุณพิมพ์คำ สั่ง. มันเรียกว่าเรียลไทม์อีดิเตอร์เพราะหน้าจอมันจะอัพเดทบ่อยมาก, ปกติแทบจะทุกตัวอักษรหรือคู่ตัวอักษรที่คุณพิมพ์. นี่ทำให้ลดจำนวนข้อมูลที่คุณต้องจำตอนพิมพ์ข้อความ. Emacs เป็นโปรแกรมชั้นสูงเพราะมันมีขีดความสามารถมากกว่าที่จะแทรกหรือลบข้อความ ธรรมดา: สามารถควบคุม subprocess; ย่อหน้าอัตโนมัติ; ดูข้อมูลไฟล์มากกว่าสองไฟล์ในเวลาเดียวกัน; แก้ไขรูปแบบของข้อความ; และทำงานในเชิงตัวอักษร, คำ, บรรทัด, ประโยค, พารากราฟ, และหน้า, แม้กระทั่ง expression และ คอมเมนท์ในรูปแบบต่างๆของการเขียนโปรแกรม.

มีคู่มือในตัว หมายความว่าเมื่อไรที่คุณกดอักษรพิเศษ, Ctrl+H, เพื่อหาว่าอ็อพชั่นของคุณคืออะไร. คุณสามารถใช้มันเพื่อหาข้อมูลว่าคำสั่งอื่นทำอะไรได้บ้าง, หรือเพื่อหาว่ามีคำสั่งอะไรบ้างที่เกี่ยวข้องกับเรื่องที่คุณต้องการ. ปรับแต่งได้ หมายความว่า คุณสามารถปรับเปลี่ยนคำจำกัดความของคำสั่ง Emacs ได้ระดับหนึ่ง. ตัวอย่าง, ถ้าคุณเขียนโปรแกรมที่ใช้เครื่องหมาย "<**" และปิดด้วย "**>" สำหรับการเขียนคอมเมนท์, คุณสามารถบอกให้ Emacs ทำงานกับคอมเมนท์ตามรูปแบบดังกล่าว. อีกตัวอย่าง, ถ้าคุณถนัดการใช้ปุ่มลูกศรในการเลื่อนเคอร์เซอร์(up, down, left และ right) คุณสามารถบอกให้ Emacs จัดคีย์ตามแบบที่คุณต้องการ.

ขยายได้  หมายความว่าคุณสามารถทำเรื่องที่มากกว่าการปรับ แต่งทั่วไปแม้กระทั่งเขียนคำสั่งขึ้นใหม่, โปรแกรมด้วยภาษา Lisp ที่รันด้วยตัว Emacs interpreter เอง. Emacs คือระบบที่ขยายความสามารถได้ในแบบออนไลน์, หมายความว่ามันแบ่งฟังชั่นออกเป็นส่วนที่เรียกใช้กันเอง, และฟังชั่นสามารถปรับแต่งได้ในขณะที่ทำการแก้ไขนั้น. แทบทุกส่วนของ Emacs สามารถเปลี่ยนได้โดยไม่ต้องก้อปปี้ Emacs ทั้งหมด" คำสั่งส่วนใหญ่ของ Emacs เขียนขึ้นจากภาษา Lisp; มีเพียงบางส่วนที่เขียนด้วยภาษาซี. แม้ว่าจะมีเพียงโปรแกรมเมอร์ที่เขียนส่วนขยายนี้, คนที่ได้ประโยชน์ตามมาก็คือคนใช้งานทั่วไป.

เมื่อทำงานในระบบ X Window (ใช้คำสั่ง xemacs) Emacs จะมีเมนูที่เข้ากันได้ดีกับการกดปุ่มที่เม้าส์. แต่ Emacs สามารถใช้ประโยชน์บนระบบวินโดว์สำหรับการแก้ไขข้อความเท่านั้น. เช่นคุณสามารถแก้ไขไฟล์หลายไฟล์ในเวลาเดียวกัน, ย้ายข้อความระหว่างไฟล์, และแก้ไขไฟล์ในขณะที่รันคำสั่งเชลล์.

6.1.2.2. Vi(m)

Vim ย่อมาจาก "Vi IMproved". หรือโปรแกรมเลียนแบบ VI เป็นเท็กซ์อีดิเตอร์ที่มีความสามารถทำคำสั่งแทบทุกคำสั่งของโปรแกรม vi เดิมของยูนิกซ์และเพิ่มความสามารถเข้าไปอีกมาก.

คำสั่งใน vi อีดิเตอร์จะใช้ผ่านคีย์บอร์ดเท่านั้น, ซึ่งมีข้อได้เปรียบคือคุณสามารถวางมือบนแป้นพิมพ์และดูผลการทำงานที่หน้าจอ, มากกว่าที่จะย้ายมือไปจับเม้าส์. สำหรับผู้ต้องการใช้เม้าส์ก็สามารถใช้รุ่นสำหรับ GUI ที่รองรับการคลิกเม้าส์และสโครลบาร์.

หนังสือนี้เราจะพูดถึง vi หรือ vim ในการแก้ไขไฟล์, แม้ว่าคุณจะมีอิสระที่จะใช้อีดิเตอร์ตัวใหนก็ได้, เราแนะนำว่าอย่างน้อยคุณควรเรียนรู้การใช้งานพื้นฐานของ vi ไว้บ้าง, เพราะมันเป็นเท็กซ์อีดิเตอร์มาตรฐานบนระบบยูนิกซ์แทบทุกตัว, ในขณะที่ Emacs เป็นชุดโปรแกรมอ็อพชั่น. มันอาจมีความแตกต่างกันของเครื่องคอมพิวเตอร์และเทอร์มินอล, แต่จุดหลักคือถ้าคุณรู้จักใช้ vi คุณสามารถทำงานบนระบบยูนิกซ์อื่นได้.

นอกจากคำสั่ง vim, ในชุดโปรแกรมอาจมี gvim, คือโปรแกรม vim สำหรับ Gnome. ผู้ใช้มือใหม่อาจพบว่ามันใช้ง่ายกว่า, เพราะเมนูมีตัวช่วยเมื่อคุณลืมหรือไม่เข้าใจวิธีการแก้ไขไฟล์ด้วยคำสั่ง มาตรฐานของ vim

6.2. Using the Vim editor

6.2. การใช้ Vim editor

6.2.1. สองโหมดการใช้งาน

อีดิเตอร์ vi มีความสามารถสูงและมีคู่มือในตัว, ซึ่งคุณสามารถเรียกใช้มันด้วยการใช้คำสั่ง :help เมื่อโปรแกรมทำงานแล้ว(แทนที่จะใช้ man หรือ info, ซึ่งให้ข้อมูลไม่มาก). เราจะแนะนำในเบื้องต้นเพื่อให้คุณสามารถเริ่มใช้งาน.

สิ่งที่ทำให้ผู้ใช้หน้าใหม่งงเมื่อใช้ vi คือมันสามารถทำงานในสองโหมด: โหมดคำสั่งและโหมด insert. อีดิเตอร์จะเริ่มต้นด้วยโหมดคำสั่งเสมอ. โหมดนี้ให้คุณสามารถเลื่อนเคอร์เซอร์, ค้นหา, เปลี่ยน, mark blocks และงานแก้ไขอื่นๆ, และการสลับไป insert mode.

นี่หมายความว่าแต่ละคีย์ที่คุณกดไม่ใช่ความหมายเดียว, แต่มีสองความหมาย: มันสามารถแทนคำสั่งสำหรับอีดิเตอร์เมื่ออยู่ในโหมดคำสั่ง, หรือเป็นตัวอักษรเมื่ออยู่ใน insert mode.

Note  การออกเสียง
 

 มันออกเสียงว่า วี-อาย

6.2.2.  คำสั่งพื้นฐาน

6.2.2.1.  การเลื่อนเคอร์เซอร์ไปบนข้อความ

การเลื่อนเคอร์เซอร์ปกติจะทำได้ด้วยการกดปุ่มลูกศร. แต่ถ้าไม่ใช่ลองกด:

  • h  เลื่อนเคอร์เซอร์ไปทางซ้าย

  • l  เลื่อนเคอร์เซอร์ไปทางขวา

  • k  เลื่อนเคอร์เซอร์ขึ้น

  • j  เลื่อนเคอร์เซอร์ลง

กด SHIFT-G จะเลื่อนเคอร์เซอร์ไปยังบรรทัดสุดท้าย.

6.2.2.2. Basic operations การทำงานพื้นฐาน

 คำสั่งที่ใช้บ่อยใน vi:

  • n dd  จะลบบรรทัดจำนวน n บรรทัดเริ่มจากเคอร์เซอร์ปัจจุบัน.

  • n dw  จะลบคำ n คำทางด้านขวาของเคอร์เซอร์.

  • x  จะลบตัวอักษรที่เคอร์เซอร์ปรากฏ.

  • :n  เลื่อนไปที่บรรทัดที่ n ของไฟล์.

  • :w  จะเก็บ(เขียน)ข้อมูลลงไฟล์.

  • :q  จะออกจากอีดิเตอร์.

  • :q!  ออกจากโปรแกรมโดยไม่มีการเก็บข้อมูลที่เปลี่ยนแปลงไป.

  • :wq  เก็บข้อมูลและออกจากโปรแกรม.

  • :w newfile  จะเก็บข้อมูลลงไฟล์ใหม่.

  • :wq!  เขียนลงไฟล์ที่อ่านได้อย่างเดียว(คุณต้องมีสิทธิ์ในการทำงานด้วย, ตัวอย่างเช่นเมื่อคุณใช้สิทธิ์ root).

  • /astring  ค้นหาสตริงในไฟล์หลังตำแหน่งเคอร์เซอร์. และหยุดการค้นเมื่อเจออันแรก.

  • /  ค้นหาคำเดิม, และหยุดการค้นที่อันถัดไป.

  • :1, $s/word/anotherword/g  เปลี่ยนคำ word ด้วย anotherword ที่เจอทั้งหมดในไฟล์.

  • yy  จะก้อปปี้กลุ่มข้อความ.

  • n p  จะ paste เป็นจำนวน n ครั้ง.

  • :recover  จะกู้คืนข้อมูลไฟล์หากเกิดการขัดจังหวะที่ไม่คาดคิด.

6.2.2.3.  คำสั่งที่สลับอีดิเตอร์ไป insert mode

  • a  จะต่อท้าย: คำสั่งนี้มีผลให้เคอร์เซอร์เลื่อนไปทางขวาหนึ่งตำแหน่งก่อนจะสลับไปเป็น insert mode.

  • i  จะเข้า insert mode

  • o  จะแทรกบรรทัดว่างๆลงไปที่บรรทัดใต้เคอร์เซอร์และเลื่อนเคอร์เซอร์ไปที่บรรทัดนั้น.

การกดปุ่ม Esc จะสลับกลับมายังโหมดคำสั่ง. ถ้าคุณไม่แน่ใจว่าตอนนี้คุณอยู่โหมดใหนเพราะในโปรแกรม vi เวอร์ชั่นเก่าไม่ได้แสดงข้อความ "INSERT", การกดคีย์ Esc จะทำให้แน่ใจว่ากลับไปโหมดคำสั่ง. ระบบอาจส่งสัญญาณเตือนถ้าคุณกดคีย์ Esc โดยที่มันอยู่ในโหมดคำสั่งอยู่แล้ว, โดยส่งสัญญาณบี้บหรืออาจส่งสัญญาณกระดิ่ง(กระพริบเคอร์เซอร์บนหน้าจอ), ซึ่งเป็นเรื่องปกติ.

6.2.3.  วิธีที่ง่ายกว่า

แทนที่จะอ่านวิธีใช้งาน, ซึ่งเป็นเรื่องน่าเบื่อ, คุณสามารถใช้ vimtutor ในการเรียนการใช้คำสั่งของ Vim. vimtutor เป็นโปรแกรมสอนพื้นฐานการใช้โปรแกรม Vim พร้อมแบบฝึกหัดแบบง่าย 8 บทที่เรียนรู้ภายในเวลาสามสิบนาที. แม้ว่าคุณจะเรียนรู้การใช้งานของ vim ไม่ได้ทั้งหมดในช่วงสั้นๆนี้, tutor นี้ออกแบบให้อธิบายพื้นฐานคำสั่งให้คุณสามารถใช้ Vim เป็นอีดิเตอร์เอนกประสงค์ได้.

ในยูนิกซ์และไมโครซอฟท์วินโดว์, ถ้า Vim ติดตั้งแล้ว, คุณสามารถเริ่มใช้งานได้ด้วยการพิมพ์ vimtutor ที่เชลล์หรือ command line. โปรแกรมจะสร้างก้อปปี้ของ tutor file, ดังนั้นคุณสามารถแก้ไขมันโดยไม่มีความเสี่ยงว่าจะมีผลต่อไฟล์ต้นฉบับ. มีโปรแกรม tutor บางรุ่นที่แปลแล้ว. คุณสามารถค้นหารุ่นที่แปลแล้วว่ามีหรือเปล่า, ด้วยการใช้อักษรย่อของภาษา. เช่นสำหรับภาษาฝรั่งเศสจะใช้คำสั่ง vimtutor f r (ถ้าติดตั้งในระบบแล้ว).

6.3. Linux in the office

6.3.  การใช้ลีนุกซ์ในสำนักงาน

6.3.1.  ความเป็นมา

นานนับทศวรรษที่โปรแกรมไมโครซอฟออฟฟิสถูกใช้งานอย่างกว้างขวางในงาน ออฟฟิส, โปรแกรม Word, Excel, และ Powerpoint ได้กลายเป็นมาตรฐานโปรแกรมที่ใช้ในออฟฟิสที่คุณต้องทำงานกับมันไปอีกนาน.

สถานะการณ์ที่ผูกขาดโดยไมโครซอฟท์ทำให้ผู้คนไม่ค่อยอยากที่จะย้ายมาใช้ ระบบลีนุกซ์, จึงได้มีกลุ่มนักพัฒนาชาวเยอร์มันเริ่มต้นโครงการ StarOffice, โดยตั้งเป้าทำโปรแกรมที่มีความสามารถเลียนแบบชุดโปรแกรมไมโครซอฟออฟฟิส. บริษัทนี้มีชื่อว่า StarDivision, ถูกซื้อกิจการโดยบริษัท Sun Microsystem ตอนปลายปี 1990s, ก่อนหน้าที่จะออกเวอร์ชั่น 5.2. หลังจากซื้อไปแล้วซันยังคงพัฒนาต่อไปแต่จำกัดการเข้าถึงซอร์สโค้ด. อย่างไรก็ตาม, การพัฒนาบนซอฟแวร์ต้นฉบับยังคงพัฒนาอย่างต่อเนื่องในวงการโอเพ่นซอร์ส, ซึ่งได้เปลี่ยนชื่อโครงการเป็น OpenOffice. โปรแกรม OpenOffice มีให้ใช้หลายแพลตฟอร์ม, รวมทั้งไมโครซอฟท์วินโดว์, ลีนุกซ์, MacOS และ Solaris. ตัวอย่างหน้าจออยู่ใน หัวข้อ 1.3.2.

ในเวลาเดียวกัน, มีโครงการที่ดังไม่แพ้กันเกิดขึ้น. เป็นทางเลือกของโปรแกรมประจำออฟฟิสอีกทางคือโปรแกรม KOffice, ซึ่งเป็นชุดโปรแกรมออฟฟิสที่ใช้กันอย่างแพร่หลายในหมู่ผู้ใช้ลีนุกซ์ SuSE. ความสามารถไม่แพ้โปรแกรม OpenOffice ต้นฉบับ.

ยังมีโครงการเล็กๆที่ทำโปรแกรมคล้ายๆโปรแกรมของไมโครซอฟท์, เช่นโปรแกรม Abiword และ MSWordview เพื่อใช้งานได้กับเอกสารที่สร้างด้วยไมโครซอฟท์เวิร์ด, และโปรแกรม Gnumeric สำหรับดูเอกสารที่สร้างด้วยโปรแกรมไมโครซอฟท์เอ็กเซล.

6.3.2.  โปรแกรมชุด

ลีนุกซ์รุ่นปัจจุบันมักมีโปรแกรมที่จำเป็นในการใช้งานมาด้วย. คุณสามารถดูรายละเอียดได้ใน Help menus, รายละเอียดอื่นหาดูได้ที่เวบ:

6.3.3. Remarks

6.3.3.1.  การใช้งานเอกสารในออฟฟิส

  พยายามจำกัดเอกสารในออฟฟิสให้ใช้ตรงกับงานในสำนักงาน

ตัวอย่าง: มันเป็นเรื่องน่าโมโหสำหรับผู้ใช้ลีนุกซ์ถ้ามีคนส่งเมล์ให้เขาโดยมีข้อความ: "สวัสดี, ผมมีอะไรจะบอกคุณ, ดูไฟล์ที่แนบ", และเอกสารที่แนบเป็นเอกสารของไมโครซอฟเวิร์ดที่มีข้อความว่า "สวัสดีเพื่อน, งานใหม่เป็นไงบ้างยุ่งหรือเปล่า มีเวลาว่างไปกินมื้อเที่ยงพรุ่งนี้ใหม?" และถ้าคุณใส่ลายเซ็นลงไปในไฟล์เอกสารนั้นก็ยิ่งเป็นเรื่องไม่สมควร, ทางที่ดีถ้าคุณอยากใส่ลายเซ็นหรือแนบไฟล์, ใช้ GPG, the PGP-compatible GNU Privacy Guard or SSL (Secure Socket Layer) certificates.

ที่ผู้ใช้กังวลไม่ใช่เรื่องที่ไม่สามารถอ่านเอกสารเหล่านี้, หรือเพราะว่าไฟล์ที่แนบมันใหญ่เกิน, แต่เป็นเพราะเขาต้องไปหาโปรแกรมไมโครซอฟวินโดว์ และโปรแกรมที่เกี่ยวข้องมาใช้.

6.3.3.2. คอนฟิกไฟล์ของระบบและคอนฟิกไฟล์ของผู้ใช้

 ในบทถัดไป, เราจะเริ่มปรับแต่ง environment, นี่รวมถึงการแก้ไขไฟล์ทุกตัวที่เกี่ยวข้องกับการทำงานของโปรแกรม.

 โปรดอย่าแก้ไขไฟล์เหล่านี้ด้วยโปรแกรมที่ใช้ในสำนักงาน

ค่าดีฟ้อลท์ตาม file format specification จะทำให้โปรแกรมใส่ข้อมูลเพิ่มเติมลงในไฟล์, เพื่อบอกรูปแบบของไฟล์และชนิดของตัวอักษร(font) ที่จะใช้. บรรทัดเหล่านี้จะทำให้ระบบทำงานผิดพลาดหรือค้าง เนื่องจากโปรแกรมที่อ่านไม่เข้าใจในความหมาย. ในบางกรณีคุณอาจใช้วิธี save ข้อมูลเป็น plain text, แต่ก็อาจมีปัญหาในภายหลังถ้าคุณทำบ่อยจนติดเป็นนิสัย.

6.3.3.3.  แต่คุณต้องการใช้โปรแกรมเท็กซ์อีดิเตอร์แบบกราฟฟิก

ถ้าอยากใช้จริง, ลองใช้ gedit, kedit, kwrite หรือ xedit; โปรแกรมเหล่านี้จะทำงานกับไฟล์ข้อความเท่านั้น, ซึ่งเป็นสิ่งที่เราต้องการ. ถ้าคุณวางแผนที่จะทำเรื่องที่ซับซ้อน, ควรใช้โปรแกรมเท็กซ์อีดิเตอร์ตัวจริงเช่น vim หรือ emacs เท่านั้น.

ตัวเลือกอีกตัวได้แก่โปรแกรม gvim, เป็นโปรแกรม vim  ใช้งานกับ Gnome. แต่ก็ยังใช้คู่กับคำสั่ง vi, เพียงแต่เวลามันค้าง, คุณสามารถดูสถานะในเมนูได้.

6.4. Summary

6.4. บทสรุป

ในบทนี้เราเรียนรู้การใช้อีดิเตอร์. ไม่ว่าคุณจะถนัดโปรแกรมใหน, อย่างน้อยคุณควรรู้จักอีดิเตอร์ตัวหนึ่ง.

 อีดิเตอร์ vi มีให้ใช้ในระบบยูนิกซ์ทุกตัว.

 ลีนุกซ์ที่เผยแพร่ให้ใช้ส่วนมากจะมีชุดโปรแกรมสำหรับใช้ในสำนักงานและโปรแกรมแก้ไขข้อความ(text editor)ในแบบกราฟฟิก.

6.5. Exercises

6.5. แบบฝึกหัด

 ในบทนี้มีแบบฝึกหัดเพียงข้อเดียว: คือสั่งคำสั่ง vimtutor ที่เทอร์มินอล, แล้วเริ่มฝึก.

 คุณอาจเลือกฝึกหัดใช้  emacs และกด Ctrl+H และกด T เพื่อเข้าเรียนรู้การใช้ Emacs ด้วยตัวเอง

 การฝึกหัดเป็นทางเดียวที่จะทำให้ชำนาญ!

Chapter 07. Home sweet /home

Chapter 7. Home sweet /home

ในบทนี้มีเรื่องเกี่ยวกับการปรับแต่ง environment. ตอนนี้เรารู้วิธีใช้โปรแกรมอีดิเตอร์, เราสามารถเปลี่ยนข้อมูลไฟล์ที่เกี่ยวข้องเพื่อให้เราทำงานได้สะดวกสบายขึ้น ในส่วนเฉพาะเรา. หลังจากจบบทนี้, คุณจะมีความเข้าใจในเรื่อง:

  • Organizing your environment

  • Common shell setup files

  • Shell configuration

  • Configuring the prompt

  • Configuring the graphical environment

  • Sound and video applications

  • Display and window managers

  • How the X client-server system works

  • Language and font settings

  • Installing new software

  • Updating existing packages

7.1. General good housekeeping

7.1.  วิธีทำงานทั่วไปกับโฮมไดเร็กตอรี่

7.1.1. Introduction

ดังที่ได้กล่าวไปแล้ว, เราสามารถปรับแต่งระบบได้ไม่ยาก. เราไม่สามารถเน้นที่จุดใดจุดหนึ่งเพื่อทำให้ระบบเรียบร้อย. เมื่อคุณเรียนรู้มากขึ้น, วิธีการที่จะทำให้ชีวิตคุณง่ายขึ้นมีดังนี้:

  •  สร้างไดเร็กตอรี่ bin สำหรับโปรแกรมและสคริปไฟล์ของคุณ.

  •  จัดการเก็บไฟล์ที่เป็นไฟล์ที่ไม่สามารถเอ็กซีคิ้วท์ได้ไว้ในไดเร็ก ตอรี่ต่างหาก, และสร้างไดเร็กตอรี่ตามที่คุณต้องการ. เช่นไดเร็กตอรี่สำหรับ images, document, projects, downloads files, spreadsheets, personal files, เป็นต้น.

  •  ใช้คำสั่ง chmod 700 dirname เพื่อความปลอดภัยของข้อมูล.

  •  ตั้งชื่อไฟล์ให้สื่อความหมาย, เช่นใช้ชื่อ Complain to the prime minister 050302 แทนที่จะใช้ชื่อ letter1.

7.1.2. Make space

ในบางระบบ, ระบบโควต้าจะจำกัดให้คุณลบข้อมูลในการใช้งานแต่ละครั้ง, หรืออาจจำกัดจากขนาดเนื้อที่ของฮาร์ดดิสก์ที่คุณใช้ได้. บทนี้จะพูดถึงวิธีการ, ที่จะใช้คำสั่ง rm, ในการเรียกคืนพื้นที่ว่างบนดิสก์เพื่อนำมาใช้.

 ใช้คำสั่ง quota -v  เพื่อดูเนื้อที่เหลือให้ใช้งาน.

7.1.2.1.  การล้างข้อมูลไฟล์

บางครั้งข้อมูลในไฟล์หมดความสำคัญที่จะนำมาใช้แล้ว, แต่คุณยังต้องการชื่อไฟล์ให้คงอยู่เพื่อเป็นตัวบอก(ตัวอย่าง, คุณต้องการแค่ เวลาที่แก้ไขไฟล์, เพื่อเตือนว่าไฟล์มีอยู่หรือควรจะอยู่ในอนาคต). ใน Bourne shell และ Bash shell ใช้การรีไดเร็ก เอ๊าท์พุทด้วยค่า null .

andy:~> cat wishlist > placeholder

andy:~> ls -la placeholder
-rw-rw-r-- 1 andy andy 200 Jun 12 13:34 placeholder

andy:~> > placeholder

andy:~> ls -la placeholder

-rw-rw-r-- 1 andy andy 0 Jun 12 13:35 placeholder

วิธีการลดขนาดไฟล์ให้มีขนาดเป็น 0 ไบท์จะเรียกว่า truncating.

การสร้างไฟล์เปล่าๆขึ้นใหม่, คำสั่ง touch จะให้ผลเดียวกันกับข้างบน. กับไฟล์ที่มีอยู่แล้ว, touch จะอัพเดทเฉพาะเวลาที่แก้ไขไฟล์. ดูคู่มือคำสั่ง touch ในรายละเอียด.

การสร้างไฟล์ให้มีข้อมูลไม่มาก, ใช้คำสั่ง tail. สมมุติผู้ใช้ andy มี ข้อมูลความต้องการที่ที่เก็บไว้ในไฟล์ wishlist เพิ่มขึ้นเรื่อยๆเพราะเขาจะเพิ่มข้อมูลเข้าไปโดยไม่ได้ลบออก. แต่ตอนนี้เขาต้องการที่จะเก็บข้อมูลสุดท้าย 5 เรื่อง:

andy:~> tail -5 wishlist > newlist

andy:~> cat newlist > wishlist

andy:~> rm newlist

7.1.2.2. More about log files

โปรแกรมลีนุกซ์บางตัว จะยืนยันการทำงานโดยการเขียนข้อมูลเอาท์พุทลงใน log file. ปกติจะเป็นอ็อพชั่นเพื่อเก็บ error, หรือเก็บข้อมูลไม่มาก, ตัวอย่างเช่นการตั้งค่า debugging level ของโปรแกรม. แต่หลังจากนั้น, คุณอาจไม่สนใจข้อมูลของ log file. วิธีการที่จะล้างข้อมูลเหล่านี้หรือจำกัดขนาดของมันมีดังนี้:

  • ลองลบ log file เมื่อโปรแกรมไม่ได้ทำงาน, ถ้าคุณแน่ใจว่าคุณไม่ต้องการมันแล้ว. บางโปรแกรมจะมองหา log file เมื่อมันเริ่มทำงาน, ถ้าไม่มี log file มันจะไม่บันทึกอีก.

  •  ถ้าคุณลบ log file แล้วโปรแกรมสร้างมันขึ้นมาใหม่, อ่านคู่มือของโปรแกรมนั้นเพื่อดูว่ามีอ็อพชั่นใหนที่จะหลีกเลี่ยงการสร้าง log files.

  •  ลองสร้าง log files ที่ไม่ใหญ่หรือเก็บข้อมูลเฉพาะที่เกี่ยวข้องกับคุณ, หรือเก็บเฉพาะข้อมูลที่มีความสำคัญ.

  •  ลองเปลี่ยน log file ด้วย symbolic link ไปยัง /dev/null; ถ้าคุณโชคดีโปรแกรมจะไม่เตือนคุณ. อย่าใช้วิธีนี้กับ log files ของโปรแกรมที่ทำงานตอนบูทระบบหรือโปรแกรมที่รันจาก cron (ดู บทที่ 4). โปรแกรมเหล่านี้จะเปลี่ยน symbolic link เป็นไฟล์ ซึ่งจะโตไปเรื่อยๆอีก.

7.1.2.3. Mail

ทำการลบข้อมูลในตู้จดหมายของคุณเป็นระยะ, สร้าง sub-folder และรีไดเร็กอัตโนมัติด้วยการใช้คำสั่ง procmail (ดูคู่มือคำสั่ง) หรือเก็บเฉพาะเมล์ที่คุณอยากเก็บ. ถ้าคุณมี trash folder, ล้างมันทิ้งเป็นประจำ.

วิธีการรีไดเร็กเมล์, ใช้ไฟล์ .forward ในโฮมไดเร็กตอรี่ของคุณ. ระบบเมล์ของลีนุกซ์จะหาไฟล์นี้เมื่อมันส่งเมล์ภายใน. ข้อมูลในไฟล์จะบอกวิธีว่าระบบเมล์ควรจะทำเกี่ยวกับเมล์ของคุณ. มันอาจเป็นข้อมูลบรรทัดเดียวที่เก็บชื่อเต็มของเมล์. กรณีนี้ระบบจะส่งเมล์ทั้งหมดที่ส่งถึงคุณให้แก่เมล์นี้. ตัวอย่าง, เมื่อเช่าพื้นที่เวบไซด์, คุณอาจต้องการส่งต่อเมล์ที่ส่งถึงผู้ดูแลเวบมายังเมล์ของคุณเพื่อประหยัด เนื้อที่ดิสก์. ข้อมูลไฟล์ .forward ของผู้ดูแลเว็บจะมีข้อความดังนี้;

webmaster@www ~/> cat .forward
mike@pandora.be

การส่งต่อหรือ forward เมล์ยังมีประโยชน์เพื่อป้องกันไม่ให้คุณมีเมล์หลายตัว. คุณเพียงชี้ให้เมล์อื่นส่งต่อไปเมล์กลาง.

คุณสามารถบอกผู้ดูแลระบบให้ส่งต่อเมล์ไปเมล์ภายใน, กรณีที่ผู้ใช้ยกเลิกไปแล้วแต่ E-mail ยังใช้ได้อีกระยะ.

7.1.2.4. Save space with a link

เมื่อผู้ใช้หลายคนใช้ไฟล์หรือโปรแกรมเดียวกัน, หรือเมื่อชื่อไฟล์ยาวหรือจำยาก, ใช้ symbolic link แทนที่จะแยกสำเนาไฟล์ให้แต่ละคน.

symbolic link อาจมีชื่อแตกต่างกัน, คืออาจเป็นชื่อ monfichier ในไดเร็กตอรี่หนึ่ง, และเป็นชื่อ mylink ในอีกที่. link หลายตัว(ชื่อต่างกัน)ของไฟล์เดียวอาจอยู่ในไดเร็กตอรี่เดียวกัน. คุณจะเจอได้บ่อยในไดเร็กตอรี่ /lib : เมื่อใช้คำสั่ง

ls -l /lib

คุณจะเห็นว่าไดเร็กตอรี่มี link หลายตัวชี้ไปยังไฟล์เดียวกัน. มันสร้างเพื่อให้โปรแกรมที่หาชื่อไฟล์นั้นไม่ทำงานผิดพลาดหากไฟล์ไม่มี, link จะชี้ไปยังชื่อไฟล์ที่ถูกต้องและใช้งานปัจจุบันตามที่มันต้องการ.

7.1.2.5. Limit file sizes

 เชลล์มีคำสั่ง ulimit เพื่อจำกัดขนาดไฟล์, ซึ่งสามารถใช้เพื่อแสดงข้อมูลขีดจำกัดของทรัพยากรระบบ:

cindy:~> ulimit -a
core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max locked memory (kbytes) unlimited
max memory size (kbytes) unlimited
open files 1024
pipe size (512 bytes) 8
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 512
virtual memory (kbytes) unlimited

Cindy ไม่ใช่นักพัฒนาโปรแกรมและไม่สนใจเกี่ยวกับ core dumps, ซึ่งมีข้อมูลการดีบักกิ้งโปรแกรม. ถ้าคุณต้องการ core dumps, คุณสามารถตั้งค่าขนาดของมันด้วยคำสั่ง ulimit. อ่านคู่มือของ bash ในรายละเอียด.

Note  Core file คืออะไร?
 

คอร์ไฟล์หรือ core dump คือข้อมูลที่ถูกสร้างเมื่อมีเหตุผิดปกติของโปรแกรมระหว่างที่มันทำงาน. ข้อมูลในไฟล์เป็นข้อมูลก้อปปี้ของหน่วยความจำระบบ, ตอนที่เกิดข้อผิดพลาด.

7.1.2.6.  การบีบอัดไฟล์

ไฟล์ที่บีบอัด(compressed files)มีประโยชน์เพราะมันใช้เนื้อที่บนฮาร์ดดิสก์น้อย. ประโยชน์อีกอย่างคือมันไม่เปลืองแบนด์วิธในการส่งไฟล์ที่บีบอัดข้อมูลผ่าน เครือข่าย. ไฟล์จำนวนมาก, เช่น ไฟล์ของคู่มือคำสั่ง(man page), จะเก็บในรูปแบบที่บีบอัดในระบบของคุณ. แน่นอนเวลาใช้งานต้องทำการคลายการบีบอัดเพื่อหาข้อมูลที่ต้องการแล้วต้องบีบ อัดข้อมูลอีกครั้งหนึ่งซึ่งต้องเสียเวลาบ้าง. คุณคงไม่ต้องการแกะไฟล์ข้อมูล man page, อ่านเกี่ยวกับอ็อพชั่นและบีบข้อมูลของ man page อีก. ผู้ใช้ส่วนมากมักจะลืมที่จะล้างข้อมูลหลังจากที่เขาได้ข้อมูลที่ต้องการ.

ดังนั้นเราจำเป็นต้องมีเครื่องมือในการทำงานกับไฟล์ที่บีบอัดข้อมูล, โดยการคลายการบีบอัดไปไว้ในหน่วยความจำ. ไฟล์ต้นฉบับที่บีบอัดข้อมูลยังคงอยู่ในดิสก์เหมือนเดิม. ระบบส่วนใหญ่สามารถใช้คำสั่ง zgrep, zcat, bzless และคำสั่งอื่นของตระกูล z-family ในการป้องกันการ decompressed/compressed action ที่ไม่จำเป็น. ดูคู่มือคำสั่งในรายละเอียด.

 ดู บทที่ 9 สำหรับการบีบอัดไฟล์และตัวอย่างการสร้างเอกสารเพื่อเก็บ.

7.2. Your text environment

7.2. Your text environment

7.2.1. Environment variables

7.2.1.1. General

เราได้กล่าวถึงตัวแปร environment บางตัว, เช่น PATH และ HOME. ถึงตอนนี้, เราเห็นตัวอย่างที่มันใช้สำหรับจุดประสงค์บางอย่างของเชลล์. แต่ยังมียูทิลิตี้ของลีนุกซ์อีกมากที่ต้องการข้อมูลของคุณเพื่อให้ทำงานได้ ตามที่ต้องการ.

 ยังมีข้อมูลอะไรที่โปรแกรมต้องการนอกเหนือจาก path และ โฮมไดเร็กตอรี่?

โปรแกรมจำนวนมากอยากรู้ว่าคุณใช้เทอร์มินอลชนิดใหน; ข้อมูลนี้เก็บในตัวแปร TERM. ในเท็กซ์โหมด, ค่านี้จะหมายถึง linux terminal emulation, ในกราฟฟิกโหมด ตัวแปรเทอร์มินอลจะอยู่ที่ xterm. โปรแกรมหลายตัวอยากรู้ว่าโปรแกรมอีดิเตอร์ที่คุณถนัดคืออะไร, กรณีที่มันจะเรียกใช้อีดิเตอร์ในโพรเซสย่อย. เชลล์ที่คุณใช้งานจะเก็บไว้ในตัวแปร SHELL, ระบบปฏิบัติการที่ใช้จะเก็บไว้ในตัวแปร OS เป็นต้น. รายการตัวแปรทั้งหมดที่ใช้งานกับเซสชั่นของคุณสามารถเรียกดูได้ด้วยคำสั่ง printenv.

ตัวแปร environment จะถูกจัดการด้วยเชลล์. ต่างจากตัวแปรเชลล์ทั่วไป, ตัวแปร environment จะถ่ายทอดไปสู่โปรแกรมที่คุณ start, รวมทั้งเชลล์ลูก. โพรเซสใหม่จะสำเนาค่าตัวแปรเหล่านี้, ซึ่งทำให้มันสามารถอ่าน, แก้ไขและส่งผ่านไปยังโพรเซสลูกของมันอีกที.

ชื่อตัวแปรเหล่านี้ไม่มีอะไรพิเศษ, นอกจากจะนิยมใช้ตัวพิมพ์ใหญ่. คุณอาจใช้ชื่ออะไรก็ได้ที่คุณชอบ. อย่างไรก็ตามระวังอย่างให้ชื่อซ้ำกับตัวแปรที่สำคัญที่ใช้ในลีนุกซ์ทุกตัว เช่น PATH และ HOME เป็นต้น.(ดูในตาราง 7.1)

7.2.1.2. Exporting variables

 ข้อมูลตัวแปรแต่ละตัวสามารถแสดงผลได้ด้วยคำสั่ง echo,ดังตัวอย่าง:

debby:~> echo $PATH
/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin:/usr/local/bin

debby:~> echo $MANPATH
/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man

ถ้าคุณต้องการเปลี่ยนข้อมูลของตัวแปรเพื่อให้มีผลต่อโปรแกรมอื่น, คุณต้องทำการส่งออก(export)ค่าใหม่นี้จาก environment ของคุณไปยัง environment ที่รันโปรแกรมเหล่านั้น. ตัวอย่างของการส่งออกตัวแปร PATH. คุณอาจใช้วิธีตามตัวอย่างด้านล่าง, เพื่อให้สามารถใช้โปรแกรม flight simulator ซึ่งอยู่ใน /opt/FlightGear/bin:

debby:~> PATH=$PATH:/opt/FlightGear/bin

 คำสั่งนี้จะบอกให้เชลล์ค้นหาโปรแกรมเพิ่มเติมนอกจาก PATH ปัจจุบันให้รวมไดเร็กตอรี่ /opt/FlightGear/bin ด้วย.

 อย่างไรก็ตามค่าตัวแปรใหม่ของ PATH จะไม่เป็นที่รู้จักใน environment, ทำให้ได้ผลดังตัวอย่าง:

debby:~> runfgfs
bash: runfgfs: command not found

 เราจึงต้องทำการ export ตัวแปรเสียก่อนด้วยคำสั่ง export:

debby:~> export PATH

debby:~> runfgfs
--flight simulator starts--

 ใน Bash shell, เราสามารถลดขั้นตอนโดยสั่งครั้งเดียวดังนี้:

export VARIABLE=value

วิธีการเดียวกันจะใช้สำหรับตัวแปร MANPATH, ซึ่งจะบอกให้คำสั่ง man ค้นหาไฟล์ compressed man page. ถ้าโปรแกรมใหม่ถูกเพิ่มเข้าไปในระบบในไดเร็กตอรี่ที่ไม่ธรรมดา, คู่มือของโปรแกรมบางทีก็อยู่ในไดเร็กตอรี่ที่ไม่ธรรมดานั้นด้วย. ถ้าคุณต้องการอ่าน man page ของโปรแกรมใหม่, ให้ขยายค่าตัวแปร MANPAGE:

debby:~> export MANPATH=$MANPATH:/opt/FlightGear/man

debby:~> echo $MANPATH
/usr/man:/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/FlightGear/man

 คุณสามารถลดการพิมพ์คำสั่งเหล่านี้สำหรับวินโดว์ที่เปิดใหม่โดยการแก้ไขไฟล์ตั้งค่าเชลล์, ดู หัวข้อ 7.2.2.

7.2.1.3.  ตัวแปรสงวน

 ตารางแสดงตัวแปรสงวนที่มีการใช้งานทั่วไป:

Table 7-1. Common environment variables

Variable name Stored information
DISPLAY used by the X Window system to identify the display server
DOMAIN domain name
EDITOR stores your favorite line editor
HISTSIZE size of the shell history file in number of lines
HOME path to your home directory
HOSTNAME local host name
INPUTRC location of definition file for input devices such as keyboard
LANG preferred language
LD_LIBRARY_PATH paths to search for libraries
LOGNAME login name
MAIL location of your incoming mail folder
MANPATH paths to search for man pages
OS string describing the operating system
OSTYPE more information about version etc.
PAGER used by programs like man which need to know what to do in case output is more than one terminal window.
PATH search paths for commands
PS1 primary prompt
PS2 secondary prompt
PWD present working directory
SHELL current shell
TERM terminal type
UID user ID
USER(NAME) user name
VISUAL your favorite full-screen editor
XENVIRONMENT location of your personal settings for X behavior
XFILESEARCHPATH paths to search for graphical libraries

มีตัวแปรจำนวนมากนอกจากจะมีใช้แล้วยังถูกตั้งค่าล่วงหน้า, โดยใช้ configuration files. เราจะพูดถึงเรื่องนี้ในหัวข้อถัดไป.

7.2.2. Shell setup files

เมื่อใช้คำสั่ง ls -al ในโฮมไดเร็กตอรี่เพื่อดูรายละเอียดของทุกไฟล์, รวมทั้งไฟล์ที่ขึ้นต้นด้วยจุด,  คุณจะเห็นไฟล์หนึ่งไฟล์หรือมากกว่าที่ขึ้นต้นด้วย . และลงท้ายด้วย rc. ในกรณีของ bash คือ .bashrc. ไฟล์นี้เป็นไฟล์คู่ฉบับของไฟล์สำหรับตั้งค่าคอนฟิกระบบโดยรวมที่ชื่อ /etc/bashrc.

เมื่อล็อกอินเข้าสู่ interactive login shell, login จะทำการพิสูจน์ตัวจริงของผู้ใช้, ตั้งค่า environment และ start เชลล์ของคุณ. ในกรณีของ bash, ขั้นต่อไปจะอ่าน general profile จาก /etc, ถ้าไฟล์นั้นมีอยู่. หลังจากนั้น bash จะหาไฟล์ ~/.bash_profile, ~/.bash_login และ ~/.profile, ตามลำดับ, และทำการอ่านและเอ็กซีคิ้วท์คำสั่งจากไฟล์แรกที่มีและอ่านได้. แต่ถ้าหาไฟล์ไม่พบ, ไฟล์ /etc/bashrc จะถูกใช้แทน.

 เมื่อจบการทำงานบนเชลล์ bash จะอ่านและเอ็กซีคิ้วท์คำสั่งจากไฟล์ ~/.bash_logout, ถ้ามีไฟล์นี้อยู่.

 วิธีการนี้อธิบายละเอียดในคู่มือ login และ bash man page.

7.2.3. A typical set of setup files

7.2.3.1. /etc/profile example

 มาดูตัวอย่างของไฟล์คอนฟิกบางไฟล์. แรกสุดไฟล์ /etc/profile จะถูกอ่าน, ซึ่งตัวแปรสำคัญๆเช่น PATH, USER และ HOSTNAME จะถูกเซ็ท:

debby:~> cat /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc


# Path manipulation
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/sbin" ; then
PATH=/sbin:$PATH
fi

if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/sbin" ; then
PATH=/usr/sbin:$PATH
fi

if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/local/sbin"
then
PATH=/usr/local/sbin:$PATH
fi

if ! echo $PATH | /bin/grep -q "/usr/X11R6/bin" ; then
PATH="$PATH:/usr/X11R6/bin"
fi

บรรทัดเหล่านี้จะตรวจสอบ path เพื่อเซ็ท: ถ้า root เป็นคนเปิดเชลล์(user ID 0), มันจะเช็คว่า /sbin, /usr/sbin และ /usr/local/sbin อยู่ใน path หรือไม่. ถ้าไม่, มันจะเพิ่มเข้าไป. ผู้ใช้ทุกคนจะตรวจค่าพาธ /usr/X11R6/bin ว่ามีหรือไม่.

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

 ข้อมูลขยะ(trash)จะถูกส่งไป /dev/null ถ้าผู้ใช้ไม่ได้เปลี่ยนค่ามัน.

USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

 ที่นี่ ตัวแปรทั่วไปจะถูกตั้งค่าที่เหมาะสม.

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi

 ถ้าตัวแปร INPUTRC ไม่ได้ถูกเซ็ท, และไม่มีไฟล์ .inputrc ในไดเร็กตอรี่โฮมของผู้ใช้, ระบบจะโหลดไฟล์ default input control. โดยเซ็ทตัวแปร INPUTRC ให้มีค่าเป็น /etc/inputrc.

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

 ตัวแปรทั้งหมดจะถูก export, เพื่อให้โปรแกรมอื่นสามารถใช้ข้อมูล environment ของคุณ.

7.2.3.2. The profile.d directory

for i in /etc/profile.d/*.sh ; do
if [ -r $i ]; then
. $i
fi
done
unset i

ไฟล์สคริปที่อ่านได้จากไดเร็กตอรี่ /etc/profile.d จะถูกอ่านและเอ็กซีคิ้วท์. งานที่ทำก็มี enable color-ls, แทนคำ vi ให้เป็น vim, ตั้งค่าภาษา เป็นต้น. ตัวแปรชั่วคราว i จะถูก unset เพื่อป้องกันไม่ให้มีผลรบกวนการทำงานของเชลล์ในภายหลัง.

7.2.3.3. .bash_profile example

 bash จะค้นหาไฟล์ ./bash_profile ในไดเร็กตอรี่โฮมของผู้ใช้:

debby:~> cat .bash_profile 
#################################################################
# #
# .bash_profile file #
# #
# Executed from the bash shell when you log in. #
# #
#################################################################

source ~/.bashrc
source ~/.bash_login

คำสั่งตรงๆของสคริปสั่งให้เชลล์อ่านไฟล์ ~/.bashrc และไฟล์ ~/.bash_login. คุณอาจจะพบคำสั่ง source บ่อยๆเมื่อทำงานกับ shell environment: มันใช้สำหรับการปรับเปลี่ยนคอนฟิกให้มีผลกับ environment ปัจจุบัน.

7.2.3.4. .bash_login example

ในไฟล์ ~/.bash_login จะมีการตั้งค่า umask ซึ่งเป็นค่า default file protection, ดู หัวข้อ 3.4.2.2. ข้อมูลในไฟล์ ~/.bashrc ใช้ตั้งค่าเฉพาะและฟังชั่นรวมทั้งตัวแปร environment ของผู้ใช้. เริ่มต้นมันจะอ่านไฟล์ /etc/bashrc, ซึ่งมีข้อมูลของ default prompt(PS1) และ default umask value.   หลังจากนั้น, คุณสามารถเพิ่มเติมข้อมูลการตั้งค่าของคุณเอง. ถ้าไฟล์ ~/.bashrc ไม่มี, ไฟล์ /etc/bashrc จะถูกอ่านแทน.

7.2.3.5. /etc/bashrc example

 ข้อมูลในไฟล์ /etc/bashrc ของคุณอาจมีข้อมูลคล้ายตัวอย่างข้างล่าง:

debby:~> cat /etc/bashrc
# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# by default, we want this to get set.
# Even for non-interactive, non-login shells.
if [ `id -gn` = `id -un` -a `id -u` -gt 99 ]; then
umask 002
else
umask 022
fi

 หลังจากเซ็ท umask แล้วจะทำการเซ็ท prompt ขึ้นอยู่กับชนิดของเชลล์

# are we an interactive shell?
if [ "$PS1" ]; then
if [ -x /usr/bin/tput ]; then
if [ "x`tput kbs`" != "x" ]; then
# We can't do this with "dumb" terminal
stty erase `tput kbs`
elif [ -x /usr/bin/wc ]; then
if [ "`tput kbs|wc -c `" -gt 0 ]; then
# We can't do this with "dumb" terminal
stty erase `tput kbs`
fi
fi
fi
case $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
else
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:\
${PWD/$HOME/~}\007"'
fi
;;
*)
[ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=\
/etc/sysconfig/bash-prompt-default
;;
esac
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

if [ "x$SHLVL" != "x1" ]; then # We're not a login shell
for i in /etc/profile.d/*.sh; do
if [ -x $i ]; then
. $i
fi
done
fi
fi

7.2.3.6. .bash_logout example

หลังการล็อกเอ้าท์, จะมีการเอ็กซีคิ้วท์คำสั่งในไฟล์ ~/.bash_logout, ซึ่งใช้เคลียร์หน้าจอเทอร์มินอล, ทำให้หน้าจอสะอาด:

debby:~> cat .bash_logout
# ~/.bash_logout

clear

 เราจะมาดูรายละเอียดการทำงานสคริปเหล่านี้ในหัวข้อถัดไป. ดูคู่มือ info bash ให้ดี.

7.2.4. The Bash prompt

7.2.4.1. Introduction

Bash prompt สามารถทำอะไรได้มากกว่าที่จะแสดงชื่อของคุณ, ชื่อของเครื่องและไดเร็กตอรี่ปัจจุบัน. เราสามารถเพิ่มข้อมูลเช่นวันและเวลาปัจจุบันลงไป, และจำนวนผู้ใช้ที่เชื่อมต่อระบบ.

 ก่อนที่เราจะทดลองเล่น, เราควรจะเก็บค่า prompt ปัจจุบันไว้ในตัวแปรอื่นก่อน:

[jerry@nowhere jerry]$ MYPROMPT=$PS1

[jerry@nowhere jerry]$ echo $MYPROMPT
[\u@\h \W]\$

[jerry@nowhere jerry]$

ตอนนี้เราจะทดลองเปลี่ยนแปลง prompt, เช่นด้วยการใช้คำสั่ง PS1="->", ถ้าเราอยากกลับมาใช้ prompt เดิมเราสามารถใช้คำสั่ง PS1=$MYPROMPT. หรือถ้าเราล็อกอินใหม่เราจะได้ prompt เดิมเช่นกัน, ตราบใดที่คุณทดลองเปลี่ยนจาก command line โดยไม่ได้ไปตั้งค่าในไฟล์คอนฟิก.

7.2.4.2. Some examples

 เพื่อให้เข้าใจการทำงานของ prompt, เราแนะนำให้อ่านคู่มือ info Bash หรือ man pages.

  • export PS1="[\t \j] "

     แสดงเวลาและจำนวนของ running jobs

  • export PS1="[\d][\u@\h \w] : "

     แสดงวันที่, ชื่อผู้ใช้, ชื่อเครื่องโฮสท์และไดเร็กตอรี่ปัจจุบัน. หมายเหตุ \W แสดงเฉพาะ Base name  ของไดเร็กตอรี่ปัจจุบัน.

  • export PS1="{\!} "

     แสดงหมายเลข history ของแต่ละคำสั่ง

  • export PS1="\[\033[1;35m\]\u@\h\[\033[0m\] "

     แสดง user@host เป็นสีชมพู

  • export PS1="\[\033[1;35m\]\u\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] "

     แสดงชื่อผู้ใช้สีชมพูและไดเร็กตอรี่ปัจจุบันเป็นสีน้ำเงิน.

  • export PS1="\[\033[1;44m\]$USER is in \w\[\033[0m\] "

      แสดงเครื่องหมาย prompt แยกให้แตกต่างระหว่าง prompt กับตัวอักษรที่ผู้ใช้พิมพ์อย่างชัดเจน.

  • export PS1="\[\033[4;34m\]\u@\h \w \[\033[0m\]"

     ขีดเส้นใต้ prompt.

  • export PS1="\[\033[7;34m\]\u@\h \w \[\033[0m\] "

     ตัวอักษรสีขาวบน background สีน้ำเงิน.

  • export PS1="\[\033[3;35m\]\u@\h \w \[\033[0m\]\a"

     แสดง prompt สีชมพูอ่อนทำให้แยกข้อมูลและ prompt ได้.

  • export PS1=...

ตัวแปรสามารถนำมา export ทำให้คำสั่งถัดไปจะรู้ค่าของ environment. เลือก prompt อันที่ดีที่สุดใส่ไว้ใน ไฟล์ ~/.bashrc. เพื่อใช้งานทุกครั้งที่ล็อกอิน.

ถ้าคุณต้องการ, prompt สามารถเอ็กซีคิ้วท์เชลล์สคริป และแสดงผลตามสถานะแตกต่างกันได้. หรือให้มันส่งเสียงทุกครั้งเมื่อคุณป้อนคำสั่ง, ข้อมูลเพิ่มเติมดูได้ใน Bash-Prompt HOWTO.

7.2.5. Shell scripts

7.2.5.1.  สคริปคืออะไร

ตามที่เราได้เห็นตัวอย่างในไฟล์คอนฟิก, เชลล์สคริปคือไฟล์ที่ประกอบด้วยคำสั่งเชลล์. เมื่อเรียกไฟล์ใช้โดยไม่มีอ็อพชั่น -c หรือ -s, Bash จะอ่านและเอ็กซีคิ้วท์คำสั่งจากไฟล์, แล้วจึง exit. การทำงานแบบนี้ระบบจะสร้างเชลล์แบบ non-interactive. เมื่อ Bash รันเชลล์สคริป, มันจะเซ็ทค่า special parameter 0 ให้เป็นชื่อของไฟล์, แทนที่จะเป็นชื่อของเชลล์, และ positional parameters(ทุกอย่างที่ตามหลังชื่อของเชลล์)จะถูกเซ็ทให้เป็น arguments, ถ้ามี แต่ถ้าไม่มี, ค่า positional parameter จะถูก unset.

ไฟล์เชลล์สคริปอาจทำให้เอ็กซีคิ้วท์ได้โดยใช้คำสั่ง chmod เพื่อเปิด execution bit. เมื่อ Bash หาไฟล์คำสั่งในไดเร็กตอรี่ที่ระบุด้วย PATH เจอ, มันจะสร้างเชลล์ลูกและเอ็กซีคิ้วท์ไฟล์นั้น. เรียกได้ว่า, การเอ็กซีคิ้วท์

filename ARGUMENTS

 มีค่าเท่ากับทำคำสั่ง

bash filename ARGUMENTS

ถ้า "filename" คือเชลล์สคริปที่เอ็กซีคิ้วท์ได้. เชลล์ลูกจะทำการ reinitializes ตัวเอง, มีผลเหมือนเชลล์ใหม่ถูกสร้างเพื่อให้ทำงานกับสคริป, ยกเว้นตำแหน่งของคำสั่งที่ถูกจำโดยเชลล์แม่(ดูคำสั่ง hash ในคู่มือ info page)จะเก็บโดยเชลล์ลูก.

ระบบยูนิกซ์ส่วนมากจะใช้วิธีนี้เป็นส่วนของกลไกในการทำคำสั่งของระบบ ปฎิบัติการ. ถ้าบรรทัดแรกของไฟล์ขึ้นต้นด้วยตัวอักษรสองตัว "#!", ส่วนที่เหลือของบรรทัดจะหมายถึงโปรแกรมที่ใช้ในการ interpreter. ดังนั้น, คุณสามารถระบุ bash, awk, perl หรือตัวอินเตอร์พริทเตอร์หรือเชลล์อื่น และเขียนที่เหลือของสคริปด้วยภาษานั้น.

ค่าอาร์กิวเม้นท์ที่ส่งให้ตัว interpreter ประกอบด้วย ตัวเลือกเดี่ยวตามหลังชื่อ interpreter บนบรรทัดแรกของสคริปไฟล์, ตามด้วยชื่อของสคริปไฟล์, ตามด้วยอาร์กิวเม้นท์ทั้งหมด. Bash จะเป็นตัวทำงานนี้โดยระบบปฏิบัติการไม่ต้องมาทำเอง.

สคริปส่วนมากจะขึ้นต้นด้วย

#! /bin/bash

(สมมุติว่า Bash ได้ถูกติดตั้งไว้ที่ /bin), เพื่อให้แน่ใจว่าใช้ Bash ในการ interpret สคริป, แม้ว่ามันจะถูกเอ็กซีคิ้วท์ภายใต้เชลล์อื่น.

7.2.5.2. Some simple examples

 สคริปง่ายๆประกอบด้วยคำสั่งเพียงคำสั่งเดียว, มันจะส่งข้อความทักทายผู้ใช้ที่เรียกมันขึ้นมา.

[jerry@nowhere ~] cat hello.sh
#!/bin/bash
echo "Hello $USER"

 สคริปนี้ประกอบด้วยคำสั่งหนึ่งคำสั่งคือ echo ซึ่งจะใช้ ค่าของ ($) ตัวแปร environment USER ในการพิมพ์สตริงเพื่อแสดงต่อผู้ใช้ที่ป้อนคำสั่ง.

 ตัวอย่างต่อมา, ใช้แสดงผู้ใช้ที่เชื่อมต่อกับระบบ:

#!/bin/bash
who | cut -d " " -f 1 | sort -u

ตัวอย่างต่อมามีหลายบรรทัด, ที่ผู้เขียนใช้สร้างไฟล์สำเนาของทุกไฟล์ในไดเร็กตอรี่. แรกๆสคริปจะสร้างรายการของไฟล์ในไดเร็กตอรี่ปัจจุบันและเก็บไว้ในตัวแปร LIST. ต่อมามันจะตั้งชื่อของไฟล์ที่จะทำสำเนาแต่ละไฟล์, และทำการสำเนาข้อมูลไฟล์. ของแต่ละไฟล์, และแสดงผล"

tille:~> cat bin/makebackupfiles.sh
#!/bin/bash
# make copies of all files in a directory
LIST=`ls`
for i in $LIST; do
ORIG=$i
DEST=$i.old
cp $ORIG $DEST
echo "copied $i"
done

ถ้าคุณใช้คำสั่ง mv * *.old, มันจะไม่ทำงาน. คำสั่ง echo มีประโยชน์ในการแสดงข้อมูลตัวแปร. ปกติใช้แก้ปัญหาสคริปไม่ทำงาน: โดยแทรกลงไปหลังคำสั่งสคริปที่ต้องการ.

ไดเร็กตอรี่ /etc/rc.d/init.d มีสคริปตัวอย่าง. ดูสคริปด้านล่างนี้:

#!/bin/sh
# description: ICanSeeYou allows you to see networked people

# process name: ICanSeeYou
# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid
# config: /etc/ICanSeeYou.cfg

# Source function library.
. /etc/rc.d/init.d/functions

# See how (with which arguments) we were called.
case "$1" in
start)
echo -n "Starting ICanSeeYou: "
daemon ICanSeeYou
echo
touch /var/lock/subsys/ICanSeeYou
;;
stop)
echo -n "Shutting down ICanSeeYou: "
killproc ICanSeeYou
echo
rm -f /var/lock/subsys/ICanSeeYou
rm -f /var/run/ICanSeeYou/ICanSeeYou.pid
;;
status)
status ICanSeeYou
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit 0

แรกสุด, คำสั่งจุด(.) คือชุดของเชลล์ฟังชั่น, ที่ใช้ในเชลล์สคริปส่วนมากที่อยู่ที่ไดเร็กตอรี่ /etc/rc.d/init.d จะถูกโหลด. หลังจากนั้น คำสั่ง case จะทำงาน, ซึ่งมี 4 วิธีที่สคริปสามารถเอ็กซีคิ้วท์. ตัวอย่างเช่น  ICanSeeYou start. ตัวแปรที่มีผลต่อการเลือกทำคำสั่ง case คืออาร์กิวเม้นท์แรกของสคริป, ซึ่งก็คือ $1.

ถ้ามีการใส่อาร์กิวเม้นที่ไม่ใช่ตัวเลือกใน case, ตัวเลือกดีฟ้อลท์, ซึ่งแทนด้วยเครื่องหมายดอกจันทน์, จะถูกเลือก, ซึ่งจะแสดงข้อความผิดพลาดให้ผู้ใช้. รายการตัวเลือกของคำสั่ง case จะปิดท้ายด้วยคำสั่ง esac. ในการทำงาน start case โปรแกรมจะทำการสตาร์ทเป็นเดมอน, และ process ID และ lock จะถูกใส่ค่า. ส่วนกรณีของ stop case, โพรเซสของเซิฟเวอร์จะถูกตรวจหาแล้วสั่งให้หยุดทำงาน, และลบข้อมูล lock และ PID ออก. สำหรับอ็อพชั่น, เช่น เดมอนอ็อพชั่น, และฟังชั่นอื่นเช่น killproc, จะถูกเก็บไว้ในไฟล์ /etc/rc.d/init.d/functions. ไฟล์ที่ใช้ในตัวอย่างอาจแตกต่างกับระบบที่คุณใช้ ดูคู่มือระบบในรายละเอียด.

 เมือทำงานเสร็จ, สคริปจะคืนค่า exit code เป็นศูนย์ไปหาเชลล์แม่.

สคริปนี้เป็นตัวอย่างที่ดีในการใช้ฟังชั่น, ซึ่งเขียนสคริปให้อ่านง่ายและทำงานได้เร็ว. หมายเหตุ สคริปใช้ sh แทนที่จะเป็น bash, เพื่อให้มันใช้ได้กับระบบที่หลากหลาย. ในระบบลีนุกซ์, การเรียก bash ผ่าน sh มีผลให้เชลล์ทำงานในโหมด POSIX-compliant.

คู่มือคำสั่ง bash มีข้อมูลอีกมากเกี่ยวกับการใช้คำสั่งผสม, for- และ while-  และ regular expressions, พร้อมตัวอย่างประกอบ. คอร์สอบรมการใช้ Bash สำหรับผู้ดูแลระบบและผู้ใช้ระดับสูง, พร้อมแบบฝึกหัด, จากผู้เขียนหนังสือนี้, ดูได้ที่ http://title.garrels.be/training/bash/. ส่วนรายละเอียดของ Bash feature and applications อยู่ในหนังสือ Advance Bash Scripting.

7.3. The graphical environment

7.3. The graphical environment

7.3.1. Introduction

ผู้ใชัทั่วไปอาจไม่สนใจเกี่ยวกับการตั้งค่าล็อกอินของตัวเองมากนัก, แต่ลีนุกซ์มีลูกเล่นบนวินโดว์ให้เลือกมากมายบนโปรแกรม X, ระบบกราฟฟิก environment. การใช้และการคอนฟิกของ window managers และ เดสก์ท้อปจะเหมือนกับไมโครซอฟท์วินโดว์, แอปเปิล หรือ UNIX CDE environment, แม้ว่าผู้ใช้ลีนุกซ์หลายรายอาจชอบหน้าจอสวยๆสีสันสดใสของหน้าจอ. เราจะไม่ลงลึกในการตั้งค่าเฉพาะของผู้ใช้ที่นี่. คุณสามารถหาอ่านได้ในเอกสารตัวช่วยที่มากับระบบ.

 แต่เราจะเรียนรู้การทำงานภายในของระบบ.

7.3.2. The X Window System

ระบบ X window คือระบบวินโดว์ที่ทำงานผ่านเนทเวิร์คซึ่งทำงานบนระบบคอมพิวเตอร์และกราฟฟิก ที่หลากหลาย. ระบบ X window server จะรันบนคอมพิวเตอร์พร้อม bitmap display. ตัว X server จะรับ user input เข้ามาโพรเซสและตอบรับการร้องขอจากโปรแกรมเครื่องไคลเอนต์ผ่าน interprocess communication channel ต่างๆ. แม้ว่าการใช้ส่วนใหญ่จะเป็นการใช้ของ client program ที่รันบนเครื่องเซิฟเวอร์เอง, โปรแกรมไคลเอนต์สามารถรันได้จากเครื่องอื่น(รวมถึงเครื่องที่มีโครงสร้างไม่ เหมือนกันและระบบปฏิบัติการต่างกัน) ได้ด้วย. เราจะเรียนวิธีการทำงานของมันใน บทที่ 10 ในเรื่องเครือข่ายและการทำงานข้ามเครื่อง.

โปรแกรม X รองรับการซ้อนกันของวินโดว์ย่อยและทำงานกับโหมดตัวหนังสือและกราฟฟิก, บนทั้งจอโมโนโครมและจอสี. จำนวนของโปรแกรม X client ที่สามารถใช้ X server เป็นจำนวนที่มากพอสมควร. โปรแกรมที่มีมาใน core X Consortium distribution รวมถึง:

  • xterm: a terminal emulator

  • twm: a minimalistic window manager

  • xdm: a display manager

  • xconsole: a console redirect program

  • bitmap: a bitmap editor

  • xauth, xhost and iceauth: access control programs

  • xset, xmodmap and many others: user preference setting programs

  • xclock: a clock

  • xlsfonts and others: a font displayer, utilities for listing information about fonts, windows and displays

  • xfs: a font server

  • ...

ข้อมูลเพิ่มเติมเกี่ยวกับฟังชั่นสามารถหาได้ใน Xlib - C language X interface คู่มือที่มาในโปรแกรม X, the X Window System Protocol specification, และคู่มือต่างๆของ X toolskits. ไดเร็กตอรี่ /usr/share/doc มีหนังสืออ้างอิงของเอกสารเหล่านี้และอื่นๆอีกมาก.

โปรแกรมยูทิลิตี้อื่นเช่น, window managers, games, toolkits และ gadgets จะมีมาในชุดโปรแกรมเป็นโปรแกรมเสริมใน X Consortium distribution, หรือ อาจหามาใช้ผ่าน anonymous FTP บนเครือข่ายอินเตอร์เนท. คุณสามารถศึกษาเพิ่มเติมได้ที่ http://www.x.org และ http://www.xfree.org.

ยิ่งไปกว่านั้น, โปรแกรมที่ใช้งานกราฟฟิกทั้งหมด, เช่นโปรแกรมบราวน์เซอร์, โปรแกรม E-mail, โปรแกรมดูภาพอิมเมจ, โปรแกรมเล่นเพลง และอื่นๆ, ล้วนเป็น Client ของ X server ของคุณ. หมายเหตุในการทำงานปกติ, ของการทำงานในโหมดกราฟฟิก, โปรแกรม X client และ X server บนระบบลีนุกซ์จะรันบนเครื่องเดียวกัน.

7.3.2.1. Display names

 ในมุมมองของผู้ใช้, X server ทุกตัวมี display name ในรูปแบบ:

hostname:displaynumber.screennumber

ข้อมูลนี้ใช้โดยโปรแกรมแอพพลิเคชั่นเพื่อดูว่ามันจะเชื่อมต่อกับ X server อย่างไรและจอใหนจะใช้เป็นจอ default(บนจอแสดงผลที่มีหลายหน้าจอ):

  • hostnameชื่อโฮสท์: คือชื่อของเครื่องไคลเอนต์ซึ่งจอดิสเพลย์เชื่อมต่ออยู่. ถ้าไม่ได้ระบุ, จะหมายถึงเครื่องเดียวกับเครื่องเซิฟเวอร์.

  • displaynumberหมายเลขหน้าจอแสดงผล:คำว่า "display" ปกติจะหมายถึงจอมอนิเตอร์ที่ใช้ร่วมกับคีย์บอร์ดและเม้าส์. คอมพิวเตอร์ตั้งโต๊ะส่วนมากจะมีคียบอร์ดเดียว, ดังนั้นจะมีจอดิสเพลย์หนึ่งจอ, แต่สำหรับระบบใหญ่ที่เป็นระบบผู้ใช้หลายคนในเวลาเดียวกัน, จะมีหน้าจอแสดงผลหลายจอทำให้สามารถทำงานกราฟฟิกพร้อมกันหลายคน. เพื่อไม่ให้สับสน, display แต่ละจอบนเครื่องจะถูกใส่ หมายเลขแสดงผล หรือ display number (เริ่มต้นด้วยหมายเลข 0) เมื่อโปรแกรม X server สำหรับจอแสดงผลนั้นเริ่มทำงาน. หมายเลขแสดงผลนี้จะต้องมีอยู่ใน display name.

  • screen number:  หมายเลขหน้าจอสกรีน: หน้าจอบางตัวใช้คีย์บอร์ดและเม้าส์ร่วมกันสองหรือสามจอขึ้นไป. เนื่องจากจอมอนิเตอร์แต่ละจอมีหน้าต่างของตัวเอง, แต่ละสกรีนจะถูกใส่ หมายเลขหน้าจอสกรีน(screen number) ถ้าไม่ใส่หมายเลขหน้าจอสกรีน, จะหมายถึงหน้าจอสกรีนหมายเลข 0.

ในระบบ POSIX, ชื่อดีฟ้อลท์ของ display name จะเก็บในตัวแปร environment ที่ชื่อ DISPLAY. ตัวแปรนี้จะถูกเซ็ทโดยอัตโนมัติโดยโปรแกรมจำลองเทอร์มินอล xterm . อย่างไรก็ตาม, เมื่อคุณล็อกเข้าใช้งานเครื่องอื่นบนเครือข่าย, คุณอาจต้องเซ็ทค่าตัวแปร DISPLAY ด้วยมือเพื่อใช้ชี้ไปหาหน้า display ของคุณ, ดู หัวข้อ 10.4.3.2.

 ข้อมูลเพิ่มเติมสามารถหาได้ใน X man pages.

7.3.2.2. Window and desktop managers

รูปแบบแผนผังของวินโดว์บนจอจะควบคุมโดยโปรแกรมพิเศษชื่อ window managers. โปรแกรมจัดการวินโดว์โดยมากจะกำหนดขนาดหน้าจอให้ใช้ตามขนาดที่มี, แต่บางตัวก็ให้ผู้ใช้กำหนดได้เอง.

เนื่องจากโปรแกรมจัดการวินโดว์เป็นโปรแกรมไคลเอนต์ทั่วไป, การปรับแต่งส่วนติดต่อกับผู้ใช้สามารถทำได้หลากหลาย. ชุดโปรแกรม X Consortium distribution มีโปรแกรมที่มากับโปรแกรมจัดการวินโดว์ชื่อว่า twm, แต่ผู้ใช้ส่วนมากชอบรูปแบบสีสันแปลกตาเมื่อระบบมีทรัพยากรรองรับเพียงพอ. ตัวอย่างโปรแกรมที่ปรับแต่งหน้าจอตามอารมย์และความชอบส่วนตัวที่เป็นที่นิยม ได้แก่โปรแกรม Sawfish และโปรแกรม Enlightenment.

 โปรแกรมจัดการเดสก์ท้อปใช้โปรแกรมจัดการวินโดว์หรือโปรแกรมอื่น ทำให้การจัดเตรียมรูปแบบกราฟฟิกเดสก์ท้อปของคุณทำได้ง่าย, ด้วยเมนูบาร์, เมนูแบบ drop down, ข้อมูลช่วยเหลือ, นาฬิกา, โปรแกรมจัดการโปรแกรม, โปรแกรมจัดการไฟล์ เป็นต้น. ตัวอย่างโปรแกรมจัดการเดสท้อปที่นิยมใช้กันมากได้แก่ Gnome และ KDE, ซึ่งมีใช้ในลีนุกซ์ส่วนมากรวมทั้งในระบบยูนิกซ์.

Tip KDE applications in Gnome/Gnome applications in KDE
 

 คุณไม่จำเป็นต้องเรียกโปรแกรม KDE เพื่อการรันแอพพลิเคชั่นของ KDE. ถ้าคุณมีไลบรารี่ของ KDE ติดตั้งอยู่( kdelibs package), คุณสามารถรันแอพพลิเคชั่นเหล่านี้ได้จากเมนูของ Gnome หรือจาก Gnome terninal.

 ส่วนการรัน Gnome applications ใน KDE environment อาจมีเทคนิคเล็กน้อย, เนื่องจากมันไม่มีชุดไลบรารี่รวมใน Gnome. อย่างไรก็ตาม ชุดโปรแกรมพิเศษที่คุณอาจต้องติดตั้งเพิ่มจะมีรายละเอียดให้ตอนติดตั้งหรือ รันแอพพลิเคชั่นเหล่านั้น.

7.3.3. X server configuration

โปรแกรม X distribution ที่มากับลีนุกซ์, Xfree86, ใช้ไฟล์คอนฟิกที่ชื่อ XF86Config ในการตั้งค่าเริ่มต้น. ไฟล์นี้จะตั้งค่าการ์ดวีดีโอและค้นหาข้อมูลที่จำเป็นในไดเร็กตอรี่, ซึ่งส่วนใหญ่จะเป็นไดเร็กตอรี่ /etc/X11.

ถ้าคุณเห็นไฟล์ /etc/X11/XF86Config อยู่ในระบบของคุณ, คำอธิบายรายละเอียดการใช้งานจะอยู่ใน man page ของ XF86Config

เนื่องจากลิขสิทธิ์ที่มากับ XFree86, ระบบใหม่ๆมักจะมีชุดโปรแกรม X.Org ของ X server และ tools มาให้. ไฟล์คอนฟิกหลักจะอยู่ที่ xorg.conf, ซึ่งปกติจะอยู่ในไดเร็กตอรี่ /etc/X11. ข้อมูลในไฟล์ประกอบด้วยจำนวนหัวข้อตามลำดับ. หัวข้อประกอบด้วยข้อมูลของจอมอนิเตอร์ของคุณ, การ์ดวีดีโออะแดปเตอร์, screen configuration, ชนิดคีย์บอร์ด เป็นต้น. ในแง่ผู้ใช้, คุณไม่จำเป็นต้องสนใจข้อมูลในไฟล์นี้, เนื่องจากทุกอย่างจะใส่ให้ตอนเริ่มติดตั้งระบบ.

อย่างไรก็ดาม, ถ้าคุณต้องการจะเปลี่ยนระบบกราฟฟิกของเซิฟเวอร์, คุณสามารถรัน configuration tools หรือ แก้ไขไฟล์คอนฟิกที่ตั้งค่า infrastucture ที่ใช้กับ XFree86 server. ดูคู่มือ man page ในรายละเอียด; ลีนุกซ์สายพันธ์ที่คุณใช้จะมีเครื่องมือของมัน. เนื่องจากการติดตั้งที่ผิดพลาดจะทำให้หน้าจอกราฟฟิกแสดงผลไม่ถูกต้อง, เพื่อความปลอดภัย, คุณอาจต้องสำเนาคอนฟิกไฟล์ก่อนที่จะเปลี่ยนมัน.

7.4. Region specific settings

7.4.  การตั้งค่าตามภูมิภาค

7.4.1.  การตั้งค่าคีย์บอร์ด

การตั้งค่าตำแหน่งปุ่มกดของคีย์บอร์ดทำได้โดยการใช้คำสั่ง loadkeys สำหรับ text console. ใช้โปรแกรม X configuration tools หรือแก้ไขขัอมูล Keyboard section ใน XF86Config ในการตั้งค่า layout สำหรับโหมดกราฟฟิก. ค่า XkbdLayout เป็นค่าหนึ่งที่คุณต้องเซ็ท:

    XkbLayout       "us"

นี่เป็นค่าดีฟ้อลท์. เปลี่ยนให้ตรงกับท้องถิ่นของคุณโดยเปลี่ยนค่าในเครื่องหมายคำพูดด้วยชื่อใน รายการในไดเร็กตอรี่ย่อยของไดเร็กตอรี่ keymaps. ถ้าคุณหา keymaps ไม่เจอ, ลองแสดงตำแหน่งของระบบคุณด้วยคำสั่ง:

locate keymaps

 การตั้งค่า layout สามารถตั้งแบบผสมดังตัวอย่าง:

Xkblayout      "us,ru"

 ควรสำรองข้อมูลของไฟล์ /etc/X11/XF86Config ก่อนจะทำการแก้ไข! คุณต้องใช้สิทธิ์ของ root ในการแก้ไขนี้.

 แล้วทำการล็อกเอาท์และล็อกอินใหม่เพื่อให้ X-setting โหลดใหม่.

โปรแกรม Gnome Keyboard Applet สามารถสลับคีย์บอร์ดได้เวลาใช้งาน: โดยไม่ต้องใช้สิทธิพิเศษในการใช้โปรแกรมนี้. KDE ก็มี tools สำหรับสลับคีย์บอร์ดคล้ายกันนี้เช่นเดียวกัน.

7.4.2. Fonts

โปรแกรม setfont ใช้โหลด fonts ใน text mode. ระบบส่วนมากจะมากับไฟล์ inputrc มาตรฐานซึ่งอนุญาตให้ผสมตัวอักษร, เช่นอักษรในภาษาฝรั่งเศส "é"(meta characters). ผู้ดูและระบบควรเพิ่มบรรทัด

export INPUTRC="/etc/inputrc"

 ลงในไฟล์ /etc/bashrc.

7.4.3. Date and time zone

การตั้งเวลาปกติจะทำตอนติดตั้งระบบ. หลังจากนั้น, มันสามารถรักษาเวลาด้วยการใช้ NTP(Network Time Protocol) ไคลเอนต์. ระบบลีนุกซ์ส่วนใหญ่จะรัน ntpd โดยดีฟ้อลท์:

debby:~> ps -ef | grep ntpd
ntp 24678 1 0 2002 ? 00:00:33 ntpd -U ntp

คุณสามารถสั่ง ntpdate เพื่อตั้งเวลา, กรณีที่คุณสามารถเชื่อมต่อกับ time server. เดมอน ntpd ไม่ควรรันตอนที่คุณตั้งเวลาด้วยคำสั่ง ntpdate. เวลาใช้คำสั่งให้ระบุ time server ด้วย:

root@box:~# ntpdate 10.2.5.200
26 Oct 14:35:42 ntpdate[20364]: adjust time server 10.2.5.200 offset
-0.008049 sec

ดูคู่มือที่มากับชุดโปรแกรม NTP. โปรแกรมจัดการเดสก์ท้อปส่วนมากจะมี tools ที่ใช้ตั้งเวลาระบบ. คุณต้องได้สิทธิ์ของผู้ดูแลระบบจึงจะทำงานนี้ได้.

คำสั่ง tzconfig หรือ  timezone ใช้สำหรับตั้งโซนเวลา. ซึ่งปกติจะตั้งตอนติดตั้งะบบ. ลีนุกซ์ส่วนใหญ่มี tools สำหรับการตั้งค่านี้, ดูคู่มือระบบประกอบ.

7.4.4. Language

ถ้าคุณอยากได้รับข้อความจากระบบเป็นภาษาเยอรมันหรือฝรั่งเศส, คุณต้องตรวจสอบการตั้งค่าภาษา LANG และ ตัวแปร LANGUAGE, เพื่อตั้งค่าตามท้องถิ่นสำหรับภาษาที่ต้องการและตั้งค่าฟ้อนท์ที่เกี่ยวข้อง กับตัวอักษรในภาษานั้น.

ระบบกราฟฟิกส่วนมาก, เช่น gdm หรือ kdm, มีระบบการปรับแต่งภาษาก่อนทำการล็อกอิน.

หมายเหตุ ในระบบส่วนใหญ่, ปัจจุบันค่าดีฟ้อลท์จะเป็นตัวอักษรแบบ en_US.UTF-8. ซึ่งไม่เป็นปัญหา, เพราะระบบที่มีดีฟ้อลท์เป็นแบบนี้, จะมีโปรแกรมที่รองรับการเข้ารหัสแบบนี้. ดังนั้น, vi สามารถแก้ไขไฟล์ทุกไฟล์ในระบบของคุณ, คำสั่ง cat ก็ใช้ได้เหมือนกัน.

ปัญหาจะเกิดเมื่อคุณเชื่อมต่อไปยังระบบเก่าที่ไม่รองรับการใช้ font นี้,หรือเมื่อคุณเปิดไฟล์ที่ใช้ตัวอักษรแบบ UTF-8 ในระบบที่รองรับตัวอักษรขนาด 1 ไบท์. โปรแกรม recode จะช่วยเปลี่ยนการเข้ารหัสตัวอักษรได้. อ่านคู่มือการใช้. อีกวิธีคือการเซ็ทตัวแปร environment LANG:

debby:~> acroread /var/tmp/51434s.pdf
Warning: charset "UTF-8" not supported, using "ISO8859-1".
Aborted

debby:~> set | grep UTF
LANG=en_US.UTF-8

debby:~> export LANG=en_US

debby:~> acroread /var/tmp/51434s.pdf
<--new window opens-->

การตั้งค่าภาษาในโปรแกรมเวบบราวน์เซอร์สามารถดูข้อมูลได้ที่เวบ Mozilla. และเว็บ OpenOffice.org มีข้อมูลเกี่ยวกับการใช้ภาษาท้องถิ่นสำหรับชุดโปรแกรม OpenOffice.

7.4.5. Country-specific Information

ที่ list of HOWTOs มีเอกสารอ้างอิงถึงภาษาท้องถิ่น Bangla, Belarusian, Chinese, Esperanto, Finnish, Francophone, Hebrew, Hellenic, Latvian, Polish, Portugese, Serbian, Slovak, Slovenian, Spanish, Thai และ Turkish .

7.5. Installing new software

7.5. Installing new software การติดตั้งโปรแกรมใหม่

7.5.1. General

หลังการติดตั้ง,ผู้ใช้ส่วนใหญ่จะรู้สึกประหลาดใจเมื่อเขาเห็นเครื่อง คอมพิวเตอร์ทำงานด้วยลีนุกซ์; สายพันธ์ส่วนมากจะมีโปรแกรมรองรับการทำงานของการ์ดวีดีโอและการ์ดเนทเวิร์ค, จอมอนิเตอร์และอุปกรณ์ภายนอกอื่น, จึงไม่จำเป็นต้องติดตั้งไดรเวอร์พิเศษเพิ่มเติม. และยังมีโปรแกรมประจำเครื่องเช่นชุดโปรแกรมออฟฟิส, โปรแกรมท่องอินเตอร์เนท, โปรแกรมอ่านอีเมล์และโปรแกรมไคลเอนต์ใช้งานกับเครือข่ายต่างๆ. จะรวมมาในชุดติดตั้ง. ถึงกระนั้น, โปรแกรมที่ติดตั้งครั้งแรกอาจไม่เพียงพอกับความต้องการของคุณ.

ถ้าคุณพบว่าซอฟแวร์ที่มีไม่ตรงกับที่คุณต้องการ, มันอาจไม่ได้ติดตั้งในระบบของคุณ. หรือคุณอาจต้องการติดตั้งโปรแกรมเพิ่ม, จำไว้ว่าโปรแกรมบนลีนุกซ์มีการเติบโตเร็วมาก, และซอฟท์แวร์มีการเพิ่มความสามารถทุกวัน. อย่าเสียเวลาแก้ปัญหาที่อาจมีคนแก้ให้แล้ว.

คุณสามารถอัพเดทระบบหรือเพิ่มชุดโปรแกรมลงในระบบเมื่อไรก็ตามที่คุณ ต้องการ. ซอฟแวร์ส่วนใหญ่จะมาเป็นแพกเก็จ. ซอฟแวร์พิเศษอาจมีในแผ่นซีดีที่ใช้ตอนติดตั้งหรือดาวน์โหลดจากอินเตอร์เนท. เวบไซด์ของลีนุกซ์ที่คุณใช้งานจะเป็นแหล่งข้อมูลที่ดีในการหาซอฟท์แวร์ เพิ่มเติมรวมทั้งวิธีการติดตั้งลงในระบบของคุณ, ดู Appendix A. สิ่งควรทำคืออ่านเอกสารที่มากับซอฟท์แวร์ใหม่, และคำแนะวิธีการติดตั้งโปรแกรมที่อาจมีมา. ส่วนมากซอฟท์แวร์ทุกตัวจะมีไฟล์ README, ซึ่งควรอ่านเป็นอย่างยิ่ง.

7.5.2. Package formats

7.5.2.1. RPM packages

7.5.2.1.1.  RPM คืออะไร?

RPM, ย่อมาจาก RedHat Package Manager, เป็นโปรแกรมจัดการแพกเก็จที่คุณสามารถใช้เพื่อ ติดตั้ง, อัพเดท และ ลบแพกเก็จ. มันสามารถใช้ในการหาชุดโปรแกรมและหาไฟล์ที่มากับแต่ละแพกเก็จได้. เป็นโปรแกรมที่มากับระบบทำให้คุณสามารถตรวจสอบความถูกต้องของแพกเก็จที่ ดาวน์โหลดจากอินเตอร์เนท. ผู้ใช้งานระดับก้าวหน้าสามารถสร้างชุดโปรแกรมของตนเองด้วย RPM.

ชุดโปรแกรม RPM ประกอบด้วย archive of files และ meta-data ใช้ในการติดตั้งและลบ archive files. ตัว meta-data มีสคริปสำหรับช่วยเหลือ, file attributes, และคำอธิบายเกี่ยวกับแพกเก็จ. โปรแกรมแพกเก็จจะมาในสองรูปแบบ: ไบนารี่แพกเก็จ, ใช้เป็นตัวที่จะติดตั้งโปรแกรม, และ ซอร์สแพกเก็จ, ซึ่งประกอบด้วยซอร์สโค้ดและวิธีการในการสร้างไบนารี่แพกเก็จ.

มีลีนุกซ์หลายสายพันธ์ที่สามารถใช้ RPM packages, นอกจาก RedHat Enterprise Linux, Mandriva (เดิมชื่อ Mandrake), Fedora core และ SuSE Linux. คุณสามารถดูรายละเอียดด้วยคำสั่ง man rpm.

7.5.2.1.2. RPM examples

แพกเก็จส่วนมากจจะติดตั้งง่ายๆด้วยอ็อพชั่นสำหรับอัพเกรด, -U, ไม่ว่าชุดแพกเก็จได้ติดตั้งแล้วหรือไม่. ชุดแพกเก็จ RPM ประกอบด้วยเวอร์ชั่นสมบูรณ์ของโปรแกรม, ซึ่งจะเขียนทับเวอร์ชั่นเดิมหรือติดตั้งแพกเก็จใหม่. การใช้งานทั่วไปจะใช้คำสั่ง:

rpm -Uvh /path/to/rpm-package(s)

 อ็อพชั่น -v จะแสดงผลเอาท์พุทการทำงานทุกขั้นตอน, ส่วนอ็อพชั่น -h จะแสดงแถบความสำเร็จของการติดตั้ง( progress bar ):

[root@jupiter tmp]# rpm -Uvh totem-0.99.5-1.fr.i386.rpm
Preparing... ########################################### [100%]
1:totem ########################################### [100%]
[root@jupiter tmp]#

อย่างไรก็ตาม, การติดตั้ง new kernel packages, จะใช้อ็อพชั่น -i , ซึ่งไม่เขียนทับแพกเก็จเวอร์ชั่นเก่า. ด้วยวิธีนี้, คุณสามารถบูทระบบคุณด้วยเคอร์เนลเก่าถ้าตัวใหม่ไม่ทำงาน.

คุณสามารถใช้ rpm ในการตรวจว่ามีแพกเก็จอะไรบ้างที่ติดตั้งในระบบ:

[david@jupiter ~] rpm -qa | grep vim
vim-minimal-6.1-29
vim-X11-6.1-29
vim-enhanced-6.1-29
vim-common-6.1-29

 คุณสามารถตรวจหาว่าแพกเก็จใหนที่มีไฟล์หรือไฟล์ที่เอ็กซีคิ้วท์ได้:

[david@jupiter ~] rpm -qf /etc/profile
setup-2.5.25-1

[david@jupiter ~] which cat
cat is /bin/cat

[david@jupiter ~] rpm -qf /bin/cat
coreutils-4.5.3-19

หมายเหตุ คุณไม่จำเป็นต้องใช้สิทธิ์ผู้ดูแลระบบในการใช้คำสั่ง rpm ในการตรวจสอบแพกเก็จ. แต่ถ้าคุณจะเพิ่มหรือโมดิฟายหรือลบแพกเก็จ, คุณต้องใช้สิทธิ์ root.

 ตัวอย่างข้างล่าง, แสดงวิธีการลบแพกเก็จโปรแกรมด้วยคำสั่ง rpm:

[root@jupiter root]# rpm -e totem
[root@jupiter root]#

หมายเหตุ การยกเลิกการติดตั้งปกติจะไม่แสดงผลลัพท์ของการทำงาน, ถ้าคุณไม่เห็นข้อมูลอะไรมากเป็นเรื่องปกติ. ถ้าไม่แน่ใจ, ใชัคำสั่ง rpm -qa อีกทีเพื่อยีนยันว่าแพกเก็จนั้นได้ถูกลบไปแล้ว.

RPM ยังมีความสามารถมากกว่าเรื่องพื้นฐานที่เราได้อธิบายไป; คู่มือ RPM HOWTO มีรายละเอียดสำหรับหาข้อมูลเพิ่มเติม.

7.5.2.2. DEB (.deb) packages

7.5.2.2.1.  เดเบียนแพกเก็จคืออะไร?

แพกเก็จนี้เป็นตัวดีฟ้อลท์ที่ใช้บน Debian GNU/Linux, ซึ่งคำสั่ง dselect, และที่รู้จักมากกว่าคือคำสั่ง aptitude, เป็นคำสั่งมาตรฐานในการจัดการแพกเก็จ. มันใช้สำหรับเลือกแพกเก็จที่คุณต้องการติดตั้งหรืออัพเกรด, มันใช้ตอนติดตั้งระบบเดเบียนเพื่อช่วยให้คุณใช้, และดูรายละเอียดแพกเก็จที่มีให้เพื่อเลือกจัดการตามต้องการ.

 เวบไซด์ Debian มีข้อมูลทุกอย่างที่คุณต้องการ, รวมทั้งคู่มือ  "dselect Documentation for Beginner".

รายงานข่าวล่าสุด, แพกเก็จเดเบียนกลายเป็นแพกเก็จที่ได้รับความนิยม. ขณะที่เขียนหนังสือนี้,  5 ใน 10 ของลีนุกซ์สายพันธ์ที่ได้รับความนิยมสูงสุดใช้เดเบียนแพกเก็จ. คำสั่ง apt-get (ดู หัวข้อ 7.5.3.2 ) ได้รับความนิยมมาก, แม้บนระบบที่ไม่ใช่เดเบียน.

7.5.2.2.2. Examples with DEB tools

คำสั่ง dpkg ใช้เพื่อตรวจดูว่าแพกเก็จโปรแกรมได้ติดตั้งหรือยัง. ตัวอย่าง, ถ้าคุณอยากรู้ว่าโปรแกรม Gallery เวอร์ชั่นใหนที่ติดตั้งบนเครื่องของคุณ:

nghtwsh@gorefest:~$ dpkg -l *gallery*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii gallery 1.5-1sarge2 a web-based photo album written in php

ตัวอักษร "ii" ที่นำหน้าแสดงว่าแพกเก็จนี้ติดตั้งอยู่. ถ้าคุณเห็นตัวอักษร "un" นำหน้า, แสดงว่ามีแพกเก็จในรายการที่เครื่องคอมพิวเตอร์ของคุณเก็บไว็, แต่มันยังไม่ได้ติดตั้ง.

 การค้นหาว่าไฟล์เป็นของแพกเก็จใหน ใช้คำสั่ง dpkg -S:

nghtwsh@gorefest:~$ dpkg -S /bin/cat
coreutils: /bin/cat

 รายละเอียดดูได้ที่คู่มือ dpkg.

7.5.2.3. Source packages

ส่วนที่ใหญ่ที่สุดของโปรแกรมลีนุกซ์คือ Free/Open Source, ดังนั้น source packages จะมีมากับโปรแกรมเหล่านี้. โปรแกรมซอร์สไฟล์ต้องทำการคอมไพล์สำหรับใช้งานกับเวอร์ชั่นโปรแกรมของคุณ. Source สำหรับโปรแกรมสามารถดาวน์โหลดได้จากเวบไซด์ผู้สร้างโปรแกรม, ส่วนมากจะอยู่ในรูป compressed tarball (program-version.tar.gz หรือไกล้เคียง). ส่วนแพกเก็จของ RPM-based ซอร์สโค้ดจะอยู่ในรูป program-version.src.rpm. ลีนุกซ์เดเบียน, และสายพันธ์ที่ใช้แบบเดียวกัน, จะมีซอร์สที่อัพเดท ซึ่งสามารถใช้ได้โดยใช้คำสั่ง apt-get source.

ความต้องการเฉพาะ, ความต้องการเบื้องต้นและวิธีการติดตั้งจะมีในไฟล์ README. คุณอาจต้องใช้คอมไพเลอร์ภาษา C,คือ gcc. คอมไพเลอร์ในโครงการ GNU นี้ส่วนใหญ่จะมีให้กับระบบลีนุกซ์ทุกตัวและมีการแปลงไปใช้ในระบบอื่นๆมากมาย.

7.5.3. Automating package management and updates

7.5.3.1. General remarks

สิ่งแรกที่คุณควรทำหลังจากติดตั้งระบบใหม่คือการให้มันอัพเดท; นี่เป็นเรื่องที่ระบบปฏิบัติการทุกอันควรทำและลีนุกซ์ก็เช่นกัน.

การอัพเดทสำหรับระบบลีนุกซ์ส่วนมากจะมีข้อมูลอยู่ในเวบไซด์ลีนุกซ์สาย พันธ์ที่คุณติดตั้งที่ไกล้ตัวคุณมากสุด(mirror site). รายการของเวบไซด์เหล่านี้ดูได้ที่ Appendix A.

การอัพเดทควรทำเป็นประจำ, ทุกวันถ้าเป็นไปได้ - แต่ทุกสองสามสัปดาห์ดูจะเป็นเรื่องที่สมเหตุผลมากกว่า. มันเป็นเรื่องจริงที่คุณควรจะทำให้เครื่องของคุณใช้ระบบที่ทันสมัยอยู่ตลอด, เนื่องจากลีนุกซ์มีการเปลี่ยนแปลงอยู่ตลอดเวลา. ดังที่เราได้กล่าวก่อนหน้านี้, ความสามารถใหม่ๆ, การยืนยันการใช้งานและการแก้ไขข้อบกพร่องของโปรแกรมจะทำอย่างต่อเนื่อง, และบางครั้งจะมีการปรับปรุงจุดอ่อนของระบบ.

ข่าวดีคือลีนุกซ์ส่วนมากจะมี tools ที่อำนวยความสะดวกสบายในการอัพเกรดทำให้คุณไม่ต้องทำการอัพเกรดเอง. หัวข้อถัดไปนี้จะพูดถึงโครงสร้างของ package manager managers. มี รายละเอียดค่อนข้างมากสำหรับหัวข้อนี้, แม้ว่าการอัพเดทของ source packageจะทำโดยอัตโนมัติ; เราจะพูดถึงเฉพาะระบบที่ใช้กันทั่วไป. รายละเอียดเพิ่มเติมหาได้ในคู่มือลีนุกซ์สายพันธ์นั้นๆสำหรับคำแนะนำ.

7.5.3.2. APT

Advance Package Tool คือระบบจัดการสำหรับซอฟแวร์แพกเก็จ. คำสั่งในการทำงานกับแพกเก็จคือ apt-get, ซึ่งมีคู่มือการใช้ที่ยอดเยี่ยมอธิบายวิธีการติดตั้งและอัพเดทแพกเก็จ และวิธีอัพเกรด แพกเก็จเดี่ยวหรืออัพเกรดทั้งระบบ. APT เป็นตัวหลักในลีนุกซ์สายพันธ์เดเบียน GNU/Linux, ซึ่งมันเป็นโปรแกรมจัดการแพกเก็จเดเบียนที่ติดตั้งมากับระบบ. APT ได้ถูกแปลงให้ทำงานกับแพกเก็จ RPM ด้วยเหมือนกัน. ข้อเด่นของ APT ก็คือมันฟรีและใช้งานได้หลากหลาย. คุณสามารถใช้มันสร้างระบบที่เป็นของคุณเองคล้ายกับลีนุกซ์ในท้องตลาด(และ บางทีก็เป็นรุ่นที่วางจำหน่าย)ที่เราจะพูดในหัวข้อถัดไป.

 ปกติแล้ว, เมื่อเริ่มต้นใช้คำสั่ง apt-get, คุณต้องการข้อมูลอินเด็กของแพกเก็จที่มี. ซึ่งหาได้ด้วยการใช้คำสั่ง

apt-get update

 หลังจากนั้น, คุณสามารถใช้คำสั่ง apt-get เพื่ออัพเกรดระบบ:

apt-get upgrade

 ทำเช่นนี้บ่อยๆ, จะทำให้ระบบของคุณทันสมัยและปลอดภัย.

 นอกจากใช้ทั่วไปแล้ว, apt-get สามารถติดตั้งแพกเก็จแต่ละแพกเก็จได้อย่างรวดเร็ว ตัวอย่างแสดงวิธีทำงาน:

[david@jupiter ~] su - -c "apt-get install xsnow"
Password:
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
xsnow
0 packages upgraded, 1 newly installed, 0 removed and 3 not upgraded.
Need to get 33.6kB of archives.
After unpacking 104kB of additional disk space will be used.
Get:1 http://ayo.freshrpms.net redhat/9/i386/os xsnow 1.42-10 [33.6kB]
Fetched 33.6kB in 0s (106kB/s)
Executing RPM (-Uvh)...
Preparing... ########################################### [100%]
1:xsnow ########################################### [100%]

หมายเหตุ อ็อพชั่น -c ของคำสั่ง su, ใช้บอก root shell ให้เอ็กซีคิ้วท์คำสั่งนี้เท่านั้น, และเมื่อจบการทำงานให้กลับไปใช้ user's environment เดิม. ด้วยวิธีนี้, คุณจะไม่ลืมออกจากสิทธิ์ของ root.

 ถ้ามีโปรแกรมใดที่ขึ้นกับโปรแกรมอื่น. apt-get จะทำการดาวน์โหลดและติดตั้งแพกเก็จที่เกี่ยวข้องด้วย.

 ข้อมูลเพิ่มเติมหาอ่านได้ที่ APT HOWTO.

7.5.3.3. Systems using RPM packages

Update Agent, ซึ่งเริ่มใช้เฉพาะ RedHat RPM packages, ปัจจุบันได้แปลงไปยังซอฟแวร์อื่นเป็นวงกว้าง, รวมทั้งคลังข้อมูลที่ไม่ใช่ RedHat ( non-RedHat repositories ). tool ตัวนี้จะสร้างเพื่อทำระบบเพื่อการอัพเดท RPM package ของ RedHat หรือ Fedora Core system. ใช้คำสั่ง up2date สำหรับ command line ในการอัพเดทระบบของคุณ. ส่วนการใช้งานแบบเดสก์ท้อปกราฟฟิก, ปกติจะมีไอค่อนเล็กๆทำงาน, บอกให้คุณรู้ว่ามีโปรแกรมอัพเดทสำหรับระบบของคุณหรือยัง.

Yellowdog's Updater Modiified (yum) เป็น tool อีกตัวที่เริ่มเป็นที่นิยมใช้งาน. มันทำงานแบบ interactive แต่ทำการ อัพเดทโปรแกรมสำหรับการติดตั้ง, อัพเกรด หรือ ลบ RPM packages บนระบบแบบอัตโนมัติ. มันเป็น tool ตัวเลือกของระบบลีนุกซ์ Fedora.

ใน SuSE Linux, ทุกสิ่งจะทำด้วย YaST, ซึ่งเป็น tool อีกตัว, ซึ่งรองรับการทำงานของผู้ดูแลระบบที่หลากหลาย, นอกจากการอัพเดท RPM packages. ลีนุกซ์ SuSE รุ่น 7.1 เป็นต้นมา สามารถอัพเกรดผ่านเวบด้วย YOU, Yast Online Update

ลีนุกซ์ Mandrake และ Mandriva มีเครื่องมือที่เรียกว่า URPMI, ชุดโปรแกรมที่ทำให้การติดตั้งซอฟแวร์ใหม่ทำได้ง่าย, ด้วยการรวม RPMDrake และ MandradeUpdate ทำให้ขั้นตอนการติดตั้งและถอดซอฟแวร์ราบรื่น. ซอฟแวร์ MandrakeOnline มีบริการเตือนผู้ดูแลระบบเมื่อมีการอัพเดทที่จำเป็นสำหรับระบบของ Mandrake. ดู man urpmi, ในรายละเอียด.

 โปรแกรมเดสก์ท้อปทั้ง KDE และ Gnome มีโปรแกรมกราฟฟิกของตัวเองในการจัดการแพกเก็จ.

7.5.4. Upgrading your kernel

ระบบลีนุกซ์ส่วนมากจะใช้งานได้ดีถ้าคุณหมั่นอัพเกรด. กระบวนการอัพเกรดจะติดตั้งเคอร์เนลใหม่เมื่อต้องการและปรับปรุงข้อมูลที่ จำเป็นในระบบของคุณ. คุณอาจต้องคอมไพล์และติดตั้งเคอร์เนลใหม่ด้วยมือถ้าคุณต้องการใช้ kernel feature ที่เคอร์เนลตัวที่ใช้อยู่ไม่มีให้.

ไม่ว่าจะคอมไพล์เคอร์เนลเองหรือใช้ pre-compile kernel package, ติดต้งคู่กับเคอร์เนลเก่าจนกระทั่งมั่นใจว่ามันทำงานได้จริง.

การสร้างระบบบูทสองระบบทำให้คุณสามารถเลือกใช้เคอร์เนลที่จะบูทได้โดย ปรับเปลี่ยนข้อมูลในไฟล์คอนฟิกสำหรับการบูท grub.conf วิธีการมีดังนี้:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making config changes.
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, e.g.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hde8
# initrd /initrd-version.img
#boot=/dev/hde
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux new (2.4.9-31)
root (hd0,0)
kernel /vmlinuz-2.4.9-31 ro root=/dev/hde8
initrd /initrd-2.4.9-31.img
title old-kernel
root (hd0,0)
kernel /vmlinuz-2.4.9-21 ro root=/dev/hde8
initrd /initrd-2.4.9-21.img

หลังจากเคอร์เนลใหม่พิสูจน์ได้ว่าทำงานดี, คุณอาจลบบรรทัดที่เรียกเคอร์เนลเก่าออกจากไฟล์คอนฟิก. วิธีที่ดีที่สุดคือใช้งานซักระยะก่อนลบ.

7.5.5.  การติดตั้งแพกเก็จพิเศษจากซีดี

7.5.5.1. Mounting a CD

วิธีการคล้ายกับการติดตั้งแพกเก็จแบบ manual, นอกจากคุณต้องเพิ่มระบบไฟล์ของซีดีให้ระบบคุณรับรู้เพื่อที่มันจะเรียกใช้ ได้. ระบบส่วนมากจะทำโดยอัตโนมัติเมื่อใส่แผ่นซีดีเข้าใน drive เพราะมีเดมอน automount ซึ่งเริ่มทำงานอัตโนมัติตอนบูทเครื่อง. ถ้าซีดีของคุณไม่ได้ทำให้มองเห็นอัตโนมัติ, ใช้คำสั่ง mount ในเทอร์มินอล. ตัวอย่างคำสั่งด้านล่างเป็นคำสั่งที่ใช้ทั่วไป, ขึ้นอยู่กับระบบของคุณอาจแตกต่างไปบ้าง.

mount /dev/cdrom /mnt/cdrom

 ในบางระบบอาจต้องใช้สิทธิ์ root ในการทำงาน; ขึ้นอยู่กับการคอนฟิก.

สำหรับการทำงานแบบอัตโนมัติ, CD drive มันจะถูกใส่ไว้ใน /etc/fstab, ซึ่งเป็นรายการระบบไฟล์และจุดที่มัน mount, ทำให้เกิดโครงสร้างระบบไฟล์. ตัวอย่างข้อมูล:

[david@jupiter ~] grep cdrom /etc/fstab
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0

ข้อมูลแสดงว่าระบบเข้าใจคำสั่ง mount /mnt/cdrom. อ็อพชั่น noauto หมายุถึงในระบบนี้, CD ไม่ได้ถูก mounted ตอนบูทระบบ.

ในการใช้งานแบบกราฟฟิก, คุณอาจคลิกปุ่มขวาของเม้าส์บนไอค่อนของซีดีในเดสก์ท้อป เพื่อทำการ mount ซีดีถ้าโปรแกรมจัดการไฟล์ของคุณไม่ทำงาน. คุณสามารถตรวจเช็คว่ามันทำงานหรือเปล่าโดยใช้คำสั่ง mount แบบไม่มี argument:

[david@jupiter ~] mount | grep cdrom
/dev/cdrom on /mnt/cdrom type iso9660 (ro,nosuid,nodev)

7.5.5.2.  การใช้ซีดี

หลังจาก mounting CD, คุณสามารถเปลี่ยนไดเร็กตอรี่, ปกติจะอยู่ที่ /mnt/cdrom, เพื่อที่คุณจะใช้งานข้อมูลใน CD-ROM. และใช้คำสั่งเดียวกับคำสั่งที่ใช้กับไฟล์และไดเร็กตอรี่บนฮาร์ดดิสก์.

7.5.5.3. Ejecting the CD

ในการเอาซีดีออกจากไดรว์หลังจากคุณใช้งานมันเสร็จ, ระบบไฟล์บน CD ควรเลิกใช้งาน. วิธีเลิกใช้ทำได้โดยใช้คำสั่ง cd โดยไม่มี argument , ซึ่งจะพาคุณกลับไปโฮมไดเร็กตอรี่. หลังจานั้นใช้คำสั่ง

umount /mnt/cdrom

 หรือ

eject cdrom

Warning  ถ้าไดรว์ไม่ยอมคายแผ่น
 

อย่าไปบังคับไดรว์. วิธีการใช้คลิปหนีปกระดาษเป็นวิธีที่ผิด, เพราะจะทำให้แผ่นซีดีเสียหาย. และระบบยังคิดว่า CD ยังคงอยู่ในนั้นเพราะกระบวนการทำงานตามปกติยังไม่สิ้นสุด. วิธีการคือให้รีบูทระบบให้ทุกอย่างกลับมาเป็นปกติ.

ถ้าคุณเจอข้อความ "device busy" , ขั้นแรกตรวจเชลล์เซสชั่นทุกอันว่ามีการใช้ระบบไฟล์ของ CD หรือเปล่าและไม่มีกราฟฟิกแอพพลิเคชั่นตัวใดไปใช้ข้อมูลใน CD อีก. ถ้ายังหาไม่เจอ, ใชัคำสั่ง lsof ในการหาว่าโพรเซสยังคงใช้ข้อมูลในซีดีหรือไม่.

7.6. Summary

7.6. บทสรุป

 ถ้าทุกอย่างราบรื่น, หมายความว่างานมาถึงครึ่งทางแล้ว.

การใช้งานตามกฏระเบียบเป็นเรื่องสำคัญก็จริง, แต่เมื่อคุณอยู่ในโฮมคุณควรปรับแต่ง environment ตามใจชอบ ทั้ง text หรือ graphical , การปรับแต่ง text environment ทำผ่านเชลล์ setup files. ส่วนกราฟฟิก environment ขึ้นอยู่กับคอนฟิกของ  X server, ซึ่งมีส่วนประกอบจากแอพพลิเคชั่นหลายตัว, เช่น window และ desktop manager และแอพพลิเคชั่นกราฟฟิก, ซึ่งแต่ละตัวมีคอนฟิกไฟล์ของตัวเอง. คุณควรอ่านคู่มือระบบที่เกี่ยวข้อและหาวิธีการคอนฟิกมัน.

การตั้งค่าท้องถิ่นเช่นคีย์บอร์ด, ติดตั้งฟ้อนท์และภาษาที่รองรับควรจะทำตอนติดตั้งระบบ.

 ซอฟท์แวร์จะถูกจัดการทั้งแบบ manually หรือ อัตโนมัติด้วยการใช้ระบบแพกเก็จ.

 คำสั่งต่อไปนี้เป็นคำสั่งที่เราได้เรียนรู้ในบทนี้:

Table 7-2.  คำสั่งใหม่ในบทที่ 7: ลองทดลองด้วยตัวคุณเองที่บ้าน

Command Meaning
aptitude  จัดการแพกเก็จในแบบเดเบียน
automount  รวมไฟล์ใหม่เข้าในระบบโดยอัตโนมัติ
dpkg Debian package manager.
dselect Manage packages Debian-style.
loadkeys Load keyboard configuration.
lsof Identify processes.
mount  รวมระบบไฟล์ไหม่เข้ากับโครงสร้าไฟล์ของระบบ
ntpdate  ตั้งเวลาและวันที่ด้วยการใช้ time server
quota  แสดงข้อมูลของเนื้อที่ดิสก์ที่ใช้ได้
recode  เปลี่ยนไฟล์เป็นชุดตัวอักษรอื่น
rpm Manage RPM packages.
setfont  เลือกฟ้อนท์
timezone Set the timezone.
tzconfig Set the timezone.
ulimit Set or display resource limits.
up2date Manage RPM packages.
urpmi Manage RPM packages.
yum Manage RPM packages.

7.7. Exercises

7.7. แบบฝึกหัด

7.7.1. Shell environment

  •  สั่ง print out ค่า environment ของคุณ. ซึ่งตัวแปรอาจใช้เก็บชนิดของ CPU ?

  •  สร้างสคริปที่ส่งข้อความ "hello, world." ออกทางหน้าจอ. ตั้งค่าเพอร์มิชชั่นที่เหมาะสมเพื่อให้มันรันได้. ทดสอบสคริปของคุณ.

  • สร้างไดเร็กตอรี่ในโฮมไดเร็กตอรี่ของคุณและย้ายสคริปไปยังไดเร็กตอรี่ ใหม่. ทำการเพิ่มไดเร็กตอรี่ใหม่นี้เข้าใน search path ของคุณแบบถาวร. ตรวจสอบสคริปว่าสามารถทำงานได้โดยไม่ต้องใส่ค่าพาธที่ชี้ไปยังไดเร็กตอรี่ จริง.

  •  สร้างไดเร็กตอรี่ย่อยในโฮมไดเร็กตอรี่ของคุณเพื่อใช้เก็บไฟล์ต่างๆ , ตัวอย่างเช่นไดเร็กตอรี่ music เพื่อเก็บไฟล์เสียง, ไดเร็กตอรี่ documents สำหรับเก็บไฟล์ข้อความที่คุณเขียนบันทึกข้อความ, เป็นต้น. และใช้งานมัน!

  •  สร้าง prompt ของตัวคุณเอง.

  •  แสดงค่าจำกัดการใช้ทรัพยากรระบบ. ทดสอบว่าคุณสามารถเปลี่ยนแปลงมันได้หรือไม่?

  •  ลองอ่านไฟล์ man pages ที่มีการบีบอัดโดยไม่ต้องคลายการบีบอัดก่อน.

  •  สร้างคำสั่งย่อ lll ซึ่งให้ผลเป็นคำสั่ง ls -la.

  • ทำไมคำสั่ง tail testfile > testfile ไม่ทำงาน?

  •  ทำการ mount ซีดีข้อมูล, เช่นซีดีที่ใช้ติดตั้งลีนุกซ์, และตรวจดูข้อมูลในซีดี. อย่าลืม unmount เมื่อคุณไม่ต้องการดูข้อมูล.

  • . สคริปจาก หัวข้อ 7.2.5.2 ไม่ใช่สคริปที่สมบูรณ์แบบ. มันสร้าง errors สำหรับไฟล์ที่เป็นไดเร็กตอรี่. แก้ไขสคริปเพื่อให้มันทำงานกับไฟล์เท่านั้น. ใช้คำสั่ง find เพื่อเลือก. อย่าลืมทำให้สคริปเอ็กซีคิ้วท์ได้ก่อนจะลองรันมัน.

7.7.2. Graphical environment

  •  ลองกดปุ่มบนเม้าส์ในพื้นที่ต่างๆ (เทอร์มินอล, พื้นหลังสกรีน, แทสค์บาร์).

  • สำรวจเมนู.

  •  ปรับแต่งเทอร์มินอลวินโดว์.

  • ใช้ปุ่มบนเม้าส์ทำการก้อปปี้และวางเทกซ์จากเทอร์มินอลหนึ่งไปยังอีกเทอร์มินอล.

  • หาวิธีปรับแต่ง window manager ของคุณ; ลองใน workspaces ต่างๆ(virtual screens).

  •  เพิ่มลูกเล่น, เช่น load monitor, ลงไปใน tash bar.

  •  ลองปรับเปลี่ยน theme.

  •  ลองใช้ sloppy focus - คือเมื่อเลื่อนเม้าส์ไปเหนือวินโดว์ก็สามารถใช้งานมันได้, คุณไม่จำเป็นต้องคลิกวินโดว์เพื่อใช้งานมัน.

  • ลองเปลี่ยนไปใช้ window manager ตัวอื่น.

  •  ล็อกเอาท์และเลือกใช้เซสชั่นชนิดอื่น, เช่น KDE ถ้าคุณใช้ Gnome อยู่ก่อน. ลองซ้ำหลายๆครั้ง.

Chapter 08. Printers and printing

8.1. Printing files

8.1.  การพิมพ์ไฟล์

8.1.1. Command line printing

8.1.1.1. Getting the file to the printer

 การพิมพ์จากแอพพลิเคชั่นโปรแกรมทำได้ง่ายมาก, โดยเลือกอ็อพชั่นการพิมพ์จากเมนู.

 สำหรับ command line ใช้คำสั่ง lp หรือ lpr.

lp file(s)

lpr file(s)

 คำสั่งนี้สามารถอ่านจากไปป์, ดังนั้นคุณสามารถใช้พิมพ์ผลลัพท์ของคำสั่งโดยใช้รูปแบบ

command | lp

มีอ็อพชั่นให้เลือกหลายอ็อพชั่นเพื่อปรับตำแหน่งที่จะวางบนหน้ากระดาษ, จำนวนแผ่นที่จะก้อปปี้, เลือกเครื่องพิมพ์ถ้ามีเครื่องพิมพ์ต่ออยู่กับระบบมากกว่า 1 ตัว, ขนาดกระดาษ, พิมพ์หน้าเดียวหรือสองหน้าถ้าเครื่องพิมพ์มีความสามารถพิมพ์สองหน้าได้, ระยะมาร์จิ้นท์เป็นต้น. อ่านคู่มือประกอบ.

8.1.1.2. Status of your print jobs

เมื่อไฟล์ถูกรับเข้าไปอยู่ในคิวของการพิมพ์, หมายเลข job ของการพิมพ์จะถูกสร้างขึ้น.

davy:~> lp /etc/profile
request id is blob-253 (1 file(s))

 ในการดู(query) คิวการพิมพ์, ใช้คำสั่ง lpq หรือ lpstat. ถ้าใช้คำสั่งโดยไม่มีอาร์กิวเม้นท์, มันจะแสดงข้อมูลดีฟ้อลท์ของคิวที่รอพิมพ์.

davy:~> lpq
blob is ready and printing
Rank Owner Job File(s) Total Size
active davy 253 profile 1024 bytes
davy:~> lpstat
blob-253 davy 1024 Tue 25 Jul 2006 10:20_01 AM CEST

8.1.1.3. Status of your printer

คำสั่งเพื่อดูว่าเครื่องพิมพ์ใหนเป็นเครื่องพิมพ์ดีฟ้อลท์ในระบบ.

lpstat -d

davy:~> lpstat -d
system default destination: blob

 คำสั่งตรวจดูสถานะของเครื่องพิมพ์

lpstat -p

davy:~> lpstat -p
printer blob now printing blob-253. enabled since Jan 01 18:01

8.1.1.4.  การยกเลิก jobs จากคิวรอพิมพ์

ถ้าคุณต้องการยกเลิกการพิมพ์ที่รอคิวพิมพ์ ใช้คำสั่ง lprm หรือ cancel ในการยกเลิก jobs นั้น.

davy:~> lprm 253

 ในหน้าจอแบบกราฟฟิก, คุณอาจเป็นหน้าต่าง pop up ที่บอกคุณว่า job นั้นได้ถูกยกเลิกไปแล้ว.

 ในระบบใหญ่, คำสั่ง lpc อาจใช้ควบคุมเครื่องพิมพ์หลายตัว. ดูคู่มือ man pages ของแต่ละคำสั่ง.

มีโปรแกรมกราฟฟิกหลายตัวที่ใช้เป็นหน้าฉากของคำสั่ง lp, ดูคู่มือโปรแกรมในรายละเอียด.

Note  ทำไมจึงมีสองคำสั่งเกี่ยวกับการพิมพ์?
 

การพิมพ์ในระบบยูนิกซ์มีประวัติยาวนาน. การใช้แบ่งออกได้เป็นสองแบบ: คือการพิมพ์แบบ BSD-style และการพิมพ์แบบ SystemV-style. เพื่อให้เข้ากันได้, ลีนุกซ์ทำให้ใช้ได้ทั้งสองสไตล์. หมายเหตุ การทำงานของคำสั่ง lp ไม่เหมือนกันกับคำสั่ง lpr เสียทีเดียว, คำสั่ง lpq จะมีอ็อพชั่นแตกต่างจากคำสั่ง lpstat และ คำสั่ง lprm จะให้ผลการทำงานคล้ายกับคำสั่ง cancel. เลือกใช้คำสั่งที่คุณคุ้นเคย.

8.1.2. Formatting

8.1.2.1. Tools and languages

ถ้าคุณต้องการผลการพิมพ์ที่สวยงาม, ควรปรับฟอร์แมทไฟล์ก่อน. ในส่วนของโปรแกรมปรับฟอร์แมท, ลีนุกซ์มีโปรแกรมและทูลส์สำหรับปรับแต่งฟอร์แมทและภาษาเบื้องต้น.

ระบบลีนุกซ์รุ่นใหม่รองรับการพิมพ์แบบพิมพ์โดยตรง, โดยไม่ต้องฟอร์แมทโดยผู้ใช้ก่อน, ใช้กับไฟล์หลากหลายชนิด: text, PDF, PostScript และไฟล์รูปภาพอาทิ PNG, JPEG, BMP และ GIF.

สำหรับไฟล์ที่ต้องทำการฟอร์แมทก่อน, ลีนุกซ์มีโปรแกรมสำหรับฟอร์แมทจำนวนมาก, เช่น pdv2ps, fax2ps และคำสั่ง a2ps , ซึ่งจะทำการเปลี่ยนฟอร์แมทอื่นให้เป็น PostScript. คำสั่งเหล่านี้สามารถสร้างไฟล์เพื่อใช้ในระบบอื่นที่ไม่มีโปรแกรมการ convert ติดตั้งอยู่.

นอกจากคำสั่งแบบ command line แล้วยังมีโปรแกรมประมวลผลคำหรือเวิร์ดโพรเซสซิ่งในแบบกราฟฟิก. โปรแกรมสำหรับสำนักงานหลายตัวมีให้ใช้, ส่วนมากจะฟรี. โปรแกรมเหล่านี้จะฟอร์แมทไฟล์โดยอัตโนมัติเมื่อต้องทำการพิมพ์. ตัวอย่างโปรแกรมคือ: OpenOffice.org, KOffice, AbiWord, WordPerfect, เป็นต้น.

 รายการต่อไปนี้คือภาษากลางในการพิมพ์เนื้อหา

  • groff: เป็นเวอร์ชั่น GNU เทียบเท่าคำสั่งยูนิกซ์ roff . เป็นโปรแกรม front-end ของ groff document formatting system. ปกติมันจะรันคำสั่ง troff และงานที่ตรงกับอุปกรณ์ที่ใช้. มันสามารถสร้างไฟล์ PostScript ได้.

  • Tex และชุดแพ็กเก็จขนาดเล็ก LaTex: เป็นภาษามาร์คอัพที่นิยมใช้กันมากบนระบบยูนิกซ์. ปกติจะใช้คำสั่ง tex, มันสามารถปรับฟอร์แมทไฟล์และให้ผลลัพท์ที่สัมพันธ์กับอุปกรณ์ที่ใช้ในการพิมพ์เอกสาร.

  •  เอกสารการพัฒนาทางเทคนิคยังคงเขียนด้วย LaTex เพราะมันรองรับการเขียนสูตรคณิตศาสตร์, แม้ว่า W3C (the World Wide Web Consortium)จะพยายามทำให้ความสามารถในการเขียนสูตรนี้เป็นส่วนหนึ่งของแอพพลิเคชั่นอื่นก็ตาม.

  •  SGML และ XML: ยูนิกซ์และลีนุกซ์มี free paersers ให้ใช้. XML คือรุ่นต่อไปของ SGML, มันใช้สร้างเอกสารในรูปแบบ  DocBook XML, ซึ่งเป็นระบบเอกสารอิเลคทรอนิคส์(หนังสือเล่มนี้เขียนด้วย XML, ยกตัวอย่าง).

Tip Printing documentation
 

 ใน man page  ประกอบด้วยข้อมูล pre-format troff data ซึ่งะต้องทำการฟอร์แมทก่อนที่จะส่งไปยังเครื่องพิมพ์. การพิมพ์จะใช้อ็อพชั่น -t สำหรับคำสั่ง man:

man -t command > man-command.ps

 หลังจากนั้นจึงทำการพิมพ์ PostScript file. ถ้ามีเครื่องพิมพ์ต่ออยู่กับระบบ, คุณสามารถสั่งพิมพ์โดยใช้คำสั่ง man -t command เพื่อส่งหน้าที่จะพิมพ์ที่ฟอร์แมทแล้วไปยังเครื่องพิมพ์ได้โดยตรง.

8.1.2.2. Previewing formatted files

 อะไรที่คุณส่งไปยังเครื่องพิมพ์สามารถส่งขึ้นหน้าจอได้เหมือนกัน. ขึ้นอยู่กับไฟล์ฟอร์แมท, คุณสามารถใช้คำสั่งต่างๆเหล่านี้:

  • PostScript files:. ใช้คำสั่ง gv(GhostView)

  • TeX dvi files:  ใช้คำสั่ง xdvi, หรือ kdvi ถ้าใช้กับ KDE.

  • PDF files: ใช้คำสั่ง xpdf, kpdf, gpdf หรือโปรแกรม Adobe's viewer, acroread, ซึ่งมีให้ใช้ฟรีแต่มันไม่ใช่ฟรีซอฟแวร์. โปรแกรม Adobe's reader รองรับไฟล์ PDF เวอร์ชั่น 1.6, ในขณะที่โปรแกรมอื่นรองรับแค่เวอร์ชั่น 1.5. การดูเวอร์ชั่นของไฟล์ PDF ใช้คำสั่ง file.

  • การใช้งานภายในแอพพลิเคชั่น, เช่น Firefox หรือ OpenOffice, คุณสามารถเลือกดูภาพก่อนพิมพ์ได้จากเมนูโปรแกรม.

8.2. The server side

8.2. The server side

8.2.1. General.

ระยะหลังไม่นาน, ผู้ใช้ลีนุกซ์มีทางเลือกที่ง่าย: เพราะทุกคนใช้โปรแกรม LPD เก่าจาก BSD's Net-2 code. ทำให้ LPRng เป็นที่นิยมใช้งาน, แต่ปัจจุบันลีนุกซ์รุ่นใหม่ใช้ CUPS, the Common UNIX Printing System. ซึ่งทำงานบน Internet Printing Protocol(IPP),  HTTP-like RFC standard ซึ่งมาแทน LDP protocol ที่ใช้มานาน. โปรแกรม CUPS แจกจ่ายภายใต้ลิขสิทธิ์ GNU. และมันเป็นโปรแกรมพิมพ์บนระบบ MacOS x ด้วยเหมือนกัน.

8.2.2. Graphical printer configuration

ลีนุกซ์ส่วนมากมีโปรแกรม GUI สำหรับคอนฟิกเครื่องพิมพ์แบบเนทเวิร์คและโลคอล(พอร์ทขนานหรือ USB). คุณสามารถเลือกชนิดเครื่องพิมพ์และทดสอบการพิมพ์ได้ง่าย. ไม่ต้องกังวลว่าจะตั้งค่าผิดหรือใช้ไฟล์คอนฟิกใหน. ดูคู่มือการใช้ก่อนที่คุณจะติดตั้งเครื่องพิมพ์.

. Cups ยังสามารถคอนฟิกผ่านเวบอินเตอร์เฟสที่วิ่งอยู่บนพอร์ท 631 บนระบบคอมพิวเตอร์ของคุณ. คุณสามารถตรวจสอบความสามารถนี้, โดยลองใช้เวบบราวน์เซอร์เปิด localhost:631/help หรือ localhost:631/.

8.2.3. Buying a printer for Linux

เนื่องจากมีผู้ผลิตเครื่องพิมพ์ได้เพิ่มไดรเวอร์สำหรับใช้กับ CUPS มากขึ้นเรื่อยๆ, ทำให้ CUPS สามารถเชื่อมต่อกับเครื่องพิมพ์ส่วนมากที่ต่อกับพอร์ท serial, paralel, หรือ พอร์ท USB, และเครื่องพิมพ์บนเครือข่าย. CUPS ทำให้โปรแกรมแอพพลิเคชั่นของคุณสามารถใช้งานได้กับเครื่องพิมพ์ชนิดต่างๆ ได้.

เครื่องพิมพ์ที่มีไดรเวอร์ให้ใช้กับไมโครซอฟท์วินโดว์ Win9x อาจสร้างปัญหาถ้ามันไม่มีไดรเวอร์ให้ใช้บนลีนุกซ์. ตรวจสอบได้ที่ http://linuxprinting.org/ เมื่อเกิดปัญหา.

ในอดีต, ตัวเลือกที่ดีที่สุดคือการใช้เครื่องพิมพ์ที่มี native PostScript รองรับใน firmware, เนื่องจากโปรแกรมบนยูนิกซ์และลีนุกซ์ส่วนมากจะให้ผลลัพท์การพิมพ์ในแบบ PostScript, ซึ่งเป็นภาษาที่ใช้ในวงการอุตสาหกรรมการพิมพ์. เครื่องพิมพ์ PostScript ส่วนใหญ่จะมีราคาแพง, แต่ขึ้นอยู่กับอุปกรณ์, ด้วยความที่เป็น open programming language ทำให้คุณมั่นใจได้ร้อยเปอร์เซนต์ว่ามันจะทำงาน. ทุกวันนี้, อาจไม่ต้องเข้มงวดกับ PostScript ในการใช้งานมากนัก.

8.3. Print problems

8.3.  ปัญหาของการพิมพ์

ในหัวข้อนี้, เราจะพูดถึงสิ่งที่คุณสามารถทำได้เมื่อผู้ใช้เกิดปัญหาการพิมพ์. เราจะไม่พูดถึงปัญหาที่เกิดจากเดมอนของ printing service, ซึ่งเป็นส่วนที่ผู้ดูแลระบบรับผิดชอบ.

8.3.1.  พิมพ์ผิดไฟล์

ถ้าคุณพิมพ์ผิดไฟล์, คุณสามารถใช้คำสั่ง lprm jobID เพื่อยกเลิกการพิมพ์นั้น, รูปแบบของ jobID อยู่ในรูป printername-printjobnumber(ได้มาจากการใช้คำสั่ง lpq  หรือ  lpstat). วิธีนี้ได้ผลถ้า jobs นั้นกำลังรอคิวที่จะพิมพ์ในคิวของเครื่องพิมพ์, แต่คุณต้องมือไวหน่อย ถ้าคุณเป็นผู้ใช้รายเดียวที่ใช้เครื่องพิมพ์นั้น. เนื่องจาก jobs จะใช้เวลาเป็นวินาทีในการรับและส่งข้อมูลไปยังเครื่องพิมพ์. เมื่อข้อมูลไปถึงเครื่องพิมพ์, มันก็สายเกินที่จะยกเลิก jobs ด้วยคำสั่งของลีนุกซ์.

การปิดเครื่องพิมพ์เป็นวิธีหนึ่งถ้าเกิดกรณีดังข้างบน, หรือเมื่อมีการตั้งค่า print driver ผิดซึ่งจะทำให้มีแต่การ feed กระดาษ. แต่มันก็ไม่ใช้วิธีที่ดีที่สุดในการแก้ปัญหา, เนื่องจากคุณอาจเจอปัญหาการะดาษติดหรือเหตุผิดปกติอื่น.

8.3.2.  สั่งพิมพ์แล้วเครื่องไม่ยอมพิมพ์

 ใช้คำสั่ง lpq และดูว่ามี job ของคุณหรือเปล่า:

elly:~> lpq
Printer: lp@blob
Queue: 2 printable jobs
Server: pid 29998 active
Unspooler: pid 29999 active
Status: waiting for subserver to exit at 09:43:20.699
Rank Owner/ID Class Job Files Size Time
1 elly@blob+997 A 997 (STDIN) 129 09:42:54
2 elly@blob+22 A 22 /etc/profile 917 09:43:20

 เครื่องพิมพ์ทุกวันนี้สามารถดูสถานะการทำงานผ่านเวบ, โดยใส่ IP ของเครื่องพิมพ์ในเวบบราวน์เซอร์:

Figure 8-1. Printer Status through web interface

Note CUPS web interface versus printer web interface
 

หมายเหตุ ตัวอย่างด้านบนไม่ใช้ CUPS web interface และทำงานได้เฉพาะรุ่น. ดูคู่มือเครื่องพิมพ์ของคุณในรายละเอียด.

ถ้า job ID ของคุณไม่มีในรายการบนเครื่องพิมพ์, ติดต่อผู้ดูแลระบบ. ถ้าคุณพบ job ID มีในรายการ, ตรวจสอบว่าเครื่องพิมพ์กำลังทำงานอยู่หรือไม่. ถ้ากำลังทำงาน, รอซักครู่, job ของคุณก็จะได้รับการพิมพ์.

ถ้าเครื่องพิมพ์ไม่ยอมพิมพ์, ตรวจสอบกระดาษว่ามีหรือเปล่า, เช็คการต่อสายทั้งสายไฟและสายข้อมูล. ถ้าทุกอย่างตรวจแล้ว, เครื่องพิมพ์อาจต้อง restart. ถามผู้ดูแลระบบในวิธีการ restart.

กรณีของเครื่องพิมพ์บนเครือข่าย, ลองพิมพ์จาก host อื่น. ถ้าคุณสามารถมองเห็นเครื่องพิมพ์จากโฮสท์ของคุณ(ดู บทที่ 10 สำหรับคำสั่ง ping), คุณอาจลองใช้ไฟล์ที่ฟอร์แมทแล้วเช่น file.ps ส่งให้เครื่องพิมพ์, โดยการใช้ FTP client. ถ้ามันทำงาน, ระบบการพิมพ์อาจติดตั้งไม่ถูกต้อง. ถ้ามันไม่ทำงาน, อาจบางทีเครื่องพิมพ์ไม่เข้าใจฟอร์แมทที่คุณส่งให้มัน.

 เวบ GNU/Linux Printing site มีเทคนิคและเคล็ดลับการพิมพ์ให้ศึกษา.

8.4. Summary

8.4. บทสรุป

ระบบการพิมพ์ของลีนุกซ์มีมาพร้อมโปรแกรมการพิมพ์ที่มีพื้นฐานบนมาตรฐาน UNIX LPD tools, ไม่ว่ามันจะเป็นแบบ SystemV หรือ BSD. ข้างล่างเป็นรายการของคำสั่งที่เกี่ยวข้องกับการพิมพ์.

Table 8-1. New commands in chapter 8: Printing

Command Meaning
lpr or lp Print file
lpq or lpstat Query print queue
lprm or cancel Remove print job
acroread PDF viewer
groff Formatting tool
gv PostScript viewer
printconf Configure printers
xdvi DVI viewer
xpdf PDF viewer
*2ps Convert file to PostScript

8.5. Exercises

8.5. แบบฝึกหัด

 คอนฟิกและทดสอบเครื่องพิมพ์, ถ้าคุณสามารถใช้ root ลองสิ่งต่อไปนี้:

  •  ติดตั้งเครื่องพิมพ์โดยใช้ GUI ของระบบ. (GUI คือ Graphic User Interface)

  •  สั่งพิมพ์หน้าทดสอบด้วยการใช้ GUI.

  •  สั่งพิมพ์หน้าทดสอบด้วยการใชัคำสั่ง lp.

  •  สั่งพิมพ์จากโปรแกรมแอพพลิเคชั่น, ตัวอย่างเช่นโปรแกรม mozilla หรือ OpenOffice, เลือก File -> Print จากเมนู.

  •  ยกเลิกการเชื่อมต่อเครื่องพิมพ์ออกจากเครือข่ายหรือจากเครื่อง คอมพิวเตอร์ที่มันต่ออยู่. และถ้าคุณสั่งพิมพ์อะไรบางอย่างจะเกิดอะไรขึ้น?

 แบบฝึกหัดต่อไปนี้สามารถทำโดยไม่ต้องใช้ root.

  • ลองสร้างไฟล์ PostScript จากไฟล์ต้นฉบับต่างๆ (คือ HTML, PDF, man pages). ตรวจสอบผลลัพท์ด้วยคำสั่ง gv viewer.

  • ตรวจสอบว่า print daemon กำลังทำงาน.

  •  ลองสั่งพิมพ์ ดูว่าเกิดอะไรขึ้น?

  •  สร้างไฟล์โพสสคริปด้วยการใช้ Mozilla. ทดสอบด้วยคำสั่ง gv.

  •  เปลี่ยนมันให้เป็นฟอร์แมท PDF. ด้วยคำสั่ง xpdf

  •  มีวิธีสั่งพิมพ์ไฟล์ GIF จาก command line อย่างไร?

  • ใช้คำสั่ง a2ps เพื่อสั่งพิมพ์ /etc/profile ไปยังเอาท์พุทไฟล์. ทดสอบอีกครั้งดัวยคำสั่ง gv. เกิดอะไรขึ้นถ้าคุณไม่ระบุเอาท์พุทไฟล์?

Chapter 09. Fundamental Backup Techniques

Chapter 9.  พื้นฐานการแบ็คอัพข้อมูล

อุบัติเหตุเกิดขึ้นได้ทุกเวลา. ในบทนี้, เราจะอธิบายวิธีเก็บข้อมูลในที่ปลอดภัยด้วยการใช้โฮสท์อื่น, ฟล้อปปี้ดิสก์, CD-ROMs และเทป. เราจะอธิบายถึงการบีบอัดไฟล์ที่เป็นที่นิยมและคำสั่งในการเก็บเอกสารถาวร.

หลังจากที่เรียนจบ, คุณจะได้รู้วิธี:

 

  • Make, query and unpack file archives

  • Handle floppy disks and make a boot disk for your system

  • Write CD-ROMs

  • Make incremental backups

  • Create Java archives

  • Find documentation to use other backup devices and programs

  • Encrypt your data

9.1. Introduction

9.1. Introduction

แม้ว่าลีนุกซ์จะเป็นระบบปฏิบัติการที่ปลอดภัยที่สุดระบบหนึ่ง, และยังคงพัฒนาอย่างต่อเนื่อง, แต่ข้อมูลก็สามารถสูญหายได้. ส่วนมากแล้วข้อมูลที่หายมาจากความผิดพลาดของผู้ใช้, นานๆทีจะเกิดจากระบบทำงานผิดพลาด, เช่นไฟดับหรือดิสก์เสีย, ในกรณีนี้, การเก็บข้อมูลที่สำคัญไว้ในที่ปลอดภัยเป็นเรื่องที่ควรทำ.

9.1.1.  จัดเตรียมข้อมูล

9.1.1.1.  จัดเก็บข้อมูลด้วยคำสั่ง tar

ส่วนมาก, เราจะเก็บข้อมูลที่ต้องการแบ็คอัพไว้ในไฟล์เอกสารเดียว, ซึ่งเราจะทำการบีบอัดข้อมูลในภายหลัง. โพรเซสในการรวมไฟล์ทั้งหมดและตัดตัวอักษรว่างที่ไม่จำเป็นออก, ในลีนุกซ์, จะทำด้วยคำสั่ง tar. แรกเริ่ม tar ออกแบบให้ใช้กับ เทปแบ็คอัพ, แต่ก็สามารถนำมาใช้เก็บข้อมูล, ที่เรียกว่า tarballs.

tar มีหลายอ็อพชั่นให้เลือก, ที่ใช้บ่อยมีดังนี้:

  • -v: verbose แสดงรายละเอียด

  • -t: test,  แสดงข้อมูลของ tarball

  • -x: extract  ดึงข้อมูล archive

  • -c: create สร้างข้อมูล archive

  • -f archivedevice:  ระบุอุปกรณ์ที่ใช้สำหรับเป็นแหล่งที่จะดึงข้อมูล/เขียนข้อมูล tarball, อุปกรณ์ที่เป็นตัวดีฟ้อลท์คืออุปกรณ์เทปตัวแรก(ปกติจะเป็น /dev/st0 หรือไกล้เคียง) 

  • -j: filter through bzip2, see Section 9.1.1.2

 เป็นเรื่องปกติถ้าจะใช้คำสั่ง tar พร้อมอ็อพชั่นโดยไม่มีเครื่องหมาย dash-prefix, ดังตัวอย่างด้านล่าง

Note Use GNU tar for compatibility
 

 กรณีซอฟแวร์ผูกขาด, ข้อมูลที่ได้จากคำสั่ง tar ของระบบหนึ่ง, อาจใช้กันไม่ได้กับ tar ของอีกระบบ. นี่จะสร้างปัญหา, เช่นต้องการ recover ระบบที่ไม่เคยมีข้อมูลมาก่อน. ทางที่ดีควรใช้ GNU tar บนระบบทั้งหมดเพื่อไม่ให้ผู้ดูแลระบบน้ำตาร่วง. ลีนุกซ์จะใช้ GNU tar เสมอ. เมื่อทำงานกับระบบยูนิกซ์อื่น, ใช้คำสั่ง tar --help เพื่อดูว่าใช้เวอร์ชั่นใหนอยู่. ติดต่อผู้ดูแลระบบถ้าคุณไม่เห็นตัวอักษร GNU ในข้อมูลตัวช่วยนั้น.

 ตัวอย่างข้างล่าง, เอกสารข้อมูลจะถูกสร้างขึ้นและ unpacked.

gaby:~> ls images/
me+tux.jpg nimf.jpg

gaby:~> tar cvf images-in-a-dir.tar images/
images/
images/nimf.jpg
images/me+tux.jpg

gaby:~> cd images

gaby:~/images> tar cvf images-without-a-dir.tar *.jpg
me+tux.jpg
nimf.jpg

gaby:~/images> cd

gaby:~> ls */*.tar
images/images-without-a-dir.tar

gaby:~> ls *.tar
images-in-a-dir.tar

gaby:~> tar xvf images-in-a-dir.tar
images/
images/nimf.jpg
images/me+tux.jpg

gaby:~> tar tvf images/images-without-dir.tar
-rw-r--r-- gaby/gaby 42888 1999-06-30 20:52:25 me+tux.jpg
-rw-r--r-- gaby/gaby 7578 2000-01-26 12:58:46 nimf.jpg

gaby:~> tar xvf images/images-without-a-dir.tar
me+tux.jpg
nimf.jpg

gaby:~> ls *.jpg
me+tux.jpg nimf.jpg

ตัวอย่างนี้ยังแสดงความแตกต่างระหว่าง tared directory และ tarred files. มันช่วยให้ใช้งานในไดเร็กตอรี่ที่เก็บข้อมูลเท่านั้น, ดังนั้นไฟล์จะไม่ขยายไปทั่วเมื่อทำการ unpacked (ซึ่งบนระบบอื่น, ที่คุณอาจไม่รู้ว่าไฟล์ใหนที่มีอยู่แล้วและไฟล์ใหนที่ได้จากการดึงจาก avrhive)

 เมื่ออุปกรณ์ tape drive ต่ออยู่กับระบบคุณและคอนฟิกให้ใช้โดยผู้ดูแลระบบ, ชื่อไฟล์ที่ลงท้ายด้วย .tar จะถูกเปลี่ยนเป็นชื่ออุปกรณ์เทป, ดังตัวอย่าง:

tar cvf /dev/tape mail/

ไดเร็กตอรี่ mail และทุกไฟล์ข้างในจะถูกบีบอัดลงในไฟล์ที่เขียนลงบนเทปทันที. ข้อมูลไฟล์ที่เก็บจะแสดงด้วยเนื่องจากเราใช้อ็อพชั่น verbose.

9.1.1.2. Incremental backups with tar

คำสั่ง tar ยังรองรับการสร้าง incremental backups ด้วย, โดยใช้อ็อพชั่น -N. ด้วยอ็อพชั่นนี้, คุณสามารถระบุวันที่, และ tar จะ ตรวจเวลาที่มีการแก้ไขของไฟล์ที่ระบุอ้างอิงกับวันที่นี้. ถ้าไฟล์มีการเปลี่ยนแปลงหลังวันที่นี้, มันจะเก็บเข้าไว้ในแบ็คอัพ. ตัวอย่างข้างล่างใช้เวลา timestamp ของข้อมูล archive ก่อนหน้านี้เป็นข้อมูลวันที่. แรกสุด, archive เริ่มต้นจะถูกสร้างขึ้นและเวลาของการแบ็คอัพครั้งแรกจะแสดง. หลังจากนั้นจะทดลองสร้างไฟล์ใหม่, หลังจากที่เราสร้างแบ็คอัพใหม่, จะเห็นว่าไฟล์ที่เพิ่มเข้าไปมีเฉพาะไฟล์ใหม่ที่เราสร้างขึ้น

jimmy:~> tar cvpf /var/tmp/javaproggies.tar java/*.java
java/btw.java
java/error.java
java/hello.java
java/income2.java
java/income.java
java/inputdevice.java
java/input.java
java/master.java
java/method1.java
java/mood.java
java/moodywaitress.java
java/test3.java
java/TestOne.java
java/TestTwo.java
java/Vehicle.java

jimmy:~> ls -l /var/tmp/javaproggies.tar
-rw-rw-r-- 1 jimmy jimmy 10240 Jan 21 11:58 /var/tmp/javaproggies.tar

jimmy:~> touch java/newprog.java

jimmy:~> tar -N /var/tmp/javaproggies.tar \
-cvp /var/tmp/incremental1-javaproggies.tar java/*.java 2> /dev/null

java/newprog.java

jimmy:~> cd /var/tmp/

jimmy:~> tar xvf incremental1-javaproggies.tar
java/newprog.java

จะเห็นว่ามีคำสั่งรีไดเร็ก standard error ไปยัง /dev/null, ถ้าคุณไม่ใช้คำสั่งนี้, tar จะแสดงข้อมูลของไฟล์ที่ไม่มีการเปลี่ยนแปลง, บอกให้คุณรู้ว่ามันจะไม่ถูกนำไปเก็บ.

วิธีทำงานแบบนี้มีข้อเสียที่มันจะดูเวลา timestamps บนไฟล์. ตัวอย่างเมื่อคุณดาวน์โหลด archive ลงไปในไดเร็กตอรี่ที่มีข้อมูลแบ็คอัพ, และ archive มีไฟล์ที่ถูกสร้างเมื่อสองปีที่แล้ว. เมื่อตรวจเช็ค timestamps ของไฟล์เหล่านี้กับ timestamp ของ initial archive ที่สร้างขึ้นทีหลัง, ไฟล์ใหม่จะมองว่ามันเก่าเกินไฟล์ที่จะ tar, และมันจะไม่ได้นำไปเก็บใน incremental backup ที่สร้างด้วยอ็อพชั่น -N.

ทางที่ดีคือใช้อ็อพชั่น -g, ซึ่งจะสร้างรายการไฟล์ที่แบ็คอัพ. เมื่อสร้าง incremental backups, ไฟล์จะถูกเช็คกับรายการนี้. ตัวอย่างแสดงวิธีการทำงาน:

jimmy:~> tar cvpf work-20030121.tar -g snapshot-20030121 work/
work/
work/file1
work/file2
work/file3

jimmy:~> file snapshot-20030121
snapshot-20030121: ASCII text

วันต่อมา, ผู้ใช้ jimmy แก้ไขไฟล์ file3 เล็กน้อย, และสร้างไฟล์ file4. เมื่อหมดวัน, เขาสร้างแบ็คอัพใหม่:

jimmy:~> tar cvpf work-20030122.tar -g snapshot-20030121 work/
work/
work/file3
work/file4

นี่เป็นตัวอย่างแบบง่าย, แต่คุณสามารถใช้คำสั่งเหล่านี้ใน cronjob (ดู หัวข้อ 4.4.4), ซึ่งระบุชื่อไฟล์สำหรับการแบ็คอัพรายสัปดาห์และรายวัน. ชื่อไฟล์ที่ระบุนี้ควรเปลี่ยนเมื่อทำการแบ็คอัพแบบ full, กรณีเริ่มสร้าง archive.

 ข้อมูลเพิ่มเติมดูได้จากคู่มือ tar.

Tip The real stuff
 

คุณอาจสังเกตุพบว่า tar ใช้ได้ดีเมื่อทำงานกับไดเร็กตอรี่ง่ายๆ, หรือชุดของไฟล์ที่มีคุณสมบัติไกล้เคียงกัน. แต่เมื่อต้องทำงานกับข้อมูลใหญ่เช่นดิสก์หรือพาร์ติชั่น, คุณต้องการโปรแกรมที่มีความสามารถมากกว่า. เราได้อธิบายถึง tar เพราะมันใช้งานอย่างแพร่หลายในการแจกจ่ายโปรแกรม. คุณจะได้ใช้มันบ่อยถ้าคุณต้องการติดตั้งซอฟแวร์ใหม่ที่ไฟล์ข้อมูลมาในรูปแบบ ที่เรียกว่า "conpressed tarball". ดู หัวข้อ 9.3 สำหรับวิธีการแบ็คอัพที่ง่ายในการทำแบ็คอัพเป็นประจำ.

9.1.1.3.  การบีบอัดและคลายด้วย gzip หรือ bzip2

 ข้อมูลที่อยู่ใน tarball, สามารถบีบอัดด้วย zip tools. คำสั่ง gzip จะใส่ .gz ต่อท้ายชื่อไฟล์และลบไฟล์ต้นฉบับทิ้ง.

jimmy:~> ls -la | grep tar
-rw-rw-r-- 1 jimmy jimmy 61440 Jun 6 14:08 images-without-dir.tar

jimmy:~> gzip images-without-dir.tar

jimmy:~> ls -la images-without-dir.tar.gz
-rw-rw-r-- 1 jimmy jimmy 50562 Jun 6 14:08 images-without-dir.tar.gz

 การคลายการบีบอัดของไฟล์ gzipped ใช้อ็อพชั่น -d.

bzip2 ทำงานคล้ายกัน, แต่มันมีประสิทธิภาพสูงกว่า, ดังนั้นไฟล์ที่ได้จะมีขนาดเล็กกว่า. ดูคู่มือ bzip2 ในรายละเอียด.

ชุดโปรแกรมลีนุกซ์มักจะแจกจ่ายในรูป gzipped taball. สิ่งที่ควรทำหลังจากได้ไฟล์มาและทำการ unpack ไฟล์แล้วคือการหาไฟล์ README และอ่านก่อน. ในไฟล์นี้จะมีข้อมูลทั่วไปเกี่ยวกับการติดตั้งโปรแกรม.

 คำสั่งสำหรับทำงานกับไฟล์ gzipped คือคำสั่ง tar รูปแบบคำสั่งคือ

tar zxvf file.tar.gz

 สำหรับการ unzip และ untar  ไฟล์ .tar .gz หรือ .tgz. ใช้คำสั่ง

tar jxvf file.tar.bz2

สำหรับการคลายการบีบอัดข้อมูลของไฟล์ที่เข้ารหัสด้วย bzip2.

9.1.1.4. Java archives

โครงการ GNU มี jar tool สำหรับสร้าง Java archives. มันคือ Java แอพพลิเคชั่นที่รวมไฟล์หลายๆไฟล์เข้าเป็นไฟล์ JAR archive ไฟล์เดียว. และยังทำการบีบอัดข้อมูลและคลายข้อมูล, โดยใช้หลักการ ZIP และ ZLIB format,  จุดประสงค์หลักของการออกแบบ jar เพื่อใช้กับการรวบรวมแพ็กเก็จของ Java code, applet และ/หรือจาวาแอพพลิเคชั่นให้รวมอยู่ในไฟล์เดียว. เมื่อรวมอยู่ในไฟล์เดียว, คอมโพเน้นท์ต่างๆ ของจาวาแอพพลิเคชั่นสามารถดาวน์โหลดได้เร็วขึ้นมาก.

ไม่เหมือนกับ tar, คำสั่ง jar จะบีบอัดข้อมูลเสมอ, ทำงานโดยอิสระเพราะมันเป็นโปรแกรม zip สำหรับใช้กับจาวา. และยังมีความสามารถเข้ารหัสบางไฟล์ในเอกสารได้, ทำให้ไฟล์ต้นฉบับมีความปลอดภัยของข้อมูล.

รูปแบบคำสั่งจะเหมือนกับการใช้คำสั่ง tar, ดูรายละเอียดได้ด้วยคำสั่ง info jar.

Note tar, jar and symbolic links
 

ข้อควรสังเกตุหนึ่งที่ไม่ค่อยพบในเอกสารทั่วไปคือ jar จะ follow symbolic links. ข้อมูลที่ลิ้งค์เหล่านี้ชี้ไปจะถูกนำมารวมเข้าใน archive. ปกติคำสั่ง tar จะแบ็คอัพเฉพาะ symbolic link, แต่สามารถใช้อ็อพชั่น -h เพื่อทำการ follow symbolic link ได้.

9.1.1.5.  การส่งต่อข้อมูลของคุณ

การเก็บสำเนาข้อมูลของคุณบนเครื่องโฮสต์อื่นเป็นเรื่องไม่ยาก. ดู บทที่ 10 สำหรับข้อมูลเพิ่มเติมในการใช้คำสั่ง scp, ftp และอื่นๆ.

 ในหัวข้อถัดไปเราจะพูดถึงอุปกรณ์เก็บข้อมูลแบ็คอัพภายใน.

9.2. Moving your data to a backup device

9.2. การย้ายข้อมูลไปยังอุปกรณ์สำรองข้อมูล

9.2.1.  สร้างสำเนาบนแผ่นฟล้อปปี้

9.2.1.1.  การฟอร์แมทแผ่นฟล้อปปี้

ในลีนุกซ์ส่วนมาก, ผู้ใช้สามารถเข้าถึงอุปกรณ์ฟล้อปปี้ดิสก์. ชื่อของอุปกรณ์อาจแตกต่างกันขึ้นกับขนาดและจำนวนของฟล้อปปี้ไดรว์, ถ้าคุณไม่แน่ใจให้ถามผู้ดูแลระบบ. ในบางระบบ, อาจเป็น /dev/floppy, หรือ /dev/fd0(สำหรับ auto-detecting floppy device) หรือ /dev/fd0h1440(สำหรับฟล้อปปี้ 1.44MB).

fdformat เป็นโปรแกรมสำหรับฟอร์แมทฟล้อปปี้แบบ low level. คำสั่งนี้มีอ็อพชั่นเป็นชื่อของฟล้อปปี้. และมันจะแสดงข้อความ error ถ้าแผ่นฟล้อปปี้นั้น write-protected.

emma:~> fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
emma:~>

ส่วนคำสั่ง mformat (จากชุดโปรแกรม mtools)ใช้สร้างแผ่นฟล้อปปี้ที่ใช้ฟอร์แมท DOS-compatible ซึ่งจะสามารถใช้งานได้ด้วยคำสั่ง mcopy, mdir และคำสั่งตระกูล m-commands.

 โปรแกรมในแบบกราฟฟิกก็มีให้ใช้.

Figure 9-1. Floppy formatter

หลังจากฟล้อปปี้ถูกฟอร์แมทแล้ว, มันสามารถนำไป mounted เข้ากับระบบไฟล์และเรียกใช้งานได้ตามปกติ, ผ่านไดเร็กตอรี่ /mnt/floppy.

ถ้าคุณต้องการใช้แผ่นฟล้อปปี้สำหรับบูทระบบ, ติดตั้งยูทิลิตี้ mkbootdisk, จะทำให้บูทระบบจากฟล้อปปี้ดิสก์ได้.

9.2.1.2. Using the dd command to dump data

คำสั่ง dd สามารถใช้เพื่อใส่ข้อมูลลงในดิสก์, หรืออ่านมันออกมา, ขึ้นอยู่กับว่าจะให้มันเป็นอุปกรณ์อินพุทหรือเอาท์พุท. ยกตัวอย่าง:

gaby:~> dd if=images-without-dir.tar.gz of=/dev/fd0H1440
98+1 records in
98+1 records out

gaby~> dd if=/dev/fd0H1440 of=/var/tmp/images.tar.gz
2880+0 records in
2880+0 records out

gaby:~> ls /var/tmp/images*
/var/tmp/images.tar.gz

หมายเหตุ การ dumping จะทำกับอุปกรณ์ที่ยังไม่ได้ mounted. ฟล้อปปี้ที่สร้างขึ้นด้วยวิธีนี้จะ mount เข้าระบบไฟล์ไม่ได้, มันเป็นวิธีเพื่อสร้างแผ่นบูทหรือแผ่นกู้ข้อมูล. ดูคู่มือคำสั่ง dd ในรายละเอียด.

This tool is part of the GNU coreutils package. โปรแกรมนี้อยู๋ใน GNU coreutils package.

Note Dumping disks
 

 คำสั่ง dd สามารถใช้เพื่อสร้าง raw dump ของฮาร์ดดิสก์ทั้งลูก.

9.2.2. Making a copy with a CD-writer

ในบางระบบผู้ใช้สามารถใช้อุปกรณ์ CD-writer. โดยข้อมูลตัองมีการฟอร์แมทก่อน. โดยใช้คำสั่ง mkisofs ในไดเร็กตอรี่ที่มีไฟล์ที่คุณต้องการแบ็คอัพ. ตรวจสอบพื้นที่ของดิสก์ว่าเหลือเพียงพอหรือเปล่าด้วยคำสั่ง df , เพราะว่าไฟล์ที่จะสร้างขึ้นใหม่จะมีขนาดเดียวกับข้อมูลรวมของไฟล์ในไดเร็กตอรี่ปัจจุบัน.

[rose@blob recordables] df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/hde5 19G 15G 3.2G 82% /home

[rose@blob recordables] du -h -s .
325M .

[rose@blob recordables] mkisofs -J -r -o cd.iso .
<--snap-->
making a lot of conversions
<--/snap-->
98.95% done, estimate finish Fri Apr 5 13:54:25 2002
Total translation table size: 0
Total rockridge attributes bytes: 35971
Total directory bytes: 94208
Path table size(bytes): 452
Max brk space used 37e84
166768 extents written (325 Mb)

อ็อพชั่น -J และ -r ใช้สำหรับสร้าง CD-ROM ที่สามารถนำไป mount ในระบบอื่นได้, ดูคู่มือในรายละเอียด, หลังจากนั้น, สามารถเขียนข้อมูลลง CD ด้วยโปรแกรม cdrecord :

[rose@blob recordables] cdrecord -dev 0,0,0 -speed=8 cd.iso
Cdrecord 1.10 (i686-pc-linux-gnu) (C) 1995-2001 Joerg Schilling
scsidev: '0,0,0'
scsibus: 0 target: 0 lun: 0
Linux sg driver version: 3.1.20
Using libscg version 'schily-0.5'
Device type : Removable CD-ROM
Version : 0
Response Format: 1
Vendor_info : 'HP '
Identification : 'CD-Writer+ 8100 '
Revision : '1.0g'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : SWABAUDIO
Starting to write CD/DVD at speed 4 in write mode for single session.
Last chance to quit, starting real write in 0 seconds.
Operation starts.

ขึ้นอยู่กับความเร็วของ CD-writer ของคุณ, จนกระทั่งการทำงานเสร็จสิ้น, คุณจะได้ข้อความแสดงการทำงาน:

Track 01: Total bytes read/written: 341540864/341540864 
(166768 sectors).

มีโปรแกรมกราฟฟิกบางตัวให้คุณทำงานได้ง่ายขึ้น. หนึ่งในนั้นคือ xcdroast, ซึ่งหามาใช้ได้ฟรีจาก the X-CD-Roast web site และส่วนมากจะมีมากับระบบลีนุกซ์ใน GNU ไดเร็กตอรี่. โปรแกรมจัดการเดสก์ท้อปของทั้ง KDE และ GNOME มีโปรแกรมสำหรับสร้าง CD ด้วยตัวคุณเอง.

9.2.3. Backups on/from jazz drives, USB devices and other removables

อุปกรณ์เหล่านี้ปกติจะ mounted เข้ากับระบบไฟล์. หลังจากกระบวนการ mount แล้ว, มันสามารถเข้าใช้ได้เหมือนกับไดเร็กตอรี่ปกติ, ดังนั้นคุณสามารถใช้คำสั่งทั่วไปในการจัดการไฟล์บนตัวอุปกรณ์.

ตัวอย่างข้างล่าง, เราจะก้อปปี้ไฟล์อิมเมจในกล้องถ่ายรูปดิจิตอลที่มีพอร์ท USB ไปยังฮาร์ดดิสก์:

robin:~> mount /mnt/camera

robin:~> mount | grep camera
/dev/sda1 on /mnt/camera type vfat (rw,nosuid,nodev)

ถ้าระบบมองเห็นกล้องดิจิตอลเป็นอุปกรณ์เก็บข้อมูล USB ที่เคยต่อเข้าระบบ, เป็นเรื่องที่ดี. แต่ ข้อควรจำคืออุปกรณ์ USB จะถูกจัดหมวดหมู่ให้อยู่ที่ /dev เมื่อมันต่อเข้าระบบ. ดังนั้น, ถ้าคุณต่อ USB stick เข้ากับระบบในครั้งแรก, มันจะถูกจัดให้อยู่ใน /dev/sda, และหลังจากนั้นถ้าคุณต่อกล้องดิจิตอล, มันจะจัดให้อยู่ที่ /dev/sdb  ทำให้ไม่เหลือดีไวส์สำหรับ SCSI disk อื่น, ซึ่งจะถูกจัดให้อยู่ที่ /dev/sd*. ในระบบรุ่นใหม่, ตั้งแต่เคอร์เนล 2.6, จะใช้ระบบ hot plug ที่เรียกว่า HAL(Hardsare Abstraction Layer) ทำให้ไม่เป็นภาระกับผู้ใช้. ถ้าคุณอยากจะรู้ว่าอุปกรณ์ของคุณต่ออยู่กับ device ใหน, ใช้คำสั่ง dmesg หลังจากที่เสียบมันเข้ากับระบบ.

 หลังจากนั้นคุณจะสามารถก้อปปี้ไฟล์:

robin:~> cp -R /mnt/camera/* images/

robin:~> umount /mnt/camera

 ทำนองเดียวกัน, jazz drive สามารถ mount บน /mnt/jazz.

อาจมีการแก้ไขเพิ่มเติมข้อมูลใน /etc/modules.comf และ /etc/fstab เพื่อให้มันทำงาน. ดูข้อมูลที่เกี่ยวข้องกับฮาร์ดแวร์ HOWTOs ในรายละเอียด. ในระบบที่ใช้เคอร์เนล 2.6.x หรือสูงกว่า, คุณอาจต้องอ่าน man pages ของคำสั่ง modprobe และ modprobe.conf.

9.2.4. Backing up data using a tape device

การแบคอัพข้อมูลด้วยเทปทำได้ด้วยคำสั่ง tar (ดูข้างบน). โปรแกรม mt ใช้สำหรับควบคุมอุปกรณ์เทปแม่เหล็ก, เช่น /dev/st0. หนังสือเกี่ยวกับการใช้เทปแบคอัพสามารถเขียนได้เป็นเล่ม, ดังนั้น, คุณสามารถหาข้อมูลเพิ่มเติมตามรายการที่ระบุใน Appendix B. ข้อควรจำคือการแบ็คอัพดาต้าเบสจะใช้วิธีอื่นเนื่องจากโครงสร้างของมันแตกต่างจากไฟล์ธรรมดา.

ปกติคำสั่งแบ็คอัพที่เหมาะสมจะใส่ไว้ในไดเร็กตอรี่ cron เพื่อให้มันทำงานเป็นประจำ. ในระบบใหญ่, ชุดโปรแกรม Amanda ที่หามาใช้ได้ฟรีหรือชุดที่เสียเงินเป็นโปรแกรมที่รองรับการแบ็คอัพเครื่อง หลายๆตัว, ทำงานกับเทป, อย่างไรก็ตาม, เรื่องนี้เป็นเรื่องของผู้ดูแลระบบที่ต้องทำและอยู่เกินขอบเขตของหนังสือ เล่มนี้.

9.2.5.  โปรแกรมเครื่องมือที่มีมากับระบบ

ระบบลีนุกซ์ส่วนมากมีโปรแกรมเครื่องมืออำนวยความสะดวกให้คุณ. ตัวอย่าง:

  • SuSE:โปรแกรม YaST มีให้ใช้สำหรับ backup และ restore modules.

  • RedHat: โปรแกรม File Roller tool สามารถดูโครงสร้างของไฟล์ archives (ที่ถูกบีบอัด). เป็นที่นิยมใช้ในชุดโปรแกรม X-CD-Roast สำหรับย้ายแบคอัพไปยังอุปกรณ์เก็บข้อมูลภายนอก.

  • Mandrake: ชุดโปรแกรม X-CD-Roast.
  •  สายพันธ์ลีนุกซ์ส่วนมากมีโปรแกรม dump และ restore ของ BSD ให้ใช้สร้างแบคอัพของระบบไฟล์ ext2 และ ext3. โปรแกรมนี้สามารถเขียนลงอุปกรณ์หรือระบบไฟล์แบบบิทต่อบิท, เช่นเดียวกับ dd, วิธีนี้สามารถใช้แบคอัพไฟล์ชนิดพิเศษดังเช่นไฟล์ ใน /dev.

9.3. Using rsync

9.3. Using rsync

9.3.1. Introduction

โปรแกรม rsync เป็นเครื่องมือในการแบคอัพข้ามเครื่องที่ทำงานได้เร็วและมีประสิทธิภาพ. มันเป็นเครื่องมือมาตรฐานบนยูนิกซ์และระบบเลียนแบบยูนิกซ์, ตั้งค่าคอนฟิกง่ายและใช้ได้ในสคริป. คำว่า r ใน rsync หมายถึง "remote", อย่าคิดมากกับความหมายตามตัวอักษร. อุปกรณ์ "remote" อาจจะเป็นอุปกรณ์ USB ที่ใช้เก็บข้อมูลหรือพาร์ติชั่นอื่นของฮาร์ดดิสก์ของคุณ, ไม่จำเป็นต้องมีสองเครื่องแยกกัน.

9.3.2. An example: rsync to a USB storage device

ดังที่ได้อธิบายใน หัวข้อ 3.1.2.3, เราจะทำการ mount อุปกรณ์ก่อน. ในการทำนี้, ควรใช้สิทธิ์ root:

root@theserver# mkdir /mnt/usbstore

root@theserver# mount -t vfat /dev/sda1 /mnt/usbstore

Note Userfriendly
 

ลีนุกซ์หลายรุ่นอนุญาตผู้ใช้ทั่วไปให้ใช้อุปกรณ์ removable ได้และจะ mount อุปกรณ์ USB, CD-ROM, และอุปกรณ์ถอดได้อื่นๆแบบอัตโนมัติ.

หมายเหตุ วิธีการในตัวอย่างนี้ต้องใช้โปรแกรมรองรับ USB ในระบบของคุณ. ดู the USB Guide สำหรับข้อแนะนำถ้าวิธีการตามหนังสือไม่ทำงาน. ตรวจสอบด้วยคำสั่ง dmesg ว่า /devsda1 เป็นอุปกรณ์ที่ mount.

หลังจากนั้น คุณสามารถเริ่มทำการแบ็คอัพ, ตัวอย่างนี้จะแบ็คอัพไดเร็กตอรี่ /home/karl:

karl@theserver:~> rsync -avz /home/karl/ /mnt/usbstore

 คำแนะนำเพิ่มเติมยังคงเหมือนเดิมคือดู man pages.

9.4. Encryption

9.4. การเข้ารหัสข้อมูล

9.4.1. General remarks

9.4.1.1. ทำไมคุณจึงควรเข้ารหัสข้อมูล?

การเข้ารหัสคือการทำให้ข้อมูลปลอดภัย. ในเรื่องของการแบ็คอัพ, การเข้ารหัสมีประโยชน์มาก, ตัวอย่างถ้าคุณต้องการทิ้งข้อมูลแบ็คอัพไว้ในที่ๆคุณไม่สามารถควบคุมการ เข้าถึงได้, เช่นในเครื่องเซิฟเวอร์ของผู้ให้บริการ. อีกตัวอย่างได้แก่, การเข้ารหัสอีเมล์: ปกติเมล์จะไม่เข้ารหัสและถูกส่งผ่านเครือข่ายอินเตอร์เนท. ถ้าข้อมูลในเมล์คุณมีเนื้อหาที่เป็นความลับ, ทางที่ดีควรเข้ารหัสมัน.

9.4.1.2. GNU Privacy Guard

ในระบบลีนุกซ์คุณจะพบ GnuPG, โปรแกรม GNU Privacy Guard, ซึ่งเป็นชุดโปรแกรมที่มีความสามารถเทียบเท่า PGP (Prety Good Privacy) โปรแกรมที่มีขายในท้องตลาด.

ในหนังสือเล่มนี้เราจะอธิบายวิธีใช้งานแบบง่ายของโปรแกรมเข้ารหัสและแสดง วิธีการสร้าง encryption key และใช้มันในการเข้ารหัสของคุณเอง, ซึ่งทำให้คุณสามารถเก็บข้อมูลไว้ในที่สาธารณะได้. รายละเอียดเพิ่มเติมเกี่ยวกับการใช้สามารถหาอ่านได้ใน man page ของคำสั่งต่างๆ.

9.4.2.  การสร้าง key

ก่อนที่คุณจะเริ่มเข้ารหัสข้อมูลของคุณ, คุณต้องสร้างกุญแจขึ้นมาหนึ่งคู่. ประกอบด้วย private และ public key. คุณสามารถส่ง public key ไปให้ผู้ที่เกี่ยวข้อง, ผู้ที่สามารถใช้มันในการเข้ารหัสสำหรับคุณ, เพื่อที่คุณจะถอดรหัสด้วย private key กุญแจอีกดอกของคุณ. คุณต้องเก็บรักษา private key, ไม่ส่งไปให้บุคคลอื่น,ไม่เช่นนั้น เขาเหล่านั้นจะสามารถถอดรหัสข้อมูลที่ส่งให้คุณ. เพื่อป้องกันไม่ให้เกิดเหตุไม่คาดฝัน, private key จะถูกป้องกันด้วยรหัสผ่าน. กุญแจรหัสสองดอกสามารถสร้างขึ้นด้วยคำสั่ง :

willy@ubuntu:~$ gpg --key-gen
gpg (GnuPG) 1.4.2.2; Copyright (C) 2005 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: directory `/home/willy.gnupg' created
gpg: new configuration file `/home/willy/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/willy/.gnupg/gpg.conf' are not yet
active during this run
gpg: keyring `/home/willy/.gnupg/secring.gpg' created
gpg: keyring `/home/willy/.gnupg/pubring.gpg' created
Please select what kind of key you want:
(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n month
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the
user ID from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Willy De Wandel
Email address: wdw@mvg.vl
Comment: Willem
You selected this USER-ID:
"Willy De Wandel (Willem) <wdw@mvg.vl>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Passphrase:

ถึงตอนนี้ให้ใส่รหัสผ่าน. ซึ่งควรจะเป็นประโยค, ยิ่งยาว, ยิ่งดี, มีเงื่อนไขอันเดียวคือคุณควรจะจำมันได้ตลอด. สำหรับการยืนยัน, คุณต้องใส่ประโยคเดิมอีกครั้ง.

และกุญแจจะถูกสร้างโดยโปรแกรมที่สร้างตัวเลขสุ่ม,และข้อมูลอื่นของระบบ, จึงเป็นความคิดที่ดีที่จะรันบางโปรแกรมในตอนนี้, และป้อนข้อมูลสุ่มในหน้าต่างแอพพลิเคชั่นนั้น, ด้วยวิธีนี้, จะทำให้โปรแกรม GPG สร้างกุญแจที่ซับซ้อนและยากที่จะคาดเดา.

9.4.3. About your key

เมื่อสร้างกุญแจแล้ว, คุณจะได้รับข้อความเกี่ยวกับ fingerprint. ซึ่งเป็นตัวเลข hexadecimal จำนวน 40 ตัว, ซึ่งเป็นตัวเลขที่ยาวและยากที่จะสร้างให้ซ้ำกันได้ในคอมพิวเตอร์ใดๆ. คุณมั่นใจได้ว่ามันปลอดภัย. ข้อมูลในกุญแจจะประกอบด้วยชื่อของคุณและตัวเลข hexadecimal อีก 8 ตัว.

คุณสามารถดูข้อมูลเกี่ยวกับกุญแจของคุณดังด้วยคำสั่งตามตัวอย่าง:

willy@ubuntu:~$ gpg --list-keys
/home/willy/.gnupg/pubring.gpg
------------------------------
pub 1024D/BF5C3DBB 2006-08-08
uid Willy De Wandel (Willem) <wdw@mvg.vl>
sub 4096g/A3449CF7 2006-08-08

ตัว key ID ของกุญแจนี้คือ "BF5C3DBB". คุณสามารถส่ง key ID และชื่อของคุณไปยัง key server, ดังนั้นบุคคลอื่นสามารถใช้ข้อมูลนี้ในการเข้ารหัสสำหรับคุณ. อีกวิธี, คุณสามารถส่งกุญแจ public key นี้ไปถึงบุคคลที่ต้องการมัน. ส่วนที่เป็น public part ของกุญแจเป็นตัวเลขยาวที่คุณสามารถดูได้ด้วยการใช้อ็อพชั่น --export ในคำสั่ง gpg:

gpg --export -a

อย่างไรก็ตาม, หนังสือนี้จะอธิบายพอสังเขป, อ่าน gpg man pages ถ้าคุณต้องการรายละเอียดมากกว่านี้.

9.4.4. Encrypt data

ตอนนี้คุณสามารถเข้ารหัสไฟล์ .tar archive หรือไฟล์ที่บีบอัดแล้ว, ก่อนที่จะเก็บลงในอุปกรณ์เก็บข้อมูลหรือส่งไปยัง backup server, ใช้คำสั่ง gpg ตามนี้:

gpg -e -r (part of) uid archive

อํอพชั่น -e บอกให้ gpg เข้ารหัส, อ็อพชั่น -r ระบุถึงคนที่จะเข้ารหัสถึง. จำไว้ว่ามีคนที่ชื่อ ตามอ็อพชั่น -r เท่านั้นที่จะถอดรหัสได้. ตัวอย่าง:

willy@ubuntu:~$ gpg -e -r Willy /var/tmp/home-willy-20060808.tar

9.4.5.  การถอดรหัสไฟล์

ใช้อ็อพชั่น -d, คุณสามารถถอดรหัสไฟล์ที่เข้ารหัสมาให้คุณ. ข้อมูลจะแสดงทางหน้าจอ, แต่ข้อมูลที่เข้ารหัสยังคงอยู่ในดิสก์. ถ้าเป็นข้อมูลอื่นนอกเหนือจากข้อความตัวอักษรที่คุณอ่านได้, คุณอาจต้องการเก็บข้อมูลที่ถอดรหัสแล้ว, เพื่อที่คุณจะเอาไปเปิดดูด้วยโปรแกรมอื่น. วิธีการทำได้โดยใส่อ็อพชั่น -o ให้คำสั่ง gpg:

willy@ubuntu:~$ gpg -d -o /var/tmp/home-willy-decrypt.tar /var/tmp/home-willy-20060808.tar.gpg

You need a passphrase to unlock the secret key for
user: "Willy De Wandel (Willem) <wdw@mvg.vl>"
4096 ELG-E key, ID A3449CF7, created 2006-08-08 (main key ID BF5C3DBB)

gpg: encrypted with 4096-bit ELG-E key, ID A3449CF7, created 2006-08-08
"Willy De Wandel (Willem) <wdw@mvg.vl>"

Warning No password = no data
 

ถ้าคุณจำรหัสผ่านของคุณไม่ได้, ข้อมูลจะสูญหาย. แม้แต่ผู้ดูแลระบบก็ไม่สามารถถอดรหัสข้อมูลได้. นั่นเป็นเหตุให้สำเนาของกุญแจมีความสำคัญและบางครั้งก็นำไปเก็บไว้ในตู้เซฟ ของธนาคาร.

9.5. Summary

9.5. บทสรุป

 คำสั่งที่เกี่ยวข้องกับการแบคอัพ:

Table 9-1. New commands in chapter 9: Backup

Command Meaning
bzip2 A block-sorting file compressor.
cdrecord Record audio or data Compact Disks from a master.
dd Convert and copy a file
fdformat Low-level formats a floppy disk.
gpg Encrypt and decrypt data.
gzip Compress or expand files.
mcopy Copy MSDOS files to/from UNIX.
mdir Display an MSDOS directory.
mformat Add an MSDOS file system to a low-level formatted floppy disk.
mkbootdisk Creates a stand-alone boot floppy for the running system.
mount Mount a file system (integrate it with the current file system by connecting it to a mount point).
rsync Synchronize directories.
tar Tape archiving utility, also used for making archives on disk instead of on tape.
umount Unmount file systems.

9.6. Exercises

9.6. แบบฝึกหัด

  •  สร้าง backup copy ของไดเร็กตอรี่โฮมของคุณในไดเร็กตอรี่ /var/tmp โดยใช้คำสั่ง tar. หลังจากนั้นบีบอัดข้อมูลไฟล์ด้วยคำสั่ง gzip หรือ bzip2. สร้าง tarred file ที่สมบูรณ์, ที่ไม่ซับซ้อนเมื่อทำการ unpacking.

  •  ทำการฟอร์แมทแผ่นฟล้อปปี้และเก็บบางไฟล์จากโฮมไดเร็กตอรี่ของคุณลง ไปในฟล้อปปี้. แลกแผ่นฟล้อปปี้กับเพื่อนข้างๆที่เรียนและทำการดึงข้อมูลจากฟล้อปปี้ของ เพื่อนมาใส่ในโฮมไดเร็กตอรี่ของคุณ.

  •  ทำการฟอร์แมทฟล้อปปี้โดยใช้ DOS format. ใช้ mtools เพื่อใส่ไฟล์และลบไฟล์บนฟล้อปปี้.

  • เกิดอะไรกับแผ่นฟล้อปปี้ที่ไม่ได้ฟอร์แมทเมื่อคุณต้องการเม้าท์มันเข้าในระบบไฟล์.

  •  ถ้าคุณมี USB thumbdrive ลองใส่ไฟล์ลงใน USB drive นั้น.

  •  ใช้คำสั่ง rsync , สร้างก้อปปี้ของไดเร็กตอรี่โฮมของคุณไปไว้ในเครื่องอื่นหรือเครื่องเดิม.

  •  เมื่อทิ้งไฟล์ไว้ในเครือข่าย, วิธีที่ดีที่สุดคือให้เข้ารหัสมัน. ลองสร้างไฟล์ tar ของไดเร็กตอรี่โฮมของคุณและเข้ารหัสมัน.

Chapter 10. Networking

Chapter 10. ระบบเครือข่าย

เมื่อมาพูดถึงการทำงานบนเครือข่าย. ลีนุกซ์เป็นระบบปฏิบัติการตัวเลือกหนึ่ง, ไม่เพียงเพราะมันมีระบบเนทเวิร์ครวมอยู่ในระบบปฏิบัติการของมันเองและมี โปรแกรมและแอพพลิเคชั่นฟรีที่หลากหลายให้เท่านั้น, แต่เพราะความแข็งแกร่งที่ทำงานภายใต้โหลดหนักๆที่ผ่านการทดสอบเป็นเวลานาน จากการ debugging และ testing ในโครงการ Open Source project.

หนังสือหลายเล่มที่เขียนเกี่ยวกับลีนุกซ์และเนทเวิร์ค, แต่เพื่อให้มองเห็นคร่าวๆในบทนี้, หลังจากจบบท, คุณจะเรียนรู้เกี่ยวกับ

 

  • Supported networking protocols

  • Network configuration files

  • Commands for configuring and probing the network

  • Daemons and client programs enabling different network applications

  • File sharing and printing

  • Remote execution of commands and applications

  • Basic network interconnection

  • Secure execution of remote applications

  •  

10.1. Networking Overview

10.1. ภาพรวมของระบบเครือข่าย

10.1.1. The OSI Model

โพรโตคอลคือ, ชุดของวิธีการติดต่อสื่อสาร(rules for communication)

วิธีการที่จะได้ข้อมูลบนเครือข่าย, ยกตัวอย่างการส่งอีเมล์จากเครื่องคอมพิวเตอร์ของคุณไปยังเครื่องคอมพิวเตอร์ อื่นที่สุดขอบโลก, ต้องใช้อุปกรณ์ hardware และ software หลายตัวในการทำงานร่วมกัน.

อุปกรณ์ฮาร์ดแวร์และซอฟแวร์ที่แตกต่างกันเหล่านี้ติดต่อสื่อสารกันด้วย ภาษาที่แตกต่างกัน. จินตนาการถึงโปรแกรมอีเมล์: มันสามารถคุยกับระบบปฏิบัติการของคอมพิวเตอร์, ผ่านโพรโตคอลเฉพาะ, แต่มันไม่สามารถคุยกับคอมพิวเตอร์ฮาร์ดแวร์. คุณต้องใช้โปรแกรมพิเศษในระบบปฏิบัติการที่ทำหน้าที่นี้. พูดอีกอย่าง, คอมพิวเตอร์ต้องการติดต่อกับสายโทรศัพท์หรือวิธีต่อกับอินเตอร์เนทแบบอื่น. และการทำงานหลังฉากนี้, อุปกรณ์เครือข่ายก็ต้องการติดต่อกันเพื่อส่งอีเมล์ของคุณจากเครื่องหนึ่งไป อีกเครื่อง, จนกระทั่งถึงเครื่องคอมพิวเตอร์ปลายทาง.

โพรโตคอลการติดต่อที่แตกต่างกันนี้แบ่งออกได้เป็น 7 layers, ซึ่งรู้จักกันในชื่อ  Open System Interconnection Refference Model,เรียกย่อๆว่า OSI Model. เพื่อให้เข้าใจง่าย, โมเดลนี้ถูกลดลงเหลือ 4 layer, ดังแสดงในตารางข้างล่าง:

Table 10-1. The simplified OSI Model

Layer name Layer Protocols
Application layer HTTP, DNS, SMTP, POP, ...
Transport layer TCP, UDP
Network layer IP, IPv6
Network access layer PPP, PPPoE, Ethernet

แต่ละเลเยอร์สามารถเรียกใช้งานเลเยอร์ที่อยู่ด้านล่างเท่านั้น; แต่ละเลเยอร์สามารถส่งผลลัพท์กับเลเยอร์ด้านบนเท่านั้น. พูดอีกอย่าง: เลเยอร์จะติดต่อกับเลเยอร์ข้างเคียงเท่านั้น. ยกตัวอย่างการส่งอีเมล์อีกครั้ง: คุณส่งมันผ่าน application layer. ในเครื่องคอมพิวเตอร์ของคุณ, มันเดินทางลงมาที่ transport และ network layer. คอมพิวเตอร์ของคุณใส่มันบนเนทเวิร์คผ่าน network access layer. นั่นเป็นเลเยอร์ที่จะย้ายข้อมูลไปทั่วโลก. ที่เครื่องคอมพิวเตอร์ปลายทาง, เครื่องรับจะรับข้อความผ่าน network layer ของมันเอง, และจะแสดงข้อมูลที่มันได้รับด้วยการใช้ transport และ application layer.

Note It's really much more complicated
 

หัวข้อข้างบนและหัวข้อถัดไปอธิบายปูพื้นเพื่อให้คุณเข้าใจเรื่องเครือข่าย; เป็นจุดเริ่มต้น, เพื่อให้คุณศึกษาเพิ่มเติมต่อไป.

10.1.2. Some popular networking protocols

ลีนุกซ์รองรับโพรโตคอลต่างๆมากมายบนเครือข่าย. เราจะพูดถึงเฉพาะโพรโตคอลที่มีความสำคัญ.

10.1.2.1. TCP/IP

โพรโตคอล Transport Control และ Internet Protocol เป็นสองโพรโตคอลที่ใช้งานกันอย่างกว้างขวางบนอินเตอร์เนท. แอพพลิเคชั่นมากมาย, เช่นโปรแกรมท่องเวบและโปรแกรมอีเมล์, สร้างขึ้นจากการต่อยอดของชุดโพรโตคอลนี้.

อธิบายง่ายๆ, IP จะหาวิธีในการส่งแพ็กเก็จข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่อง, ส่วน TCP จะทำหน้าที่จัดเตรียมแพ็กเก็จในสายข้อมูล, ดังนั้นแพ็กเก็จจากแอพพลิเคชั่นต่างกันจะไม่กวนกัน, และข้อมูลแต่ละแพ็กเก็จจะส่งและรับตามลำดับก่อนหลังที่ถูกต้อง.

วิธีการเรียนรู้เกี่ยวกับ TCP และ IP ให้ได้ผลควรอ่านเอกสารเหล่านี้:

  • man 7 ip: อธิบายการใช้โพรโตคอล IPv4 บนลีนุกซ์(เวอร์ชั่น 4 เป็น IP โพรโตคอลที่ใช้งานกันอย่างแพร่หลาย).

  • man 7 tcp: เอกสารการใช้งานโพรโตคอล TCP

  • RFC793, RFC1122, RFC2001 for TCP, and RFC791, RFC1122 and RFC1112 for IP.

     เอกสาร the Request For Comments ประกอบด้วยคำอธิบายถึงมาตรฐานเครือข่าย, โพรโตคอล, แอพพลิเคชั่นและ implementation. เอกสารเหล่านี้จัดการโดย the Internet Engineering Task Force, องค์กรระหว่างประเทศที่ทำงานเกี่ยวข้องกับการทำให้อินเตอร์เนทสามารถใช้งาน ได้อย่างราบรื่นและการปรับปรุงพัฒนาโครงข่ายอินเตอร์เนท.

  •  ปกติผู้ให้ริการมีเอกสาร RCF ให้ดาวน์โหลด, หรือคุณสามารถหาข้อมูลของ RFC ได้ที่ http://www.ietf.org/rfc.html

10.1.2.2. TCP/IPv6

ไม่มีใครคาดเดาในการเติบโตของอินเตอร์เนทได้, โพรโตคอล IP มีข้อด้อยเมื่อมีเครื่องคอมพิวเตอร์ในเนทเวิร์คจำนวนมาก, จุดสำคัญคือการจัดหาหมายเลขไอพีให้เครื่องคอมพิวเตอร์โดยหมายเลขไม่ซ้ำกัน, ดังนั้น โพรโตคอล IP เวอร์ชั่น 6 จึงเป็นคำตอบของความต้องการใช้อินเตอร์เนทในวันนี้.

อย่างไรก็ตาม, แอพพลิเคชั่นและเซอร์วิสที่รองรับการใช้งาน IPv6 มีจำนวนหนึ่ง. และมีความพยายามในการปรับแอพพลิเคชั่นให้อัพเกรดไปใช้ IPv6 อย่างต่อเนื่อง. ในบางแอพพลิเคชั่น, โพรโตคอลเก่ายังคงใช้งานอยู่, ส่วนแอพพลิเคชั่นที่แก้ไขแล้วจะใช้เวอร์ชั่นใหม่. เมื่อคุณตรวจสอบเนทเวิร์คคอนฟิก, บางครั้งอาจสับสนเนื่องจากการตรวจสอบโพรโตคอลอาจมองโพรโตคอลหนึ่งจากอีกตัว ไม่เจอ เนื่องจากสองโพรโตคอลทำงานร่วมกันไม่ได้.

 ข้อมูลเพิ่มเติมสามารถหาได้ในเอกสารต่อไปนี้:

  • man 7 ipv6: การใช้โพรโตคอล IPv6 บนลีนุกซ์

  • RFC1883  อธิบายโพรโตคอล IPv6

10.1.2.3. PPP, SLIP, PLIP, PPPOE

เคอร์เนลของลีนุกซ์ถูกสร้างให้รองรับ PPP(Point-to-Point-Protocol), SLIP(Serial Line IP), PLIP(Parallel Line IP) และ PPPP Over Ethernet. PPP เป็นโพรโตคอลที่เป็นที่นิยมใช้มากที่สุดที่ให้ผู้ใช้แต่ละคนสามารถเข้าถึง บริการอินเตอร์เนท ISP (Internet Service Provider), แม้ว่าในพื้นที่ๆมีประชากรหนาแน่นจะถูกทดแทนด้วย PPPOE, ซึ่งเป็นโพรโตคอลที่ใช้สำหรับการเชื่อมต่อแบบ ADSL (Asynmetric Digital Subscriber Line).

ลีนุกซ์ส่วนมากจะมีโปรแกรมในการตั้งค่าและเชื่อมต่ออินเตอร์เนทที่ใช้งาน ง่ายมาให้ด้วย. สิ่งที่คุณต้องการมีเพียงชื่อผู้ใช้และรหัสผ่านเพื่อต่อกับ ISP ของคุณ, และหมายเลขโทรศัพท์กรณีใช้ PPP. ข้อมูลเหล่านี้จะป้อนผ่านโปรแกรมกราฟฟิก, ซึ่งจะสามารถสั่งให้ start และ stop การเชื่อมต่อไปยังผู้ให้บริการได้.

10.1.2.4. ISDN

ลีนุกซ์เคอร์เนลรองรับการใช้งาน ISDN ด้วย. โปรแกรม Isdn4linux จะควบคุมการ์ด ISDN และทำงานเลียนแบบโมเด็มที่ใช้ Hayes command set ("AT" commands). มีความสามารถในการใช้โปรแกรมเทอร์มินอลอย่างง่ายไปจนถึงการต่อกับอินเตอร์ เนท.

 ดูคู่มือระบบของคุณ.

10.1.2.5. AppleTalk

AppleTalk เป็นชื่อของ Apple's internetworking stack. ใช้กับการต่อเนทเวิร์คแบบ peer-to-peer ซึ่งมีความสามารถพื้นฐานเช่นการแชร์ไฟล์และแชร์เครื่องพิมพ์. คอมพิวเตอร์แต่ละตัวสามารถทำตัวเป็นได้ทั้ง client และ server, โดยโปรแกรมและฮาร์ดแวร์ที่จำเป็นจะมีในเครื่องคอมพิวเตอร์แอปเปิลทุก เครื่อง.

ลีนุกซ์รองรับโพรโตคอล AppleTalk ด้วยเหมือนกัน. โปรแกรม Netatalk เป็นโปรแกรมสนับสนุนเคอร์เนลในการใช้กับโพรโตคอล Appletalk, เริ่มต้นถูกสร้างเพื่อระบบที่พัฒนาจากระบบ BSD. มันมีความสามารถรองรับการ routing AppleTalk, บริการระบบไฟล์ UNIX และ AFS ในการใช้ AppleShare และบริการ UNIX printer ให้ใช้กับ AppleTalk printers.

10.1.2.6. SMB/NMB

เพื่อให้ทำงานกับระบบของไมโครซอพท์วินโดว์ได้, ชุดโปรแกรม Samba, ซึ่งรองรับการทำงานของโพรโตคอล NMB และ SMB, สามารถติดตั้งใช้กับระบบเลียนแบบยูนิกซ์แทบทั้งหมด. โพรโตคอล Server Message Block (เรียกอีกอย่างว่า Session Message Block, NetBIOS หรือ LanManager protocol) ใช้ในระบบปฏิบัติการวินโดว์ 3.11, NT, 95/98 2K และ XP ในการแชร์ดิสก์และเครื่องพริ้นเตอร์.

ฟังชั่นพื้นฐานของโปรแกรมชุด Samba คือ: แชร์ลีนุกซ์ไดร์ว กับเครื่องวินโดว์, เข้าใช้งาน SMB shares จากเครื่องลีนุกซ์. แชร์เครื่องพิมพ์ของลีนุกซ์กับเครื่องวินโดว์และแชร์เครื่องพิมพ์บนวินโดว์ กับเครื่องลีนุกซ์. คือทำให้ลีนุกซ์และวินโดว์มองเห็นทรัพยากรที่แชร์ได้.

ลีนุกซ์ส่วนมากจะมีชุดโปรแกรม samba มาให้, ซึ่งส่วนมากจะทำงานของเซิฟเวอร์ในการ setup และ start smbd ,  Samba server, และ nmbd,  netbios name server, ตอนที่บูทระบบ. การคอนฟิก Samba สามารถใช้โปรแกรมกราฟฟิกในการคอนฟิก, ผ่านเวบอินเตอร์เฟสหรือผ่าน comman line และ ผ่านไฟล์คอนฟิก. เดมอนจะทำให้เครื่องลีนุกซ์ถูกมองเห็นเป็นเหมือนเครื่องวินโดว์โฮสท์ใน หน้าต่าง My Network Places/Network Neighbourhood ของเครื่องวินโดว์; การแชร์จากเครื่องลีนุกซ์จะแทบแยกไม่ออกระหว่างการแชร์ในระบบไมโครซอฟท์ วินโดว์.

ข้อมูลเพิ่มเติมสามารถหาได้ตามนี้:

  • man smb.conf:  อธิบายฟอร์แมทของไฟล์คอนฟิกหลักของ Samba.

  •  เวบ Samba Project Documentation (หรือเวบ mirror ของ samba.org) มีคู่มือติดตั้งและทดสอบ, ซึ่งอธิบายการคอนฟิกแซมบ้าเซิฟเวอร์ให้เป็น Primary Domain controller. และมี man pages ให้ด้วย.

10.1.2.7.  โพรโตคอลอื่นๆ

ลีนุกซ์ยังรองรับโพรโตคอลสำหรับวิทยุสมัครเล่น, WAN internetworking (X25, Frame Relay, ATM), InfraRed และ การเชื่อมต่อแบบไร้สาย, แต่เนื่องจากโพรโตคอลเหล่านี้ปกติจะใช้กับฮาร์ดแวร์พิเศษ, เราจะไม่พูดถึงมันในหนังสือเล่มนี้.

10.2. Network configuration and information

10.2. ข้อมูลเครือข่ายและการคอนฟิก

10.2.1. Configuration of network interfaces

ลีนุกซ์รุ่นที่นิยมใช้ที่มีการใช้งานง่ายมักมากับโปรแกรมทูลส์แบบกราฟฟิก , ทำให้ง่ายในการเซ็ทอัพคอมพิวเตอร์ให้ใช้กับเครือข่ายภายใน, การเชื่อมต่อกับผู้ให้บริการอินเตอร์เนทหรือ wireless access. โปรแกรมเหล่านี้สามารถเรียกใช้จาก command line หรือ จากเมนู:

  • Ubuntu การคอนฟิกสามารถทำได้โดยเลือก System->Administration->Networking.

  • RedHat Linux มาพร้อมกับ redhat-config-network, ซึ่งมีทั้งแบบกราฟฟิกและแบบเทกซ์ which has both a graphical and a text mode interface.

  • Suse's โปรแกรม YAST หรือ YAST2 เป็นโปรแกรมเบ็ดเสร็จในการคอนฟิกระบบ.is an all-in-one configuration tool.

  •  มาพร้อมกับชุดโปรแกรมปรับแต่งคอนฟิกเพื่อเชื่อมเครือข่ายและอินเตอร์เนท, ซึ่งจะถูกสั่งให้ทำงานจาก Mandrake's Control Center.

  • On Gnome systems: gnome-network-preferences.

  • On KDE systems: knetworkconf.

คู่มือระบบจะมีรายละเอียดและข้อมูลในการใช้โปรแกรมทูลส์ต่างๆ.

 ข้อมูลบางส่วนที่คุณต้องเตรียม:

  •  ในการเชื่อมต่อกับ local network, ตัวอย่างเช่นเครื่องคอมพิวเตอร์ที่บ้านคุณ, หรือที่ทำงาน: ข้อมูลชื่อโฮสท์, ชื่อโดเมน และไอพีแอดเดรส. ถ้าคุณต้องการเซ็ทอัพเนทเวิร์คของคุณเอง, ศึกษาข้อมูลต่างๆก่อน, เวลาใช้งาน, ข้อมูลเหล่านี้มักจะใส่ให้เครื่องคอมพิวเตอร์อัตโนมัติตอนคุณบูทเครื่อง. ถ้าไม่แน่ใจ, ไม่ต้องป้อนค่าอะไรนอกจากค่าดีฟ้อลท์เพื่อทำให้มันขึ้นพร้อมใช้งาน.

  • สำหรับการเชื่อมต่อกับอินเตอร์เนท: ชื่อผู้ใช้และรหัสผ่านสำหรับ ISP ของคุณ, หมายเลขโทรศัพท์เมื่อใช้โมเด็มในการเชื่อมต่อ. ปกติ ISP ของคุณจะให้ IP address และสิ่งจำเป็นอื่นในการเชื่อมต่ออินเตอร์เนทโดยอัตโนมัติ.

10.2.2. Network configuration files

โปรแกรมกราฟฟิกช่วยให้การแก้ไขเนทเวิร์คไฟล์คอนฟิกทำได้ง่าย, ด้วยการใช้คำสั่งพื้นฐานไม่กี่คำสั่ง. ชื่อไฟล์คอนฟิกและไดเร็กตอรี่ในระบบไฟล์แตกต่างกันไปตามสายพันธ์ลีนุกซ์และ เวอร์ชั่นที่คุณใช้. อย่างไรก็ตาม, มีไฟล์คอนฟิกจำนวนหนึ่งที่เหมือนกันในระบบยูนิกซ์ทุกตัว:

10.2.2.1. /etc/hosts

ไฟล์ /etc/hosts มีข้อมูลของ localhost IP address, 127.0.0.1 เสมอ, ซึ่งเป็นไอพีใช้สำหรับการติดต่อภายในของโพรเซส. ห้ามลบบรรทัดนี้! บางครั้งไฟล์นี้ก็มีข้อมูลแอดเดรสของโฮสท์อื่น, ซึ่งสามารถใช้ติดต่อได้โดยไม่ต้องใช้บริการหาชื่อเครื่องจากภายนอกหรือ DNS (the Domain Name Server).

ตัวอย่างของไฟล์ hosts ของเครื่องในเครือข่ายขนาดเล็กตามบ้าน:

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.52.10 tux.mylan.com tux
192.168.52.11 winxp.mylan.com winxp