Linux基本指令篇 —— whoami指令

    whoami 是 Linux 和 Unix 系统中一个简单但实用的命令,全称 Who Am I(我是谁)。它的功能是显示当前登录用户的用户名。以下是关于 whoami 的详细解析:


目录

1. 基本用法

2. 命令特点

3. 实际应用场景

场景 1:脚本中获取当前用户

场景 2:权限检查

场景 3:日志记录

4. 技术背景

5. 常见问题

Q1: whoami 和 echo $USER 有什么区别?

Q2: 为什么有时 whoami 会报错?

6. 扩展知识

替代命令

权限提升时的注意事项


1. 基本用法

直接输入命令:

whoami

输出示例:

这会显示当前终端会话的有效用户名(Effective User Name)。


2. 命令特点

  • 简洁高效:仅返回用户名,无额外信息。

  • 与 whoid 的区别

    • whoami:仅显示当前用户。

    • who:显示所有登录用户及终端信息。

    • id:显示用户 UID、GID 及所属组。

示例对比


3. 实际应用场景

场景 1:脚本中获取当前用户

在 Shell 脚本中动态获取执行者用户名:

#!/bin/bash                 # 指定用 Bash 来执行这个脚本
CURRENT_USER=$(whoami)      # 运行 whoami 命令获取当前用户名,并存入变量 CURRENT_USER
echo "当前用户是:$CURRENT_USER"  # 打印当前用户名

场景 2:权限检查

在执行需要特定权限的操作前验证用户:

一个 权限检查机制,确保脚本只能由 root 用户执行,否则报错并退出。

if [ "$(whoami)" != "root" ]; then  # 检查当前用户是否是 rootecho "请使用 root 用户运行此脚本!"  # 如果不是,显示提示信息exit 1                          # 退出脚本,并返回错误码 1(表示失败)
fi

场景 3:日志记录

在日志中添加操作用户信息:

echo "[$(date)] 用户 $(whoami) 执行了备份操作" >> ~/backup.log


4. 技术背景

  • 实现原理whoami 本质上是调用系统函数 geteuid() 获取有效用户 ID,再通过 /etc/passwd 转换为用户名。

  • 命令类型

    • 通常是独立程序(路径 /usr/bin/whoami)。

    • 也可通过 type -a whoami 检查:


5. 常见问题

Q1: whoami 和 echo $USER 有什么区别?

  • whoami:通过系统调用实时获取有效用户(Effective User)。

  • $USER:是 Shell 的环境变量,表示登录用户(Login User)。
    特殊情况:若用户通过 su 或 sudo 切换身份,两者可能不同:

    #(理想状态下)
    sudo su      # 切换到 root
    whoami       # 输出:root(有效用户)
    echo $USER   # 输出:hmz(仍为登录用户)

此时hmz用户还没有添加sudo权限,所有会无法提权。 

Q2: 为什么有时 whoami 会报错?

  • 极少数情况下,/etc/passwd 中无当前用户记录(如用户被删除但进程仍在运行)。


6. 扩展知识

替代命令

  • id -un:与 whoami 等效,但兼容性更好(如某些嵌入式系统无 whoami)。

