답변:
당신은 할 수 없습니다. 파일 시스템이 숨겨진 설정을 처리하는 방식에는 근본적인 차이가 있습니다. Windows에서 파일 시스템은 파일 "hidden"및 "system"(둘 다 숨겨진 파일의 종류)을 포함하여 파일의 여러 속성을 메타 데이터에 저장합니다. 일반적인 * nix 파일 시스템에서는 이러한 속성이 저장되지 않습니다. 대신 정보는 파일 이름과 같은 다른 곳에 두어야합니다. 따라서 파일은로 시작하는 규칙입니다. (그리고 시스템에 따라 _와 같은 다른 것들도) 기본적으로 대부분의 도구에 표시되지 않습니다.
이것은 순전히 편의를위한 것입니다. 파일 이름을 시작한다는 것은 "사용자가 항상 이것을보고 싶지 않을 것"이라는 의미 일뿐입니다. 당신이 알고 있는지 확인하기 위해, 예를 들어 실행 ls -a
하면 모든 파일이 표시됩니다.
Linux에서 파일이 목록을 복잡하게 만들지 않으려면 점으로 시작하도록 파일 이름을 바꿔야합니다 (Bonus : 휴대용 장치에 대해 이야기하는 경우 OS X에서도 작동합니다). 사용자가 파일을 찾을 수 없도록하려면 파일을 잘못하고있는 것입니다. 이것이 바로 권한입니다.
디렉토리와 관련된 유닉스 권한은 종종 사람들을 혼란스럽게 만들고, 더 잘 이해하면 도움이 될 것입니다. "읽기"및 "실행"권한 ( r
및 x
)은 파일에 대한 디렉토리 와 다른 디렉토리를 의미합니다. 디렉토리의 경우, 실행 x
권한은 디렉토리의 inode에 액세스하는지 여부를 결정합니다. 읽기 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
파일을.
편집 : 다른 의견에 따르면 이것은 적어도 하나의 (노틸러스)에서도 숨겨져 있지만 아마도 여러 GUI 파일 브라우저에서도 숨겨져 있습니다.
ls -al
있습니까?
실제로 점을 추가하지 않고 Linux에서 파일을 숨길 수 있습니다. 이것은 실제로 노틸러스에서 숨 깁니다. ls
명령 줄에서 여전히 파일을 나열합니다.
.hidden
을 숨기려는 폴더에 이름이 지정된 텍스트 파일을 작성 하십시오.ls
목록에 없습니다 .
그래픽 사용자 인터페이스의 파일 관리자 및 / 또는 데스크탑 환경에서만 파일을 숨기려고합니까? 그렇다면 파일 이름 앞에 점을 붙이는 것 이외의 옵션이있을 수 있습니다.
나는 생각 리눅스 파일 관리자에 의해 숨겨진 만 추가하면 파일이 백업 파일, 물결표로 끝나는, 즉 그들이다 ~
또는 .bak
그들이 백업 확장이라고 생각대로 나. 어쨌든 파일 관리자에서 백업 파일을 숨기고 싶다면 운이 좋을 것입니다.
파일을 숨길 백업 확장명을 제공하지 마십시오. 실수로 삭제 될 수 있습니다 !!
따로, 명령 SetFile -a V [file]
또는 편집을 사용하여 Mac OS X의 Finder에서 파일을 숨길 수 /.hidden
있지만 분명히 명령 줄 ls
프로그램 에서 파일을 숨기지는 않습니다 .
chflags hidden filename
.
프로그래밍 기술이 있고 사용자가 시각적 공간을 어지럽히 지 않도록 사용자 편의를 위해 파일 이름을 숨기고 있다면 해킹 할 수 있습니다!
명령 줄 도구는 매우 균일하고 끊임없이 사용되는 유일한 도구이므로 명령 줄 도구 만 고려할 것입니다.
이 정보를 저장하는 방법에는 여러 가지가 있습니다.
선택한 파일에 "숨겨진"확장 속성을 저장할 수 있습니다. 만나다man attr
attr -s hidden -V true your_file
위에서 언급 한 바와 같이 아니면에서 파일 이름의 목록을 저장할 수있는 .hidden
파일을
중요 : 이것은 로직을 구현해야하는 즉시 작동하지 않으며 클린 시스템은 .hidden
파일과 hidden
확장 된 속성 만 무시 합니다 !
또한 여러 가지 가능한 구현이 있습니다.
당신은 단지 몇 개의 파일이 있으면 쓸 .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
나는 suckless 소스를 사용하여 5 분 이내에 해킹했으며 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
.
요즘에는 주어진 구성에 따라 파일을 숨기는 FUSE 를 작성할 수 있습니다 .
이 기사 에서는 getdir
함수 를 조정해야한다고 생각합니다 .
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
디렉토리의 내용을 읽습니다. 이 작업은이다opendir()
,readdir()
...,closedir()
하나의 호출 순서. 각 디렉토리 항목마다filldir()
함수를 호출해야합니다.
나는 프로그래머는 아니지만 getdir
(예를 들어) .hidden
파일에 나열된 모든 파일 을 생략 할 수 있다고 생각 합니다. 이를 올바르게 구현하면 모든 도구 (GUI 여부에 관계없이)가 영향을받습니다.
그룹에 대한 'x'권한을 제거하거나 다른 방법으로 디렉토리의 내용을 '숨길'수 있습니다 chmod go-x directoryname
. 정확한 경로를 알고 있으면 파일에 더 이상 액세스 할 수는 있지만 더 이상 파일을 나열 할 수 없습니다. 이것은 당신이 원하는 것 같지 않습니다.
점 파일은 보안을 위해 실제로 파일을 숨기는 것이 아니라 파일을 나열하는 동안 파일의 혼란을 줄이기 위해 사용하는 것이 편리하다는 점을 명심하십시오. 구운 ls
도구와 다른 도구들.