文件查找与打包压缩
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目录下
-exec
与xargs的
不同
-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 #重启机器