Eu notei um comportamento estranho no meu sistema Ubuntu 12.04 LTS. Esta é minha primeira experiência com o Ubuntu; anteriormente eu usei o Fedora e nunca tive esse problema.
Eu configurei minha umask em .bashrc para 0027. Mas ela muda automaticamente para 0002 toda vez que eu clico em outro diretório. Não importa em qual diretório eu vá; cada mudança de diretório resulta na troca de umask.
bbrown@cs:~$ umask
0027
bbrown@cs:~$ cd /
bbrown@cs:/$ umask
0002
bbrown@cs:/$ umask 027
bbrown@cs:/$ cd /var/log
bbrown@cs:/var/log$ umask
0002
Isso acontece mesmo se eu usar apenas cd
sem um diretório:
bbrown@cs:/var/log$ cd
bbrown@cs:~$ umask 027
bbrown@cs:~$ umask
0027
bbrown@cs:~$ cd
bbrown@cs:~$ umask
0002
Eu pesquisei em alguns outros fóruns de discussão. Uma pergunta semelhante foi solicitada no Stack Overflow sem resolução.
Não tenho ACLs especiais em nenhum desses diretórios.
bbrown@cs:/var/log$ getfacl /
getfacl: Removing leading '/' from absolute path names
# file: .
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
bbrown@cs:/var/log$ getfacl /var/log
getfacl: Removing leading '/' from absolute path names
# file: usr/bin
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
Sistemas de arquivos são ext4 sem opções de montagem do ACL:
bbrown@cs:/var/log$ more /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
/dev/mapper/vg0-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/vda1 during installation
UUID=0da490ac-183d-45cd-a490-5d7ac3663337 /boot ext2 defaults 0 2
/dev/mapper/vg0-export /export ext4 defaults 0 2
/dev/mapper/vg0-home /home ext4 defaults 0 2
/dev/mapper/vg0-var /var ext4 defaults 0 2
/dev/mapper/vg0-mysql /var/lib/mysql ext4 defaults 0 2
/dev/mapper/vg0-pgsql /var/lib/postgresql ext4 defaults 0 2
/dev/mapper/vg0-swap none swap sw 0 0
O csh não exibe esse comportamento; é bash apenas até onde eu sei.
O que está acontecendo e como desabilito isso?
Atualizar
Eu copiei bash do meu sistema Fedora 13 e coloquei no meu diretório home. Essa versão não exibe o problema.
bbrown@cs:~$ /bin/bash --version
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
bbrown@cs:~$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash
bbrown@cs:~$ ls -l ./bash
-rwxr-xr-x 1 bbrown bbrown 904664 Sep 11 13:02 ./bash
bbrown@cs:~$ ./bash --version
GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
bbrown@cs:~$ exec ./bash
bbrown@cs:~$ umask
0027
bbrown@cs:~$ cd /
bbrown@cs:/$ umask
0027
Conforme solicitado, aqui está a saída de type cd
:
bbrown@cs:~$ type cd
cd is a function
cd ()
{
if builtin cd "$@"; then
[[ -n "${rvm_current_rvmrc:-}" && "$*" == "." ]] && rvm_current_rvmrc="" || true;
__rvm_do_with_env_before;
__rvm_project_rvmrc;
__rvm_after_cd;
__rvm_do_with_env_after;
return 0;
else
return $?;
fi
}
Isso é revelador. O RVM assumiu o controle do comando cd
. Isso é chato, mas certamente explica o que está acontecendo.