Ukryj pliki w systemie Linux bez użycia kropki

32

Chcę ukryć pliki w systemie Linux bez użycia kropki, ponieważ jest to możliwe w systemie Windows.

Czy jest na to sposób?

aWebDeveloper
źródło
6
Pamiętaj, że ukrywanie plików (zaciemnianie) nie zastępuje bezpieczeństwa (ograniczenie dostępu)
uSlackr 21.11.11

Odpowiedzi:

26

Nie możesz. Istnieje zasadnicza różnica w sposobie obsługi ukrytych ustawień przez systemy plików. W systemie Windows system plików przechowuje kilka atrybutów pliku w metadanych, w tym atrybuty „ukryty” i „system” (oba są rodzajami ukrytych plików). We wspólnych systemach plików * nix taki atrybut nie jest przechowywany. Zamiast tego informacje należy umieścić w innym miejscu, na przykład w nazwie pliku. Konwencja jest więc taka, że ​​pliki zaczynają się od. (i w zależności od systemu, być może niektóre inne, takie jak _) nie będą domyślnie wyświetlane przez większość narzędzi.

Jest to wyłącznie dla wygody, a. rozpoczęcie nazwy pliku oznacza absolutnie nic, ale „użytkownik prawdopodobnie nie chce tego cały czas widzieć”. Aby upewnić się, że wiesz, uruchomienie np. ls -aPokaże wszystkie pliki.

Jeśli nie chcesz, aby plik był zaśmiecany na twoich listach w Linuksie, powinieneś zmienić jego nazwę, aby zacząć od kropki (Bonus: zadziała to również w OS X, jeśli mówimy o urządzeniu przenośnym). Jeśli nie chcesz, aby użytkownicy mogli znaleźć plik, robisz to źle - po to są uprawnienia.

Uprawnienia uniksowe dotyczące katalogów często dezorientują ludzi, a może lepsze zrozumienie pomoże. Uprawnienia do „odczytu” i „wykonywania” ( ri x) oznaczają coś innego dla katalogów niż dla plików. W przypadku katalogów xuprawnienie do wykonywania określa, czy uzyskujesz dostęp do i-węzłów w katalogu. Uprawnienie do odczytu rokreśla, czy możesz uzyskać dostęp do listy katalogu. Funkcjonalnie xpozwala użytkownikowi robić rzeczy w katalogu, a ruprawnienie pozwala mu zobaczyć, co w nim jest. Są różne, a różnica może być myląca. Spójrzmy na przykład:


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

Zauważ, że bez wykonania mogę nadal wyświetlać listę plików (chociaż ls pokazuje błąd, ponieważ nie może uzyskać właściwości pliku), ale nie mogę przejść do katalogu ani odczytać zawartych w nim plików. Bez odczytu nie mogę wyświetlić listy plików, ale nadal mogę przejść do katalogu i jeśli znam nazwę pliku, nadal mogę uzyskać do niego dostęp.

Należy jednak pamiętać, że usunięcie uprawnienia do odczytu zapewnia bezpieczeństwo tylko przez zaciemnienie. Jeśli użytkownik odgadnie nazwę pliku, będzie mógł odczytać jego zawartość.

To może nie być tak naprawdę związane z twoim pytaniem, chciałem tylko upewnić się, że rozumiesz uprawnienia do katalogu.

jcrawfordor
źródło
26

Utwórz plik .hiddenw katalogu z nazwami plików, które mają być ukryte (jedna nazwa w każdym wierszu).

Następnie dodaj następujące elementy do ~/.bashrc:

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

Teraz twoje lspolecenie nie wyświetla tych plików.

Używam tej techniki do ukrywania moich __pycache__i __init__.pyplików.


EDYCJA: zgodnie z innym komentarzem ukrywa je również w co najmniej jednej (Nautilus), ale prawdopodobnie także w kilku przeglądarkach plików GUI.

A Sz
źródło
to interesujące. Czy działa również w nautilusie lub innych narzędziach GUI? Czy możesz zobaczyć pliki za pomocą ls -al?
Jakuje
1
na końcu kodu brakuje „”. (a jeśli zastanawiasz się, skąd pochodzą komentarze : askubuntu.com/a/713591/15811 ) ;-)
Rinzwind
14

Możesz ukryć pliki w systemie Linux bez dodawania kropki. To faktycznie ukrywa ich w Nautilusie; lsz wiersza poleceń nadal będzie lista plików.

  1. Utwórz plik tekstowy o nazwie .hiddenw folderze, w którym chcesz ukryć pliki.
  2. Dodaj nazwy plików lub folderów, które chcesz ukryć, po jednym w wierszu, do pliku.
  3. Odśwież swoją przeglądarkę plików.
Do zrobienia
źródło
2
nie działa tutaj z „ls” w debian 5.0. Czy jest specyficzny dla nautilusa, delfina czy ...?
Tim Haegele,
2
Pliki są ukryte w Nautilus; nie ma na lslistach.
Zrobić
1
po prostu niesamowite rozwiązanie! :)
Merianos Nikos,
4

Kropka służy do ukrywania plików w systemie Linux i nie można tego zmienić.

Można jednak grać z uprawnieniami do plików, aby uniemożliwić użytkownikom dostęp do danego folderu / pliku. Spróbuj eksperymentować z chmodpoleceniem.

bbaja42
źródło
2

