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

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

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



답변

당신은 할 수 없습니다. 파일 시스템이 숨겨진 설정을 처리하는 방식에는 근본적인 차이가 있습니다. 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는 파일 속성을 가져올 수 없기 때문에 오류가 표시되지만) 디렉토리로 변경하거나 파일을 읽을 수는 없습니다. 읽지 않으면 파일을 나열 할 수 없지만 여전히 디렉토리로 변경할 수 있으며 파일 이름을 알고 있으면 액세스 할 수 있습니다.

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

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


답변

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

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

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

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

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


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


답변

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

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

답변

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

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


답변

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

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

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

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


답변

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

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

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

  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)
    

답변

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

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

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