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指令的结果,直接回显到终端上,可以使用命令置换符接收

expr 可以进行字符串运算

复制代码
match 字符串 表达式`
`substr 字符串 偏移量 长度`
`index 字符串 字符`
`    返回字符在字符串中第一次被查找到时的下标,下标从1开始`
`length 字符串`
`    字符串的长度`
`

2 let

使用方法:

  1. let 变量名=表达式
  2. let运算时,运算符两侧不能有空格
  3. let中使用变量时,可以加$也可以不加
  4. 如果直接写成let 表达式 ,表达式会运行,但是没有办法接收

未完待续......

相关推荐
nnsix2 分钟前
Unity HybirdCLR 简单了解 笔记
笔记
MartinYeung526 分钟前
[论文学习]基于梯度迭代上下文优化的 LLM 隐私越狱攻击框架
学习·区块链
handler011 小时前
【算法】并查集(普通/扩展/带权)模板与例题
数据结构·c++·笔记·算法·c·图论·查并集
MartinYeung51 小时前
[论文学习]大型语言模型中 PII 洩漏的系统性调查
学习
ss2731 小时前
【入门OJ题解】分苹果问题(Python/Java/C 实现)
java·c语言·python
中屹指纹浏览器2 小时前
指纹浏览器环境克隆、批量派生的风控隐患剖析与标准化新建环境实操指南
经验分享·笔记
你怎么知道我是队长2 小时前
CRC校验C语言实现-CRC8、CRC16、CRC16的直接计算法、查表法
c语言·前端·javascript
淘源码d2 小时前
医院专业级PACS系统完整源码(C+VC+MSSQL)
c语言·数据库·sqlserver·源码·pacs系统·医学影像系统
.千余2 小时前
【C++】C++手写Vector容器:从底层源码模拟实现
开发语言·c++·经验分享·笔记·学习
元直数字电路验证2 小时前
云计算实验笔记(四):容器编排(Container Orchestration)
运维·笔记·docker·云计算