Windows에서 가능하기 때문에 점을 사용하지 않고 Linux에서 파일을 숨기고 싶습니다.
이것을 할 수있는 방법이 있습니까?
답변
당신은 할 수 없습니다. 파일 시스템이 숨겨진 설정을 처리하는 방식에는 근본적인 차이가 있습니다. 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 파일 브라우저에서도 숨겨져 있습니다.
답변
실제로 점을 추가하지 않고 Linux에서 파일을 숨길 수 있습니다. 이것은 실제로 노틸러스에서 숨 깁니다. ls
명령 줄에서 여전히 파일을 나열합니다.
- 파일
.hidden
을 숨기려는 폴더에 이름이 지정된 텍스트 파일을 작성 하십시오. - 숨길 파일 또는 폴더의 이름을 한 줄에 하나씩 파일에 추가하십시오.
- 파일 브라우저를 새로 고칩니다.
답변
점은 리눅스에서 파일을 숨기는 데 사용되며 변경할 수 없습니다.
그러나 파일 권한으로 재생하여 사용자가 지정된 폴더 / 파일에 액세스 할 수 없도록 할 수 있습니다. chmod
명령으로 실험 해보십시오 .
답변
그래픽 사용자 인터페이스의 파일 관리자 및 / 또는 데스크탑 환경에서만 파일을 숨기려고합니까? 그렇다면 파일 이름 앞에 점을 붙이는 것 이외의 옵션이있을 수 있습니다.
나는 생각 리눅스 파일 관리자에 의해 숨겨진 만 추가하면 파일이 백업 파일, 물결표로 끝나는, 즉 그들이다 ~
또는 .bak
그들이 백업 확장이라고 생각대로 나. 어쨌든 파일 관리자에서 백업 파일을 숨기고 싶다면 운이 좋을 것입니다.
파일을 숨길 백업 확장명을 제공하지 마십시오. 실수로 삭제 될 수 있습니다 !!
따로, 명령 SetFile -a V [file]
또는 편집을 사용하여 Mac OS X의 Finder에서 파일을 숨길 수 /.hidden
있지만 분명히 명령 줄 ls
프로그램 에서 파일을 숨기지는 않습니다 .
답변
프로그래밍 기술이 있고 사용자가 시각적 공간을 어지럽히 지 않도록 사용자 편의를 위해 파일 이름을 숨기고 있다면 해킹 할 수 있습니다!
명령 줄 도구는 매우 균일하고 끊임없이 사용되는 유일한 도구이므로 명령 줄 도구 만 고려할 것입니다.
이 정보를 저장하는 방법에는 여러 가지가 있습니다.
-
선택한 파일에 “숨겨진”확장 속성을 저장할 수 있습니다. 만나다
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)
답변
이것이 내가 찾은 최고의 솔루션입니다 . 프로필에 추가하십시오 .
alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"
더 많은 패턴이 필요하면 더 많은 --ignore
플래그를 추가하십시오 .