ค้นหาเว็บไซต์

วิธี Tar ไฟล์ ตั้งค่าสิทธิ์ของไฟล์ และค้นหาไฟล์ใน Linux


เมื่อเร็วๆ นี้ Linux Foundation ได้เริ่มการรับรอง LFCS (Linux Foundation Certified Sysadmin) ซึ่งเป็นโปรแกรมใหม่ล่าสุดที่มีวัตถุประสงค์เพื่อให้บุคคลสามารถดำเนินงานการดูแลระบบขั้นพื้นฐานถึงระดับกลางบนระบบ Linux ได้

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

ซีรีส์นี้จะมีชื่อว่า Preparation for the LFCS (Linux Foundation Certified Sysadmin) ส่วนที่ 1 ถึง 33 และครอบคลุมหัวข้อต่อไปนี้:

Part 1

วิธีใช้คำสั่ง 'Sed' เพื่อจัดการไฟล์ใน Linux

Part 2

วิธีการติดตั้งและใช้งาน Vi/Vim ใน Linux

Part 3

วิธีเก็บถาวรไฟล์ ตั้งค่าสิทธิ์ของไฟล์ และการค้นหาไฟล์ใน Linux

Part 4

การแบ่งพาร์ติชันอุปกรณ์จัดเก็บข้อมูล การจัดรูปแบบระบบไฟล์ และการกำหนดค่า Swap Partition

Part 5

เมานต์/ถอนเมานต์ระบบไฟล์ท้องถิ่นและเครือข่าย (Samba & NFS) ใน Linux

Part 6

การประกอบพาร์ติชันเป็นอุปกรณ์ RAID – การสร้างและการจัดการการสำรองข้อมูลระบบ

Part 7

