侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

不同linux下 bash: lsof: command not found的解决方法

lsof 介绍

  • lsof 是一个用于列出打开文件和使用它们的进程的命令行工具,其名称表示 List Open Files
  • 在 Linux 系统中,一切都被视为文件,包括数据文件、网络套接字、命名管道、设备等,因此 lsof 命令可以列出所有这些被当作文件处理的对象
  • lsof 命令可以用来杀死占用文件的进程,或者简单地列出所有运行中的进程打开的文件
  • lsof 命令还可以用来找出哪个进程使用了某个文件或目录

可能原因

  • lsof 命令没有安装在系统上,或者安装的位置没有添加到 PATH 环境变量中
  • lsof 命令的可执行文件没有赋予执行权限,或者权限不足
  • lsof 命令的版本不兼容当前的系统或者 shell

解决方法

方法1 安装软件

  • CentOS 7/8: 使用 yum 命令安装 lsof 包,例如:
sudo yum install lsof
# 或者
sudo dnf install lsof
  • Debian/Ubuntu/Deepin/Kali Linux/Raspbian: 使用 apt 或 apt-get 命令安装 lsof 包,例如:
sudo apt update
sudo apt install lsof
  • Alpine Linux: 使用 apk 命令安装 lsof 包,例如:
sudo apk update
sudo apk add lsof
  • Arch Linux: 使用 pacman 命令安装 lsof 包,例如:
sudo pacman -Syu
sudo pacman -S lsof
  • Fedora: 使用 dnf 命令安装 lsof 包,例如:
sudo dnf update
sudo dnf install lsof
  • Windows (WSL2): 首先在 Windows 上安装 WSL2,并选择一个 Linux 发行版,然后在 Linux 上按照相应的方法安装 lsof 包,例如:
wsl --install -d Ubuntu # 安装 WSL2 和 Ubuntu 发行版
wsl # 进入 WSL2 环境
sudo apt update # 在 Ubuntu 上更新软件源
sudo apt install lsof # 在 Ubuntu 上安装 lsof 包
  • Dockerfile: 在 Dockerfile 中使用 RUN 命令安装 lsof 包,根据基础镜像的不同,选择合适的包管理器,例如:
FROM ubuntu:latest # 以 Ubuntu 为基础镜像

RUN apt update # 更新软件源

RUN apt install lsof # 安装 lsof 包

CMD ["lsof", "--help"] # 运行 lsof 命令的帮助信息
  • Docker: 使用 docker pull 命令拉取官方的 ubuntu 镜像,或者使用 docker build 命令构建自定义的镜像,然后使用 docker run 命令运行容器,例如:
docker pull ubuntu # 拉取官方的 ubuntu 镜像

docker run -it --name my_ubuntu ubuntu # 运行一个名为 my_ubuntu 的容器,并进入交互式 shell

apt update # 在容器内更新软件源

apt install lsof # 在容器内安装 lsof 包

lsof --help # 在容器内运行 lsof 命令的帮助信息

exit # 退出容器的 shell

docker stop my_ubuntu # 停止容器

docker rm my_ubuntu # 删除容器

方法2 添加环境变量

  • 如果已经安装了 lsof 命令,但是没有添加到环境变量中,可以使用以下命令查找 lsof 的可执行文件的位置:
find / -name "lsof" -type f -executable 2>/dev/null # 在根目录下搜索名为 lsof 的可执行文件,并忽略错误信息
  • 然后将找到的路径添加到环境变量中,可以使用以下命令临时添加:
export PATH=$PATH:/path/to/lsof/bin # 将 lsof 的 bin 目录添加到 PATH 变量中
  • 或者使用以下命令永久添加,根据不同的 shell,选择合适的配置文件,例如:
echo "export PATH=$PATH:/path/to/lsof/bin" >> ~/.bashrc # 将 lsof 的 bin 目录添加到 bash 的配置文件中
source ~/.bashrc # 使配置文件生效
  • 如果环境变量设置错误,可以检查是否有多余的空格或者分隔符,或者是否有冲突的路径,然后修改或删除相应的条目

方法3 修改执行权限

  • 如果 lsof 的可执行文件没有赋予执行权限,可以使用以下命令给予执行权限:
chmod +x /path/to/lsof/bin/lsof # 给 lsof 的可执行文件添加执行权限
  • 如果 lsof 的可执行文件的权限不足,可以使用以下命令以 root 用户或者 sudo 权限运行 lsof:
sudo /path/to/lsof/bin/lsof [options] [file] # 以 sudo 权限运行 lsof 命令

方法4 更换版本或系统

  • 如果 lsof 的版本不兼容当前的系统或者 shell,可以尝试更换 lsof 的版本,或者更换系统或者 shell 的版本,以达到匹配的效果
  • 可以参考 lsof 的官方文档查看 lsof 的系统要求和兼容性信息,选择合适的版本进行安装和配置

lsof 命令常规用法

lsof 命令名称介绍(是什么缩写)

  • lsof 是 LiSt Open Files 的缩写,表示列出打开文件和使用它们的进程的命令

语法格式

  • lsof 命令的一般语法格式如下:
lsof [options] [file]
  • 其中 options 是指定一些额外的选项或参数,例如 -n, -d, -s, -w 等
  • file 是指定要查询的文件名,如果没有指定或者指定为 - ,则列出所有打开文件

选项说明

  • lsof 命令支持的选项或参数有很多,这里只列举一些常用的,完整的列表可以通过 lsof --helpman lsof 命令查看
  • -n: 不将 IP 地址转换为主机名,加快查询速度
  • -d: 指定要查询的文件描述符(FD)号码或范围,例如 0,1,2 或 0-2
  • -s: 指定要查询的网络连接状态,例如 TCP:LISTEN 或 UDP:*
  • -w: 禁止警告信息的输出
  • -u: 指定要查询的用户 ID 或用户名,可以用 ^ 表示排除某个用户
  • -c: 指定要查询的进程名称或部分名称,可以用 ^ 表示排除某个进程
  • -p: 指定要查询的进程 ID (PID),可以用 ^ 表示排除某个 PID
  • -i: 指定要查询的网络连接相关信息,例如协议、主机、端口等

实例

  • 列出所有打开文件和使用它们的进程:
sudo lsof
  • 列出所有打开了 TCP 端口 80 的进程:
sudo lsof -i TCP:80
0

评论区