CDの後、umaskは0002に変わります。

CDの後、umaskは0002に変わります。

Ubuntu 12.04 LTSシステムで奇妙な動作が見つかりました。 Ubuntuを初めて使用する場合です。以前はFedoraを使用していましたが、この問題は発生しませんでした。

.bashrcのumaskを0027に設定しました。ただし、別のディレクトリにCDを移動するたびに、自動的に0002に変更されます。どのディレクトリに入るかは問題ではありません。ディレクトリが変更されるたびに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

ディレクトリなしで使用しても、cdこれが発生します。

bbrown@cs:/var/log$ cd
bbrown@cs:~$ umask 027
bbrown@cs:~$ umask
0027
bbrown@cs:~$ cd
bbrown@cs:~$ umask
0002

別のディスカッション掲示板を検索してみました。同様の質問はスタックオーバーフローに尋ねる解決策はありません。

このディレクトリには特別なACLはありません。

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

ファイルシステムはext4であり、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

私が知る限り、cshはこれらの動作を示しておらず、単にbashです。

何が起こっており、どのように無効にするのですか?

修正する

Fedora 13システムからbashをコピーしてホームディレクトリに配置しました。このバージョンではこの問題は発生しません。

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

要求に応じて、出力は次のようになります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
}

これは言っています。 RVMはすでにcdコマンドを制御しています。迷惑ですが、何が起こっているのか説明します。

答え1

cdumaskは変更されません。過負荷が発生したか、cd事前コマンドまたはポストコマンドフックがあります。

を実行して、過負荷が発生cdしたことを確認してくださいtype cd。これは、「シェル組み込み」(良い)かエイリアスか関数(疑わしい)かを示します。

echo "$PROMPT_COMMAND"コマンド後にフックがあるかどうかを確認するには、実行します(bashは各プロンプトを表示する前にこの変数の値を評価します)。また、各コマンドの前に実行されるデバッグトラップを確認してくださいtrap -p DEBUG

関連情報