Linux搜索---Which

Which

which 是 Linux 中用于查找命令或程序所在路径的工具。它会根据 PATH 环境变量中指定的目录顺序,搜索第一个匹配的可执行文件并显示其完整路径。

一、基础概念

1. 核心功能
which git  # 输出:/usr/bin/git
  • 定位原理:在$PATH环境变量列出的目录中搜索可执行文件
  • 设计目的:快速确认命令行工具的实际执行路径
2. 与相似命令对比
命令覆盖范围典型输出示例
whichPATH中的可执行文件/usr/bin/python3
whereis二进制文件+手册页+源码python3: /usr/bin/python3 /usr/share/man/man1/python3.1.gz
type别名/内建/函数/外部命令python3 是 /usr/bin/python3

二、参数详解

1. 基础参数
which -a node      # 显示所有匹配路径
which --skip-alias npm  # 忽略别名(需GNU which)
2. 参数矩阵
参数功能说明兼容性
-a显示所有匹配路径所有版本
-i忽略大小写GNU版本特有
--read-alias读取别名定义GNU which
--show-dot显示以点开头的路径BSD实现

三、工作原理

1. 执行流程
  1. 解析$PATH环境变量
  2. 按目录顺序依次检查是否存在目标文件
  3. 检查文件是否具有可执行权限
  4. 找到第一个匹配项后立即返回
2. 路径优先级示例
$ echo $PATH
/home/user/bin:/usr/local/bin:/usr/bin$ which mycmd
/home/user/bin/mycmd  # 优先使用用户自定义路径

四、高级应用

1. 脚本开发验证
#!/bin/bash
if ! which docker >/dev/null; thenecho "Error: docker not installed!"exit 1
fi
2. 环境调试技巧
# 诊断命令冲突
$ which -a python
/usr/local/bin/python3  # 自定义安装
/usr/bin/python2        # 系统默认# 查看实际调用的命令
$ which $(basename $SHELL)
/bin/zsh
3. 别名处理
# 创建测试别名
alias ls='ls -F --color=auto'# 普通which显示别名
which ls
alias ls='ls -F --color=auto'
/usr/bin/ls# 显示原始路径(GNU which)
which --skip-alias ls
/bin/ls

五、局限与注意事项

1. 无法定位的类型
$ which cd
# 无输出(cd是shell内建命令)$ which ll
# 可能显示别名(若ll被定义为ls -l)
2. 环境变量影响
# 临时添加路径
$ export PATH=$PATH:/new/path# 需重新登录或source使which生效
3. 权限问题
$ touch /tmp/fake_ssh
$ chmod -x /tmp/fake_ssh
$ export PATH="/tmp:$PATH"$ which ssh
/tmp/fake_ssh  # 显示路径但实际不可执行

六、跨平台差异

实现版本特性差异
GNU which支持--read-alias等扩展参数
BSD which默认显示no ... in错误格式
BusyBox功能简化,仅支持基本参数

七、实用场景示例

1. 多版本管理
# Python版本切换检查
$ which python3
/usr/local/opt/python@3.9/bin/python3# 确认虚拟环境激活
$ which pip
~/venv/project/bin/pip
2. 安全审计
# 检查敏感命令路径
$ which su
/bin/su  # 正常系统路径$ which bash
/usr/local/bin/bash  # 可疑自定义路径
3. 系统维护
# 查找缺失依赖
$ which convert
/usr/bin/convert  # 确认ImageMagick安装# 验证新安装软件
$ which nvim
/usr/local/bin/nvim  # 确认成功安装

八、替代方案建议

which无法满足需求时:

  • 需要查找文档:使用whereis
  • 检查别名/函数:使用type -a
  • 全盘搜索:使用find / -name cmd -type f
  • 详细文件信息:使用command -v

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

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

相关文章

记录致远OA服务器硬盘升级过程

前言 日常使用中OA系统突然卡死,刷新访问进不去系统,ping服务器地址正常,立马登录服务器检查,一看磁盘爆了。 我大脑直接萎缩了,谁家OA系统配400G的空间啊,过我手的服务器没有50也是30台,还是…

电网电压暂态扰动机理与工业设备抗失压防护策略研究

什么是晃电? 国标GB/T 30137-2013 中定义:工频电压方均根值突然降至额定值的90%~10%,持续时间为10ms~1min后恢复正常的现象。Acrel8757V 晃电的原因 1.系统侧因素 短路故障:雷击、线路接地、设备误碰等导致电网短路,故障点电压…

Linux监控网络状态

一、基本介绍 1、基本语法 netstat [选项] 2、常用选项 选项 说明 -a 显示所有连接和监听的套接字(包括TCP、UDP)。 -t 显示 TCP 连接。 -u 显示 UDP 连接。 -l 显示正在监听的套接字(server端)。 -n 显示数字格式的…

UE5以插件的形式加载第三方库

之前在UE中加载第三方库的形式是以静态或者动态链接的形式加载但是不太容易复用。就想着能不能以插件的形式加载第三方库,这样直接把插件打包发行就可以复用了,之前也找过相应的教程但是很难找到比较简单易懂的教程,要么是比较复杂&#xff0…

Go执行当前package下的所有方法

