硬链接和软连接(符号链接)
硬链接
硬链接文件可以理解为文件的副本(可以理解为复制粘贴)
ln 根据Linux系统分类给文件inode(ls -li)号进行建立,没有办法跨越文件系统
格式:ln 被链接的文件(源文件) 生成链接文件(目标文件)
- 硬链接的属性是 - 相当于生成一个副本 起别名
- 源文件删除链接文件依然存在
- 删除源文件后,即使创建一个和源文件同名文件,也和硬链接文件之间不存在链接关系
- 修改其中一个文件的内容另一个会更改
- 硬链接文件和源文件拥有相同的inode号
软连接
理解为wins下的快捷方式
ln -s 利用文件的路径来建立的,最好从绝对路径开始
格式:ln -s 被链接的文件(源文件) 生成链接文件(目标文件)
- 软连接文件属性 l 相当于快捷方式
- 修改内容都变化
- 软连接文件可以连接目录
- 源文件删除,链接断开,在原来的位置创建就可以重新链接
- 拷贝目录的软连接可以直接拷贝,如果需要拷贝普通文件的软链接文件,需要加上-d保证参数可以存在链接属性
cp -d 软连接文件(普通文件) 路径
硬链接和软连接的区别
首先,从使用的角度讲,两者没有任何区别,都与正常文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行
本质区别:
硬链接:本质上是同一个文件
软连接:本质上不是同一个文件
跨设备区别:
硬链接:不支持
软连接:支持
inode区别:
硬链接:相同
软连接:不同
连接数:
硬链接:创建新的硬链接,连接数会增加,删除硬链接,链接数减少
软连接:创建或删除,链接数不会变化
文件夹:
硬链接:不支持
软连接:支持
压缩和解压
- gzip 和 gunzip
特点:
只能对单个的普通文件进行压缩或解压
不能进行归档,压缩后或解压后源文件不存在
压缩后生成压缩格式为 .gz 格式
压缩:gzip 文件名 --> 默认生成:文件名.gz 压缩文件
解压:gunzip 文件名.gz ---> 默认解压为:文件名
- bzip2 和 bunzip2 (特点和gzip相似)
压缩后生成压缩的格式为 .bz2 格式
压缩:bzip2 文件名 ---> 默认生成:文件名.bz2 压缩文件
解压:bunzip2 文件名.bz2 ---> 默认解压为:文件名
- xz 和 unxz (特点和gzip相似)
压缩后生成压缩的格式为 .xz 格式
压缩:xz 文件名 ---> 默认生成:文件名.xz 压缩文件
解压:unxz 文件名.xz ---> 默认解压为:文件名
- zip 和 unzip
zip命令用于将一个或多个文件压缩成单一的压缩文件 .zip
注意:
1)具有归档功能,并进行压缩
2)可以压缩文件夹,后缀为.zip。压缩文件夹需加-r
3)压缩或者解压后源文件依然存在
压缩:zip 压缩文件名 要压缩文件列表
- 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脚本文件的步骤:
- 创建一个脚本文件
touch xxx.sh
- 编辑脚本内容
vi xxx.sh
- 执行脚本文件
- 直接运行脚本:
chmod 777 xxx.sh
./xxx.sh
- 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)