Nascondi i file in Linux senza usare il punto


32

Vorrei nascondere i file in Linux senza usare il punto, poiché è possibile in Windows.

C'è un modo per fare questo?


6
Ricorda che nascondere i file (offuscamento) non sostituisce la sicurezza (limitando l'accesso)
uSlackr

Risposte:


26

Non puoi. C'è una differenza fondamentale nel modo in cui i file system gestiscono le impostazioni nascoste. In Windows, il file system memorizza diversi attributi per il file in metadati, inclusi gli attributi "nascosto" e "sistema" (che sono entrambi tipi di file nascosti). Nei comuni filesystem * nix, tale attributo non viene memorizzato. Invece, le informazioni devono essere inserite altrove, come nel nome del file. La convenzione è quindi che i file iniziano con. (e in base al tuo sistema, forse alcuni altri come _) non verranno mostrati dalla maggior parte degli strumenti di default.

Questo è puramente per comodità, a. l'inizio di un nome file non significa assolutamente nulla ma "probabilmente l'utente non vuole vederlo tutto il tempo". Per essere sicuro che tu sappia, eseguendo ad es. ls -aMostrerai tutti i file.

Se non vuoi avere un file ingombrante nelle tue inserzioni in Linux, dovresti rinominarlo per iniziare con un punto (Bonus: funzionerà anche per OS X, se stiamo parlando di un dispositivo portatile). Se non vuoi che gli utenti siano in grado di trovare un file, lo stai facendo in modo errato: ecco a cosa servono le autorizzazioni.

Le autorizzazioni Unix per quanto riguarda le directory spesso confondono le persone e forse capirlo meglio ti aiuterà. Le autorizzazioni "lettura" ed "esecuzione" ( re x) significano qualcosa di diverso per le directory rispetto a quanto fanno per i file. Per le directory, l' xautorizzazione di esecuzione determina se si accede o meno agli inode nella directory. L' rautorizzazione di lettura determina se è possibile accedere all'elenco della directory. Funzionalmente, xconsente all'utente di fare le cose in una directory, mentre l' rautorizzazione consente loro di vedere cosa c'è dentro. Questi sono diversi e la differenza può essere fonte di confusione. Diamo un'occhiata a un esempio:


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

Quindi, nota che senza eseguire posso ancora elencare i file (anche se ls mostra un errore perché non può ottenere le proprietà del file), ma non posso passare alla directory o leggere i file in essa contenuti. Senza lettura non posso elencare i file, ma posso ancora passare alla directory e se conosco il nome di un file posso ancora accedervi.

Si noti, tuttavia, che la rimozione dell'autorizzazione di lettura ti dà sicurezza solo per oscurità. Se l'utente indovina il nome del file, sarà in grado di leggerne il contenuto.

Questo potrebbe non essere stato veramente rilevante per la tua domanda, volevo solo assicurarmi di aver capito i permessi della directory.


26

Creare un file .hiddennella directory con i nomi dei file da nascondere (un nome per riga).

Quindi aggiungi quanto segue al tuo ~/.bashrc:

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

Ora il tuo lscomando non elenca questi file.

Io uso questa tecnica per nascondere le mie __pycache__e __init__.pyfile.


EDIT: come per un altro commento questo li nasconde anche in almeno uno (Nautilus), ma probabilmente anche diversi browser di file GUI.


è interessante. Funziona anche nel nautilus o in altri strumenti gui? Riesci a vedere i file con ls -al?
Jakuje,

1
Alla fine del codice manca un "". (e nel caso ti chiedi da dove provengano i voti positivi : askubuntu.com/a/713591/15811 ) ;-)
Rinzwind,

14

Puoi effettivamente nascondere i file in Linux senza aggiungere un punto. Questo in realtà li nasconde in Nautilus; un lsdalla riga di comando elencherà comunque i file.

  1. Creare un file di testo denominato .hiddennella cartella in cui si desidera nascondere i file.
  2. Aggiungi i nomi dei file o delle cartelle che vuoi nascondere, uno per riga, al file.
  3. Aggiorna il tuo browser di file.

2
non funziona qui con "ls" in debian 5.0. È specifico per nautilus o delfino o ...?
Tim Haegele,

2
I file sono nascosti in Nautilus; non negli lselenchi.
Da fare il

1
soluzione semplicemente fantastica! :)
Merianos Nikos il

4

Un punto viene usato per nascondere i file in Linux e ciò non può essere modificato.

Tuttavia, è possibile giocare con le autorizzazioni del file per impedire agli utenti di avere accesso a una determinata cartella / file. Prova a sperimentare con il chmodcomando.


