管道,文件查找与打包压缩解压

管道符  | 

命令  |   命令

 管道符是一种用于连接两个命令的特殊符号,用于将一个命令的输出作为另一个命令的输入。

当两个命令使用管道符连接时,第一个命令的输出会被发送到操作系统中的管道中,然后作为第二个命令的输入。

举例1:我想查询所有已经安装的软件包,接着过滤出其中含有file的文件

[root@localhost ~]# rpm -qa | grep 'file'
firewalld-filesystem-0.6.3-11.el7.noarch
filesystem-3.2-25.el7.x86_64
rootfiles-8.1-11.el7.noarch
file-5.11-37.el7.x86_64
vim-filesystem-7.4.629-8.el7_9.x86_64
file-libs-5.11-37.el7.x86_64
fontpackages-filesystem-1.44-8.el7.noarch

举例2:我想查询进程,并过滤其中含有nginx 的进程

[root@localhost ~]# ps -aux | grep 'nginx'
nginx      1058  0.0  0.6 342952 49636 ?        S    12:28   0:04 php-fpm: pool www
nginx      1059  0.0  0.4 247792 36860 ?        S    12:28   0:04 php-fpm: pool www
root      30043  0.0  0.0  20588   644 ?        Ss   14:49   0:00 nginx: master process /usr/sbin/nginx
nginx     30044  0.0  0.0  21036  1832 ?        S    14:49   0:00 nginx: worker process
root      83800  0.0  0.0 112824   976 pts/2    S+   19:16   0:00 grep --color=auto nginx

举例3:将/etc/passwd中的用户 以:来分割,然后将第3列按数字大小升序并且看前10行。

[root@localhost ~]# sort -t':' -k3 -n /etc/passwd  | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

举例4:将/etc/passwd中的用户以:来分割,然后将第四行按照数字大小来升序并且只看倒数后10行

[root@localhost ~]# sort -t':' -k4 -n /etc/passwd | tail
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
mysql:x:997:995::/home/mysql:/bin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
zyq:x:1000:1000:zyq:/home/zyq:/bin/bash
nginx:x:1001:1001::/home/nginx:/sbin/nologin

将/etc/passwd中的用户以: 来分割,然后将第三行按照数字大小来降序并且只看倒数后6行

[root@localhost ~]# sort -t':' -k3 -n  /etc/passwd -r | tail -6
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

附加:sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序。      sort默认是升序,当一条命令中存在 sort ,-r时系统执行降序命令!
head 默认输出前十行
tail 默认输出后十行

举例5:查看端口和进程的信息,然后将第四行的第四列打印出来之后以:为分隔符,打印第二行输出到终端

[root@localhost ~]# netstat -lntp | awk 'NR==4 {print$4}' | awk -F':' '{print $2}' 
80

参数传递  xargs

对:ls cp rm  管道不能执行。所以通过xargs。

 语法:
 cat a.txt | xargs  -i cp {} /目录  
  后面的/ 可有可无 不影响文件最后的保存   在哪路径下执行的命令 最后的结果就在哪
 {}:前面传过来的内容
 -i :为了让大括号生效
 目录时  -r
 解释:前面传过来的东西交给大括号
 

例子

[root@localhost ~]# touch /opt/file.txt
[root@localhost ~]# vim /opt/file.txt 
[root@localhost ~]# cd /home
[root@localhost home]# cat /opt/file.txt  | xargs -i touch {}
[root@localhost home]# ls
a  b  c  zsb

在file.txt内写入  a  b   c ,执行cat /opt/file.txt  | xargs -i touch {},此命令管道后执行 将file.txt的内容挨个放入{}中,执行touch命令,最后此命令执行的路径在哪 最后的结果就在哪.我执行此命令的当前路径在/home下,因此就在home下.

例子:

创建目录也是,将/opt/file.txt里写入zx,ml,gbs,zyq 

[root@localhost tmp]# vim /opt/file.txt 
[root@localhost tmp]# cat /opt/file.txt  | xargs -i mkdir {}
[root@localhost tmp]# ls
gbs               zx
ml                zyq

例子:

root@localhost home]# vim /opt/file.txt 
/home/file1
/home/file2
/home/file3
                                                                                             
"/opt/file.txt" 3L, 36C                   
[root@localhost home]# cat /opt/file.txt | xargs ls -l
-rw-r--r--. 1 root root 0 9月   5 18:45 /home/file1
-rw-r--r--. 1 root root 0 9月   5 18:45 /home/file2
-rw-r--r--. 1 root root 0 9月   5 18:45 /home/file3

查看目录以及目录中的文件的大小 

   比如 我想看/usr/local/nginx一共有多大

[root@localhost ~]# du -h /usr/local/nginx/
4.0K    /usr/local/nginx/run
3.0M    /usr/local/nginx/html/wp-admin/includes
168K    /usr/local/nginx/html/wp-admin/js/widgets
2.1M    /usr/local/nginx/html/wp-admin/js
84K     /usr/local/nginx/html/wp-admin/css/colors/coffee
92K     /usr/local/nginx/html/wp-admin/css/colors/ectoplasm
92K     /usr/local/nginx/html/wp-admin/css/colors/sunrise

查看目录的总大小   

 我想看/etc一共有多大

[root@localhost ~]# du -sh /etc
32M     /etc

查看目录中有多少个文件,并以数字的形式显示出来

看/usr下一共有多少个文件,具体数字

[root@localhost ~]# ls /usr/   | wc -l
12

文件的查找

按照文件名来查找

详细语法:# find 路径 条件 跟条件相关的操作符   [-exec 动作]
路径:1.默认不写路径时查找的是当前路径.


  举例1:查找/usr/local目录下,名字带有s的文件

