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.

관련 정보