Deseo ocultar archivos en Linux sin usar el punto, ya que es posible en Windows.
¿Hay alguna forma de hacer esto?
Deseo ocultar archivos en Linux sin usar el punto, ya que es posible en Windows.
¿Hay alguna forma de hacer esto?
Respuestas:
No puedes. Hay una diferencia fundamental en la forma en que los sistemas de archivos manejan configuraciones ocultas. En Windows, el sistema de archivos almacena varios atributos para el archivo en metadatos, incluidos los atributos "oculto" y "sistema" (ambos tipos de archivos ocultos). En los sistemas de archivos * nix comunes, no se almacena dicho atributo. En cambio, la información debe colocarse en otro lugar, como en el nombre del archivo. La convención es que los archivos comienzan con. (y dependiendo de su sistema, tal vez algunos otros como _) no se mostrarán en la mayoría de las herramientas de forma predeterminada.
Esto es puramente por conveniencia, a. comenzar un nombre de archivo no significa absolutamente nada, pero "el usuario probablemente no quiera ver esto todo el tiempo". Para asegurarse de que lo sabe, ejecutar, por ejemplo ls -a
, mostrará todos los archivos.
Si no desea que un archivo desordene sus listados en Linux, debe cambiarle el nombre para que comience con un punto (Bonificación: esto también funcionará para OS X, si estamos hablando de un dispositivo portátil). Si no desea que los usuarios puedan encontrar un archivo, lo está haciendo mal, para eso están los permisos.
Los permisos de Unix, ya que pertenecen a directorios, a menudo confunden a las personas, y tal vez entenderlo mejor lo ayudará. Los permisos "leer" y "ejecutar" ( r
y x
) significan algo diferente para los directorios que para los archivos. Para los directorios, el x
permiso de ejecución determina si accede o no a los inodos en el directorio. El r
permiso de lectura dicta si puede acceder o no a la lista del directorio. Funcionalmente, x
permite al usuario hacer cosas en un directorio, mientras que el r
permiso le permite ver lo que contiene. Estos son diferentes, y la diferencia puede ser confusa. Veamos un ejemplo:
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 ..
Entonces, tenga en cuenta que sin ejecutar todavía puedo enumerar los archivos (aunque ls muestra un error porque no puede obtener las propiedades del archivo), pero no puedo cambiar al directorio o leer los archivos en él. Sin leer, no puedo enumerar los archivos, pero aún puedo cambiar al directorio y, si sé el nombre de un archivo, aún puedo acceder a él.
Sin embargo, tenga en cuenta que eliminar el permiso de lectura solo le brinda seguridad por oscuridad. Si el usuario adivina el nombre del archivo, podrá leer su contenido.
Puede que esto no haya sido realmente relevante para su pregunta, solo quería asegurarme de que entendiera los permisos del directorio.
Cree un archivo .hidden
en el directorio con los nombres de los archivos que se ocultarán (un nombre en cada línea).
Luego agregue lo siguiente a su ~/.bashrc
:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
Ahora su ls
comando no enumera estos archivos.
Yo uso esta técnica para ocultar mi __pycache__
y mis __init__.py
archivos.
EDITAR: según otro comentario, esto también los oculta en al menos uno (Nautilus), pero probablemente también en varios navegadores de archivos GUI.
ls -al
?
En realidad, puede ocultar archivos en Linux sin agregar un punto. Esto realmente los esconde en Nautilus; un ls
de la línea de comando seguirá enumerando los archivos.
.hidden
en la carpeta donde desea ocultar los archivos.ls
listas.
¿Solo intenta ocultar archivos del administrador de archivos de la interfaz gráfica de usuario y / o del entorno de escritorio? Si es así, puede haber opciones más allá de simplemente prefijar el nombre del archivo con un punto.
Yo creo que los archivos sólo adicionales ocultos por cualquier administrador de archivos de Linux son archivos de copia de seguridad, es decir, los que terminan en una tilde ~
o .bak
o lo que ellos creen que es la extensión de copia de seguridad. En cualquier caso, probablemente tenga suerte si todo lo que desea hacer es ocultar los archivos de respaldo del administrador de archivos.
¡No le dé a sus archivos una extensión de respaldo para ocultarlos o podrían borrarse accidentalmente!
Además, puede ocultar archivos del Finder en Mac OS X usando el comando SetFile -a V [file]
o la edición, /.hidden
pero obviamente esto no ocultará el archivo del programa de la línea de comando ls
.
chflags hidden filename
.
Si tiene algunas habilidades de programación y si solo lo que necesita es ocultar nombres de archivos para que el usuario convenza de dejar de saturar el espacio visual, ¡puede piratearlo!
Consideraré solo las herramientas de línea de comandos, ya que son bastante uniformes y son las únicas herramientas utilizadas constantemente por mí.
Hay muchas formas de almacenar esta información:
Puede almacenar el atributo extendido "oculto" en los archivos seleccionados. Verman attr
attr -s hidden -V true your_file
O como se mencionó anteriormente, puede almacenar la lista de nombre de archivo en el .hidden
archivo
Importante: Esto no funcionará desde el primer momento en que debe implementar la lógica, ¡los sistemas limpios simplemente ignorarán los .hidden
archivos y los hidden
atributos extendidos!
También hay múltiples implementaciones posibles:
Si solo tiene unos pocos archivos, escriba su .bashrc
archivo
alias ls='ls -I filename_1 -I filename_2'
man ls
para más información.
Escriba un mensaje function ls
, ya que maneja toda la lógica detrás de reconocer archivos ocultos y ensamblar la lista de todas las -I
entradas, y luego ejecutar
/bin/ls
con los indicadores de ignorar adecuados. Tarea muy laboriosa, porque tienes que manejar todos los ls
parámetros correctamente.
Obtenga fuentes de coreutils
git clone git://git.sv.gnu.org/coreutils
o
git clone git://git.suckless.org/sbase
Parchelo de la manera que necesita para manejar su implementación de archivos ocultos. Y colóquelo en suPATH
Lo pirateé en menos de 5 minutos usando fuentes suckless y diff es así:
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
se encuentra src
, no en el directorio raíz, y no hay ninguna función lsdir
en ls.c
.
Esta es la mejor solución que he encontrado, agregue a su perfil :
alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"
Si necesita más patrones, simplemente agregue más --ignore
banderas.
Hoy en día puede escribir FUSE que oculta los archivos de acuerdo con la configuración dada.
Este artículo me hace creer que necesita ajustar la getdir
función:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Esto lee el contenido de un directorio. Esta operación es laopendir()
,readdir()
, ...,closedir()
secuencia en una sola llamada. Para cada entrada de directorio, sefilldir()
debe llamar a la función.
No soy un programador, pero imagino que uno podría hacer getdir
omitir todos los archivos enumerados en (por ejemplo) el .hidden
archivo. Si implementa esto correctamente, todas las herramientas (GUI o no) se verán afectadas.
Se puede 'ocultar' el contenido de un directorio mediante la eliminación de 'x' permanentes para el grupo, o de otro tipo: chmod go-x directoryname
. Ya no podría enumerar archivos, aunque podría acceder a un archivo si supiera la ruta exacta. Esto no suena como lo que quieres.
Tenga en cuenta que lo de los archivos de puntos es una conveniencia, no realmente para ocultar el archivo por razones de seguridad, sino para reducir el desorden de los archivos durante el listado de archivos. Está horneado ls
y las otras herramientas.