[root@localhost ~]# find  /usr/local/ -name '*s*'

以名字的方式查找     查找/etc下 名字为ifcfg-ens33的文件

[root@localhost ~]# find /etc -name 'ifcfg-ens33'
/etc/sysconfig/network-scripts/ifcfg-ens33

以 名字的方式查找,查找/etc  下名为Fast的文件  忽略大小写

[root@localhost ~]# find /etc -iname '*Fast*'
/etc/yum.repos.d/CentOS-fasttrack.repo
/etc/yum/pluginconf.d/fastestmirror.conf
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default

按文件的大小来查找     -size

举例:我想查找根下 大于2M并且小于5M的文件

[root@localhost ~]# find / -size +2M -a -size -5M
/boot/grub2/fonts/unicode.pf2
/boot/System.map-3.10.0-1160.el7.x86_64
/boot/System.map-3.10.0-1160.95.1.el7.x86_64

-a的a是and的意思,与

举例2:我想查找根下 大于3M或者小于1M的文件

[root@localhost ~]# find / -size +3M -o -size -1M

-o是or的意思 或者

按照时间来查找

-atime  访问时间

-mtime  内容修改时间

-ctime    文件属性修改时间

-amin    #时间

-mmin

-cmin

[root@localhost home]# find / -atime +5

语法:   find   /  -atime  +5 

/后面跟路径,不写默认是当前路径,写.是当前路径

+5 是5天之前

-5 是5天之内 

[root@localhost home]# find / -amin +1

语法: find / -amin +1

/后面跟路劲, -amin是访问时间   +1是一分钟之前

按照文件类型寻找:

普通文件  f 

[root@localhost home]# find / -type f

目录  d

[root@localhost home]# find / -type d

软连接  l

[root@localhost home]# find / -type l

块设备  b

[root@localhost home]# find / -type b
举例:寻找根下 大于5M 文件类型是普通文件 或者以'*.txt'结尾的文件 
[root@localhost home]# find / -size +5M -type f -o  -name '*.txt'

按文件权限查找 -perm

[root@localhost home]# find /usr/bin -perm -644

语法: find  /  -perm  000

000是文件的权限

[root@localhost home]# find /usr/bin -perm -4000

高级权限   sgid  suid  sticky

找到文件后的操作

[root@localhost home]# find /etc -name 'ifcfg*' -exec cp -rf {} /tmp \;

找/etc下 名字以ifcfg开头的文件,找到后将这些文件复制到/tmp下

{} 是前面找到的内容   

\;是 -exec的格式    若是xargs不需要

[root@localhost ~]# touch /home/file{1..20}.txt   ---创建20个文件


[root@localhost ~]# find  /home/ -name "*.txt" | xargs -i cp {}  /opt
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
dir         file12.txt  file15.txt  file18.txt  file20.txt  file4.txt  file7.txt
file10.txt  file13.txt  file16.txt  file19.txt  file2.txt   file5.txt  file8.txt
file11.txt  file14.txt  file17.txt  file1.txt   file3.txt   file6.txt  file9.txt


   ------找到/home下以.txt结尾的文件  找到后交给xargs 拷贝到/opt下

xargs语法     :  xargs  -i {} + 命令 必须有 -i和{} ,{}是将前面命令产生的结果依次放入括号中执行.

xargs和exec的区别

-exec:参数是一个一个传递的,传递一个参数执行一次命令。
xargs:将前一个命令的标准输出传递给下一个命令,作为它的参数转换成下一个命令的参数列表。
===============
1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好; 
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \来转义; 作为命令的结束符,书写不便。 
3、xargs不能操作文件名有空格的文件;

综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,那么使用 xargs比较方便; 否则,就要用 exec了。

打包压缩解压

打包:tar cf   filename.tar  filename(被打包的文件)

压缩: bzip  :     bzip2   filename

             gzip:       gzip  filename

解压 :  bzip :    bzip2 -d filename.bz2

                             bunzip  filename.bz2

           gzip:      gzip -d filename.gz

                           gunzip  filename.gz

打包压缩一起: gzip: tar czf filename.tar.gz  源文件

                            bzip:  tar  cjf  filename.tar.bz2  源文件

                            xzip: tar   cJf  filename.tar.xz   源文件

解压解包一起并指定到特定位置:

                                         gzip:  tar xzf filename.tar.gz  -C  /位置

                                          bzip:   tar xjf filename.tar.bz2  -C /位置

                                         xzip :   tar  xJf filename.tar.xz  -C /位置

打包到指定路径并且名字以当前时间命名:

tar czf /指定路径`date +%F`-filename.tar.gz  filename

      指定路径与`date`   filename之间没有空格,且与filename要用-连接起来

gzip、bzip2和xz都是常见的文件压缩工具,它们各自有各自的优缺点和特点。

gzip:
优点:压缩速度较快,占用系统资源较少。
缺点:压缩率相对较低,生成的压缩文件略大。
区别:gzip使用DEFLATE算法进行压缩,只能压缩单个文件。

bzip2:
优点:较高的压缩率,生成的压缩文件较小。
缺点:压缩速度较慢,占用系统资源较多。
区别:bzip2使用Burrows-Wheeler变换和霍夫曼编码进行压缩,只能压缩单个文件。

xz:
优点:最高的压缩率,生成的压缩文件最小。
缺点:压缩速度最慢,占用系统资源最多。
区别:xz使用LZMA(改进的Lempel-Ziv-Markov chain-Algorithm)算法进行压缩,只能压缩单个文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值