Czy tylko próbujesz ukryć pliki przed menedżerem plików i / lub środowiskiem graficznym interfejsu użytkownika? Jeśli tak, mogą istnieć opcje poza zwykłym prefiksem nazwy pliku kropką.

I wierzę , że tylko dodatkowe pliki ukryte przez każdego menedżera plików Linuksa są pliki kopii zapasowej, czyli tych, kończąc w tyldą ~lub .bakczy co ich zdaniem jest rozszerzenie kopii zapasowej. W każdym razie prawdopodobnie masz szczęście, jeśli wszystko, co chcesz zrobić, to ukryć pliki kopii zapasowej w menedżerze plików.

Nie udostępniaj swoim plikom kopii zapasowej, aby je ukryć, ponieważ mogą zostać przypadkowo usunięte !!

Nawiasem mówiąc, możesz ukryć pliki w Finderze w Mac OS X za pomocą polecenia SetFile -a V [file]lub edycji, /.hiddenale oczywiście nie ukryje to pliku przed lsprogramem wiersza poleceń .

Jeff Burdges
źródło
3
W OS X można również ukrywać pliki według chflags hidden filename.
slhck 21.11.11
2

Jeśli masz jakieś umiejętności programowania i jeśli tylko potrzebujesz, ukrywasz nazwy plików, aby użytkownik nie przestał zaśmiecać przestrzeni wizualnej, możesz ją zhakować!

Rozważę tylko narzędzia wiersza poleceń, ponieważ są one dość jednolite i są jedynymi narzędziami stale używanymi przeze mnie.

Istnieje wiele sposobów przechowywania tych informacji:

  1. Możesz przechowywać „ukryty” atrybut rozszerzony w wybranych plikach. Widziećman attr

      attr -s hidden -V true your_file
    
  2. Lub, jak wspomniano powyżej, możesz przechowywać listę nazw plików w .hiddenpliku

Ważne: nie zadziała to od razu po zaimplementowaniu logiki, czyste systemy po prostu zignorują .hiddenpliki i hiddenrozszerzone atrybuty!

Istnieje również wiele możliwych implementacji:

  1. Jeśli masz tylko kilka plików, napisz w swoim .bashrcpliku

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

    man ls po więcej informacji.

  2. Napisz function lstaki, że obsługuje całą logikę związaną z rozpoznawaniem ukrytych plików i gromadzeniem listy wszystkich -Iwpisów, a następnie wykonywanie /bin/lsz odpowiednimi flagami ignorowania. Bardzo żmudne zadanie, ponieważ musisz lspoprawnie obsługiwać wszystkie parametry.

  3. Uzyskaj źródła coreutils

    git clone git://git.sv.gnu.org/coreutils
    

    lub

    git clone git://git.suckless.org/sbase
    

    Popraw to tak, jak potrzebujesz obsługi implementacji ukrytych plików. I umieść to w swoimPATH

    Zhackowałem go w mniej niż 5 minut, używając źródeł bezskutecznych, a diff wygląda następująco:

     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)
    
Aleksy Grabowski
źródło
ls.cZnajduje się w srcnie w katalogu głównym, a nie ma funkcji lsdirw ls.c.
Melab
2

To najlepsze rozwiązanie, jakie znalazłem, dodaj do swojego profilu :

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

Jeśli potrzebujesz więcej wzorów, po prostu dodaj więcej --ignoreflag.

jsmedmar
źródło
Doprowadzi to do bardzo, bardzo długiego ciągu, jeśli trzeba ukryć więcej niż kilka plików. W przypadku wielu plików istnieją bardziej wydajne sposoby, ale w przypadku kilku plików dobre rozwiązanie.
JW0914
2

Obecnie możesz pisać BEZPIECZNIK, który ukrywa pliki zgodnie z podaną konfiguracją.

W tym artykule uważam, że musisz poprawić tę getdirfunkcję:

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Odczytuje zawartość katalogu. Ta operacja jest opendir(), readdir(), ..., closedir()sekwencja w jednym połączeniu. Dla każdej pozycji katalogu filldir()należy wywołać funkcję.

Nie jestem programistą, ale wyobrażam sobie, że można getdirpominąć wszystkie pliki wymienione w (np.) .hiddenPliku. Jeśli zaimplementujesz to poprawnie, wpłynie to na każde narzędzie (GUI lub nie).

Kamil Maciorowski
źródło
1

Można „hide” zawartość katalogu zabierając „x” perms dla grupy lub inne: chmod go-x directoryname. Nie można już wyświetlać plików, ale można uzyskać dostęp do pliku, jeśli znasz dokładną ścieżkę. To nie brzmi jak chcesz.

Należy pamiętać, że dotfile to wygoda, nie tak naprawdę, aby ukryć plik ze względów bezpieczeństwa, ale aby zmniejszyć bałagan w plikach podczas wyświetlania listy plików. Jest upieczony lsi inne narzędzia.

Rich Homolka
źródło
I to także nieprawda. Podczas gdy usuwanie uprawnień do odczytu z katalogu powstrzymuje Cię od wyświetlania jego zawartości, usunięcie uprawnienia do wykonywania w ogóle odmawia dostępu do katalogu. Jeśli nie masz uprawnień do wykonania katalogu, nie będziesz mieć dostępu do niczego poza nim. Nawet jeśli istnieje podkatalog z pełnymi prawami i znasz jego ścieżkę.
Bachsau,