当前位置: 首页 > news >正文

【Linux】一切皆文件

Linux 下一切皆为文件,

文件包括头文件,库文件(静态库和共享库),可执行文件,目录文件,软链接文件,配置文件等。

每个文件都依据权限分为用户、用户组和其他人三个身份,权限分为 read,write 和execute。

Linux 的目录配置是目录树,可以使用绝对路径和相对路径在系统中确定文件。

Linux 中是没有扩展名的概念的,可以使用 file 命令查看文件类型,使用 pwd 查看当前工作目录,cd 更换当前工作目录,mkdir 创建目录。

今天通过 protoc 这个命令来理解一下,一切皆文件,这句话的意思。

首先,什么是命令?

ls 命令可能是

(1) 可执行文件

(2) 链接到其他可执行文件的软链接文件

(3) 链接到其他脚本的软链接文件。

为什么在终端执行 ls 这个命令会打印当前目录的文件列表

先了解 Ubuntu 系统中各种文件颜色的含义

蓝 色:表示文件夹 ,ls -l或ll时可以看到权限部分的第1个字母是d
被绿色阴影框住的,是获得了最高权限(777)的文件夹绿色:可执行文件,包括jar
浅蓝色:软链接文件
红色:压缩文件  
白色:文本文件红色闪烁:错误的符号链接
黄色:设备文件
灰色:其它文件

执行

which ls

会在终端显示

/usr/bin/ls

可以

cd /usr/bin && ls

可以发现很多文件,其中有浅蓝色的软链接文件夹和绿色的执行文件

此时

ls -lah ls

会显示

-rwxr-xr-x root root 139k 95 2019 ls

再如,执行

which protoc

终端显示

/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin/protoc

可以

cd /opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin/ && ls

可以发现很多文件,其中有浅蓝色的软链接文件夹和绿色的执行文件

如果 ls 执行 protoc

ls -lah protoc

会在终端显示

lrwxrrwxrwx 1 root root 15 Aug 17 07:33 protoc -> protoc-3.12.3.0

说明 protocol 是一个软链接文件,

protoc 命令软链接到 protoc-3.12.3.0,而 protoc-3.12.3.0 是一个可执行文件。

执行到这里,如果在 docker 环境内,从 git 下载 3.12.2 版本的 protobuf 源码,之后编译

mkdir -p cmake/build && cd cmake/buildmake -jmake install

而docker 环境内的 protoc 版本是 3.6.1的,那为什么执行

protoc  --version

时会指向,最后显示的是

libprotoc 3.6.1

而不是刚刚编译的 3.12.2 版本的 protobuf

which protoc

时,显示的

/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin/protoc

得先环境变量 PATH 是什么?

查看所有的环境变量

root@ubuntu:~$ env

查看单个指定的环境变量:

root@ubuntu:~$ echo $PATH

会显示

/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin:
/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/sbin:
/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/bin:
/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/sbin:
...:
/usr/local/bin:
/usr/local/sbin:
/sbin:
/bin:
/usr/local/src/jkd/jdk1.8.0_261/bin
环境变量 PATH 的作用

定义命令行解释器搜索用户执行命令的路径

规定系统中的可执行文件的位置。

只要是处于这些位置中的可执行文件,执行的时候就不需要指定路径,直接执行即可。

什么是命令行解释器?

参考链接

https://blog.csdn.net/weixin_53351797/article/details/126720897

如何设置 环境变量 PATH

设置 PATH(在其原有的路径的基础上,增添一个路径,例如/home/gec)

(1) 临时设定 PATH

所谓临时,指的是关闭终端之后就失效

root@ubuntu:~$ export PATH=${PATH}:/home/luxy
(2) 永久设定 PATH

将语句 PATH=$PATH:/home/gec 添加到文件 ~/.bashrc 的末尾

root@ubuntu:~$sudo gedit ~/.bashrc

