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。这里…...
图基本概念
图:顶点和边的集合。无向图:每条边都是无方向的有向图:每条边都是有方向的完全图:任意两个点都有一条边相连稀疏图:有很少边或弧的图稠密图:有较多边或弧的图网:边/弧带权的图邻接:有…...
机器学习基础
一、基本概念 1 学习的概念 1975年图灵奖获得者、1978年诺贝尔经济学奖获得者、著名学者赫伯特.西蒙 (Herbert Simon) 曾下过一个定义: 如果一个系统,能够通过执行某个过程,就此改进了它的性能,那么这个过程就是学习.由此可看出,…...
FreeRTOS-Tickless低功耗模式 | FreeRTOS十四
目录 说明: 一、低功耗模式简介 1.1、STM32低功耗模式 二、Tickless模式 2.1、Tickless模式如何功耗 2.2、Tickless模式设计思想 2.3、为了降低功耗,又不影响系统运行,怎么能做到呢? 三、Tickless模式修改配置 3.1、配置…...
实现了统一消息中心的微服务基础框架 JVS,快点赞收藏
一、开源项目简介基于JVS(基于spring cloud封装)的基础开源框架,实现了基于多对多租户能力的管理系统。二、基础框架实现功能支持数据管理支持分布式定时任务支持分布式日志采集支持系统监控支持动态配置中心支持模板消息支持链路跟踪支持邮件…...
VMware 安装 OpenWrt 旁路由并配置 PassWall
1、准备 OpenWrt 镜像包 我已经转好了 vmdk 格式的,更多的可以去恩山论坛下载 OpenWrtvmdk格式-虚拟化文档类资源-CSDN下载 也可以在这个平台在线定制 OpenWrt固件下载与在线定制编译 2、网络选择 NAT 模式 3、创建虚拟机,选择自定义方式 4、一直下…...
R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案
本文介绍在利用R语言的GD包,实现自变量最优离散化方法选取与执行、地理探测器(Geodetector)操作时,出现各类报错信息、长时间得不到结果等情况的解决方案。 在之前的文章R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散…...
嵌入式开发:你需要知道的5种简单
传达嵌入式软件体系结构设计意图通常伴随着基于嵌入式开发人员经验的假设。你可以从资源受限的基于微控制器的系统的角度来看架构设计。如何设计架构将取决于系统的嵌入式软件分类。有许多不同的方法可以对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整…...
MVC与MVVM
MVC与MVVM举例说明MVCMVVM两者比较MVC <!DOCTYPE html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>mvc案例</title><link rel"styleshe…...
Cortex-M0异常和中断
目录1.概念2.异常类型3.异常优先级定义4.向量表5.异常流程概述接受异常请求压栈和出栈异常返回指令末尾连锁延迟到达6.EXC_RETURN7.异常入口流程的细节压栈取出向量并更新PC寄存器更新8.异常退出流程的细节1.概念 异常是能够引起程序流偏离正常流程的事件,当异常发…...
数据库(6)--存储过程
一、学习目标 熟悉存储过程的定义和使用,熟练运用 select ,update ,insert ,delete 命令完成对学生信息数据库的查询、更新、添加、删除操作。 二、学习内容 学生(学号,年龄,性别,系名) 课程(…...
c++ 指针、引用和常量
指针、引用和常量的关系_夜悊的博客-CSDN博客 1. ① 指针是对象,引用不是对象(在此可以理解为变量,一个变量是一个对象) 指针不必须初始化引用只是为一个已经存在的对象所起的另一个名字(别名)ÿ…...
制作作业平台网站的设计/个人网站怎么建立
弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很…...
进网站显示建设中怎么解决/长沙seo搜索
转自:http://www.cnblogs.com/daqiang/archive/2011/12/04/2275646.html STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 时钟源问题: 名…...
网站绝对路径/百度开放平台
Python调用C、C库sf2gis163.com2014年9月24日1 目标:Python调用C/C中的类或方法ctypes是Python扩展库,自2.5以后开始加入Python。Ctypes提供了C/C与Python之间交互的映射关系,将库映射为一个对象。用于调用C/C库。2 原理python使用c api dlop…...
长沙h5手机网站制作/seo系统
一、基础知识1、主要的数据库类型层次型数据库早期的数据库类型网状数据库关系型数据库对象-关系型图片存放路径,大段文本存放指针2. sqllit关系数据库接口,仅提供API。非c/s架构,也是关系型数据库。客户端与服务器端在一起,本地调…...
wordpress 评论go跳转/百度官方电话号码
最近跑老外的程序[1] 又出问题了:??? Error: File: computeScores.m Line: 17 Column: 28Unbalanced or unexpected parenthesis or bracket.我用的是Matlab R2009a,识别出了程序里的几处语法错误:img gray2rgb(img); %always have 3 cha…...
古镇建设网站/上海关键词推广公司
一、SQL数据库的备份:1、依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dsideal_school_db既是我们需要备份的学籍数据库图(1)2、选择要备份的数据库“Dsideal_school_db”,点击鼠标右…...