需求:需要一个文件一个定时任务方法,当项目初始化完毕后,自动加载并执行这些定时任务方法 项目目录架构 main.go 初始化 package mainimport ("sql_demo/schedule" )func main() {/***** 其他初始化完毕后的操作**/// 定时任务sc…

AnyAnomaly: 基于大型视觉语言模型的零样本可定制视频异常检测

文章目录 速览摘要1. 引言2. 相关工作视频异常检测大型视觉语言模型(LVLMs) 3. 方法3.1. 总览3.2. 关键帧选择模块3.3. 上下文生成基于 WinCLIP 的注意力机制网格图像生成 3.4. 异常检测提示词设计异常评分 4. 实验4.1. 数据集4.2. 评估标准4.3. 结果4.4…

【AWS入门】2025 AWS亚马逊云科技账户注册指南

【AWS入门】2025 AWS亚马逊云科技账户注册指南 A Guide To Register a New account on AWS By JacksonML 0. AWS亚马逊云科技简介 Amazon Web Service(AWS) 即亚马逊云科技,其在全球Cloud Computing(云计算)市场占有最为重要的地位。 AWS连续13年被Gartner评为…

Spring 中 SmartInitializingSingleton 的作用和示例

一、 接口定义 SmartInitializingSingleton 是 Spring 框架提供的一个 单例 Bean 全局初始化回调接口,用于在 所有非延迟单例 Bean 初始化完成后 执行自定义逻辑。 核心方法: public interface SmartInitializingSingleton {void afterSingletonsInsta…

element tree树形结构默认展开全部

背景: el-tree树形结构,默认展开全部,使用属性default-expand-all【是否默认展开所有节点】;默认展开一级,设置default-expanded-keys【默认展开的节点的 key 的数组】属性值为数组。 因为我这里的数据第一级是四川【省…

大数据-spark3.5安装部署之local模式

spark,一个数据处理框架和计算引擎。 下载 local模式即本地模式,就是不需要任何其他节点资源就可以在本地执行spark代码的环境。用于练习演示。 上传解压 使用PortX将文件上传至/opt 进入/opt目录,创建目录module,解压文件至/o…

Discuz建站教程之论坛头部logo跳转链接怎么修改?

在修改头部logo跳转链接前&#xff0c;我们需要知道对应代码在哪个文件目录&#xff0c;进入宝塔或是服务器&#xff0c;找到文件&#xff1a;\template\default\common\header.htm&#xff0c;编辑器打开&#xff0c;搜索以下代码&#xff0c;大概在135行 <a href"{i…

【FreeRTOS】FreeRTOS操作系统在嵌入式单片机上裸机移植

目录 一 RTOS概述 二 FreeRTOS移植 三 FreeRTOS使用 四 附录 一 RTOS概述 先了解一些基础概念,以下内容摘自FreeRTOS官网(FreeRTOS™ - FreeRTOS™): 【1】RTOS基础知识 实时操作系统 (RTOS) 是一种体积小巧、确定性强的计算机操作系统。 RTOS 通常用于需要在严格时间限…

编译支持 RKmpp 和 RGA 的 ffmpeg 源码

一、前言 RK3588 支持VPU硬件解码&#xff0c;需要rkmpp进行调用&#xff1b;支持2D图像加速&#xff0c;需要 RGA 进行调用。 这两个库均能通过 ffmpeg-rockchip 进行间接调用&#xff0c;编译时需要开启对应的功能。 二、依赖安装 编译ffmpeg前需要编译 rkmpp 和 RGA&#xf…

深度学习基础:线性代数本质2——线性组合、张成的空间与基

目录 一、线性组合 1. 用一个有趣的角度看向量坐标 2. 如果我们选择不同的基向量会怎样&#xff1f; 3. 线性组合 4. 张成的空间 ① 二维向量的张成的空间 ② 三维向量的张成的空间​编辑 5.线性相关 6.线性无关 7. 基的定义 一、线性组合 1. 用一个有趣的角度看向量坐…

openharmony5.0中HDF驱动框架源码梳理-服务管理接口

要想大概了解一个公司&#xff0c;我们可能只需要知道它的运行逻辑即可&#xff0c;例如我们只需要知道它有财务有研发有运营等&#xff0c;财务报销、研发负责产品等即可&#xff0c;但是如果想深入具体的了解的话我们就要了解都有什么部门(对象)、各部门都包含哪些职责(对象方…

Go语言环境搭建并执行第一个Go程序

目录 一、Windows环境搭建 二、vscode安装插件 三、运行第一个go程序 一、Windows环境搭建 下载Go&#xff1a;All releases - The Go Programming Language 这里是Windows搭建&#xff0c;选择的是windows-amd64.msi&#xff0c;也可以选择zip直接解压缩到指定目录 选择msi…

Netty基础—4.NIO的使用简介一

大纲 1.Buffer缓冲区 2.Channel通道 3.BIO编程 4.伪异步IO编程 5.改造程序以支持长连接 6.NIO三大核心组件 7.NIO服务端的创建流程 8.NIO客户端的创建流程 9.NIO优点总结 10.NIO问题总结 1.Buffer缓冲区 (1)Buffer缓冲区的作用 (2)Buffer缓冲区的4个核心概念 (3)使…

linux 命令 tail

tail 是 Linux 中用于查看文件末尾内容的命令&#xff0c;常用于日志监控和大文件快速浏览。以下是其核心用法及常见选项&#xff1a; 基本语法 tail [选项] 文件名 常用选项 显示末尾行数 -n <行数> 或 --lines<行数> 指定显示文件的最后若干行&#xff08;…

网络华为HCIA+HCIP数据链路层协议-以太网协议

以太网协议 以太网是当今现有局域网(Local Area Network,LAN)采用的最通用的通信协议标准&#xff0c;该标准定义了在局域网中采用的电缆类型和信号处理方法。以太网是建立在CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路访问/冲突检测)机制上的广…

缓存id路由页面返回,历史路由栈

功能需求 网页端需要做页面数据缓存&#xff08;vue动态路由数据缓存&#xff09;&#xff0c;可根据id值打开多个编辑详情页&#xff0c;需要在页面操作返回时关闭面包屑页签 隐藏问题 1.页面缓存会有初始化和组件激活访问生命周期调用数据接口过多&#xff0c;有性能损耗 2.使…