3_常用命令2

前言:
压缩文件原理、
常用压缩命令(zip、gzip、baip2、xz、tar)、
文件搜索 find、
sort 排序、
uniq 去重

导图


压缩和归档
压缩文件原理
  • 经过压缩软件压缩的文件叫压缩文件;

  • 压缩的原理是把文件的二进制代码压缩,把相邻的0、1代码减少,
    比如有000000,可以把它变成6个0 的写法60,来减少该文件的空间。

  • 还有的压缩,同样是在二进制数据里,将所以的0删除,压缩成压缩包,解压的过程中,会再次将0补充进去。

  • 压缩文件的基本原理:
    是查找文件内的重复字节,并建立一个相同字节的"词典"文件,并用一个代码表示,
    比如在文件里有几处有一个相同的词,用一个代码表示并写入"词典"文件,这样就可以达到缩小文件的目的。

  • 打包:即归档

  • 压缩:为了减少占用的磁盘空间,可以做备份,在网络上传输时节省网络带宽。

  • 常见打包压缩软件
    windows:winrar 360压缩 好压 7zip winzip
    linux:压缩格式:gz ,bz2,xz,zip

压缩算法不同,导致压缩比不同


常用压缩命令:
zip
压缩后的文件以.zip结尾,可以压缩目录  
压缩的语法:

zip filename.zip file1 file2 ...  
zip 压缩后的文件名 压缩文件  

压缩文件:
# zip test.zip test.txt

>PS: 压缩后不删除原文件

解压:unzip
-d:指定解压路径

# unzip test.zip -d /tmp
压缩目录操作相同


实例:
做一个100M大小的文件,用于测试压缩
# dd if=/dev/zero of=test.txt bs=100M count=1

gzip
gzip ./testfile
默认会删除原文件

-d 解压缩  
-n: 指定压缩比,压缩比越小,速度越大  
压缩级别:1~9;  1级别最低,速度最快,压缩率最低;9级 别最高,速度最慢,压缩最高;默认级别是6  

不解压的情况下查看文本的压缩文件
zcat testfile 

默认后缀名:.gz
gzip压缩时,原文件消失,生成压缩文件
解压:gunzip
gzip的压缩包,在解压后,压缩包消失,解压后的文件出现
bzip2
默认情况下,压缩完成,原文件也是消失的,压缩包必须以.bz2结尾的

通常能够生成比使用gzip压缩更小的文件(压缩比较高)

1)压缩
# bzip2 testfile
-d:解压
-n:指定压缩比
-k:保留原文件

2)解压
bunzip2 testfile

3) 不解压查看
bzcat testfile

xz
1) 压缩
# xz testfile

2)解压
# unxz testfile
或
# xzdec -d testfile

-k: 保留原文件
-c: 输入到屏幕

3) 不解压查看
# xzcat testfile

tar
既可以打包,又可以压缩

tar 选项 打包名 打包的文件或目录 

注:注意语法格式,先是打包后的名字,然后才是要打包的东西

选项描述
-c创建归档文件
-f指定备份文件
-x展开归档
-C解压时指定路径
-v显示详细过程
-p保留权限信息
-t不展开归档,查看归档文件
-r向包中追加文件,不能追加压缩的文件
-z表示使用gzip压缩方式压缩或者解压缩
-j表示使用bzip2压缩方式压缩或者解压缩
-f指定文件,一般后面跟包名
–xattrs归档时,保留文件的扩展属性信息
1、压缩
-zcvf zcvf .tar.gz
-jcvf jcvf .tar.bz2
# tar zcf testfile.tar.gz ./testfile

2、解压
# tar zxf testfile.tar.gz -C ./testfile

3、不解压查看
# tar -tf testfile.tar.gz

4、追加文件
# tar -rf 包名 追加的文件
# tar -rf testfile.tar.gz add.txt

注:不能追加压缩文件
# tar -zcf  testfile.tar.gz testfile    ON
# tar -cf  testfile.tar.gz testfile     YES