这样就可以永久设定PATH(注:其他变量不能乱该)。

由此,可知知道,当执行命令

protoc 

时,系统会优先从 环境变量 PATH 中的路径中寻找 protoc 可执行文件。

/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin:

中找到了 protoc 的可执行文件。那么就不会继续往下找。

把第一个找到 protoc 的可执行文件当做默认执行的文件夹。

所以,为什么 which protoc 显示的是

/opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin/protoc

所以,为什么编译从 git 下载 3.12.2 版本的 protobuf 源码后,没有升级protoc。

通过 file 查看

file /opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/usr/bin/protoc

显示

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /opt/bstos/2.2.5.3/sysroots/x86_64-bstsdk-linux/lib/ld-linux-x86-64.so.2, ...

通过 file 查看

file /home/project/protobuf-3.12.3/cmake/build/protoc

终端显示

protoc:symbolic link to proto-3.12.3.0

再执行

file proto-3.12.3.0

终端显示

protoc-3.12.3.0:ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, ...

参考链接:https://blog.csdn.net/qq_44986938/article/details/106288159

相关文章:

【Linux】一切皆文件

Linux 下一切皆为文件, 文件包括头文件,库文件(静态库和共享库),可执行文件,目录文件,软链接文件,配置文件等。 每个文件都依据权限分为用户、用户组和其他人三个身份,…...

C++学习笔记4

什么是指针? 指针是存储内存地址的变量。就像int变量用于存储整数值一样,指针变量用于存储内存地址。指针是一种指向内存单元的特殊变量。 内存单元地址通常使用的是16进制表示(0~9和A~F)来表示数字。显示…...

x11 gtk qt gnome kde 之间的区别和联系

Linux 下的图形库介绍 一、Linux 图形领域的基础设施 1.1 X Window X Window从逻辑上分为三层:X Server、X Client和X协议。 最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将…...

MAC访问MySQL下的data目录

1.查看创建表存储路径 show variables like datadir 2.快捷键comshiftG,输入查询到的地址 3.终端输入 sudo chmod -R arwx /usr/local/mysql/data 然后输入密码即可...

WebMagic - 创意前端项目集合(点击链接可在电脑上查看效果)

WebMagic - 创意前端项目集合 欢迎来到 WebMagic 仓库!这里汇集了一系列令人惊叹的前端项目,涵盖了HTML5、CSS3和JS等多项技术。无论你是前端开发者、设计师,还是对创意互动内容感兴趣的人,这个仓库都将为你带来无尽的惊喜。 每…...

黑马项目一阶段面试58题 苍穹外卖业务逻辑15题

一、员工登录流程 1.前端在登录页面登录,发送请求 2.进入拦截器,拦截器放行所有登录页面的请求 3.进入三层架构,查询用户是否存在,若存在,则加盐加密,返回JWT的token,存放在请求头部。用户不…...

C++学习笔记总结练习: 字符串类MyString的实现

MyString是一个自定义的字符串类&#xff0c;它封装了一些常见的字符串操作和功能。下面是一个简单的MyString类的实现示例&#xff1a; #include <iostream> #include <cstring>class MyString { private:char* m_data; // 用于存储字符串的字符数组int m_length…...

测试人进阶技能:单元测试报告应用指南

为什么需要单元测试 从产品角度而言&#xff0c;常规的功能测试、系统测试都是站在产品局部或全局功能进行测试&#xff0c;能够很好地与用户的需要相结合&#xff0c;但是缺乏了对产品研发细节&#xff08;特别是代码细节的理解&#xff09;。 从测试人员角度而言&#xff0…...

非2的幂次的ASTC纹理格式尺寸对带宽的影响

1&#xff09;非2的幂次的ASTC纹理格式尺寸对带宽的影响 2&#xff09;​C#端如何处理xLua在执行DoString时候死循环 3&#xff09;如何制定美术规范或者各个模块的指标 4&#xff09;如何处理Lua的io.open出现中文路径 这是第348篇UWA技术知识分享的推送&#xff0c;精选了UWA…...

