Linux之文件查找与打包压缩

文件查找与打包压缩

grep: 文件内容过滤

(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来

语法
grep   [options]    [pattern]     file
命令     参数      匹配模式    文件数据

参数——
-v                        排除匹配结果
-n                        显示匹配行与行号
-i                         不区分大小写
-c                        只统计匹配的行数
-E                        使用egrep命令
--color=auto        为grep过滤结果添加颜色
-w                       只匹配过滤的单词
-o                        只输出匹配的内容

grep查找文件内容单双引号用法 

单引号:全引用。shell命令不做转义处理。
双引号:部分引用。shell命令会做转义处理。优先解析命令和变量。
不加引号:效果等同于双引号的作用,优先解析命令和变量。

举例
[root@linux-server ~]# grep 'root' /etc/passwd  #从/etc/passwd文件中过滤root字段
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

查找命令

查找路径

which或者whereis ,查找并显示给定命令的绝对路径

[root@linux-server ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[root@linux-server ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@linux-server ~]# which cd
/usr/bin/cd
[root@linux-server ~]# which rm
alias rm='rm -i'
        /usr/bin/rm

find: 文件查找,针对文件名

语法:
# find 路径 条件 跟条件相关的操作符   [-exec 动作]

不写路径时查找的是当前路径.
条件:
1.指定的名称  -name
2.文件类型  -type
3.时间
4.文件大小   -size
5.文件属主   -user 
6.文件属组   -group 
7.文件权限   -perm 644
1.1 按文件名
从根开始找文件
[root@linux-server ~]# find / -name “file2”     
#以名字的方式查找       
[root@linux-server ~]# find /etc -name "ifcfg-ens33" 
#-i忽略大小写,即-iname
[root@linux-server ~]# find /etc -iname "Ifcfg-ens33" 
熟用*通配符
[root@linux-server ~]# find /etc -iname "*.txt"
参数解释:
*:表示所有字符
1.2 按文件大小
[root@linux-server ~]# find /etc -size +5M      #大于5M
[root@linux-server ~]# find /etc -size 5M       #等于5M(约等于)
[root@linux-server ~]# find /etc -size -5M      #小于5M

#查找/下面大于3M而且小于5M的文件  -a:add(可以省略,默认为-a)
[root@linux-server ~]# find / -size +3M -a -size -5M 

#查找/下面小于1M或者大于80M的文件 -o:or           
[root@linux-server ~]# find / -size -1M -o -size +80M 

#查找/下面小于3M而且名字是.txt的文件 -a:and
[root@linux-server ~]# find / -size -3M -a -name "*.txt" 
                
1.3 按时间查找
按时间找(atime,mtime,ctime)
-atime   access访问时间
-mtime   modify改变时间  内容修改时间会改变
-ctime   change修改时间   属性修改时间会改变
​# min 分钟    -amin    -mmin    -cmin
​
[root@linux-server ~]# find /opt -mtime +5     #修改时间5天之前
[root@linux-server ~]# find /opt -atime +1     #访问时间1天之前
[root@linux-server ~]# find . -mtime -2        #修改时间2天之内
​
[root@linux-server ~]# find . -amin +1         #访问时间在1分钟之前
[root@linux-server ~]# find /opt -amin -4      #访问时间在4分钟之内
[root@linux-server ~]# find /opt -mmin -2      #修改时间在2分钟之内
1.4 按文件类型查找
~]# find /dev -type f   #f普通文件
~]# find / -type f -size -1M -o -name "*.txt"
​
~]# find /dev -type d   #d目录
~]# find /etc/ -type d -name "*.conf.d" #查找以 .conf.d 结尾的目录
​~]# find /etc -type l   #l符号链接文件
​~]# find /dev -type b   #block块设备文件
~]# find /dev/ -type b -name "sd*" #查找所有sd命名开头的块设备文件

1.5 取反!

[root@linux-server ~]# find /home/ -name *test5*
[root@linux-server ~]# find /home/ ! -name "test5*" # !--取反