文件搜索
别名
  • 1 查看别名
    # alias
  • 2 设置别名
    1)临时
    # alias vi='vim'
    2)永久,在配置文件中添加
    # vim ~/.bashrc
  • 3、取消别名
    # unalias vi
补充:which 用来查找命令的绝对路径
find

–全局性搜索文件
–工作方式:沿着文件的层次结构依次向下搜索,找到符合条件的,打印或者是执行相应的操作

  • 注:find 命令我用的最多是按照文件名才搜索,按照其他方式搜索,可以作为参考,部分地方可能有错误,用的时候需要改

  • 语法格式
    find <路径> <选项(条件)> <动作>
    一般情况下,查找范围越大,目录层级越深,查找速度就越慢

  • 按照文件名搜索

-iname:忽略大小写

通配符:
*代表任意字符
?代表单个字符举例:

查找/etc目录下,所有以.conf结尾的文件
# find /etc/ -name *.conf

查找/etc目录下,包含conf的文件
# find /etc/ -name *conf*

查找/etc/目录下,以.conf结尾,名称是5个字符的
# find /etc/ -name ?????.conf
  • 按照文件类型查找
f:普通文件

查找/var目录下类型是链接的文件
# find /var -type l

查找系统中类型是套接字的文件
# find / -type s

查找的时候,可能会遇到No such file or directory的错误提示,是正常的
若不想看到可以将错误重定向到“黑洞”(/dev/null)
# find / -type s 2> /dev/null
  • 按照时间查找
-atime n	以天为单位
-ctime n
-mtime n

一个文件有三个时间:
atime:访问时间,cat more less ... ...
mtime:文件的内容发生变化的时间 vim ... ... (也是 ll 所显示的时间)
ctime:文件的属性发生变化的时间 比如:权限改变、大小改变、所有者、所属组等改变

-amin n 以分钟为单位
-cmin n
-mmin n

以n等于7为例:
搜索最近七天内被访问过的所有文件
find . -type f -atime -7

搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7

搜索超过七天内被访问过的所有文件
find . -type f -atime +7

搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
  • 按照用户和组查找
-user 用户名
-group 组名
-uid uid
-gid gid

-nouser:孤儿文件 没有所有者的文件
-nogroup:没有所属组的文

举例:
查找系统中所有者是 user1的文件
# find / -user user1 -type f

查找系统中的孤儿文件
# userdel user1
# find . -type f -nouser

取反
查找 当前目录中 文件名不是testfiles的文件
# find ./ ! -name testfiles

添加多个条件
查找系统中所有者不是root或者类型是套接字的文件
# find / ! -user root -o -type s
  • 按照权限查找
/222 或者 (用户可写or组可写or其他人可写) 二进制中有1的位置,只要满足其中一个位就可以

-222 并且 (用户可写and组可写and其他人可写) 二进制中有1的位置必须都要有1

# cd /find/
[find]# touch p{r,w,x}_{1,2,3}
[find]# chmod 400 pr_1
[find]# chmod 440 pr_2
[find]# chmod 444 pr_3
[find]# chmod 200 pw_1
[find]# chmod 220 pw_2
[find]# chmod 222 pw_3
[find]# chmod 100 px_1
[find]# chmod 110 px_2
[find]# chmod 111 px_3

查找find目录下,小组权限为可写的文件
# ll `find ./	-perm -g=w -type f`
--w--	w----	. 1	root root 0	Mar	31 14:38 ./pw_2
--w--	w--	w-. 1	root root 0	Mar	31 14:38 ./pw_3

# ll `find ./	-perm /g=w -type f`
--w--	w----	. 1	root root 0	Mar	31 14:38 ./pw_2
--w--	w--	w-. 1	root root 0	Mar	31 14:38 ./pw_3

查找find目录下,用户可写and组可写and其他人可写的文件
[find]# ll `find ./ -perm -222 -type f`
--w--w--w- 1 root root 0 Aug 13 15:13 ./pw_3