การจัดการกระบวนการและบริการการเริ่มต้นระบบ (SysViit, Systemd และ Upstart

Part 8

วิธีจัดการผู้ใช้และกลุ่ม การอนุญาตไฟล์ และการเข้าถึง Sudo

Part 9

การจัดการแพ็คเกจ Linux ด้วย Yum, RPM, Apt, Dpkg, Aptitude และ Zypper

Part 10

การเรียนรู้การเขียนสคริปต์เชลล์ขั้นพื้นฐานและการแก้ไขปัญหาระบบไฟล์

Part 11

วิธีจัดการและสร้าง LVM โดยใช้คำสั่ง vgcreate, lvcreate และ lvextend

Part 12

วิธีสำรวจ Linux ด้วยเอกสารวิธีใช้และเครื่องมือที่ติดตั้งไว้

Part 13

วิธีกำหนดค่าและแก้ไขปัญหา Grand Unified Bootloader (GRUB)

Part 14

ตรวจสอบการใช้ทรัพยากรกระบวนการ Linux และตั้งค่าขีดจำกัดกระบวนการตามผู้ใช้แต่ละราย

Part 15

วิธีการตั้งค่าหรือแก้ไขพารามิเตอร์รันไทม์เคอร์เนลในระบบ Linux

Part 16

การใช้การควบคุมการเข้าถึงภาคบังคับด้วย SELinux หรือ AppArmor ใน Linux

Part 17

วิธีการตั้งค่ารายการควบคุมการเข้าถึง (ACL) และโควต้าดิสก์สำหรับผู้ใช้และกลุ่ม

Part 18

การติดตั้งบริการเครือข่ายและการกำหนดค่าการเริ่มต้นอัตโนมัติเมื่อบู๊ต

Part 19

คำแนะนำขั้นสูงสุดในการตั้งค่าเซิร์ฟเวอร์ FTP เพื่ออนุญาตการเข้าสู่ระบบโดยไม่ระบุชื่อ

Part 20

ตั้งค่าเซิร์ฟเวอร์ DNS แคชแบบเรียกซ้ำขั้นพื้นฐานและกำหนดค่าโซนสำหรับโดเมน

Part 21

วิธีการติดตั้ง การรักษาความปลอดภัย และการปรับแต่งประสิทธิภาพของเซิร์ฟเวอร์ฐานข้อมูล MariaDB

Part 22

วิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ NFS สำหรับการแชร์ระบบไฟล์

Part 23

วิธีการตั้งค่า Apache ด้วยโฮสติ้งเสมือนตามชื่อพร้อมใบรับรอง SSL

Part 24

วิธีการตั้งค่าไฟร์วอลล์ Iptables เพื่อเปิดใช้งานการเข้าถึงบริการระยะไกลใน Linux

Part 25

วิธีเปลี่ยน Linux ให้เป็นเราเตอร์เพื่อจัดการการรับส่งข้อมูลแบบคงที่และไดนามิก

Part 26

วิธีการตั้งค่าระบบไฟล์ที่เข้ารหัสและสลับโดยใช้เครื่องมือ Cryptsetup

Part 27

วิธีตรวจสอบการใช้งานระบบ การหยุดทำงาน และการแก้ไขปัญหาเซิร์ฟเวอร์ Linux

Part 28

วิธีการตั้งค่าพื้นที่เก็บข้อมูลเครือข่ายเพื่อติดตั้งหรืออัปเดตแพ็คเกจ

Part 29

วิธีตรวจสอบประสิทธิภาพเครือข่าย ความปลอดภัย และการแก้ไขปัญหา

Part 30

วิธีติดตั้งและจัดการเครื่องเสมือนและคอนเทนเนอร์

Part 31

เรียนรู้พื้นฐานของ Git เพื่อจัดการโปรเจ็กต์อย่างมีประสิทธิภาพ

Part 32

คู่มือสำหรับผู้เริ่มต้นใช้งานเพื่อกำหนดค่าที่อยู่ IPv4 และ IPv6 ใน Linux

Part 33

คู่มือสำหรับผู้เริ่มต้นในการสร้างการเชื่อมโยงและเชื่อมโยงเครือข่ายใน Ubuntu

โพสต์นี้เป็นส่วนที่ 3 ของชุดบทช่วยสอน 33 รายการ ในส่วนนี้ เราจะกล่าวถึงวิธีการเก็บถาวร/บีบอัดไฟล์และไดเร็กทอรี ตั้งค่าคุณสมบัติของไฟล์ และค้นหาไฟล์บนระบบไฟล์ที่จำเป็นสำหรับ LFCS< การสอบรับรอง

เครื่องมือเก็บถาวรและบีบอัดสำหรับ Linux

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

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

ยูทิลิตี้ Linux tar

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

โดยปกติแล้ว Tar จะใช้ร่วมกับเครื่องมือบีบอัด เช่น gzip, bzip2 หรือ xz เพื่อสร้าง tarball ที่ถูกบีบอัด

ไวยากรณ์พื้นฐานของคำสั่ง tar เป็นดังนี้:

tar [options] [pathname ...]

โดยที่ ... แสดงถึงนิพจน์ที่ใช้ในการระบุว่าไฟล์ใดควรดำเนินการ

คำสั่ง Tar ที่ใช้บ่อยที่สุด

Long option Abbreviation Description
 –create  c  Creates a tar archive
 –concatenate  A  Appends tar files to an archive
 –append  r  Appends files to the end of an archive
 –update  u  Appends files newer than copy in archive
 –diff or –compare  d  Find differences between archive and file system
 –file archive  f  Use archive file or device ARCHIVE
 –list  t  Lists the contents of a tarball
 –extract or –get  x  Extracts files from an archive

ตัวดัดแปลงการดำเนินการ tar ที่ใช้ตามปกติ

Long option Abbreviation Description
 –directory dir  C  Changes to directory dir before performing operations
 –same-permissions  p  Preserves original permissions
 –verbose  v  Lists all files read or extracted. When this flag is used along with –list, the file sizes, ownership, and time stamps are displayed.
 –verify  W  Verifies the archive after writing it
 –exclude file  —  Excludes files from the archive
 –exclude=pattern  X  Exclude files, given as a PATTERN
 –gzip or –gunzip  z  Processes an archive through Gzip
 –bzip2  j  Processes an archive through bzip2
 –xz  J  Processes an archive through xz

ยูทิลิตี้ Linux Gzip, Bzip2 และ Xz

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

ข้อดีของการบีบอัดที่ดีที่สุดมาในราคา: เวลาที่ใช้ในการดำเนินการให้เสร็จสิ้น และทรัพยากรระบบที่ใช้ระหว่างกระบวนการ

โดยปกติ ไฟล์ tar ที่บีบอัดด้วยยูทิลิตี้เหล่านี้จะมีนามสกุล .gz, .bz2 หรือ .xz ตามลำดับ ในตัวอย่างต่อไปนี้ เราจะใช้ไฟล์เหล่านี้: file1, file2, file3, file4 และ < แข็งแกร่ง>file5.

การบีบอัดไฟล์ด้วย gzip, bzip2 และ xz

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

tar czf myfiles.tar.gz file[0-9]
tar cjf myfiles.tar.bz2 file[0-9]
tar cJf myfile.tar.xz file[0-9]

แสดงรายการเนื้อหาและการอัปเดต/ต่อท้ายไฟล์ Tar Archive

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

คลายการบีบอัดไฟล์ Tar

หากคุณต้องการอัปเดตหรือต่อท้ายไฟล์ลงใน tarball ที่บีบอัด คุณจะต้องคลายการบีบอัดไฟล์ tar และอัปเดต/ผนวกไฟล์ จากนั้นจึงบีบอัดอีกครั้ง

tar tvf [tarball]

รันคำสั่งใด ๆ ต่อไปนี้:

gzip -d myfiles.tar.gz	[#1] 
bzip2 -d myfiles.tar.bz2	[#2] 
xz -d myfiles.tar.xz 		[#3] 

ลบหรือเพิ่มไฟล์ลงใน Tar Archive

tar --delete --file myfiles.tar file4 (deletes the file inside the tarball)
tar --update --file myfiles.tar file4 (adds the updated file)

และ

gzip myfiles.tar		[ if you choose #1 above ]
bzip2 myfiles.tar		[ if you choose #2 above ]
xz myfiles.tar 		[ if you choose #3 above ]

ในที่สุด,

tar tvf [tarball] #again

และเปรียบเทียบวันที่และเวลาแก้ไขของ file4 กับข้อมูลเดียวกันดังที่แสดงไว้ก่อนหน้านี้

แยกไฟล์ออกจากการสำรองข้อมูล

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

บางทีแนวทางแรกของคุณอาจเป็นการแยกไฟล์ทั้งหมดที่มีนามสกุล .mp3 หรือ .mp4 (หรือนามสกุลอื่นๆ) ออกจากการสำรองข้อมูล จะเป็นอย่างไรหากคุณมีผู้ใช้ที่ชาญฉลาดซึ่งสามารถเปลี่ยนนามสกุลเป็น .txt หรือ .bkp แนวทางของคุณจะไม่ช่วยอะไรคุณมากนัก

ในการตรวจหาไฟล์เสียงหรือวิดีโอ คุณต้องตรวจสอบประเภทไฟล์ด้วยไฟล์ เชลล์สคริปต์ต่อไปนี้จะทำงานได้

#!/bin/bash
Pass the directory to backup as first argument.
DIR=$1
Create the tarball and compress it. Exclude files with the MPEG string in its file type.
-If the file type contains the string mpeg, $? (the exit status of the most recently executed command) expands to 0, and the filename is redirected to the exclude option. Otherwise, it expands to 1.
-If $? equals 0, add the file to the list of files to be backed up.
tar X <(for i in $DIR/*; do file $i | grep -i mpeg; if [ $? -eq 0 ]; then echo $i; fi;done) -cjf backupfile.tar.bz2 $DIR/*

คืนค่าการสำรองข้อมูลด้วยสิทธิ์การรักษา Tar

จากนั้น คุณสามารถกู้คืนข้อมูลสำรองไปยังโฮมไดเร็กตอรี่ของผู้ใช้เดิมได้ (user_restore ในตัวอย่างนี้) โดยรักษาสิทธิ์ไว้ด้วยคำสั่งต่อไปนี้

tar xjf backupfile.tar.bz2 --directory user_restore --same-permissions

การใช้คำสั่ง Find เพื่อค้นหาไฟล์

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

โดยปกติเราจะค้นหาตามชื่อ เจ้าของ กลุ่ม ประเภท สิทธิ์ วันที่ และขนาด

ไวยากรณ์พื้นฐานของคำสั่ง find เป็นดังนี้:

find [directory_to_search] [expression]

ค้นหาไฟล์ซ้ำตามขนาด

ค้นหาไฟล์ทั้งหมด (-f) ในไดเร็กทอรีปัจจุบัน (.) และไดเร็กทอรีย่อย 2 ด้านล่าง (-maxledge 3 รวมไดเร็กทอรีการทำงานปัจจุบันและอีก 2 ระดับลงไป) ซึ่งมีขนาด (-size) มากกว่า 2 MB

find . -maxdepth 3 -type f -size +2M

การค้นหาและการลบไฟล์ที่ตรงกับเกณฑ์ที่กำหนด

ไฟล์ที่มีสิทธิ์ 777 บางครั้งถือเป็นประตูเปิดสำหรับผู้โจมตีจากภายนอก ไม่ว่าจะด้วยวิธีใดก็ตาม มันไม่ปลอดภัยที่จะให้ใครทำอะไรกับไฟล์ เราจะใช้แนวทางที่ค่อนข้างก้าวร้าวและลบพวกมันทิ้ง! ('{}' + ใช้เพื่อ "รวบรวม" ผลลัพธ์ของการค้นหา)

find /home/user -perm 777 -exec rm '{}' +

การค้นหาไฟล์ตามการประทับเวลา

ค้นหาไฟล์การกำหนดค่าใน /etc ที่มีการเข้าถึง (-atime) หรือแก้ไข (-mtime) เพิ่มเติม (+180) หรือน้อยกว่า (-180) มากกว่า 6 เดือนที่ผ่านมาหรือ 6 เดือนที่ผ่านมา (180) .

แก้ไขคำสั่งต่อไปนี้ตามตัวอย่างด้านล่าง:

find /etc -iname "*.conf" -mtime -180 -print

ตั้งค่าการอนุญาตไฟล์และคุณสมบัติพื้นฐาน

อักขระ 10 ตัวแรกในเอาต์พุตของ ls -l คือแอตทริบิวต์ของไฟล์ อักขระตัวแรกใช้เพื่อระบุประเภทไฟล์:

  • - : ไฟล์ปกติ
  • -d : ไดเรกทอรี
  • -l : ลิงก์สัญลักษณ์
  • -c : อุปกรณ์อักขระ (ซึ่งถือว่าข้อมูลเป็นกระแสข้อมูลไบต์ เช่น เทอร์มินัล)
  • -b : อุปกรณ์บล็อก (ซึ่งจัดการข้อมูลในบล็อก เช่น อุปกรณ์จัดเก็บข้อมูล)

อักขระเก้าตัวถัดไปของแอตทริบิวต์ไฟล์เรียกว่าโหมดไฟล์และแสดงถึงการอ่าน (r) เขียน (w) และดำเนินการ (x) การอนุญาตของเจ้าของไฟล์ เจ้าของกลุ่มของไฟล์ และผู้ใช้ที่เหลือ (โดยทั่วไปเรียกว่า “โลก”)

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

การอนุญาตไฟล์มีการเปลี่ยนแปลงด้วยคำสั่ง chmod ซึ่งมีไวยากรณ์พื้นฐานดังนี้:

chmod [new_mode] file

โดยที่ new_mode เป็นเลขฐานแปดหรือนิพจน์ที่ระบุสิทธิ์ใหม่

เลขฐานแปดสามารถแปลงได้จากไบนารีที่เทียบเท่ากัน ซึ่งคำนวณจากการอนุญาตไฟล์ที่ต้องการสำหรับเจ้าของ กลุ่ม และโลก ดังนี้:

การมีสิทธิ์บางอย่างจะเท่ากับกำลังของ 2 (r=22, w=21, x=20 ) ในขณะที่การขาดหายไปจะเท่ากับ 0 ตัวอย่างเช่น:

หากต้องการตั้งค่าการอนุญาตของไฟล์ตามด้านบนในรูปแบบฐานแปด ให้พิมพ์:

chmod 744 myfile

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

บุคคล ทั้งหมดนี้สามารถแสดงพร้อมกันด้วยตัวอักษร a การอนุญาตจะได้รับ (หรือเพิกถอน) ด้วยเครื่องหมาย + หรือ - ตามลำดับ

ลบการอนุญาตดำเนินการบนสคริปต์ให้กับผู้ใช้ทั้งหมด

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

chmod a-x backup.sh

การให้สิทธิ์ อ่าน, เขียน และ ดำเนินการ สำหรับไฟล์แก่เจ้าของและเจ้าของกลุ่ม และสิทธิ์ในการอ่านสำหรับทั้งโลก

เมื่อเราใช้เลขฐานแปด 3 หลักในการตั้งค่าสิทธิ์สำหรับไฟล์ ตัวเลขหลักแรกจะระบุสิทธิ์สำหรับเจ้าของ ตัวเลขหลักที่สองสำหรับเจ้าของกลุ่ม และหลักที่สามสำหรับคนอื่นๆ:

  • เจ้าของ: (r=22 + w=21 + x=20=7)
  • เจ้าของกลุ่ม: (r=22 + w=21 + x=20=7)
  • โลก: (r=22 + w=0 + x=0=4)
chmod 774 myfile

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

ความเป็นเจ้าของไฟล์เปลี่ยนไปด้วยคำสั่ง cown เจ้าของและเจ้าของกลุ่มสามารถเปลี่ยนแปลงได้พร้อมกันหรือแยกกัน ไวยากรณ์พื้นฐานมีดังนี้:

chown user:group file

ในกรณีที่ต้องมีผู้ใช้หรือกลุ่มเป็นอย่างน้อย

ตัวอย่างคำสั่ง Cown

การเปลี่ยนเจ้าของไฟล์เป็นผู้ใช้บางราย

chown gacanepa sent

การเปลี่ยนเจ้าของและกลุ่มของไฟล์เป็นคู่ผู้ใช้:กลุ่ม

chown gacanepa:gacanepa TestFile

การเปลี่ยนเฉพาะเจ้าของกลุ่มของไฟล์เป็นกลุ่มบางกลุ่ม สังเกตเครื่องหมายโคลอนก่อนชื่อกลุ่ม

chown :gacanepa email_body.txt
บทสรุป

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

ฉันหวังว่าเคล็ดลับที่ให้ไว้ในบทความปัจจุบันจะช่วยให้คุณบรรลุเป้าหมายนั้น อย่าลังเลที่จะเพิ่มข้อมูลและแนวคิดของคุณเองในส่วนความคิดเห็นเพื่อประโยชน์ของชุมชน ขอบคุณล่วงหน้า!

LFCS eBook มีวางจำหน่ายแล้วในขณะนี้ สั่งซื้อสำเนาของคุณวันนี้และเริ่มต้นการเดินทางสู่การเป็นผู้ดูแลระบบ Linux ที่ได้รับการรับรอง!

Product Name Price Buy
The Linux Foundation’s LFCS Certification Preparation Guide $19.99 [Buy Now]

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