-exec

找到后处理的动作。find搭配exec命令表示:对之前查找出来的文件做进一步操作。

语法:command1 -exec command2 {} \; 
{}   花括号代表前面find查找出来的文件名,以;为结束标志的,
考虑到各个系统中分号会有不同的意义,所以前面加反斜杠\
​
~]# find /etc -name "ifcfg*" -exec cp -rf {} /tmp \; 
                #复制ifcfg命名开头的文件到/tmp下
~]# touch /home/test{1..20}.txt
~]# find /home/ -name test* -exec rm -rf {} \; 
                 #删除/home目录下以test命名开头的文件                         

xargs

语法:somecommand |xargs -i  command
-i或者-item
xargs 将标准输出(数据流)转换成命令参数作为标准输入( 进行横排输出)
当 -i 与 xargs 结合使用,每一个参数命令都会被执行一次
如果后一条命令的参数在中间,需指定{},并在后一命令参数的位置放{}占位
-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-x exit的意思,配合-s使用。
-P 修改最大的进程数,默认是1,0为as many as it can 。

xargs 参数传递

[root@linux-server ~]# touch /home/test{1..20}.txt
[root@linux-server ~]# # find /home/ -name "test*" | xargs -i cp {} /tmp/ 
                #将/home目录下以test命名开头的文件复制到/tmp目录下
-execxargs的不同
-exec是将结果逐条传递给后面的命令,后面的命令逐条执行,耗时。必须使用 {} 做文件代位符,必须用;做结束符。

xargs是将结果作为一个列表全部传递给后面的命令,后面的命令一次性执行参数串,支持一次处理多个文件,并且要处理的文件文件名里没有空格 。

二、打包压缩

window打包压缩工具: winrar zip 7zip 好压 【后缀名(.rar     .zip)】

linux打包压缩工具

【后缀名.tar.gz     .tar.bz2     .zip】
Tar:Tar是一个打包工具,能够将多个文件或目录打包成一个单独的文件。它通常与其他压缩工具(如gzip、bzip2、xz等)一起使用来生成压缩文件。Tar可以将文件集合成一个tar文件,然后使用其他工具来对其进行压缩。
Gzip:Gzip是一个基于DEFLATE算法的压缩工具,它能够将单个文件进行压缩,并生成以.gz为后缀的压缩文件。
Bzip2:Bzip2是一个基于Burrows-Wheeler变换和霍夫曼编码的压缩工具,它能够将单个文件进行高压缩比的压缩,并生成以.bz2为后缀的压缩文件。
Xz:Xz是一个支持LZMA/LZMA2算法的压缩工具,它能够将单个文件进行高压缩比的压缩,并生成以.xz为后缀的压缩文件。
Zip:Zip是一个跨平台的压缩工具,它可以将多个文件和目录打包成一个.zip文件,并可以选择是否进行压缩。

基础语法

语法: tar [选项] [文件名]
tar 命令选项:
-c:创建一个新的tar文件
-x:解压tar文件
-v:显示命令执行的详细信息
-z:使用gzip解压和打包
-j:使用bzip2解压和打包
-f:指定存档文件的名称(File)
-C:指定 tar 命令的工作目录

 压缩和解压

(1)打包压缩
tar czvf archive.tar.gz /path/to/directory   # gzip 压缩档案文件
tar cjvf filename.tar.bz2 /path/to/directory # bzip2压缩
gzip filename                 # 压缩成filename.gz,会删除原始文件
gzip -k filename              # 保留原始文件
(2)解压
tar xvzf 压缩文件 [-C 解压路径]   #解压.tar.gz压缩文件
tar xvjf 压缩文件 [-C 解压路径]   #解压.tar.bz2压缩文件
unzip [-d 解压路径] 压缩文件     #解压.zip压缩文件

