C高级学习笔记

......接上文

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

硬链接

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

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

格式:ln 被链接的文件(源文件) 生成链接文件的名字(目标文件(自定义))

通过ls -li 命令查看inode号

特点:

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

软连接

理解为windows下的快捷方式

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

格式:ln -s 被链接的文件(源文件) 生成链接文件的名字(目标文件(自定义))

特点:

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

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

软连接和硬链接的区别

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

本质区别:

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

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

跨设备区别:

硬链接:不支持

软连接:支持

inode区别:

硬链接:相同

软连接:不同

连接数:

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

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

文件夹:

硬链接:不支持

软连接:支持

压缩和解压

gzip和gunzip

特点:

  1. 只能对单个的普通文件压缩或解压
  2. 不能进行归档,压缩或解压后源文件不存在
  3. 压缩后生成的压缩格式为.gz格式

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

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

bzip2和bunzip2(特点和gzip相似)

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

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

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

xz和unxz (特点和gzip相似)

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

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

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

zip和unzip

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

注意:

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

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

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

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

解压:unzip 压缩文件名

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 -cvzf file.tar.gz *

tar -cvJf file.tar.xz *

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

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

注意:

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

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

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

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

压缩

解压:

归档:

tar -tf 压缩文件名 :查看压缩文件中的内容

shell脚本编程

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

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

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

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

解释型:python 脚本

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

写shell脚本文件的步骤:

  1. 创建一个脚本文件 touch ++xxx++ ++.++ ++s++ ++h++
  2. 编辑脚本的内容 vi ++x++ ++x++ ++x++ ++.++ ++s++ ++h++
  3. 执行脚本文件
  1. bash ++x++ ++x++ ++x++ ++.++ ++s++ ++h++
  2. 直接运行脚本 需要先更改权限 chmod 777 ++x++ ++x++ ++x++ ++.++ ++s++ ++h++ 再运行 ./xxx.sh

shell变量

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

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

变量的定义格式:

变量名=值

注:等号两边不能有空格

取变量的值:$变量名

变量的分类

系统的环境变量 env或者printenv

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

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

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

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

自定义变量

变量的格式

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

修饰变量的关键字:

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

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

位置 变量

$0 ---> 脚本名

$1-$9 ----> 获取第1到第九个命令行参数(外部参数)

${n} --->n:大于等于10的数 获取第10个及以上的命令行参数(外部参数)

$# ---> 获取所有外部参数的个数,不包含脚本名

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

预定义变量

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

0:为真 非0:为假

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

相关推荐
OopspoO6 分钟前
qcow2镜像大小压缩
学习·性能优化
嵌入式科普27 分钟前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
A懿轩A29 分钟前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒38 分钟前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash31 小时前
提升专业素养的实用指南
学习·职场和发展
Hejjon1 小时前
SpringBoot 整合 SQLite 数据库
笔记
1 9 J2 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
仍然探索未知中3 小时前
C语言经典100例
c语言
6.943 小时前
Scala——身份证号码查询籍贯
学习·scala
爱吃西瓜的小菜鸡3 小时前
【C语言】矩阵乘法
c语言·学习·算法