ฉันต้องการซ่อนไฟล์ใน 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
กับเครื่องมืออื่น ๆ