tar和gzip的区别
(1)文件处理
tar 可以将多个文件和目录合并成一个单一的档案文件(通常称为 tarball)。tar 可以添加、列出、提取和创建包含多个文件的归档文件。本身并不具备压缩功能。如果要在创建 tarball 的同时进行压缩,通常需要结合其他工具如 gzip、bzip2 或 xz。
gzip 可以将文件压缩成更小的体积。gzip 只能处理单个文件,而不是目录结构。
(2)标准输入输出
tar 从标准输入接收文件名列表,并且可以创建一个包含这些文件的档案文件。然而,它默认需要文件名列表,而不是直接从标准输入读取文件内容。
gzip 可以直接从标准输入读取文件内容,并将其压缩到标准输出。这意味着 gzip 可以很好地配合管道操作。

案例

~]# tar czf dir1.tar.gz dir1              #打包并压缩
~]# tar xzf dir1.tar.gz -C /usr/local/    #解压到指定路径

~]# tar czf /tmp/`date +%F-%T`-etc.tar.gz /etc/  
                #将/etc目录下的文件打包并放到/tmp目录下,并以当前时间开头命名
工具:gzip和tar(打包)

~]# yum install -y unzip
~]# unzip .zip压缩文件     #解压.zip文件
~]# unzip filename.zip -d /path/to/directory  #解压到目标路径
按时间创建目录或文件
# mkdir `date +%F`-upload   //按照当天的日期生成一个名为“YYYY-MM-DD-upload”的文件夹
# touch file-`date +%F`.txt //按照当天的日期生成一个名为“file-YYYY-MM-DD.txt”的文件

``反引号      #反引号包含命令,用于调用命令或者将命令的输出赋予变量
date +%F      #显示完整的日期,等价于#date "+%Y-%m-%d"(年月日)

练习

查找系统内所有.gz结尾的文件并备份到/tmp/backup目录下
# mkdir /tmp/backup
# find / -name "*.gz" -exec cp {} /tmp/back \;

三.链接文件

软链接(符号链接)与硬链接

4.1.硬链接

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
硬链接是指多个文件名指向同一个物理存储位置的文件副本。换句话说,它们共享相同的inode和数据块。
inode号有限
[root@linux-server ~]# df -i     #可查看inode号使用数
Filesystem               Inodes IUsed   IFree IUse% Mounted on
devtmpfs                 250470   395  250075    1% /dev
tmpfs                    253486     1  253485    1% /dev/shm
tmpfs                    253486   748  252738    1% /run
tmpfs                    253486    16  253470    1% /sys/fs/cgroup
/dev/mapper/centos-root 9179136 38569 9140567    1% /
/dev/sda1                256000   326  255674    1% /boot
tmpfs                    253486     1  253485    1% /run/user/0

ln命令

link的缩写

语法: ln  [参数] [源文件或目录] [目标文件]
 参数
--backup[=CONTROL] : 为每个已存在的目标文件创建备份文件
-b: 类似–backup,但不接受任何参数
-d, -F, --directory : 创建指向目录的硬链接(只适用于超级用户)
-f, --force: 强行删除任何已存在的目标文件
-i, --interactive: 提示是否删除目的地
-L, --logical: 解引用的目标是符号链接
-n, --no-dereference: 将链接名视为普通文件,它是指向目录的符号链接
-P, --physical: 将硬链接直接设置为符号链接
-r, --relative: 创建相对于链接位置的符号链接
-s, --symbolic: 用符号链接代替硬链接
-S, --suffix=SUFFIX : 覆盖通常的备份后缀
-t, --target-directory=DIRECTORY : 指定在其中创建链接的DIRECTORY
-T, --no-target-directory: 始终将LINK_NAME视为普通文件
-v, --verbose: 打印每个链接文件的名称
--help: 显示此帮助信息并退出
--version: 显示版本信息并退出
硬链接使用: ln 源文件 链接文件
[root@linux-server ~]# echo 222 > /file2
[root@linux-server ~]# ll -i /file2                 #-i:显示inode编号
34045994 -rw-r--r-- 1 root root 4 Dec 29 20:52 file2
[root@linux-server ~]# ln /file2 /file2-h1          #创建硬链接文件
[root@linux-server ~]# ll -i /file2 /file2-h1       #查看inode号
34045994 -rw-r--r-- 2 root root 4 7月  30 22:25 /file2
34045994 -rw-r--r-- 2 root root 4 7月  30 22:25 /file2-h1
​
[root@linux-server ~]# rm -rf /file2                #删除源文件
[root@linux-server ~]# ll -i /file2-h1              #查看链接文件
34045994 -rw-r--r--. 3 root root 4 Nov  9 15:01 /file2-h1
查看:
[root@linux-server ~]# cat /file2-h1
222
硬链接中,源文件与目标文件的inode号码相同,都指向同一个inode。
inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。

