Tôi muốn ẩn các tệp trong Linux mà không sử dụng dấu chấm, vì nó có thể có trong Windows.
Có cách nào để làm việc này không?
Tôi muốn ẩn các tệp trong Linux mà không sử dụng dấu chấm, vì nó có thể có trong Windows.
Có cách nào để làm việc này không?
Câu trả lời:
Bạn không thể. Có một sự khác biệt cơ bản trong cách các hệ thống tập tin xử lý các cài đặt ẩn. Trong Windows, hệ thống tệp lưu trữ một số thuộc tính cho tệp trong siêu dữ liệu, bao gồm các thuộc tính "ẩn" và "hệ thống" (cả hai đều là loại tệp ẩn). Trong các hệ thống tệp * nix chung, không có thuộc tính nào được lưu trữ. Thay vào đó, thông tin phải được đặt ở một nơi khác, chẳng hạn như trong tên tệp. Do đó, quy ước là các tập tin bắt đầu bằng. (và tùy thuộc vào hệ thống của bạn, có thể một số công cụ khác như _) sẽ không được hiển thị bởi hầu hết các công cụ theo mặc định.
Điều này hoàn toàn là thuận tiện, a. bắt đầu một tên tệp có nghĩa là hoàn toàn không có gì nhưng "người dùng có thể không muốn thấy điều này mọi lúc." Để đảm bảo rằng bạn biết, chạy eg ls -a
sẽ hiển thị tất cả các tệp.
Nếu bạn không muốn có một tập tin làm lộn xộn danh sách của mình trong Linux, bạn nên đổi tên nó thành bắt đầu bằng dấu chấm (Phần thưởng: điều này cũng sẽ hoạt động với OS X, nếu chúng ta đang nói về một thiết bị di động). Nếu bạn không muốn người dùng có thể tìm thấy một tệp, bạn đã làm sai - đó là quyền cho phép.
Các quyền Unix khi chúng liên quan đến các thư mục thường gây nhầm lẫn cho mọi người và có thể hiểu nó tốt hơn sẽ giúp bạn. Các quyền "đọc" và "thực thi" ( r
và x
) có nghĩa là một cái gì đó khác nhau đối với các thư mục so với các tệp. Đối với các thư mục, x
quyền thực thi xác định xem bạn có truy cập các nút trong thư mục hay không. Quyền đọc quyết r
định xem bạn có thể truy cập danh sách thư mục hay không. Về mặt chức năng, x
cho phép người dùng thực hiện mọi thứ trong một thư mục, trong khi r
quyền cho phép họ xem những gì trong đó. Đây là khác nhau, và sự khác biệt có thể gây nhầm lẫn. Hãy xem một ví dụ:
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 ..
Vì vậy, lưu ý rằng không thực thi tôi vẫn có thể liệt kê các tệp (mặc dù ls hiển thị lỗi vì nó không thể nhận được các thuộc tính tệp), nhưng tôi không thể thay đổi thư mục hoặc đọc các tệp trong đó. Không đọc tôi không thể liệt kê các tập tin, nhưng tôi vẫn có thể thay đổi thư mục và nếu tôi biết tên của một tập tin, tôi vẫn có thể truy cập nó.
Tuy nhiên, xin lưu ý rằng việc xóa quyền đọc chỉ mang lại cho bạn sự bảo mật bằng cách che khuất. Nếu người dùng đoán tên tệp, họ sẽ có thể đọc nội dung của nó.
Điều này có thể không thực sự có liên quan đến câu hỏi của bạn, tôi chỉ muốn chắc chắn rằng bạn hiểu quyền truy cập thư mục.
Tạo một tệp .hidden
trong thư mục với tên của các tệp sẽ bị ẩn (một tên mỗi dòng).
Sau đó thêm các mục sau vào ~/.bashrc
:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
Bây giờ ls
lệnh của bạn không liệt kê các tệp này.
Tôi sử dụng kỹ thuật này để ẩn __pycache__
và __init__.py
các tập tin của tôi .
EDIT: theo một nhận xét khác, điều này cũng ẩn chúng trong ít nhất một (Nautilus), nhưng có lẽ một số trình duyệt tệp GUI.
ls -al
?
Bạn thực sự có thể ẩn các tệp trong Linux mà không cần thêm dấu chấm. Điều này thực sự che giấu chúng trong Nautilus; một ls
từ dòng lệnh vẫn sẽ liệt kê các tập tin.
.hidden
trong thư mục mà bạn muốn ẩn các tệp.ls
danh sách
Bạn chỉ đang cố gắng ẩn các tệp khỏi trình quản lý tệp của giao diện người dùng đồ họa và / hoặc môi trường máy tính để bàn? Nếu vậy, có thể có các tùy chọn ngoài việc đơn giản là tiền tố tên tệp bằng dấu chấm.
Tôi tin rằng các tập tin chỉ thêm ẩn bởi bất kỳ quản lý tập tin Linux là các tập tin sao lưu, tức là những người kết thúc trong một dấu ngã ~
hoặc .bak
hoặc bất cứ điều gì họ tin là phần mở rộng sao lưu. Trong mọi trường hợp, bạn có thể gặp may nếu tất cả những gì bạn muốn làm là ẩn các tệp sao lưu khỏi trình quản lý tệp.
Không cung cấp cho các tệp của bạn một tiện ích mở rộng sao lưu để ẩn chúng hoặc chúng có thể bị xóa vô tình !!
Bên cạnh đó, bạn có thể ẩn các tệp khỏi Finder trong Mac OS X bằng cách sử dụng lệnh SetFile -a V [file]
hoặc chỉnh sửa /.hidden
nhưng rõ ràng điều này sẽ không ẩn tệp khỏi ls
chương trình của dòng lệnh .
chflags hidden filename
.
Nếu bạn có một số kỹ năng lập trình và nếu chỉ những gì bạn cần là ẩn tên tập tin cho sự đồng thuận của người dùng để ngăn chặn không gian hình ảnh, bạn có thể hack nó!
Tôi sẽ chỉ xem xét các công cụ dòng lệnh, vì chúng khá thống nhất và là công cụ duy nhất được sử dụng liên tục là tôi.
Có nhiều cách để lưu trữ thông tin này:
Bạn có thể lưu trữ thuộc tính mở rộng "ẩn" trong các tệp đã chọn. Xemman attr
attr -s hidden -V true your_file
Hoặc như đã đề cập ở trên, bạn có thể lưu trữ danh sách tên tệp trong .hidden
tệp
Quan trọng: Điều này sẽ không hoạt động ngoài hộp bạn phải thực hiện logic, hệ thống sạch sẽ chỉ bỏ qua .hidden
các tệp và hidden
thuộc tính mở rộng!
Ngoài ra còn có các triển khai có thể có:
Nếu bạn chỉ có vài tệp, hãy ghi vào .bashrc
tệp của bạn
alias ls='ls -I filename_1 -I filename_2'
man ls
để biết thêm thông tin.
Viết một function ls
ví dụ như nó xử lý tất cả logic đằng sau nhận ra các tệp ẩn và danh sách lắp ráp của tất cả -I
các mục, sau đó thực hiện
/bin/ls
với các cờ bỏ qua thích hợp. Nhiệm vụ rất tốn công, bởi vì bạn phải xử lý tất cả các ls
tham số đúng cách.
Lấy nguồn coreutils
git clone git://git.sv.gnu.org/coreutils
hoặc là
git clone git://git.suckless.org/sbase
Vá nó theo cách bạn cần để xử lý việc thực hiện các tệp ẩn. Và đặt nó trong của bạnPATH
Tôi đã hack nó sau chưa đầy 5 phút bằng các nguồn không cần thiết và diff là như thế này:
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
nằm trong src
, không phải thư mục gốc, và không có chức năng lsdir
trong ls.c
.
Đây là giải pháp tốt nhất tôi đã tìm thấy, thêm vào hồ sơ của bạn :
alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"
Nếu bạn cần nhiều mẫu hơn chỉ cần thêm nhiều --ignore
cờ.
Ngày nay, bạn có thể viết FUSE ẩn các tệp theo cấu hình đã cho.
Bài viết này khiến tôi tin rằng bạn cần phải điều chỉnh getdir
chức năng:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Điều này đọc nội dung của một thư mục. Thao tác này làopendir()
,readdir()
, ...,closedir()
trình tự trong một cuộc gọi. Đối với mỗi mục nhập thư mục,filldir()
chức năng nên được gọi.
Tôi không phải là lập trình viên nhưng tôi tưởng tượng người ta có thể getdir
bỏ qua tất cả các tệp được liệt kê trong tệp (ví dụ) .hidden
. Nếu bạn thực hiện điều này một cách chính xác thì mọi công cụ (GUI hoặc không) sẽ bị ảnh hưởng.
Bạn có thể 'ẩn' nội dung của một thư mục bằng cách lấy đi 'x' perms cho nhóm hoặc khác : chmod go-x directoryname
. Bạn không thể liệt kê các tệp nữa, mặc dù bạn có thể truy cập một tệp nếu bạn biết đường dẫn chính xác. Điều này không giống như những gì bạn muốn.
Hãy nhớ rằng điều dotfile là một sự tiện lợi, không thực sự để ẩn tệp vì mục đích bảo mật, nhưng để giảm sự lộn xộn cho các tệp trong khi liệt kê tệp. Nó được nướng vàols
và các công cụ khác.