LinuxC语言

硬链接和软连接(符号链接)

硬链接

硬链接文件可以理解为文件的副本(可以理解为复制粘贴)

ln 根据Linux系统分类给文件inode(ls -li)号进行建立,没有办法跨越文件系统

格式:ln 被链接的文件(源文件) 生成链接文件(目标文件)

  1. 硬链接的属性是 - 相当于生成一个副本 起别名
  2. 源文件删除链接文件依然存在
  3. 删除源文件后,即使创建一个和源文件同名文件,也和硬链接文件之间不存在链接关系
  4. 修改其中一个文件的内容另一个会更改
  5. 硬链接文件和源文件拥有相同的inode号

软连接

理解为wins下的快捷方式

ln -s 利用文件的路径来建立的,最好从绝对路径开始

格式:ln -s 被链接的文件(源文件) 生成链接文件(目标文件)

  1. 软连接文件属性 l 相当于快捷方式
  2. 修改内容都变化
  3. 软连接文件可以连接目录
  4. 源文件删除,链接断开,在原来的位置创建就可以重新链接
  5. 拷贝目录的软连接可以直接拷贝,如果需要拷贝普通文件的软链接文件,需要加上-d保证参数可以存在链接属性

cp -d 软连接文件(普通文件) 路径

硬链接和软连接的区别

首先,从使用的角度讲,两者没有任何区别,都与正常文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行

本质区别:

硬链接:本质上是同一个文件

软连接:本质上不是同一个文件

跨设备区别:

硬链接:不支持

软连接:支持

inode区别:

硬链接:相同

软连接:不同

连接数:

硬链接:创建新的硬链接,连接数会增加,删除硬链接,链接数减少

软连接:创建或删除,链接数不会变化

文件夹:

硬链接:不支持

软连接:支持

压缩和解压

  1. gzip 和 gunzip

特点:

只能对单个的普通文件进行压缩或解压

不能进行归档,压缩后或解压后源文件不存在

压缩后生成压缩格式为 .gz 格式

压缩:gzip 文件名 --> 默认生成:文件名.gz 压缩文件

解压:gunzip 文件名.gz ---> 默认解压为:文件名

  1. bzip2 和 bunzip2 (特点和gzip相似)

压缩后生成压缩的格式为 .bz2 格式

压缩:bzip2 文件名 ---> 默认生成:文件名.bz2 压缩文件

解压:bunzip2 文件名.bz2 ---> 默认解压为:文件名

  1. xz 和 unxz (特点和gzip相似)

压缩后生成压缩的格式为 .xz 格式

压缩:xz 文件名 ---> 默认生成:文件名.xz 压缩文件

解压:unxz 文件名.xz ---> 默认解压为:文件名

  1. zip 和 unzip

zip命令用于将一个或多个文件压缩成单一的压缩文件 .zip

注意:

1)具有归档功能,并进行压缩

2)可以压缩文件夹,后缀为.zip。压缩文件夹需加-r

3)压缩或者解压后源文件依然存在

压缩:zip 压缩文件名 要压缩文件列表

  1. tar

选项:

-c:创建一个新的归档文件

-v:显示归档和释放的过程信息

-x:释放归档文件

-f:用户指定归档文件的文件名

-t:列出tar归档文件中包含的文件或目录

-j:由tar生成归档,然后由bzip2压缩 .bz2

-z:由tar生成归档,然后由gzip压缩 .gz

-J: 由tar生成归档,然后由xz压缩 .xz

格式:

tar 选项 压缩文件名 要压缩的文件列表

压缩组合:

tar -cvjf file.tar.bz2 *

tar -cvJf file.tar.xz *

tar -cvzf file.tar.gz *

解压:tar -xvf xxx.tar.压缩格式

注:tar -cvf file.tar * ---> 只归档不压缩

注意:

1)具有归档功能,并通过选项可以进行压缩或解压

2)压缩或解压后源文件存在

3)需要写全压缩或解压的文件名格式:

压缩文件名.tar.压缩格式

压缩

解压:

归档:

shell脚本编程

shell ---> 解析器:sh ksh csh bash

shell命令 ---> shell解析的命令

shell脚本 ---> shell命令的有序集合

shell脚本编程:将shell命令结合一些按照一定逻辑集合到一起,写到一个 .sh 文件,实现一个或多个功能,这个脚本文件不用编译直接执行

解释型:python、脚本

编译型:c、c++、java、汇编语言

写一个shell脚本文件的步骤:

  1. 创建一个脚本文件

touch xxx.sh

  1. 编辑脚本内容

vi xxx.sh

  1. 执行脚本文件
  1. 直接运行脚本:

chmod 777 xxx.sh

./xxx.sh

  1. bash 文件名
