Vorrei nascondere i file in Linux senza usare il punto, poiché è possibile in Windows.
C'è un modo per fare questo?
Vorrei nascondere i file in Linux senza usare il punto, poiché è possibile in Windows.
C'è un modo per fare questo?
Risposte:
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 -a
Mostrerai 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" ( r
e x
) significano qualcosa di diverso per le directory rispetto a quanto fanno per i file. Per le directory, l' x
autorizzazione di esecuzione determina se si accede o meno agli inode nella directory. L' r
autorizzazione di lettura determina se è possibile accedere all'elenco della directory. Funzionalmente, x
consente all'utente di fare le cose in una directory, mentre l' r
autorizzazione 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.
Creare un file .hidden
nella 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 ls
comando non elenca questi file.
Io uso questa tecnica per nascondere le mie __pycache__
e __init__.py
file.
EDIT: come per un altro commento questo li nasconde anche in almeno uno (Nautilus), ma probabilmente anche diversi browser di file GUI.
ls -al
?
Puoi effettivamente nascondere i file in Linux senza aggiungere un punto. Questo in realtà li nasconde in Nautilus; un ls
dalla riga di comando elencherà comunque i file.
.hidden
nella cartella in cui si desidera nascondere i file.ls
elenchi.
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 .bak
o 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, /.hidden
ma ovviamente questo non nasconderà il file dal ls
programma della riga di comando .
chflags hidden filename
.
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:
È possibile memorizzare l'attributo esteso "nascosto" nei file selezionati. Vedereman attr
attr -s hidden -V true your_file
Oppure, come menzionato sopra, è possibile memorizzare un elenco di file nel .hidden
file
Importante: questo non funzionerà immediatamente per implementare la logica, i sistemi puliti ignoreranno solo i .hidden
file e gli hidden
attributi estesi!
Inoltre ci sono molteplici implementazioni possibili:
Se hai solo pochi file, scrivi nel tuo .bashrc
file
alias ls='ls -I filename_1 -I filename_2'
man ls
per maggiori informazioni.
Scrivere un function ls
tale in quanto gestisce tutta la logica dietro il riconoscimento dei file nascosti e l'assemblaggio dell'elenco di tutte le -I
voci e quindi l'esecuzione
/bin/ls
con i flag di ignoramento appropriati. Compito molto laborioso, perché devi gestire ls
correttamente tutti i parametri.
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.c
sta nella src
, non la directory radice, e non v'è alcuna funzione lsdir
in ls.c
.
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ù --ignore
flag.
Oggi puoi scrivere FUSE che nasconde i file in base alla configurazione fornita.
Questo articolo mi fa credere che sia necessario modificare la getdir
funzione:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Questo legge il contenuto di una directory. Questa operazione è ilopendir()
,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 getdir
omettere tutti i file elencati nel (es.) .hidden
File. Se lo implementate correttamente, tutti gli strumenti (GUI o meno) saranno interessati.
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 ls
e gli altri strumenti.