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