Linux入门篇(二)
Linux
- 前言
- 链接文件
- 符号链接(软链接)
- 硬链接
- shell
- shell 的类型
- shell的父子关系
- 理解外部命令和内建命令
- 外部命令
- 内建命令
- Linux环境变量
- PATH环境变量
前言
在这一章,我对Linux中有关shell较为深入的理解和环境变量方面知识的一个记录。同时,还将其中涉及到的链接文件方面的内容也一并记录下来。
链接文件
链接文件是Linux文件系统的一个优势。如果需要在系统中维护同一文件的两个或多个副本,可以使用单个物理副本加多个虚拟副本(链接)的方法代替创建多个物理副本。链接是目录中指向文件真实位置的占位符。在Linux中有两种类型的文件链接。
- 符号链接
- 硬链接
符号链接(软链接)
符号链接是一个实实在在的文件,该文件指向存放在虚拟目录结构中某个地方的另一个文件。这两个以符号方式链接在一起的文件批次的内容并不相同。
要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln
命令以及-s
选项来创建符号链接。如下面的例子
$ ls -l test_file
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
$
$ ln -s test_file slink_test_file
$
$ ls -l *test_file
lrwxrwxrwx. 1 christine christine 9 Mar 4 09:46 slink_test_file -> test_file
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
$
在上面的例子中,符号链接文件名slink_test_file位于ln命令的第二个参数的位置。长列表(ls -l
)中显示的内容中,符号文件名后的箭头(->)符号表明该文件是链接到文件test_file的一个符号链接。
同时,这两个文件的大小明显不同。这其中的原因是这两个就是两个完全不同的文件。slink_test_file文件只是指向test_file文件而已。
硬链接
硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。但是,两者就根本而已是同一个文件
要想创建硬链接,原始文件也必须事先存在存在,只不过这次只用ln
命令时不需要加入额外的选择了,如下
ls -l *test_one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:26 test_one
$
$ ln test_one hlink_test_one
$
$ ls -li *test_one
1415016 -rw-rw-r--. 2 christine christine 0 Feb 29 17:26 hlink_test_one
1415016 -rw-rw-r--. 2 christine christine 0 Feb 29 17:26 test_one
$
在上面的例子中,创建好硬链接文件之后,使用ls -li
命令显示了两个文件的inode编号以及长列表。可以看到两者共享同一个inode编号。同时两者的文件大小也是一模一样的。
只能对处于同一个存储设备的文件创建硬链接。要想在位于不同存储设备的文件之间创建链接,只能使用符号链接。
shell
shell不单单是CLI(命令行界面),而是一种复杂的交互式程序。输入命令并利用shell来运行脚本会出现一些既有趣又令人困惑的问题。搞清楚shell进程及其与系统之间的关系能够帮助你解决这些难题,或是完全避开它们。
shell 的类型
当你登录系统时,系统启动什么样的shell程序取决于你的个人用户配置。在/etc/passwd文件中,用户记录的第7个字段中列出了该用户的默认shell程序。只要用户登录某个虚拟控制台终端或是在GUI中启动终端仿真器,默认的shell程序就会启动。
通过which bash
可以找到bash shell的位置。当然也可以找到其余shell的位置。
在现代Linux系统中,/bin目录通常是/usr/bin/目录的符号链接。这就是为什么通常默认shell程序是/bin/bash,但bash shell程序实际位于/usr/bin/目录。
并不是非得使用默认的交互式shell。可以启动系统中拥有的任意一种shell。只需要输入其名称即可。但是在实际中,不会有任何提升或消息表明你当前使用的是哪种shell。使用echo $0
会显示当前shell的名称。
shell的父子关系
用户登录某个虚拟控制台终端或在GUI中运行终端仿真器时所启动的默认的交互式shel(登录shell)是一个父shell。到目前为止,都是由父shell提供CLI提示符并等待命令输入。
当你在CLI提示符处输入bash命令(或是其他shell程序名)时,会创建新的shell程序。这是一个子shell。子shell也拥有CLI提示符,同样会等待命令输入。如下图
在生成子shell进程时,只有部分父进程的环境被复制到了子shell环境中。这会对变量在内的一些东西造成影响。当然,子shell也可以继续生成其子shell。同时,我们可以使用exit
命令来退出子shell。
- 进程就是正在运行的程序。如bash shell是一个程序,当它运行的时候,就成了进程。
理解外部命令和内建命令
which
命令只可以查看外部命令程序所在的位置type
命令即可看外部命令也可以查看内建命令程序所在位置。
外部命令
外部命令(也可以称为文件系统命令)指的是存在于bash shell 之外的程序。也就是说,它并不属于shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin目录中。
每当执行外部命令时,就会创建一个子进程。这种操作称为衍生。只要涉及进程衍生,就需要耗费时间和资源来设置新子进程的环境。因此,外部命令系统开销较高。
无论是衍生子进程还是创建子shell,都仍然可以通过信号与其互通,这一点无论是在使用命令行还是编写脚本时都极其有用。进程间以发送信号的方式彼此通信。
内建命令
与外部命令不同,内建命令无需子进程来执行。内建命令已经和shell编译成一体了,作为shell的组成部分存在,无需借助外部程序文件来执行。
Linux环境变量
Linux环境变量能帮你提升Linux shell 的使用体验。很多程序和脚本通过环境变量来获取系统信息、存储临时数据和配置信息。
bash shell 使用环境变量来存储shell会话和工作环境的相关信息。环境变量允许在内存中存储数据,以便shell中运行的程序或脚本能够访问到这些数据。这也是存储持久数据的一种简便的方法。bash shell 中有两种环境变量、
- 全局变量
- 局部变量。
全局变量对于shell会话和所有生成的子shell都是可见的。局部环境变量则是只对创建它的shell可见。一下几个命令为查看环境变量的命令
①env
:查看全局变量;
②printenv
:也是查看全局变量。与上一条命令不同的是其可以查看个别环境变量的值。
③set
:可以显示特定进程的所有环境变量,既包括局部变量、全局变量,也包括用户自定义变量。
可以看到没有直接能够直接查看局部变量的命令。下边是使用全局变量和局部变量的一些注意事项
- 两者本质都是变量,该变量是有值得。一般是一个字符串(如某一路劲)或者数值。在引用某个环境变量的时候,必须在该变量名前加上美元符号($)
- 创建用户自定义变量:如
my_var=Hello
.如果用于赋值的字符串包含空格,则必须使用单引号或双引号来界定字符串的起止。 - 系统变量用的都是大写字母,所以为了与其区分。我们自定义的变量,一般都使用小写字母即可。
- 创建全局环境变量的方法是先创建局部变脸,然后再将其导出到全局环境中。如:
export my_var="Hello World"
。同时,如果之后再子shell修改该全局变量的值并不会影响父shell中该变量的值。(甚至我们就无法再使用export 命令来改变父shell中全局变量的值
)。也就是说,在该例子的全局变量中,我们在子shell修改了这个值(全局中没有改变),之后再使用export
命令。在父shell中my_var的值还是“Hello World”
PATH环境变量
PATH环境变量定义了用于查找命令和程序的目录。
如下为在Ubuntu Linux系统中,PATH环境变量的内容如下:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$
PATH中的目录之间以冒号分隔。上边输出显示共有9个目录,shell会在其中查找命令和程序。
如果命令或程序所在的位置没有包括在PATH变量中,那么在不使用绝对路径的情况下,shell是无法找到的。shell找不到指定的命令或程序时就会产生错误。
我们安装的应用程序的可执行文件目录有时不在PATH环境所包含的目录中。解决办法是保证PATH环境变量包含所有存在应用程序的目录。
&emsp为如何添加PATH环境变量,我们只需引用原来的PAHT值,添加冒号(😃,然后再使用绝对路径输入新目录即可:
$ ls /home/christine/Scripts/
myprog
$ echo $PATH
/home/christine/.local/bin:/home/christine/bin:/usr/local/bin:/usr/
bin:/usr/local/sbin:/usr/sbin
$
$ PATH=$PATH:/home/christine/Scripts
$
$ myprog
The factorial of 5 is 120
$
将上述目录加入PATH环境变量之后,就可以在虚拟目录结构的任意位置执行这个程序了。
如果希望程序位置也可用于在shell,则务必确保将修改之后的PATH环境变量导出。(全局)
ps
:对于如此修改的PATH环境变量只能持续到退出或重启系统。也就是说这种效果不会一直凑效的。(如果想永久修改,需要修改其中的文件)
相关文章:

Linux入门篇(二)
Linux前言链接文件符号链接(软链接)硬链接shellshell 的类型shell的父子关系理解外部命令和内建命令外部命令内建命令Linux环境变量PATH环境变量前言 在这一章,我对Linux中有关shell较为深入的理解和环境变量方面知识的一个记录。同时&#x…...
第四部分:特殊用途的句子——第三章:虚拟
虚拟语气 1、什么是虚拟? 虚拟就是非真实。换句话说,这事不是真的,这事不太可能成真,非真实,就是虚拟 2、怎么表示虚拟? 英语是一个典型的形式来补充内容的语言,若要表达虚拟,只…...
Java中如何获取泛型类型信息
文章目录声明侧泛型使用侧泛型获取泛型类型相关方法1. Class类的泛型方法2. Field类的泛型方法3. Method类的泛型方法4. ParameterizedType类获取声明侧的泛型类型信息获取使用侧的泛型类型信息匿名内部类实现获取使用侧的泛型类型根据使用泛型位置的不同可以分为:声…...

【云原生】centos7搭建安装k8s集群 v1.25版本详细教程实战
文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…...

c语言指针
指针 指针是存放地址的变量,也可以说指针地址。 对于定义p(这里的话,只是定义,说明p是指针),p作为一个指针去指向存放数据的位置,而p意思是取(p指向的内存位置的数据)&…...

5.33 综合案例2.0 -ESP32拍照上传阿里云OSS
综合案例2.0 - ESP32拍照上传阿里云OSS案例说明连线功能实现1.阿里云平台连接2.OSS对象存储服务3.ESP32-CAM开发环境4.代码ESP32-CAM开发板代码HaaS506开发板代码测试数据转图片方法案例说明 使用ESP32拍照,将照片数据上传阿里云OSS(通过4G网络上传)。 …...

java无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…...

测试用例设计工作中的应用
1. 等价类划分 常见的软件测试面试题划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为假设干等价类,在每一个等价类中取一…...
leetcode 困难 —— 数字 1 的个数(简单逻辑题)
(害,做题是真的慢,这面试给我这题我估计就傻了) 题目: 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。 题解: 首先看看整数范围 0 < n < 10^9 不能遍历࿰…...
关于JSON
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body> <script> /* 1、JSON的英文全称:Java…...

Apifox-接口调用、自动化测试工具
Apifox简介 Apifox 的定位是Postman Swagger Mock JMeter,具有API文档管理、API调试、API Mock、API 自动化测试等功能。可以通过一种工具解决之前使用多种工具的数据同步问题。高效、及时、准确! 安装 Apifox的安装非常方便,直接下载安…...

Vue一个项目兼容每个省份的个性化需求
开发环境及打包指令 后拼上省份区划"serve:henan": "yarn && vue-cli-service serve -o --encryptSM2 --zone41","serve:hunan": "yarn && vue-cli-service serve -o --encryptSM2 --zone43","serve:guizhou&quo…...
npm install报错 npm ERR! 的解决办法
以下是四种常见的npm ERR及解决方式错误一、npm ERR! A complete log of this run can be found in:npm ERR!C:\Users\nanyi\AppData\Roaming\npm-cache_logs\2021-09-17T08_58_23_413Z-debug.l查看错误日志,错误日志就在上面展示的C:\Users…这里如果发现错误日志里…...

echarts修改饼图,环形图的圆环宽度,大小
echarts修改环形图的圆环宽度,大小 环形图圆环的大小需要通过series-pie. radius属性来修改 radius 饼图的半径。 Array.<number|string>:数组的第一项是内半径,第二项是外半径。每一项遵从上述 number string 的描述。 把数组的第…...

小白系列Vite-Vue3-TypeScript:010-封装svg
上一篇我们介绍了ViteVue3TypeScript项目中mockjs的安装和配置i。本篇我们来介绍封装SVG图标组件。svg特征Preloading所有图标都是在项目运行时生成的,只需要操作一次dom即可。高性能内置缓存,仅在文件被修改时才会重新生成。安装插件vite-plugin-svg-ic…...

卷严重、难度高、激励少,如何适应空投市场新变化
自从空投交互从2020年开始之后,不少人都开始加入到空投交互的行列中,一些项目也因为“格局”的因素,在项目正式上线前都会给早期参与者空投代币,以此吸引大家的关注。但是在越来越多的人加入到撸空投行列之中后,现在整…...
基于Java与JSP的文件上传和下载
概念 当用户在前端页面点击文件上传后,用户上传的文件数据提交给服务器端,实现保存。 文件上传步骤 提交方式: 提供form表单,method必须是post。因为post请求无数据限制。 <form method"post"></form>…...
Gromacs中的g_mmpbsa计算带电底物与蛋白的结合能不准确
g_mmpbsa计算带电底物与蛋白的结合能总是不准确 TOC 在做的两个项目中,利用g_mmpbsa计算带电底物与蛋白的结合能结果非常不可靠,底物带两个硫酸根离子,g_mmpbsa在计算带电的底物与酶的结合能时总是不准确,因此后续若底物带电&…...

【mmrotate】旋转目标检测之训练DOTA数据集
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 mmrotate训练DOTA数据集记录 1. 正文 1.1 数据准备 数据介绍部分,参考DOTA数据介绍,官方提供了裁剪工具development kit。这里…...
图基本概念
图:顶点和边的集合。无向图:每条边都是无方向的有向图:每条边都是有方向的完全图:任意两个点都有一条边相连稀疏图:有很少边或弧的图稠密图:有较多边或弧的图网:边/弧带权的图邻接:有…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...