管道符 |
命令 | 命令
管道符是一种用于连接两个命令的特殊符号,用于将一个命令的输出作为另一个命令的输入。
当两个命令使用管道符连接时,第一个命令的输出会被发送到操作系统中的管道中,然后作为第二个命令的输入。
举例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)算法进行压缩,只能压缩单个文件。