점을 사용하지 않고 Linux에서 파일 숨기기


32

Windows에서 가능하기 때문에 점을 사용하지 않고 Linux에서 파일을 숨기고 싶습니다.

이것을 할 수있는 방법이 있습니까?


6
파일 숨기기 (난독 처리)는 보안을 대체하지 않습니다 (액세스 제한)
uSlackr

답변:


26

당신은 할 수 없습니다. 파일 시스템이 숨겨진 설정을 처리하는 방식에는 근본적인 차이가 있습니다. Windows에서 파일 시스템은 파일 "hidden"및 "system"(둘 다 숨겨진 파일의 종류)을 포함하여 파일의 여러 속성을 메타 데이터에 저장합니다. 일반적인 * nix 파일 시스템에서는 이러한 속성이 저장되지 않습니다. 대신 정보는 파일 이름과 같은 다른 곳에 두어야합니다. 따라서 파일은로 시작하는 규칙입니다. (그리고 시스템에 따라 _와 같은 다른 것들도) 기본적으로 대부분의 도구에 표시되지 않습니다.

이것은 순전히 편의를위한 것입니다. 파일 이름을 시작한다는 것은 "사용자가 항상 이것을보고 싶지 않을 것"이라는 의미 일뿐입니다. 당신이 알고 있는지 확인하기 위해, 예를 들어 실행 ls -a하면 모든 파일이 표시됩니다.

Linux에서 파일이 목록을 복잡하게 만들지 않으려면 점으로 시작하도록 파일 이름을 바꿔야합니다 (Bonus : 휴대용 장치에 대해 이야기하는 경우 OS X에서도 작동합니다). 사용자가 파일을 찾을 수 없도록하려면 파일을 잘못하고있는 것입니다. 이것이 바로 권한입니다.

디렉토리와 관련된 유닉스 권한은 종종 사람들을 혼란스럽게 만들고, 더 잘 이해하면 도움이 될 것입니다. "읽기"및 "실행"권한 ( rx)은 파일에 대한 디렉토리 와 다른 디렉토리를 의미합니다. 디렉토리의 경우, 실행 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는 파일 속성을 가져올 수 없기 때문에 오류가 표시되지만) 디렉토리로 변경하거나 파일을 읽을 수는 없습니다. 읽지 않으면 파일을 나열 할 수 없지만 여전히 디렉토리로 변경할 수 있으며 파일 이름을 알고 있으면 액세스 할 수 있습니다.

그러나 읽기 권한을 제거하면 모호한 보안 만 제공됩니다. 사용자가 파일 이름을 추측하면 내용을 읽을 수 있습니다.

이것은 실제로 귀하의 질문과 관련이 없을 수도 있습니다. 디렉토리 권한을 이해하고 싶었습니다.


26

.hidden숨길 파일 이름을 사용하여 디렉토리에 파일 을 작성하십시오 (한 줄에 한 이름 씩).

그런 다음에 다음을 추가하십시오 ~/.bashrc.

ls () {
  if [ -f .hidden ]; then
    declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
    ls "$@"
  fi
}

이제 ls명령에 이러한 파일이 표시되지 않습니다.

내 숨이 기술을 사용 __pycache__하고 __init__.py파일을.


편집 : 다른 의견에 따르면 이것은 적어도 하나의 (노틸러스)에서도 숨겨져 있지만 아마도 여러 GUI 파일 브라우저에서도 숨겨져 있습니다.


흥미 롭습니다. 노틸러스 또는 기타 GUI 도구에서도 작동합니까? 파일을 볼 수 ls -al있습니까?
Jakuje

1
코드 끝에 ''가 없습니다. (그리고 upvotes의 출처가 궁금한 경우 : askubuntu.com/a/713591/15811 ) ;-)
Rinzwind

14

실제로 점을 추가하지 않고 Linux에서 파일을 숨길 수 있습니다. 이것은 실제로 노틸러스에서 숨 깁니다. ls명령 줄에서 여전히 파일을 나열합니다.

  1. 파일 .hidden을 숨기려는 폴더에 이름이 지정된 텍스트 파일을 작성 하십시오.
  2. 숨길 파일 또는 폴더의 이름을 한 줄에 하나씩 파일에 추가하십시오.
  3. 파일 브라우저를 새로 고칩니다.

2
데비안 5.0의 "ls"에서는 작동하지 않습니다. 노틸러스 또는 돌고래에만 해당됩니까? ...
Tim Haegele 2013

2
파일이 노틸러스에 숨겨져 있습니다. ls목록에 없습니다 .
To Do

1
그냥 멋진 솔루션입니다! :)
Merianos Nikos

4

점은 리눅스에서 파일을 숨기는 데 사용되며 변경할 수 없습니다.

그러나 파일 권한으로 재생하여 사용자가 지정된 폴더 / 파일에 액세스 할 수 없도록 할 수 있습니다. chmod명령으로 실험 해보십시오 .