查找find目录下,用户可写or组可写or其他人可写
[find]# ll `find ./ -perm /222 -type f`
--w	-------	1	root root 0	Aug 13 15:13 ./pw_1
--w	--w----	1	root root	0	Aug	13 15:13 ./pw_2
--w	--w--	w- 1	root root	0	Aug	13 15:13 ./pw_3
  • 按照文件大小查找
+大于
-小于
直接数字 等于

‘b’ for 512-byte blocks (this is the default if no suffix is used) //0.5KB
‘c’ for bytes
‘w’ for two-byte words
‘k’ for Kilobytes (units of 1024 bytes)
‘M’ for Megabytes (units of 1048576 bytes)
‘G’ for Gigabytes (units of 1073741824 bytes)

举例:
[find]# rm -f /find/*
[find]# dd if=/dev/zero of=f1M bs=1M count=1
[find]# dd if=/dev/zero of=f2M bs=1M count=2
[find]# dd if=/dev/zero of=f3M bs=1M count=3
[find]# dd if=/dev/zero of=f4M bs=1M count=4

查找目录下,文件大小小于3M大小的文件
[find]# find . -type f -size -3M
./f2M
./f1M

查找目录下,文件大小等于3M大小的文件
[find]# find . -type f -size 3M
./f3M

查找目录下,文件大小大于3M大小的文件
[find]# find . -type f -size +3M
./f4M
  • 动作
-exec 动作 -- 找到结果之后直接执行动作
-ok 动作	-- 执行动作之前先提示,即需要交互

举例:
[find]# find . -type f -size +3M -exec ls -l {} \;
-rw-r--r-- 1 root root 4194304 Aug 13 15:51 ./f4M

[find]# find . -type f -size +3M -ok ls -l {} \;
< ls ... ./f4M > ? y
-rw-r--r-- 1 root root 4194304 Aug 13 15:51 ./f4M

[find]# find . -type f -size +3M -ok ls -l {} \;
< ls ... ./f4M > ? n

练习:
1、查找/find目录下,类型是 普通文件的文件将其移动到/test目录下
[find]# find . -type f -exec mv {} /test \;

[find]# ls /test
f1M f2M f3M f4M
或者

[find]# mv `find . -type f` /test


2、查找/test目录下类型为普通文件的文件,对其进行备份,备份文件的后缀名为.bak
[find]# find /test -type f -exec cp {} {}.bak \;
[find]# ls /test
f1M f1M.bak f2M f2M.bak f3M f3M.bak f4M f4M.bak

3、删除/test目录下修改时间在一天以内的普通文件
[find]# find /test/ -type f -mtime -1 -exec rm {} \;


sort 排序

-t:指定字段分隔符
-k:指定第几个字段
-n:按照数字顺序排序
-r:反向排序
-u:排序后重复行只打印一次 unique

# cat sort.txt
b:3
c:2
a:4
e:5
d:1
f:11

对输出内容直接排序,默认按照每行的第一个字符进行排序
# cat sort.txt | sort
a:4
b:3
c:2
d:1
e:5
f:11

对输出内容进行反向排序
# cat sort.txt | sort -r
f:11
e:5
d:1
c:2
b:3
a:4

使用 ":" 做分隔符,对第2个字段进行排序
# cat sort.txt | sort -t ":" -k 2
d:1
f:11
c:2
b:3
a:4
e:5

使用 ":" 做分隔符,对第2个字段进行排序,按照数字大小排序
# cat sort.txt | sort -t ":" -k 2 -n
d:1
c:2
b:3
a:4
e:5
f:11


对/etc/passwd文件按照uid来排序
# sort -t ":" -k 3 -n /etc/passwd

对passwd文件按照uid由大到小的顺序排序
# sort -t ":" -k 3 -nr /etc/passwd

按照gid由小到大的顺序打印/etc/group
# sort -t: -k 3 -n /etc/group

uniq 去重,唯一

去除相邻重复行
-c: 显示重复的行数
-i: 忽略大小写

# uniq num.txt
111
222
333
444
222
555

使用uniq时,一般先排序,再去重
# sort num.txt | uniq
111
222
333
444
555

[loring test]# sort num.txt | uniq -c
1 111
3 222
2 333
1 444
1 555
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值