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)

相关推荐
Amd7943 分钟前
Nuxt.js 应用中的 webpack:compiled 事件钩子
前端·webpack·开发·编译·nuxt.js·事件·钩子
东华果汁哥4 分钟前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
生椰拿铁You11 分钟前
09 —— Webpack搭建开发环境
前端·webpack·node.js
喵叔哟19 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
狸克先生22 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
尘浮生25 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
baiduopenmap37 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
mengao123439 分钟前
centos 服务器 docker 使用代理
服务器·docker·centos
loooseFish1 小时前
小程序webview我爱死你了 小程序webview和H5通讯
前端
不是二师兄的八戒1 小时前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php