동일한 시스템(AIX 6.1)에서 서로 다른 사용자 ID를 사용하는 2개의 서로 다른 로그인 쉘(둘 다 ksh) uname -M
에서 시스템 모델을 얻는 하나의 쉘에서 이 작업을 수행할 수 있습니다. 다른 껍질에서는 공백이 생깁니다! 유일한 차이점은 사용자 ID와 환경입니다. 환경을 여기에 둘 수는 없습니다.
User1 셸 예:
$ uname -M
IBM,1234-567
$
사용자 2 셸 예:
$ uname -M
$
나는 두 껍질 모두에 트러스를 만들었습니다. 차이가 있긴 한데 이해가 안 되네요. 이것은 나쁜 트러스입니다.
truss uname -M
.. a bunch of execve's ripped out as it was searching the PATH for uname.
execve("/bin/uname", 0x2FF2155C, 0x20012EF8) argc: 2
__loadx(0x03480000, 0x2FF21380, 0x00000108, 0xF0713968, 0x20000CD0) = 0x00000000
__loadx(0x0A040000, 0xD042D064, 0x0000008A, 0x20001254, 0x00000000) = 0x00000000
sbrk(0x00000000) = 0x200013D0
vmgetinfo(0x2FF20530, 7, 16) = 0
sbrk(0x00000000) = 0x200013D0
__libc_sbrk(0x00000000) = 0x200013D0
getuidx(4) = 28633
getuidx(2) = 28633
getuidx(1) = 28633
getgidx(4) = 100
getgidx(2) = 100
getgidx(1) = 100
getuidx(4) = 28633
getuidx(2) = 28633
getuidx(1) = 28633
getgidx(4) = 100
getgidx(2) = 100
getgidx(1) = 100
__loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128
__loadx(0x01480180, 0x2FF1FEF0, 0x00000A50, 0xF068921C, 0xF068914C) = 0xF0759FA0
__loadx(0x07080000, 0xF06891EC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF3C
__loadx(0x07080000, 0xF068912C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF48
__loadx(0x07080000, 0xF06891FC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF78
__loadx(0x07080000, 0xF068913C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF84
__loadx(0x07080000, 0xF06891BC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF54
__loadx(0x07080000, 0xF068915C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF6C
__loadx(0x07080000, 0xF06891CC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AF90
__loadx(0x07080000, 0xF06891DC, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AFC0
__loadx(0x07080000, 0xF068916C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075AFA8
__loadx(0x07080000, 0xF068917C, 0xFFFFFFFF, 0xF0759FA0, 0x00000000) = 0xF075B020
getuidx(4) = 28633
getuidx(2) = 28633
getuidx(1) = 28633
getgidx(4) = 100
getgidx(2) = 100
getgidx(1) = 100
__loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128
getuidx(4) = 28633
getuidx(2) = 28633
getuidx(1) = 28633
getgidx(4) = 100
getgidx(2) = 100
getgidx(1) = 100
__loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128
getuidx(4) = 28633
getuidx(2) = 28633
getuidx(1) = 28633
getgidx(4) = 100
getgidx(2) = 100
getgidx(1) = 100
__loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128
getuidx(4) = 28633
getuidx(2) = 28633
getuidx(1) = 28633
getgidx(4) = 100
getgidx(2) = 100
getgidx(1) = 100
__loadx(0x01480080, 0x2FF1FEF0, 0x00000A50, 0x2FF20A60, 0x2FF22ED1) = 0xD0538128
access("/usr/lib/nls/msg/en_US/uname.cat", 0) = 0
_getpid() = 7405946
uname(0x2000132C) = 0
statx("CuAt", 0x2FF20870, 76, 0) Err#2 ENOENT
kopen("CuAt", O_RDONLY) Err#2 ENOENT
kioctl(1, 22528, 0x00000000, 0x00000000) = 0
kwrite(1, "\n", 1) = 1
__loadx(0x04000000, 0x2FF20970, 0x00000800, 0x0000D032, 0x00000000) = 0x00000000
kfcntl(1, F_GETFL, 0x00000001) = 67110914
kfcntl(2, F_GETFL, 0x2FF22FFC) = 67110914
_exit(0)
kwrite
끝에 개행 문자만 출력되는 것을 볼 수 있습니다 "\n"
.
좋은 트러스 출력에서는 uname이 다음에서 속성을 가져오는 것처럼 보입니다.
/etc/objrepos/CuAt
이것은 나를 다음으로 이끈다lsattr
주문 및 기타.
uname -M이 비어 있는 이유는 무엇입니까? 어떤 환경 변수가 이에 영향을 미치나요?
답변1
알겠어요. "좋은" 환경을 스캔하고 있는데 다음 환경 변수가 표시됩니다.
export ODMDIR=/etc/objrepos
"좋은 트러스"가 여기에서 기계 모델을 찾고 있다는 것을 알고 불량 쉘에서 이 명령을 실행했고 이제 uname -M이 작동합니다.
$ uname -M
IBM,1234-567
죄송합니다. 환경을 게시하지 않았지만 용량이 크고 민감한 정보가 많이 포함되어 있습니다.