4.2.软链接

除了硬链接以外,还有一种特殊情况
​
文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
​
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

ln -s 命令可以创建软链接。 

能针对目录和跨分区创建软链接

语法:ln -s  源文件或目录  链接文件 
[root@linux-server ~]# echo 111 > /file1
[root@linux-server ~]# ll -i /file1 
545310 -rw-r--r-- 1 root root 4 7月  30 22:06 /file1
[root@linux-server ~]# ln -s /file1 /file11    #将文件file1软链接到file11
[root@qfedu.com ~]# ll /file11 
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /file11 -> /file1
​
[root@linux-server ~]# ll -i /file11 /file1    #查看inode号
545310 -rw-r--r-- 1 root root 4 7月  30 22:06 /file1
545343 lrwxrwxrwx 1 root root 6 7月  30 22:06 /file11 -> /file1
​
[root@linux-server ~]# cat /file1 
111
[root@linux-server ~]# cat /file11 
111
​
[root@linux-server ~]# rm -rf /file11          #取消软链接
​
[root@linux-server ~]# ln -s /file1 /file11
[root@linux-server ~]# rm -rf /file1           #删除源文件
[root@linux-server ~]# ll /file11 
lrwxrwxrwx 1 root root 6 Dec 20 17:58  /file11 -> /file1   #已失效
​
#给目录设置软链接必须是绝对路径
[root@linux-server ~]# ln -s /root/aaa/ /usr/bbb
[root@linux-server ~]# ll /usr/bbb
lrwxrwxrwx 1 root root 10 Dec 29 21:08 /usr/bbb -> /root/aaa/
[root@linux-server ~]# rm -rf /usr/bbb  
#取消链接,注意:删除目录链接时目录后面加“/”是删除目录,不加是删除链接
 [root@linux-server ~]# ln /root/aaa/ /mnt/bbb
                 # ln: "/root/aaa/": 不允许将硬链接指向目录

注:硬链接 1. 不能跨文件系统 2. 不支持目录做硬链接

软链接和硬链接的区别

- 软链接可以跨文件系统,硬链接不可以;
- 软链接可以对目录进行连接,硬链接不可以;
- 删除源文件之后,软链接失效,硬链接无影响;
- 两种链接都可以通过命令 ln 来创建;
- ln 默认创建的是硬链接;
- 使用 -s 参数可以创建软链接。

四、破解密码---扩展

# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)

修复模式:
特权模式:不需要root密码,直接以root账户身份登陆。
破解密码时特权模式。

1.重起系统,进入grub菜单
2.选择要使用的内核
3.按e(在系统进入前快速按下)
 
4.找到linux16那一行,把光标移动到最后,即在en_US.UTF-8后面,添加 init=/bin/sh
(\是系统自带的换行符)
5.ctrl+x #保存退出

6.进入系统后,以rw方式重新挂载/分区
# mount -o remount,rw   /
 挂载 指定参数 重新挂载,读写

7.永久关闭selinux
#vim /etc/sysconfig/selinux
i进入编辑模式,修改SELINUX=disabled

8.修改密码
passwd

9.  # touch /.autorelabcl  #重新识别新的root密码
10. # exec /sbin/init      #重启机器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值