You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sudo安装CMake后,如何将文件所有者改为原用户?

解决CMake sudo安装后配置文件属主为root的问题

你已经能正确定位到原用户的家目录,但sudo执行install时文件会被设为root属主,要改成原用户,可通过CMake的install(CODE)指令在安装阶段执行chown命令,具体步骤如下:

1. 补全原用户信息的获取

除了家目录,还需要明确原用户的用户名,在你现有代码基础上补充:

# 获取原用户用户名
if($ENV{SUDO_USER})
    set(ORIGINAL_USER $ENV{SUDO_USER})
else()
    execute_process(
        COMMAND sh -c "whoami"
        OUTPUT_VARIABLE ORIGINAL_USER
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
endif()

# 你已有的家目录获取代码
if($ENV{SUDO_USER})
    execute_process(
        COMMAND sh -c "eval echo ~$ENV{SUDO_USER}"
        OUTPUT_VARIABLE USER_HOME
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
else()
    execute_process(
        COMMAND sh -c "echo $HOME"
        OUTPUT_VARIABLE USER_HOME
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )
endif()

set(USER_HIDDEN_DIR "${USER_HOME}/.application")

2. 使用install(CODE)执行chown

在原install(FILES)指令后,添加一段install(CODE)来修改文件属主:

# 复制配置文件
install(FILES etc/config.tsv DESTINATION ${USER_HIDDEN_DIR} PERMISSIONS OWNER_READ OWNER_WRITE)

# 修改文件属主为原用户
install(CODE "
    execute_process(
        COMMAND chown ${ORIGINAL_USER}:${ORIGINAL_USER} ${USER_HIDDEN_DIR}/config.tsv
        RESULT_VARIABLE CHOWN_RESULT
    )
    if(NOT CHOWN_RESULT EQUAL 0)
        message(WARNING \"Failed to change owner of ${USER_HIDDEN_DIR}/config.tsv to ${ORIGINAL_USER}\")
    endif()
")

说明

  • install(CODE)会在安装阶段执行指定的CMake代码,这里调用execute_process执行系统的chown命令。
  • 当非sudo安装时,ORIGINAL_USER就是当前用户,此时chown不会改变属主,也不会报错,无需额外判断。
  • 如果需要修改整个隐藏目录的属主,把命令里的文件路径换成${USER_HIDDEN_DIR}即可,不过通常只需修改配置文件本身。

内容的提问来源于stack exchange,提问作者CDR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:30:06