day17 linux 2
1.history指令 - 获取历史记录(指令的历史记录)
如果想要显示历史记录的时候显示出执行的时间
则需要
1.修改:~/.bashrc 文件:
export HISTTIMEFORMAT="[%y-%m-%d_%T]”
2.修改完成之后执行指令:
source ~/.bashrc
历史记录的时间才会生效。
如果今天才配置的话那么今天之前的时间记录是没有的。
2.创建连接
1)创建软连接
ln -s 源文件路径 软连接文件地址 - 给源文件在指定位置创建一个软连接(软连接本质就是用来保存源文件绝对地址的一个文件,可以理解为Windows中的快捷方式)
注意:源文件路径必须要写绝对路径
如果删除或者移动源文件,那么软连接就会直接无效
2)创建硬连接
ln 源文件路径 硬连接文件地址 - 给源文件在指定位置创建一个硬连接
硬连接的本质就是源文件内容的另一个引用,所以删除或者移动源文件硬连接仍然有效,只是删除,硬连接会变成普通文件
对文件进行硬连接之后,对其中任何一个文件进行修改内容,那么硬连接中的各个文件内容都会进行修改。
3.日志管理
1)显示文件内容
- cat指令 - 直接显示文件中的所有内容
cat 文件 - 直接查看文件所有内容
在查看文件内容的时候可以加上参数 -n ,让内容在显示的时候显示出行号。
b. 查看部分内容
head -n 行数 - 显示文件的前n行
head -n - 显示文件的前n行
c. 分页显示
less 文件 - 按页显示文件内容(通过快捷键控制内容显示过程;文件内容不会打印到shell/终端里)
less -N 文件 - 按页显示文件内容,每次翻页的时候翻N行
more 文件 - 按页显示文件内容(通过快捷键控制内容显示过程;文件内容会打印到shell/终端里)
more -N 文件 - 按页显示文件内容,每次翻页的时候翻N行。
快捷键:
按 j 向下一行
按 K 向上一行
按 f 向下翻一页
按 b 向上翻一页
按 g 到全文开头
按 G 到全文结尾
按 Q 退出
2)结果的处理
凡是有打印结果的指令,我们都可以通过相关指令对应结果进行处理。
有结果的指令 | 处理方式
a. 管道
如果需要对某一个指令的结果使用另外的指令进行二次处理,则需要用到管道。
例如:
cat a.txt | sort # 对a.txt的文件内容从小到大排序显示。
b. sort
从小到大排序将一行内容作为一个字符串,按字符串大小对应内容进行排序,默认不区分大小写)
参数:
-r - 逆序
-nk 1 - 数值大小排序
-nk 2 - 字符大小排序(默认)
cat a.txt | sort -nk 1 # 对a.txt文件内容按数字大小从小到大排序。
cat a.txt | sort -rnk 1 # 对a.txt文件内容按数字大小从大到小排序。
cat a.txt | sort -nk 2 # 对a.txt的文件内容按字符大小从小到大排序(默认)
cat a.txt | sort -rnk 2 # 对a.txt的文件内容按字符大小从大到小排序(默认)
字符串比较大小的规则:比较第一段不相等字符的大小
字符比较大小的规则:比较的是字符的编码值的大小
编码值:
计算机只能保存数字(数字在计算机中的存储方式:二进制补码)
为了能够让计算机存储文字符号,给每个符号绑定了一个固定的数字每次需要符号的时候,就存储这个符号对应的那个数字。(符号对应的数字就是这个符号的编码值)
编码表 (保存和记录了符号和数字之间的对应的关系):
ASCII码表
Unicode码表
c. uniq
去重
uniq - 只能将紧挨着的相同行去掉重复(如果想要去掉所有的重复的行,则需要先排序将相同的行放到一起)
cat a.txt | uniq # 去掉a.txt文件内容中相邻重复的行
cat a.txt | sort | uniq # 去掉a.txt文件内容中所有重复的行
uniq的参数:
c - 重复次数
d. awk
获取列
awk ‘{print $N}’ - 获取内容中第N列的数据 N为列号
history | awk '{print $2}' # 获取历史记录第2列的内容
history | awk '{print $2,$3}' # 获取历史记录第2列和第3列的内容
练习:
history |awk '{print $3}' |sort |uniq ‐c | sort ‐rnk 1 | head ‐n 3 # 统计最常用的3个指令及其使用次数
3) 输出重定向 - > / >> (将指令的打印结果保存到文件中)
(执行有打印结果的指令 > 文件地址 ) - 将指定指令执行的结果保存到指定文件中(先清除原文件内容再添加)
(执行有打印结果的指令 >> 文件地址) - 将指定指令执行的结果保存到指定文件中(直接将结果追加到原文件中)
history > a.txt #将当前历史记录直接保存到a.txt文件中
# 练习:将最常用的3个指令及其使用次数保存到a.txt文件中
history |awk '{print $3}' |sort |uniq ‐c | sort ‐rnk 1 | head ‐n 3 > a.txt
4)统计
wc -c/-w/-l 文件地址 - 统计指定文件中字符/单词/行的数量 (注意:统计字符数量的数,会比实际的字符数多1,多的\0这个字符串结束标志)
有打印结果的指令 | wc -c/-w/-l
5)查找
grep - 找内容
a. grep 内容 文件地址 - 在指定文件中查找指定内容(返回文件中所有包含指定内容的行)
grep you a.txt # 获取a.txt中包含you的所有的行
grep的参数:
-n - 显示结果的时候显示行号
-i - 查找内容的时候忽略大小写
-E - 按正则表达式进行匹配
使用方法: grep -E '正则表达式' 文件
注意: Linux操作系统中正则表达式不支持:\d,\D,\w,\W,\s,\S,\b,\B; 其他语法都支持
-v - 忽略字段
grep you a.txt -v # 获取a.txt中不包含you的所有的行
b. 执行有打印结果的指令 |grep 内容 - 在指令执行结果中查找指定内容
c. grep -r 内容 文件夹地址 -在指定文件夹中所有的文件中查找指定内容
find - 找文件
find 文件夹路径 -name 文件名 - 在指定文件夹下按文件名找指定文件
# 找指定文件名
find dir1 -name 'test1.py' # 在文件夹dir1找名字是test1.py的文件
find dir1 -name '*.txt' # 在文件夹dir1找后缀是txt的所有文件
find dir1 -name 'test*.txt'
find dir1 -name 'test*'
find dir1 -name '*c.txt'
find 文件夹路径 -size +/-文件大小 - 在指定文件夹下找文件大小满足条件的所有的内容(包含文件和文件夹)
find dir1 -size +4k # 查找在文件夹dir1中所有大于4k的文件
find dir1 -size -4k # 查找在文件夹dir1中所有小于4k的文件
find dir1 -size +5k -size -10k # 查找在文件夹dir1中所有大于5k并且小于10k的文件(文件大小如果是小数,算的时候向上取整)
find dir1 -size +4k -name '*.txt' # 查找在文件夹dir1中所有大于4k的txt文件
压缩和归档
压缩可以让文件变小,一般在需要传输前都会先对文件进行压缩。注意,压缩指令只针对文件有效,并且一次只能压缩一个文件。
归档可以将一个文件夹变成一个文件(tar文件)
1)归档和解归档 - tar
tar -cvf 归档文件地址 需要归档的原文件夹地址 - 将文件进行归档操作(既可以对文件进行归档也可以对文件夹 归档)
tar -xvf 需要解归档文件地址 - 将指定的归档文件解归档
2)压缩和解压: gzip,gunzip,xz
a.gzip
gzip 文件地址 - 压缩指定文件(压缩后会生成一个gz文件,并且会删除原文件)
gzip -c 文件地址 > 压缩文件地址 - 将指定文件压缩指定位置,并且保留原文件
gzip -d 压缩文件地址 - 解压指定文件(解压完成后会删除原压缩文件,解压后的文件直接放在被解压的压缩文件所在的位置)
gzip -l 压缩文件地址 - 列出压缩文件中的内容
b.gunzip(解压tgz文件)
gunzip 压缩文件地址 - 解压指定文件(解压完成后会删除原压缩文件)
c.xz
xz 文件地址 - 压缩指定文件(压缩文件后缀是xz)
xz -d 压缩文件地址 - 解压指定文件
1.源代码构建python3.x
[root ~]# rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps (移除旧版本Python)
[root ~]# whereis python3 |xargs rm -frv (删除所有剩余文件)
[root ~]# yum install gcc (安装编译环境)
[root ~]# wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz (下载安装包)
[root ~]# gunzip Python-3.9.13.tgz (解压)
[root ~]# tar -xvf Python-3.9.13.tar (解归档)
[root ~]# cd Python-3.9.13 (进入安装包)
[root ~]# ./configure --prefix=/usr/local/python39 (设置安装路径)
[root ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel (安装相关依赖库)
[root ~]# make && make install (编译执行安装文件)
...
[root ~]# ln -s /usr/local/python39/bin/python3.9 /usr/bin/python3 (给python指令文件创建快捷方式python3)
[root ~]# python3 --version
Python 3.9.16
[root ~]# ln -s /usr/local/python39/bin/pip3 /usr/bin/pip3 (给pip指令创建快捷方式pip3)
[root ~]# pip3 --version