权限提升时的注意事项

  • 若需检查实际权限(如脚本中),建议使用 id 或 whoami 结合 sudo

    sudo -u nobody whoami  # 输出:nobody

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试真题——仿LISP运算(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

创建dummy

访客_dc1fc4 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int left0;int right0;int n nums.size(); int sum0;int ans100001; for(right0;right<n;right) { sumnums[right]; //每次更新右端点之后&#xff0c;立即向右移动…

面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)

全部内容梳理 目标检测的两个任务&#xff1a; 预测标签 边界框 语义分割 实力分割 一个是类别 一个是实例级别 分类任务把每个图像当作一张图片看待 所有解决方法是先生成候选区域 再进行分类 置信度&#xff1a; 包括对类别和边界框预测的自信程度 输出分类和IOU分数的…

需求管理工具使用不当,如何优化?

要优化需求管理工具的使用&#xff0c;需从选择合适工具、规范使用流程、加强用户培训、统一数据结构、定期审查与优化使用配置五个方面着手。其中&#xff0c;选择合适工具是前提。错误的工具选择往往会导致项目沟通效率低、需求追踪失效甚至造成交付物偏离客户预期。因此&…

openwrt虚拟机安装调试

分类 lienol lean immortalwrt 一、获取固件 &#xff08;1&#xff09;下载地址 1.官网构建下载 OpenWrt Firmware Selector 官网 OpenWrt Firmware Selector 2.第三方构建网站 ImmortalWrt Firmware Selector ImmortalWrt Firmware Selector 3.第三方构建下载 ht…

Apache OFBiz 17.12.01 的远程命令执行漏洞 -Java 反序列化 + XML-RPC 请求机制

目录 漏洞原理 &#x1f3af; 一、漏洞背景&#xff08;CVE-2020-9496&#xff09; ⚙️ 二、攻击原理简述 &#x1f9f1; 三、完整攻击流程步骤详解 &#x1f50e; 1. 信息收集 &#x1f6e0;️ 2. 工具准备 &#x1f9ea; 3. 构造初始 payload&#xff1a;下载恶意脚本…

最好用的wordpress外贸主题

产品展示独立站wordpress主题 橙色的首页大banner外贸英文wordpress主题&#xff0c;适合用于产品展示型的外贸网站。 https://www.jianzhanpress.com/?p8556 Machine机器wordpress模板 宽屏简洁实用的wordpress外贸建站模板&#xff0c;适合工业机器生产、加工、制造的外贸…

Q1:Go协程、Channel通道 被close后,读会带来什么问题?

在 Go 语言中&#xff0c;Channel&#xff08;通道&#xff09;关闭后读取的行为是一个常见但需要谨慎处理的问题。以下是详细的分析和注意事项&#xff1a; 1. 关闭 Channel 后读取的行为 (1) 读取已关闭的 Channel 剩余数据仍可读取&#xff1a; 关闭 Channel 后&#xff0…

【AI Study】第三天,Python基础 - 同NumPy类似的类库

学习计划&#xff1a;AI Study&#xff0c;学习计划源码地址&#xff1a;https://github.com/co-n00b/AI-Study.git 2025-05-23 在学习NumPy的过程中&#xff0c;除了了解NumPy之外&#xff0c;我们也对比看看其他类似的类库都有什么&#xff1f;各自的优缺点是什么&#xff1…

基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统

详细视频:【基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统。-哔哩哔哩】 https://b23.tv/zfqLWPV

人工智能100问☞第32问:什么是迁移学习?

目录 一、通俗解释 二、专业解析 三、权威参考 迁移学习就是让AI把在一个任务中学到的本事&#xff0c;拿来加速另一个任务的学习&#xff0c;实现“举一反三”。 一、通俗解释 想象你已经学会了打乒乓球&#xff0c;现在去学打网球&#xff0c;是不是会学得更快&#xff…

Linux之概述和安装vm虚拟机

文章目录 操作系统概述硬件和软件操作系统常见操作系统 初识LinuxLinux的诞生Linux内核Linux发行版 虚拟机介绍虚拟机 VMware WorkStation安装虚拟化软件VMware WorkStation 安装查看VM网络连接设置VM存储位置 在VMware上安装Linux(发行版CentOS7)安装包获取CentOS7 安装 Mac系…

两个mysql的maven依赖要用哪个?

背景 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency>和 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId> &l…

复杂项目中通过使用全局变量解决问题的思维方式

最近接手了一个公司的老系统的PHP项目&#xff0c;里面的代码比较混乱&#xff0c;排查解决了一个问题&#xff0c;决定将这个思路记录下来&#xff0c;希望能帮助更多的人。 其中一部分的代码信息如下&#xff1a; 备注&#xff1a;为了避免公司的相关数据信息暴露&#xff0…

V9数据库替换授权

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;9.0 文档用途 1、本文档用于指导V9数据库替换授权。 2、V9数据库授权文件为license.dat。 详细信息 1、上传新的授权文件到服务器并修改授权文件属主为…

初识 Flask 框架

目录 1. Flask 框架概述 1.1 安装 Flask 1.2 创建你的第一个 Flask 应用 1.3 运行 Flask 应用 2. Flask 路由与视图函数 2.1 动态路由 2.2 支持多种 HTTP 请求方法 2.3 使用 Jinja2 模版渲染 HTML 2.5 模版继承与块 3. Flask 表单处理与用户输入 3.1 安装 Flask-WTF …

《深入剖析:Python自动化测试框架之unittest与pytest》

unittest作为Python标准库的一部分&#xff0c;犹如一位沉稳可靠的“老工匠”&#xff0c;默默为无数项目提供着坚实的测试基础。它诞生于Python社区长期的实践沉淀&#xff0c;拥有一套标准化的测试体系&#xff0c;就像一套精密的仪器&#xff0c;各个部件各司其职。 unitte…

【Python 命名元祖】collections.namedtuple 学习指南

&#x1f4da; collections.namedtuple 学习指南 命名元组&#xff08;namedtuple&#xff09;是 Python collections 模块中一种增强型元组&#xff0c;支持通过字段名访问元素&#xff0c;同时保持元组的内存效率和不可变性。 一、基础用法 1. 定义命名元组 from collectio…

iOS知识复习

block原理 OC block 是个结构体&#xff0c;内部有个一个结构体成员 专门保存 捕捉对象 Swift闭包 是个函数&#xff0c;捕获了全局上下文的常量或者变量 修改数组存储的内容&#xff0c;不需要加_block,修改数组对象本身时需要 weak原理 Weak 哈希表 &#xff08;散列表&a…

手眼标定:九点标定、十二点标定、OpenCV 手眼标定

因为一直使用6轴协作机器人&#xff0c;且主要应用是三维视觉&#xff0c;平常的手眼标定基本都是基于OpenCV来计算的&#xff0c;听说有九点标定和十二点标定&#xff0c;顺便了解下。 目录 1.九点标定1.1 基本原理1.2 关于最小二乘法1.3 具体示例 2.十二点标定3.OpenCV 手眼标…