Java设计模式之策略模式

1. 策略模式介绍 1、根据它来避免 if-else 或 switch 分支判断&#xff0c;避免使用多重条件转移语句&#xff1b; 2、支持“开闭原则”&#xff0c;可以在原有基础上选择行为方法&#xff0c;同时允许增加行为方法。 2. 策略模式结构类 ① 接口或抽象类&#xff1a;自定义接口…...

IPv4分组

4.3.1 IPv4分组 IP协议定义数据传送的基本单元——IP分组及其确切的数据格式 1. IPv4分组的格式 IPv4分组由首部和数据部分&#xff08;TCP、UDP段&#xff09;组成&#xff0c;其中首部分为固定部分&#xff08;20字节&#xff09;和可选字段&#xff08;长度可变&#xff0…...

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化&#xff0c;本篇就来介绍下JMeter的参数化如何去实现。 参数化&#xff1a;录制脚本中有登录操作&#xff0c;需要输入用户名和密码&#xff0c;假如系统不允许相同的用户名和密码同时登录&#xff0c;或者想更好的模拟多个用户来登录系统。 这个时…...

“深入探索JVM内部机制:解密Java虚拟机的工作原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;解密Java虚拟机的工作原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;解密其工作原理。我们将介绍JVM的基本组成部分、类加载过程、内存管理和垃圾回收、即时编译器等关键概…...

C++超基础语法

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…...

位运算相关题目:下一个数、整数转换、配对交换

题目1&#xff1a;下一个数 给定一个正整数&#xff0c;找出与其二进制表达式中1的个数相同且大小最接近的那两个数&#xff08;一个略大&#xff0c;一个略小&#xff09;。 示例&#xff1a; 输入&#xff1a;num 2&#xff08;或者0b10&#xff09; 输出&#xff1a;[4,…...

【数据结构】链表常见题目

文章目录 链表合并两个有序链表反转链表复制带随机指针的链表环形链表环形链表II相交链表移除链表元素链表中倒数第k个节点链表分割链表的回文结构链表的中间节点旋转链表链表排序链表求和 (逆序求)链表求和II (正序求)重排链表奇偶链表反转链表II <==> 链表内指定区间反…...

多家企业加入即将在2024年发射的量子卫星SpeQtral-1任务

近日&#xff0c;总部位于新加坡的量子通信技术公司SpeQtral宣布将与纳米航空电子公司NanoAvionics和卫星光子学公司Mbryonics合作执行即将到来的SpeQtral-1量子密钥分发&#xff08;Quantum Key Distribution, QKD&#xff09;卫星任务。NanoAvionics被选为卫星平台提供商&…...

shell脚本基础

目录 前言 一、概述 &#xff08;一&#xff09;、shell脚本基础概念 &#xff08;二&#xff09;、shell的类型 二、Shell变量 &#xff08;一&#xff09;、组成 1.变量名 2.变量值 &#xff08;二&#xff09;、类型 1.系统内置变量&#xff08;环境变量&#xff09; 2.自定…...

创建maven的Springboot项目出现错误:Cannot access alimaven

创建maven的Springboot项目出现错误&#xff1a;Cannot access alimaven 1&#xff09;问题2) 分析问题3&#xff09;解决问题 1&#xff09;问题 创建maven的Springboot项目出现错误&#xff1a; Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…...

神经网络基础-神经网络补充概念-32-神经网络与大脑

概念 神经网络&#xff08;Neural Networks&#xff09;是受到生物神经系统启发而设计的机器学习模型&#xff0c;用于处理和学习复杂的数据模式。尽管神经网络的设计和工作原理与大脑有一些相似之处&#xff0c;但它们并不完全相同&#xff0c;以下是神经网络和大脑之间的一些…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...