2

그래픽 사용자 인터페이스의 파일 관리자 및 / 또는 데스크탑 환경에서만 파일을 숨기려고합니까? 그렇다면 파일 이름 앞에 점을 붙이는 것 이외의 옵션이있을 수 있습니다.

나는 생각 리눅스 파일 관리자에 의해 숨겨진 만 추가하면 파일이 백업 파일, 물결표로 끝나는, 즉 그들이다 ~또는 .bak그들이 백업 확장이라고 생각대로 나. 어쨌든 파일 관리자에서 백업 파일을 숨기고 싶다면 운이 좋을 것입니다.

파일을 숨길 백업 확장명을 제공하지 마십시오. 실수로 삭제 될 수 있습니다 !!

따로, 명령 SetFile -a V [file]또는 편집을 사용하여 Mac OS X의 Finder에서 파일을 숨길 수 /.hidden있지만 분명히 명령 줄 ls프로그램 에서 파일을 숨기지는 않습니다 .


3
OS X에서는로 파일을 숨길 수도 있습니다 chflags hidden filename.
slhck

2

프로그래밍 기술이 있고 사용자가 시각적 공간을 어지럽히 지 않도록 사용자 편의를 위해 파일 이름을 숨기고 있다면 해킹 할 수 있습니다!

명령 줄 도구는 매우 균일하고 끊임없이 사용되는 유일한 도구이므로 명령 줄 도구 만 고려할 것입니다.

이 정보를 저장하는 방법에는 여러 가지가 있습니다.

  1. 선택한 파일에 "숨겨진"확장 속성을 저장할 수 있습니다. 만나다man attr

      attr -s hidden -V true your_file
    
  2. 위에서 언급 한 바와 같이 아니면에서 파일 이름의 목록을 저장할 수있는 .hidden파일을

중요 : 이것은 로직을 구현해야하는 즉시 작동하지 않으며 클린 시스템은 .hidden파일과 hidden확장 된 속성 만 무시 합니다 !

또한 여러 가지 가능한 구현이 있습니다.

  1. 당신은 단지 몇 개의 파일이 있으면 쓸 .bashrc파일

    alias ls='ls -I filename_1 -I filename_2'
    

    man ls 자세한 내용은.

  2. function ls숨겨진 파일을 인식하고 모든 -I항목의 목록 을 모은 다음 /bin/ls적절한 무시 플래그 로 실행하는 모든 논리를 처리 하는 등을 작성하십시오 . 모든 ls매개 변수를 올바르게 처리해야하기 때문에 매우 힘든 작업 입니다.

  3. 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.
Melab

2

이것이 내가 찾은 최고의 솔루션입니다 . 프로필에 추가하십시오 .

alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"

더 많은 패턴이 필요하면 더 많은 --ignore플래그를 추가하십시오 .


몇 개 이상의 파일을 숨겨야 할 경우 문자열이 매우 길어집니다. 여러 파일의 경우이 작업을보다 효율적으로 수행 할 수 있지만 몇 가지 파일의 경우 좋은 해결책입니다.
JW0914

2

요즘에는 주어진 구성에 따라 파일을 숨기는 FUSE 를 작성할 수 있습니다 .

이 기사 에서는 getdir함수 를 조정해야한다고 생각합니다 .

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
디렉토리의 내용을 읽습니다. 이 작업은이다 opendir(), readdir()..., closedir()하나의 호출 순서. 각 디렉토리 항목마다 filldir()함수를 호출해야합니다.

나는 프로그래머는 아니지만 getdir(예를 들어) .hidden파일에 나열된 모든 파일 을 생략 할 수 있다고 생각 합니다. 이를 올바르게 구현하면 모든 도구 (GUI 여부에 관계없이)가 영향을받습니다.


1

그룹에 대한 'x'권한을 제거하거나 다른 방법으로 디렉토리의 내용을 '숨길'수 있습니다 chmod go-x directoryname. 정확한 경로를 알고 있으면 파일에 더 이상 액세스 할 수는 있지만 더 이상 파일을 나열 할 수 없습니다. 이것은 당신이 원하는 것 같지 않습니다.

점 파일은 보안을 위해 실제로 파일을 숨기는 것이 아니라 파일을 나열하는 동안 파일의 혼란을 줄이기 위해 사용하는 것이 편리하다는 점을 명심하십시오. 구운 ls도구와 다른 도구들.


그리고 그것은 또한 사실이 아닙니다. 디렉토리에서 읽기 권한을 제거하면 내용을 나열 할 수 없지만 실행 권한을 제거하면 디렉토리에 대한 액세스가 전혀 거부됩니다. 디렉토리를 실행할 권한이 없으면 디렉토리 이외의 항목에 액세스 할 수 없습니다. 모든 권한을 가진 하위 디렉토리가 있고 그 경로를 알고 있더라도 마찬가지입니다.
Bachsau
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.