- 归档及压缩
- 重定向与管道操作
- find精确查找
- vim高级使用
归档及压缩
作用 :
1. 减少占用的硬盘空间
2. 整合分散的文件
· 归档的含义
- 将许多零散的文件整理为一个文件
- 文件总的大小基本不变
· 压缩的含义
- 按某种算法减小文件所占用空间的大小
- 恢复时按对应的逆向算法解压
常见的压缩格式及命令工具(重点)
.gz ---> gzip (最快的)
.bz2 ---> bzip2
.xz ---> xz (最慢的)
压缩解压tar
红色代表压缩包
tar工具的常用选项
-c : 创建归档
-x : 释放归档
-f : 指定归档文件名称(必须放在所有选项的最后)
-z , -j , -J : 调用.gz , .bz2 , .xz格式的工具进行处理
-t : 显示归档中的文件清单
-C : 指定释放路径
-P : 允许使用绝对路径进行打包
tar命令制作压缩包(打包)
格式:tar 选项 /路径/压缩包的名字 /路径/源数据....(可以写多个)
-zcf -jcf -Jcf
tar -P -zcf abc.tar.gz /home/ /etc/passwd 创建.gz格式的压缩包
tar -P -jcf test.tar.bz2 /home /etc/passwd 创建.bz2格式的压缩包
tar -P -Jcf nsd.tar.xz /home/ /etc/passwd 创建xz格式的压缩包
tar命令释放压缩包(解包)
格式:tar 选项 /路径/tar包 -C(大写) /路径/目标位置
-x:释放 -f:指定压缩包名称
mkdir /nsd01 /nsd02 /nsd03
tar -xf abc.tar.gz -C /nsd01 将压缩包abc.tar.gz释放到目录nsd01中
tar -xf test.tar.bz2 -C /nsd02 将压缩包test.tar.gz释放到目录nsd02中
tar -xf nsd.tar.xz -C /nsd03 将压缩包nsd.tar.xz释放到目录nsd03中
tar -tf abc.tar.gz 查看tar包中的内容
案例1:创建一个备份包
使用tar工具完成以下备份任务:
- 创建一个名为/root/backup.tar.bz2的归档文件
- 其中包含/usr/local目录中的内容
- tar归档必须使用bzip2进行压缩
tar -P -jcf /root/backup.tar.bz2 /user/local/
重定向与管道操作
重定向 : 将前面命令的输出,写入到后面文本文件的内容
> 覆盖重定向
>> 追加重定向
重定向时,原文件一定要有输出内容才可以写入文本文件。如果写入的文本文件不存在,会自动创建文本文件。
cat /etc/redhat-release > /opt/nsd01.txt
将redhat-release命令输出的内容写入到opt目录下nsd01.txt的文本文件中,写入模式为覆盖原文件的模式
cat /etc/redhat-release >> /opt/nsd01.txt
将redhat-release命令输出的内容以追加写的模式写入opt目录下nsd01.txt的文本文件中
hostname > /opt/nsd02.txt
hostname >> /opt/nsd02.txt
echo hello 屏幕会直接显示hello
echo 123 > /root/a.txt 将123以覆盖写的形式写入root目录下的a.txt文本文件中
echo 123 >> /root/a.txt 将123以追加写的形式写入root目录下的a.txt文本文件中
管道(|):将命令的输出,交给后面一条命令,作为后面命令作为后面命令的参数
- 原文件一定要有输出内容交给后面一条命令作为参数
- 至少两个参数以上的命令是不支持管道的
head -14 /etc/passwd | tail -1 取etc目录中passwd文件中第14行
cat -n /etc/passwd | head -14 | tail -1 有加上行号的形式取出etc目录中passwd文件中第14行
ifconfig | head -2 取出ifconfig命令中的前2行
ifconfig | less 以滚动的形式查看ifconfig文件
案例:
将文件/etc/default/useradd中的有效配置写入opt目录中的a.txt文件中
显示有效配置(去除空行与注释行)Linux默认的注释行符号为#
grep -v ^# /etc/default/useradd
grep -v ^# /etc/default/useradd | grep -v ^$ /etc/deault/useradd > /opt/a.txt
我们在将文件通过重定向写入文本文件中的时候,可以不用加管道,重定向会默认输出内容写入文本文件
find命令的使用
find与grep的差别在于
- grep查找的是文本文件的内容
- find查找的是文件的路径,属于递归式查找(所有的路径都会查找一遍)
根据预设的条件递归查找对应的文件
find [目录] [条件1] [条件2]
- 常用条件表示:
-
-type 类型 (f 文本文件,d 目录,l 快捷方式)
-
-name "文档名称"
-
-iname 名称忽略大小写
-
[] 匹配中括号中的任意一个字符
-
-size +/-文件大小(k,M,G)
-
-user 用户名
-
-mtime:内容修改时间 -ctime:属性变更时间 -atime:访问时间
· 使用find查找打印结果包含当前目录本身和目录下的影藏文件,find查找是属于递归查找
-type 类型
find /root -type f 查找root目录下的所有文本文件
find /root -type d 查找root目录下的所有目录
find /etc -type l 查找etc目录下的所有快捷方式
-name "名称"
find /etc -name "*.conf" 查找etc目录下结尾为.conf结尾的所有目录和文本文件(linux系统中.conf结尾的大多数都是配置文件)
find /etc -name "*tab*" 查找中间包含tab的所有目录和文本文件
find /etc -name "passwd" 查找passwd文件和目录(精确查找)
-iname "名称"
find /etc -iname "a*" 查找etc目录下以a或者A开头的所有目录和文件
find /etc -iname "c*" 查找etc目录下以c或者C开头的所有目录和文件
-type + -name
mkdir /root/nsd01 /root/nsd02
touch /root/nsd03.txt /root/nsd04.conf
查找root目录下nsd开头的所有目录
find /root -type d -name "nsd*"
查找root目录下nsd开头的所有文件
find /root -type f -name "nsd*"
[] 匹配中括号中的任意一个字符
touch /root/abc{1,2,3,4,5,6}.txt 创建文件abc1.txt至abc6.txt
find /root/ -name "abc[123].txt" 查找名字为abc1.txt,abc2.txt,abc3.txt的文件
# abc1.txt abc2.txt abc3.txt
find /root/ -name "abc[^123].txt" 查找名字除了abc1.txt,abc2.txt,abc3.txt以外,其他以abc开头的所有文件
# abc4.txt abc5.txt abc6.txt
-size +/-文件大小
find /boot/ -size +20M 查找boot目录下大于20M所有的文件和目录
find /boot/ -size -10M 查找boot目录下小于10M所有的文件和目录
find /boot/ -size -30k 查找boot目录下小于30k所有的文件和目录
# find /boot/ -size -1G/-1M/-1k -和1是无法联用的,系统是不会识别的
find /boot/ -size -1024k 查找boot目录下小于1M的文件和目录
-user 用户名 # 按照数据的所有者(数据所有者即谁创建了该数据,谁就是该数据的数据所有者)
useradd nana
find /home/ -user nana 查找home目录下用户nana相关的所有文件和目录
find /home/ -user nana type f 查找home目录下用户nana相关的所有文件
find /home/ -user nana type d 查找home目录下用户nana相关的所有目录
如果说以/为查找范围,那么会出现一些正确的报错"/prco/..."
find / -user nana
# find查找只会去硬盘里面查找,不会去内存里面找数据
# /proc : 占用内存空间,不占用磁盘空间,proc是专门反应内存中的数据的
-mtime 修改时间 # 都是过去的时间
-mtime +10 # 10天之前
-mtime -10 # 最近10天之内
-mtime 10 # 第10天当天
三个月之前修改过的数据
find /root -mtime +90
查找最近一天内修改过的数据
find /root -mtime -1
-a(并且)/-o(或者)
find /var/log -size +2k -a -size -10k 查找/var/log目录下大于2k并且小于10k的文件或目录
find /var/log -size +2k -size -10k -a可以忽略不写
find /var/log -size -2k -o -size +10k 查找/var/log目录下小于2k或者大于10k的文件或目录
find命令高级使用
- find指令
常用的find指令
find ./ -type f -print (默认)打印当前目录下的文件
find ./ -type f -ls (ls -lhi)打印当前目录下的结果详情
# 34292038 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
# 34292039 4 -rw-r--r-- 1 root root 176 Dec 29 2013 ./.bash_profile
find ./ -name "adc*" -delete 删除结果集
- find和xargs命令配合
find [路径] [选项] 参数 | xargs -I {} ...(其他命令做处理)
cd /root
mkdir test
echo 123 > ./test/a.txt
find ./test -name "a.txt" | xargs -I {} cat {} 将a.txt的内容通过通过管道转换成{}交给cat命令做进一步处理
# 123
- -exec命令使用
find [范围] [条件] -exec 处理命令 {} \
根据查找条件查找并处理结果
-exec: 额外操作开始
{}:find查询的结果
\;:额外操作结束
每找到一个符合条件的数据,直接传输给-exec,每次只传输一个参数
find /boot/ -size +10M -exec cp {} /opt \; # 将boot目录下大于10M的文件拷贝到opt目录下
find /root/ -name "a*" -exec cp -r {} /opt \; # 将root目录下开头为a的目录和文件拷贝到opt目录下
当我们将find与cp联用时,必须要先确认cp到的目录是否存在,find是没有创建目录的功能的
把find找到的文件或者目录结果制作成tar包时,只能一次之传输一次参数,如图下所示:
案例:
利用find查找所有用户student拥有的必须是文件,把他们拷贝到/root/findfiles文件夹中
useradd student
mkdir findfiles
find / -user student -type f -exec cp {} /root/findfiles /;
ls -A /root/findfiles/
案例:
查找/root/中的所有子目录,复制到/opt目录下
方法一:
find /root -type d -exec cp -rfv {} /opt \; 选项 r:递归 f:免交互 v:打印复制过程
方法二:
find /root -type d | xargs -I {} cp -rfv {} /opt 选项 r:递归 f:免交互 v:打印复制过程
vim的高级使用
三个模式:命令模式 插入模式 末行模式
插入模式i和o的差别
i : 跟在光标后面开始编辑
o : 另起一行开始编辑
命令模式操作
光标跳转
快速跳转至n行 : n+G
复制/粘贴/删除
查找/撤销/保存
末行模式操作
保存/退出/文件操作
echo 123 > /opt/a.txt
echo abc > /opt/b.txt
vim /opt/a.txt
末行模式:r /opt/b.txt # 会直接把b.txt的内容导入文件a.txt中
字符串替换
开关参数控制
注释多行操作
Ctrl + v 进入列编辑模式,向上或者向下移动光标,选中需要一起操作的行
shift + i 进入编辑模式,插入#
按两次Esc进入一般模式(自动变)
批量去注释
Ctrl + v 进入列编辑模式,向上或者向下移动光标,选中需要一起操作的行
Ctrl + d 批量取消注释
· 常见问题:缓存文件产生 名称为:*.swp
- 如果我们在使用vim编辑器的时候,编辑到一半,进程突然挂了,再次打开文件的时候,就会出现下图这种情况
- 也就是说,这时候产生了缓存文件.a.txt.swp,一般出现这种情况我们是无法再次编辑a.txt文件的
- 我们需要删除缓存文件.a.txt.swp就可以再次编辑了(
rm -rf /opt/.a.txt.swp
) - 删除缓存文件后,我们在进程挂掉之前,新编辑的内容是直接丢失的。
find补充时间查询
- 按照不同的时间类型查询 ctime 、 mtime 、 atime
格式: find 文件路径 -mtime n
- n : 代表天数(整数)
- +n : 距离现在n天之前
- -n : 具有现在n天之内
- n : 距离现在第n天
ctime : 文件变更时间(变更属性时间 , 修改了位置(mv)、所属组、所有者)
atime : 文件访问时间(cat)
mtime : 文件修改时间(echo、vim)
查看文件以上三个时间的命令 : stat [文件的路径]
touch /root/a.txt
stat /root/a.txt
# File: ‘/root/a.txt’
# Size: 25 Blocks: 8 IO Block: 4096 regular file
# Device: fd00h/64768d Inode: 33575000 Links: 1
# Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
# Access: 2021-03-27 20:44:04.442578241 +0800 访问时间
# Modify: 2021-03-27 20:44:04.442578241 +0800 内容修改时间
# Change: 2021-03-27 20:44:04.442578241 +0800 属性变更修改时间
# Birth: - 文件的创建时间不显示
echo 123 > /root/a.txt 我们在文件里写入内容的时候,文件内容的修改时间和属性变更时间都会改变
stat /root/a.txt
# Modify: 2021-03-27 20:49:31.218585662 +0800
# Change: 2021-03-27 20:49:31.218585662 +0800
用法:
find /root -mtime 5 距离现在的第5天,root目录下修改过的文件和子目录
find /root -mtime -5 距离现在的第5天之内,root目录下修改过的文件和子目录
find /root -mtime +5 距离现在的第5天之前,root目录下修改过的文件子目录