ระดับแนวคิด
เมื่อคุณเริ่มต้นกระบวนการจากเชลล์ของคุณไดเร็กทอรีการทำงานปัจจุบันของกระบวนการจะเหมือนกับไดเร็กทอรีการทำงานปัจจุบันของเชลล์ของคุณ ในบริบทของเชลล์ไดเร็กทอรีการทำงานปัจจุบันคือตำแหน่งที่คุณอยู่ "at"
ไดเรกทอรีการทำงานปัจจุบันของกระบวนการใด ๆ ที่ใช้ในการตีความเส้นทางญาติ ตัวอย่างเช่นถ้าไดเรกทอรีการทำงานเปลือกของคุณในปัจจุบันเป็น/home/rene
และคุณวิ่งls ..
จากเปลือกกระบวนการไดเรกทอรีทำงานปัจจุบัน/home/rene
ก็จะถูกนำมาใช้เพื่อแก้ปัญหาการ..
/home
คุณสามารถดูไดเรกทอรีการทำงานปัจจุบันของกระบวนการทั้งหมดที่ทำงานบนระบบของคุณด้วยlsof | grep '\scwd\s'
(โปรดทราบว่าคุณอาจต้องรูทเพื่อดูกระบวนการของผู้ใช้คนอื่น ๆ ) สิ่งนี้จะช่วยให้คุณทราบว่าไดเรกทอรีทำงานปัจจุบันเกี่ยวข้องกับ กระบวนการทำงานบนระบบของคุณ
ระดับโปรแกรม
ไดเร็กทอรีการทำงานปัจจุบันของเชลล์คือไดเร็กทอรีที่คุณเห็นและแก้ไขด้วยเชลล์ในตัวpwd
และcd
ตามลำดับ คำสั่งเหล่านี้เรียกการเรียกของระบบเช่นgetcwd
และchdir
ทำงานกับไดเรกทอรีการทำงานปัจจุบันของเชลล์ของคุณ
เมื่อใช้bash
เป็นตัวอย่างแล้วcd
บิวด์อินจะรันบรรทัดนี้ในที่สุด:
if (chdir (nolinks ? newdir : tdir) == 0)
และpwd
ในที่สุดก็ทำงานในบรรทัดนี้:
the_current_working_directory = getcwd (0, PATH_MAX);
เชลล์เป็นเพียงตัวอย่างที่สะดวกของการใช้งานไดเร็กตอรี่ปัจจุบัน; การเรียกระบบเดียวกันเหล่านี้ถูกใช้โดยโปรแกรมอื่นเช่นกัน โปรแกรมสามารถเปลี่ยนไดเรกทอรีการทำงานปัจจุบันเป็น/usr
และเส้นทางสัมพัทธ์ใด ๆ ที่โปรแกรมใช้จะเริ่มจาก/usr
ไดเรกทอรี
ระดับเคอร์เนล
ไดเร็กทอรีการทำงานปัจจุบันของกระบวนการถูกเก็บไว้โดยเคอร์เนล ร้านค้าลินุกซ์ในpwd
สมาชิกของfs_struct
ชี้ไปตามสมาชิกของfs
สมาชิกเป็นstruct ซึ่งชี้ไปข้อมูลเกี่ยวกับการติดตั้ง ( ) และสถานที่ไดเรกทอรีในระบบแฟ้ม ( ) แต่ละกระบวนการมีความเกี่ยวข้องกับมันtask_struct
pwd
path
vfsmount
dentry
task_struct
chdir
และระบบโทรแก้ไขและเรียกคืนข้อมูลในgetcwd
pwd