ฉันต้องการซ่อนไฟล์ใน Linux โดยไม่ใช้จุดเพราะเป็นไปได้ใน Windows
มีวิธีทำเช่นนี้หรือไม่?
ฉันต้องการซ่อนไฟล์ใน Linux โดยไม่ใช้จุดเพราะเป็นไปได้ใน Windows
มีวิธีทำเช่นนี้หรือไม่?
คำตอบ:
คุณไม่สามารถ. มีความแตกต่างพื้นฐานในวิธีที่ระบบไฟล์จัดการการตั้งค่าที่ซ่อนอยู่ ใน Windows ระบบไฟล์จะจัดเก็บแอตทริบิวต์หลายอย่างสำหรับไฟล์ในเมทาดาทารวมถึงแอตทริบิวต์ "hidden" และ "system" (ซึ่งทั้งคู่เป็นไฟล์ที่ซ่อนอยู่) โดยทั่วไประบบไฟล์ * nix จะไม่มีการจัดเก็บแอตทริบิวต์ดังกล่าว แต่ข้อมูลจะต้องอยู่ที่อื่นเช่นในชื่อไฟล์ การประชุมจึงเป็นไฟล์ที่เริ่มต้นด้วย (และขึ้นอยู่กับระบบของคุณบางทีคนอื่นเช่น _) จะไม่แสดงโดยเครื่องมือส่วนใหญ่ตามค่าเริ่มต้น
นี่คือเพื่อความสะดวกสบายหมดจด การเริ่มต้นชื่อไฟล์นั้นไม่มีความหมาย แต่อย่างใด แต่ "ผู้ใช้อาจไม่ต้องการเห็นสิ่งนี้ตลอดเวลา" เพื่อให้แน่ใจว่าคุณรู้ว่าทำงานเช่นls -aจะแสดงไฟล์ทั้งหมด
หากคุณไม่ต้องการให้ไฟล์ของคุณยุ่งกับรายชื่อของคุณใน Linux คุณควรเปลี่ยนชื่อไฟล์ให้เริ่มต้นด้วยจุด (โบนัส: สิ่งนี้จะใช้ได้กับ OS X เช่นกันหากเรากำลังพูดถึงอุปกรณ์พกพา) หากคุณไม่ต้องการให้ผู้ใช้สามารถค้นหาไฟล์ได้แสดงว่าคุณทำผิดนั่นคือการอนุญาต
สิทธิ์ Unix ที่เกี่ยวข้องกับไดเรกทอรีมักทำให้ผู้คนสับสนและอาจเข้าใจได้ดีขึ้นว่าจะช่วยคุณได้ สิทธิ์ "อ่าน" และ "ดำเนินการ" ( rและx) หมายถึงสิ่งที่แตกต่างสำหรับไดเรกทอรีมากกว่าที่ทำกับไฟล์ สำหรับไดเรกทอรีxสิทธิ์ดำเนินการจะกำหนดว่าคุณเข้าถึง inodes ในไดเรกทอรีหรือไม่ rสิทธิ์การอ่านกำหนดว่าคุณสามารถเข้าถึงรายชื่อของไดเรกทอรีได้หรือไม่ ตามหน้าที่xอนุญาตให้ผู้ใช้ทำสิ่งต่างๆในไดเรกทอรีขณะที่rสิทธิ์อนุญาตให้พวกเขาเห็นสิ่งที่อยู่ในนั้น สิ่งเหล่านี้แตกต่างกันและความแตกต่างอาจสร้างความสับสน ลองดูตัวอย่าง:
jeanluc@login64: ~ $ mkdir example
jeanluc@login64: ~ $ echo "you can read it" > example/file
jeanluc@login64: ~ $ ls example/
file
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ chmod -x example/
jeanluc@login64: ~ $ ls example/
ls: cannot access example/file: Permission denied
file
jeanluc@login64: ~ $ cat example/file
cat: example/file: Permission denied
jeanluc@login64: ~ $ cd example/
-bash: cd: example/: Permission denied
jeanluc@login64: ~ $ chmod +x example/
jeanluc@login64: ~ $ chmod -r example/
jeanluc@login64: ~ $ ls example/
ls: cannot open directory example/: Permission denied
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ cd example/
jeanluc@login64: ~/example $ ls
ls: cannot open directory .: Permission denied
jeanluc@login64: ~/example $ cd ..
ดังนั้นขอให้สังเกตว่าถ้าไม่มีเอ็กซีคิ้วท์ฉันยังสามารถแสดงรายการไฟล์ได้ (แม้ว่า ls จะแสดงข้อผิดพลาดเพราะมันไม่สามารถรับคุณสมบัติของไฟล์ได้) แต่ฉันไม่สามารถเปลี่ยนเป็นไดเรกทอรีหรืออ่านไฟล์ในนั้นได้ หากไม่อ่านฉันไม่สามารถแสดงรายการไฟล์ได้ แต่ฉันยังสามารถเปลี่ยนเป็นไดเรกทอรีและถ้าฉันรู้ชื่อไฟล์ฉันยังคงสามารถเข้าถึงได้
อย่างไรก็ตามโปรดทราบว่าการลบการอนุญาตให้อ่านจะช่วยให้คุณมีความปลอดภัยด้วยความสับสน หากผู้ใช้เดาชื่อไฟล์พวกเขาจะสามารถอ่านเนื้อหาได้
สิ่งนี้อาจไม่เกี่ยวข้องกับคำถามของคุณฉันแค่ต้องการให้แน่ใจว่าคุณเข้าใจการอนุญาตของไดเรกทอรี
สร้างไฟล์.hiddenในไดเรกทอรีที่มีชื่อไฟล์ที่จะซ่อน (หนึ่งชื่อในแต่ละบรรทัด)
จากนั้นเพิ่มสิ่งต่อไปนี้ใน~/.bashrc:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
ตอนนี้lsคำสั่งของคุณจะไม่แสดงไฟล์เหล่านี้
ฉันใช้เทคนิคนี้เพื่อซ่อน__pycache__และ__init__.pyไฟล์ของฉัน
แก้ไข: ตามความคิดเห็นอื่นนี้ยังซ่อนไว้ในอย่างน้อยหนึ่ง (Nautilus) แต่อาจเบราว์เซอร์ไฟล์ GUI หลายคนเช่นกัน
ls -alหรือไม่?
คุณสามารถซ่อนไฟล์ใน Linux ได้โดยไม่ต้องเพิ่มจุด จริงๆแล้วมันซ่อนไว้ใน Nautilus; lsจากบรรทัดคำสั่งยังจะแสดงรายชื่อไฟล์
.hiddenในโฟลเดอร์ที่คุณต้องการซ่อนไฟล์lsรายการ
จุดใช้เพื่อซ่อนไฟล์ใน linux และไม่สามารถเปลี่ยนได้
อย่างไรก็ตามคุณสามารถเล่นด้วยการอนุญาตไฟล์เพื่อป้องกันไม่ให้ผู้ใช้สามารถเข้าถึงโฟลเดอร์ / ไฟล์ที่กำหนดได้ ลองทดสอบด้วยchmodคำสั่ง
คุณพยายามซ่อนไฟล์จากตัวจัดการไฟล์และ / หรือสภาพแวดล้อมเดสก์ทอปของผู้ใช้แบบกราฟิกหรือไม่? ถ้าเป็นเช่นนั้นอาจมีตัวเลือกที่นอกเหนือจากการใส่ชื่อไฟล์ด้วยจุด
ผมเชื่อว่าไฟล์เท่านั้นเพิ่มเติมซ่อนไว้โดยใด ๆ จัดการไฟล์ลินุกซ์ได้รับการสำรองไฟล์คือผู้ที่ลงท้ายด้วยตัวหนอน~หรือ.bakหรือสิ่งที่พวกเขาเชื่อว่าเป็นส่วนขยายของการสำรองข้อมูล ไม่ว่าในกรณีใดคุณอาจโชคดีถ้าทั้งหมดที่คุณต้องการทำคือซ่อนไฟล์สำรองจากตัวจัดการไฟล์
อย่าให้นามสกุลไฟล์สำรองของคุณเพื่อซ่อนพวกเขามิเช่นนั้นอาจถูกลบโดยไม่ตั้งใจ !!
นอกจากนี้คุณสามารถซ่อนไฟล์จาก Finder ใน Mac OS X โดยใช้คำสั่งSetFile -a V [file]หรือแก้ไข/.hiddenแต่แน่นอนว่านี่จะไม่ซ่อนไฟล์จากlsโปรแกรมของบรรทัดคำสั่ง
chflags hidden filenameคุณยังสามารถซ่อนไฟล์โดย
หากคุณมีทักษะการเขียนโปรแกรมและหากคุณต้องการเพียงแค่ชื่อไฟล์ hidding สำหรับความมั่นใจของผู้ใช้ที่จะหยุดการยุ่งเหยิงของพื้นที่ภาพคุณสามารถแฮ็คมันได้!
ฉันจะพิจารณาเครื่องมือบรรทัดคำสั่งเท่านั้นเนื่องจากค่อนข้างสม่ำเสมอและเป็นเครื่องมือเดียวที่ใช้อย่างต่อเนื่องเป็นตัวฉัน
มีหลายวิธีในการจัดเก็บข้อมูลนี้:
คุณสามารถเก็บแอตทริบิวต์แบบขยาย "ซ่อน" ในไฟล์ที่เลือก ดูman attr
attr -s hidden -V true your_file
หรือตามที่กล่าวไว้ข้างต้นคุณสามารถจัดเก็บรายชื่อไฟล์ใน.hiddenไฟล์
สิ่งสำคัญ: สิ่งนี้จะไม่ทำงานนอกกรอบที่คุณต้องใช้ตรรกะระบบที่สะอาดจะไม่สนใจ.hiddenไฟล์และhiddenคุณสมบัติเพิ่มเติม!
นอกจากนี้ยังมีการนำ muliple ที่เป็นไปได้:
หากคุณมีไฟล์เพียงไม่กี่ไฟล์ให้เขียน.bashrcไฟล์ของคุณ
alias ls='ls -I filename_1 -I filename_2'
man ls สำหรับข้อมูลเพิ่มเติม.
เขียนfunction lsเช่นที่จะจัดการกับตรรกะทั้งหมดที่อยู่เบื้องหลังการรับรู้ไฟล์ที่ซ่อนอยู่และการประกอบรายการของ-Iรายการทั้งหมดแล้วดำเนินการ
/bin/lsกับการละเว้นธงที่เหมาะสม งานลำบากมากเพราะคุณต้องจัดการlsพารามิเตอร์ทั้งหมดอย่างถูกต้อง
รับแหล่งที่มาของ coreutils
git clone git://git.sv.gnu.org/coreutils
หรือ
git clone git://git.suckless.org/sbase
แก้ไขตามที่คุณต้องการในการจัดการการนำไฟล์ที่ซ่อนไปใช้ และวางไว้ในของคุณPATH
ฉันแฮ็คมันในเวลาน้อยกว่า 5 นาทีโดยใช้แหล่งที่มา suckless และ diff เป็นเช่นนี้:
diff --git a/ls.c b/ls.c
index cdfce4d..8197409 100644
--- a/ls.c
+++ b/ls.c
@@ -214,6 +214,17 @@ lsdir(const char *path)
first = 0;
while ((d = readdir(dp))) {
+///////////////////////////////////////////////
+// Dirty hack to implement hidden files
+// FIXME: Make proper(!) subroutine
+ char attr_command[1024] = "attr -Lqg hidden "; // Oh, dear. That's bad
+ int attr_code;
+ strcat(attr_command, d->d_name);
+ strcat(attr_command, " >/dev/null 2>&1");
+ attr_code = system(attr_command);
+ if (!attr_code)
+ continue;
+///////////////////////////////////////////////
if (d->d_name[0] == '.' && !aflag && !Aflag)
continue;
else if (Aflag)
ls.cโกหกในsrcไม่ไดเรกทอรีรากและไม่มีฟังก์ชั่นในlsdir ls.c
นี่เป็นทางออกที่ดีที่สุดที่ฉันพบเพิ่มในโปรไฟล์ของคุณ:
alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"
หากคุณต้องการรูปแบบเพิ่มเติมเพียงเพิ่ม--ignoreธงเพิ่มเติม
ทุกวันนี้คุณสามารถเขียนFUSEที่ซ่อนไฟล์ตามการกำหนดค่าที่กำหนด
บทความนี้ทำให้ฉันเชื่อว่าคุณต้องปรับแต่งgetdirฟังก์ชั่น:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
สิ่งนี้จะอ่านเนื้อหาของไดเรกทอรี การดำเนินการนี้เป็นopendir(),readdir(), ... ,closedir()ลำดับในหนึ่งสาย สำหรับแต่ละรายการไดเร็กทอรีfilldir()ควรเรียกใช้ฟังก์ชัน
ฉันไม่ใช่โปรแกรมเมอร์ แต่ฉันคิดว่าจะทำให้getdirไฟล์ทั้งหมดที่อยู่ในรายการ (เช่น) .hiddenถูกลบออก หากคุณใช้งานอย่างถูกต้องเครื่องมือทุกตัว (GUI หรือไม่) จะได้รับผลกระทบ
คุณสามารถ 'ซ่อน' เนื้อหาของไดเรกทอรีโดยการออกไป 'x' perms สำหรับกลุ่มหรืออื่น ๆchmod go-x directoryname: คุณไม่สามารถแสดงรายการไฟล์ได้อีกต่อไปแม้ว่าคุณจะสามารถเข้าถึงไฟล์ได้หากคุณรู้เส้นทางที่แน่นอน นี่ไม่เหมือนสิ่งที่คุณต้องการ
โปรดจำไว้ว่าสิ่ง dotfile คือความสะดวกสบายไม่ใช่การซ่อนไฟล์เพื่อความปลอดภัย แต่เพื่อลดความยุ่งเหยิงสำหรับไฟล์ระหว่างการแสดงรายการไฟล์ มันถูกอบเข้าlsกับเครื่องมืออื่น ๆ