#Linux系统基础
文件与内容查找、归档压缩
find
命令搜索文件
grep
对文件的内容进行搜索
tar
命令进行文件的压缩与解压缩
一、文件的查找
格式实例:find . -name "123.txt" | 说明 | |||
---|---|---|---|---|
find | 起始目录 | 查找类型 | 查找条件 | |
./ 或 . | -name | “123.txt” | 在当前目录中查找哦名为123.txt的文件或文件夹 | |
*代表任意字符串 | /opt/ | -name | “pass*” | 在opt目录下查找以pass开头的文件和文件夹 |
[ ]或,里面的任何一个都要匹配 | ./ 或 . | -name | “[h]*” | 在当前文件夹内查找以h开头的 文件、文件夹 | 可以不用 |
| 代表 或(加上大括号是代表单个字符的或) | . | -name | “[h|f]*” | 在当前文件夹内查找以h或f开头的 |
(字符串1 | 字符串2 )用圆括号是字符串的或 | ||||
. | -name | “[a-z]*” | 在当前文件夹内查找以小写字母开头的 | |
. | -name | “[A-Z]*” | 找大写字母开头的 | |
. | -name | “[0-9]*” | 找数字开头的(0-9开头的) | |
^表示非 | . | -name | “[ ^ A-Z]*” | 注意^的两边没有空格,表示不是以A-Z开头的 |
?代表单个任意字符 | . | -name | “h?llo*” | 找第1个是h第2个是任意字符,后面是llo开头的 |
. | -name | ‘\\’ | 查找包含特殊字符 \ 的文件,注意用单引号,这里需要两个\,第一个是转义符,表示后面那个\是一个字符 | |
find | . | -perm | 777 | 查找权限为rwx rwx rwx的文件 |
find . -path "./test" -prune -o -name "hello" | 查找当前目录中,除了test目录的其他所有目录中,包含hello的文件夹或文件 | |||
. | -user | mary | 查找所有者为mary的文件或文件夹 | |
. | -group | dev | 查找属于dev组的文件或文件夹 | |
. | -mtime | -3 | 查找最近3天内更新过的文件或文件夹 | |
. | -mtime | +3 | 查找3天前更新过的问文件或文件夹 | |
. | -newer | 123.txt | 查找比123.txt新的文件夹 | |
. | ! -newer | 123.txt | 查找比123.txt旧的文件 | |
. | -type | d | 查找当前目录下的所有文件夹. d:目录,I:软连接文件,f:普通文件(文本文件、可执行文件等),c:字符设备(终端、磁带机等),b:块设备(光盘、硬盘等) | |
. | -size | 602c | 查找当前目录下文件大小为602字节的文件 c:byte,k,M,G | |
. | -size | +602c | 查找大于602字节的文件 | |
. | -name “hello*” | -exec ls -l {} ; | 查找当前目录下所有以hello开头的文件,并将其细节显示出来,如果查找出了目录,那么注意会被ls -l显示出来 | |
. | -name “hello*” | -exec rm {} ; | 查找当前目录下所有以hello开头的文件并将其删除 | |
▲ | . | -name “hello*” | | xargs ls -l | 查找当前目录下所有以hello开头的文件并将其细节显示出来,| 称之为管道,前面的输出就是后面的输入 |
二、命令执行内容的查找过滤
功能项 | 命令 | 说明 |
---|---|---|
grep | grep “root” /etc/passwd | 查找 /etc/passwd文件中包含root的行 |
grep -n “root” /etc/passwd | 查找 /etc/passwd文件中包含root的行,并输出行号 | |
grep “^ma” /etc/passwd | 查找 /etc/passwd文件中 以 ma 为 首 的行 | |
grep “ma$” /etc/passwd | 查找 /etc/passwd文件中 以 ma 为 尾 的行 | |
grep “1” /etc/passwd | 查找 /etc/passwd文件中 以 r或d 为 首的行 | |
grep -v “内容” | 排除包含“内容”的行 | |
ls | grep test | 从ls的输出中过滤出包含test的文件名 | |
grep -r games /etc | 在/etc 目录下(包括所有子目录)查找所有包含games的文件 | |
统计 | ls /var/log | grep log | wc -l | 显示在/var/log 中,名字有log的文件数量有几个 |
wc | wc-l | -l:行数;-c比特数;-w字数;如果不指定参数则统计所有信息 |
xargs命令
find . -name “*” | xargs grep word 遍历某个目录下所有的文件中包含word的文件
-
xargs(英文全拼: extended arguments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
-
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
-
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
-
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
-
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
三、文件内容的查找
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- head 只看头几行
- tail 只看尾巴几行
- od 以二进制的方式读取文件内容!
1.直接查阅文件内容
可以使用cat/tac/nl
这几个指令
1.cat(concatenate)
选项与参数:
-A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
范例一:检阅 /etc/issue 这个文件的内容
cat /etc/issue
范例二:承上题,如果还要加印行号
cat -n /etc/issue
范例三:将 /etc/man_db.conf 的内容完整的显示出来(包含特殊字符)
cat -A /etc/man_db.conf
2.tac (反向列示)
与cat命令完全相反,文件的内容会从最后一行开始反向输出到屏幕
3.nl (添加行号打印)
nl 【选项参数】/文件路径/文件名
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的字符数。
2.可翻页显示内容
1. more (一页一页翻动)
[root@study ~]# more /etc/man_db.conf
#
#
# This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath(5) man page.
#
.....(中间省略).....
--More--(28%) <== 重点在这一行喔!你的光标也会在这里等待你的指令
- 如果文件内容比较多,就会出现上述情况,在最后一行会显示当前文件内容的显示百分比 ,而且在最后一行可以输出命令,进行下一步操作
空格键 (space)
:代表向下翻一页;Enter
:代表向下翻『一行』;/字符串
:代表在这个显示的内容当中,向下搜寻『字符串』这个关键词;【在文件内部查看信息时,搜索关键字也是这样的】:f
:立刻显示出文件名以及目前显示的行数;q
:代表立刻离开 more ,不再显示该文件内容。b 或 [ctrl]-b
:代表往回翻页,不过这动作只对文件有用,管道无用。q
:离开
2.less (一页一页翻动)
[root@study ~]# less /etc/man_db.conf
#
#
# This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath(5) man page.
#
.....(中间省略).....
: <== 这里可以等待你输入指令!
less 的用法比起 more 又更加的有弹性,在 more 的时候,我们并没有办法向前面翻,只能往后面看,但若使用了 less 时,就可以使用 pageup
和pagedown
等按键的功能来往前往后翻看文件了,除此之外,在 less 里头可以拥有更多的搜索功能
空格键
:向下翻动一页;[pagedown]
:向下翻动一页;[pageup]
:向上翻动一页;/字符串
:向下搜寻『字符串』的功能;?字符串
:向上搜寻『字符串』的功能;n
:重复前一个搜寻 (与 / 或 ? 有关!)N
:反向的重复前一个搜寻 (与 / 或 ? 有关!)g
:前进到这个资料的第一行去;G
:前进到这个数据的最后一行去 (注意大小写);q
:离开 less 这个程序;
⭐️⭐️ 可以发现,less 使用的画面与环境与 man page 非常的类似,因为 man
这个指令就是呼叫 less
来显示说明文件的内容的
3.局部截取内容
1.head (取出前面几行)
- 输出指定前几行的内容
head -n [行数] 文件
-n 选项后面的参数较有趣,如果接的是负数,例如上面范例的-n -100 时,代表第100列前的所有行数, 但不包括后面 100 行
2.tail (取出后面几行)
- 取出最后n行的内容
tail -n [行数] 文件
范例一:如果不知道/etc/man_db.conf 有几行,却只想列出 100 行以后的数据时?
[root@study ~]# tail -n +100 /etc/man_db.conf
- 动态探测文件内容
- 如果某个文件是在动态变化的,比如日志文件,就可以使用该命令,动态监测日志的变化
tail -f 文件
4.阅读非纯文本档: od
由于执行档通常是 binary file ,使用上头提到的指令来读取他的内容时, 确实会产生类似乱码的数据
[root@study ~]# od [-t TYPE] 文件
选项或参数:
-t :后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用默认的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes ;
f[size] :利用浮点数(floating)来输出数据,每个数占用 size bytes ;
o[size] :利用八进制(octal)来输出数据,每个整数占用 size bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes ;
范例一:请将/usr/bin/passwd 的内容使用 ASCII 方式来展现!
od -t c /usr/bin/passwd
范例二:请将/etc/issue 这个文件的内容以 8 进位列出储存值与 ASCII 的对照表
od -t oCc /etc/issue
四、修改文件时间或新建文件touch
文件的时间是很重要的,因为,如果文件的时间误判的话,可能会造成某些程序无法顺利的运作
在使用ls -l --time=[参数]
命令时,可以显示文件的时间信息,有关时间参数,主要有三种:
-
modification time (mtime)
:
当该文件的内容数据变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限在默认的情况下,ls 显示出来的是该文件的 mtime
-
status time (ctime)
:
当该文件的==状态 (status)==改变时,就会更新这个时间,例如文件的权限与属性被更改时,都会更新这个时间,⭐️值得注意的是:如果我们复制一个文件,即使是复制文件的所有属性,也没有办法使得ctime不变,应为ctime就是记录文件最新状态的时间属性
-
access time (atime)
:
当该文件的内容被取用时,就会更新这个读取时间 (access)。举例来说,我们使用 cat 去读取/etc/man_db.conf , 就会更新该文件的 atime 了。
使用touch
命令可以修改文件的时间属性,如果命令的对象是一个不存在的文件,则会创建一个以该名字命名的空文件
touch [-acdmt] 文件
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]
范例:将 bashrc 日期改为 2014/06/15 2:02
touch -t 201406150202 bashrc
范例:修bashrc 文件,将日期调整为两天前
touch -d "2 days ago" bashrc
五、文件归档压缩
归档:将多个文件整理为一个文件≠压缩
tar:tape archive磁带档案卷
功能项 | 命令 | 说明 |
---|---|---|
tar 归档 | tar -cvf hello.tar hello,txt 或者tar -cvf hello.tar /opt/heheda/* | 将hello.txt归档为hello.tar文件 -c:创建一个新的文件 v:显示归档过程细节(可以不写,如不写就不会显示归档过程) f:使用归档文件或 ARCHIVE 设备 |
tar -tf test.tar | 将归档文件test.tar 中的文件显示出来 | |
tar -xvf tset.tar | 提取归档文件中的内容 | |
gzip压缩 | gzip hello.tar | 将hello.tar文件进行压缩 |
gzip -d hello.tar.gz | 解压缩文件成tar.gz | |
归档压缩 加-z | tar -zcvf hello.tar.gz hello.txt | 将hello.txt归档压缩为hello.tar.zip |
tar -zxvf hello.tar.gz | 解压缩hello.tar.gz文件 | |
tar -zxvf 【压缩包文件名.tar.gz】 -C 【路径】 | 解压到指定目录 | |
zip/unzip | zip hello.zip hello.txt | 压缩hello.txt |
zip -r test.zip /opt/test | 递归压缩,将/opt/test目录压缩 | |
unzip -v hello.zip | 查看压缩文件hello.zip中的文件信息 | |
unzip hello.zip | 解压缩 |
r|d ↩︎