2

Stai solo cercando di nascondere i file dal file manager della tua interfaccia utente grafica e / o dall'ambiente desktop? In tal caso, potrebbero esserci opzioni oltre alla semplice prefissazione del nome file con un punto.

Io credo che i file solo aggiuntivi nascosti da qualsiasi gestore di file Linux sono file di backup, vale a dire quelli che terminano in una tilde ~o .bako quello che credono sia l'estensione di backup. In ogni caso, probabilmente sei fortunato se tutto ciò che desideri è nascondere i file di backup dal file manager.

Non dare ai tuoi file un'estensione di backup per nasconderli o potrebbero essere cancellati accidentalmente !!

A parte questo, puoi nascondere i file dal Finder in Mac OS X usando il comando SetFile -a V [file]o la modifica, /.hiddenma ovviamente questo non nasconderà il file dal lsprogramma della riga di comando .


3
In OS X puoi anche nascondere i file per chflags hidden filename.
slhck,

2

Se hai alcune capacità di programmazione e se solo ciò di cui hai bisogno è nascondere i nomi dei file per impedire agli utenti di ingombrare lo spazio visivo, puoi hackerarli!

Prenderò in considerazione solo gli strumenti da riga di comando, poiché sono abbastanza uniformi e sono gli unici strumenti utilizzati costantemente da me.

Esistono molti modi per archiviare queste informazioni:

  1. È possibile memorizzare l'attributo esteso "nascosto" nei file selezionati. Vedereman attr

      attr -s hidden -V true your_file
    
  2. Oppure, come menzionato sopra, è possibile memorizzare un elenco di file nel .hiddenfile

Importante: questo non funzionerà immediatamente per implementare la logica, i sistemi puliti ignoreranno solo i .hiddenfile e gli hiddenattributi estesi!

Inoltre ci sono molteplici implementazioni possibili:

  1. Se hai solo pochi file, scrivi nel tuo .bashrcfile

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

    man ls per maggiori informazioni.

  2. Scrivere un function lstale in quanto gestisce tutta la logica dietro il riconoscimento dei file nascosti e l'assemblaggio dell'elenco di tutte le -Ivoci e quindi l'esecuzione /bin/lscon i flag di ignoramento appropriati. Compito molto laborioso, perché devi gestire lscorrettamente tutti i parametri.

  3. Ottieni fonti di coreutils

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

    o

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

    Patch nel modo in cui è necessario gestire l'implementazione di file nascosti. E mettilo nel tuoPATH

    L'ho hackerato in meno di 5 minuti usando fonti succhiate e diff è così:

     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.csta nella src, non la directory radice, e non v'è alcuna funzione lsdirin ls.c.
Melab,

2

Questa è la migliore soluzione che ho trovato, aggiungi al tuo profilo :

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

Se hai bisogno di più pattern, aggiungi solo più --ignoreflag.


Questo porterà a una stringa molto, molto lunga se è necessario nascondere più di alcuni file. Per più file, ci sono modi più efficienti per farlo, ma per un paio di file, comunque una buona soluzione.
JW0914

2

Oggi puoi scrivere FUSE che nasconde i file in base alla configurazione fornita.

Questo articolo mi fa credere che sia necessario modificare la getdirfunzione:

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Questo legge il contenuto di una directory. Questa operazione è il opendir(), readdir(), ..., closedir()sequenza in una sola chiamata. Per ogni voce della directory, è filldir()necessario chiamare la funzione.

Non sono un programmatore, ma immagino che si possa getdiromettere tutti i file elencati nel (es.) .hiddenFile. Se lo implementate correttamente, tutti gli strumenti (GUI o meno) saranno interessati.


1

Si puo 'nascondere' il contenuto di una directory togliendo 'x' permanenti per il gruppo, o altro: chmod go-x directoryname. Non è più possibile elencare i file, anche se è possibile accedere a un file se si conoscesse il percorso esatto. Questo non suona come quello che vuoi.

Tieni presente che la cosa dotfile è una comodità, non proprio per nascondere il file per motivi di sicurezza, ma per ridurre il disordine per i file durante l'elenco dei file. È cotto in lse gli altri strumenti.


Ed è anche falso. Mentre la rimozione delle autorizzazioni di lettura da una directory impedisce di elencare i suoi contenuti, la rimozione dell'autorizzazione di esecuzione negherà qualsiasi accesso alla directory. Quando non si dispone dell'autorizzazione per eseguire una directory, non si avrà accesso a nulla al di là di essa. Nemmeno se esiste una sottodirectory con tutti i diritti e conosci il suo percorso.
Bachsau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.