复制代码
练习:`
`       1)在当前路径下创建file_1到file_5,5个普通文件`
`       2)删除 file_2和file_3文件,(使用通配符)`
`       3)将剩下的file文件用tar压缩成bz2的格式`
`       4)将压缩文件复制到家目录下`
`       5)进入到家目录解压压缩文件`
`       6)删除压缩包 `
`

shell变量

shell中允许建立变量存储数据,但是不支持数据类型

(如:整型、字符、浮点类型),所有赋值给变量的值都解释为一串字符。

变量的定义格式:

变量名=值

注:等号两边都不能有空格

取变量的值:$变量名

变量的分类
系统环境变量

系统配置好的,内置的变量

env 或者 printenv : 查看环境变量

export 变量名=值 临时终端有效

永久生效只需要将这个命令放到家目录下的 .bashrc 中,当前用户有效

若放到 /etc/bash.bashrc 这个文件中所有用户永久

自定义变量

变量的格式

复制代码
变量名=变量的值`
`变量名='变量的值'`
`变量名="变量的值"`
`=两侧不能有空格`
`'' 内不能使用$展开变量的值`
`

修饰变量的关键字:

unset:清空变量的值,不能清空 readonly修饰的变量

readonly:只读变量,值不能修改

位置变量

$0 ---> 脚本名

1-9

{n} ---\> n:大于等于10 的数:如 {11}

$# ---> 获取所有外部参数的个数(不包括脚本名)

\* 或者 @ ---> 获取所有外部参数(不包含脚本名)

预定义变量

$? 获取的是上一句命令是否是正确的执行结果

0:为真 非0:为假

获取当前脚本的进程ID #### **shell中的语句** 1. 说明性语句 以 # 号开始到改行结束,不被解释执行 #!/bin/bash 告诉操作系统使用哪种解析器执行的脚本文件 1. 功能性语句 任意的shell命令、用户程序或其它shell程序 1. 结构性语句 条件测试语句、多路分支语句、循环语句、循环控制语句等 ##### **功能性语句** 1. **read(类似C语言中scanf)** 从终端获取值赋值给变量 格式:read 变量名1 变量名2 加提示语句:read -p "提示字符串" 变量名1 变量名2 ![](https://i-blog.csdnimg.cn/direct/5deb06cde07f4c6cb97188d6088a7029.png) 补充: read -s 变量 ---\> 输入的信息不回显 read -t 秒数 变量 ---\> 如果用户n秒不输入,就结束输入向后执行语句 read -n 个数 变量名 ---\> 如果输入n个字符,自动停止 1. **shell中的运算** shell本身不擅长运算,需要借助于运算符和其他的指令 ###### **2.1. expr** 使用方法: 1. expr中使用变量,必须加$ 2. 如果想要接收expr的结果,必须使用命令置换符 3. expr中运算符两侧必须有空格 、不支持自增和shell中的幂运算 4. expr中使用某些运算符是,需要转义 \|、\>、\<... 5. expr指令的结果,直接回显到终端上,可以使用命令置换符接收 ![](https://i-blog.csdnimg.cn/direct/f8bdbfa1bcd349caaa505b436d9c84ea.png) **expr 可以进行字符串运算** ``` match 字符串 表达式` `substr 字符串 偏移量 长度` `index 字符串 字符` ` 返回字符在字符串中第一次被查找到时的下标,下标从1开始` `length 字符串` ` 字符串的长度` ` ``` ![](https://i-blog.csdnimg.cn/direct/24418e6f0003428c83554c7fcca68112.png) ###### **2.2. let** 使用方法: 1. let 变量名=表达式 2. let运算时,运算符两侧不能有空格 3. let中使用变量时,可以加$也可以不加 4. 如果直接写成**let 表达式** ,表达式会运行,但是没有办法接收 ![](https://i-blog.csdnimg.cn/direct/2608b82281414bd29d2e52096dd29923.png)

相关推荐
It's now16 分钟前
Spring AI 基础开发流程
java·人工智能·后端·spring
cxh_陈16 分钟前
线程的状态,以及和锁有什么关系
java·线程·线程的状态·线程和锁
计算机毕设VX:Fegn089519 分钟前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
R.lin31 分钟前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐37 分钟前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
高山上有一只小老虎44 分钟前
翻之矩阵中的行
java·算法
火钳游侠1 小时前
java单行注释,多行注释,文档注释
java·开发语言
曼巴UE51 小时前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
wanhengidc1 小时前
云手机的存储空间可以灵活扩展吗?
运维·服务器·科技·智能手机·云计算
code bean1 小时前
【CMake】为什么需要清理 CMake 缓存文件?深入理解 CMake 生成器切换机制
java·spring·缓存