重定向和文件查找

目录

  • 文件描述符
  • 重定向的含义
  • 管道的使用、tee命令
  • which、whereis、locate、grep、find查找命令
  • 命令判断

文件描述符

文件描述符:是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行 I/O 操作
的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被迚程所打开的文件,程序刚
刚启动的时候,第一个打开的文件是 0,第二个是 1,依此类推。也可以理解为是一个文件的身份 ID
用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标,显示器)在这里插入图片描述
这三个文件描述符对应了我们三个目标文件
在这里插入图片描述
我们每使用一个进程,都会在/proc目录下产生一个以进程ID号作为名称的目录,这个目录里面有文件描述符。
进程在运行的过程中,我们可以查看到这个目录,当我进行运行完毕,目录也自动删除。

例:查看vim进程打开了那些文件

[root@xuegod140 ~]# vim /etc/passwd
setroubleshoot: x:995:992::/var/lib/setroubleshoot:/sbin/nologin
rtkit: x:172:172:RealtimeKit:/proc:/sbin/nologin
chrony: x:994:991::/var/lib/chrony:/sbin/nologin
rpcuser: x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
[root@xuegod140 ~]# ps -aux | grep vim | grep -v grep #不关闭vim,打开另外一个终端,查看vim的进程ID号
root 1839 0.3 0.1 151384 5224 pts/0 S+ 12:35 0:00 vim /etc/passwd
[root@xuegod140 ~]# ll /proc/1839/fd #可以看到有四个文件描述符
total 0
lrwx------ 1 root root 64 Apr 4 12:36 0 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 4 12:36 1 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 4 12:36 2 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 4 12:36 4 -> /etc/.passwd.swp

每一个进程启动时,都会打开这三个文件:标准输入、标准输出、错误输出。这三个文件分别对应0、1、2也就是宏替换STDIN_FILENO、STDOUT_FILENO 和STDERR_FILENO(参考图1)
注:对文件描述符的操作,就是对文件本身的操作

命令:ulimit
查看和临时设置一个进程最多可以打开几个文件,即:一个进程可以打开的文件描述符限制

  • n:查看进程最多可以打开的文件数,后跟数字可以直接修改数量

[root@xuegod140 ~]# ulimit -n #查看最多可以打开文件的个数
1024
[root@xuegod140 ~]# ulimit -n 2048 #修改为2048
[root@xuegod140 ~]# ulimit -n
2048

重定向的含义

1、输出重定向:
定义:将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上重定向输出使用”>” “>>” 操作符号
语法: > 文件名 #表示将标准输出的内容,写到后面的文件中,如果此文件名已经存在,将会覆盖原文件中的内容
>> 文件名 #表示将标准输出的内容,追加到后面的文件中。若重定向的输出的文件不存在,则会新建该文件

1)查看当前主机内核的版本信息,保存到a.txt文件

[root@xuegod140 ~]# uname -a #显示到屏幕中
Linux xuegod140.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@xuegod140 ~]# ls *.txt
ls: cannot access *.txt: No such file or directory
[root@xuegod140 ~]# uname -a > a.txt #当前目录下没有a.txt文件,保存的时候最自动创建a.txt
[root@xuegod140 ~]# cat a.txt
Linux xuegod140.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

2)查看hosts文件内容,并追加到a.txt中

[root@xuegod140 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@xuegod140 ~]# cat /etc/hosts >> a.txt #>>表示将前面的命令执行的结果追加到a.txt
[root@xuegod140 ~]# cat a.txt
Linux xuegod140.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

3)使用输出重定向>,清空a.txt

[root@xuegod140 ~]# cat a.txt
Linux xuegod140.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@xuegod140 ~]# > a.txt
[root@xuegod140 ~]# cat a.txt

2、输入重定向:
将命令中接收输入的途径由默认的键盘改为其他文件.而不是等待从键盘输入

1)使用输入重定向,过滤passed文件中包含root的行

[root@xuegod140 ~]# grep root < /etc/passwd
root❌0:0:root:/root:/bin/bash
operator❌11:0:operator:/root:/sbin/nologin

2)使用输入重定向,过滤passwd文件中,包含root或nologin的行数

[root@xuegod140 ~]# grep “root” < /etc/passwd
root❌0:0:root:/root:/bin/bash
operator❌11:0:operator:/root:/sbin/nologin
[root@xuegod140 ~]# grep “nologin” < /etc/passwd | wc -l
39
[root@xuegod140 ~]# grep “root|nologin” < /etc/passwd | wc -l #总计40行
40

3、EOF
EOF 本意是 End Of File,表明到了文件末尾。”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子 shell 的输入,直到遇到”EOF“,再次返回到主调 shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然是不固定的,这里可以将”EOF“自定义,但是前后的”EOF“必须成对出现且不能和 shell 命令冲突

1)以<<EOF开始,以<<EOF结尾

[root@xuegod140 ~]# cat > a.txt << EOF
aaaa
bbbb
cccc
eof
EOF
[root@xuegod140 ~]# cat a.txt
aaaa
bbbb
cccc
eof

2)以<<end开始,以<<end结尾

[root@xuegod140 ~]# cat > a.txt << end
dddd
eeee
ffff
eof
EOF
end
[root@xuegod140 ~]# cat a.txt #源文件如果存在,直接覆盖源文件里的内容
dddd
eeee
ffff
eof
EOF

3)在脚本里,通过输入重定向来打印菜单消息
编写脚本的时候,如使用如下两种输入都可以,但是可以看出第一种更加方便

在这里插入图片描述
在这里插入图片描述
4、错误重定向
将命令执行过程中出现的错误信息 (选项或参数错误) 保存到指定的文件,而不是直接显示到显示器
作用:错误信息保存到文件
操作符: 错误重定向符号:2>
标准输入: 0< 或简写 <
标准输出: 1> 或简写 >
在实际应用中,错误重定向可以用来收集执行的错误信息.为排错提供依据;对于 shell 脚本还可以将无关紧要的错误信息重定向到空文件/dev/null 中,以保持脚本输出的简洁

1)将正确和错误的显示信息,分开重定向到文件

[root@xuegod140 ~]# ll xx /etc/passwd
ls: cannot access xx: No such file or directory
-rw-r–r-- 1 root root 2366 Apr 1 19:54 /etc/passwd
[root@xuegod140 ~]# ll xx /etc/passwd > ok.txt 2> err.txt #直接覆盖文件里面的内容,如果需要不覆盖,可以使用>>
[root@xuegod140 ~]# cat ok.txt
-rw-r–r-- 1 root root 2366 Apr 1 19:54 /etc/passwd
[root@xuegod140 ~]# cat err.txt
ls: cannot access xx: No such file or directory

5、null黑洞和zero空文件
把/dev/null 看作"黑洞",所有写入它的内容都会永久丢失. 而尝试从它那儿读取内容则什么也读不到. 然而 /dev/null 对命令行和脚本都非常的有用
/dev/zero 在类 UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。典型用法是用它来产生一个特定大小的空白文件

命令:dd
作用:用于复制文件并对原文件的内容进行转换和格式化处理

  • if:输入文件,如果不指定if,默认会从stdin中读取输入
  • of:输出文件,如果不指定of,默认会从stdout作为默认输出
  • bs:字节为单位的大小
  • count:复制的块数

1)创建空白文件,作为设备文件来使用

[root@xuegod110 ~]# dd if=/dev/zero of=/opt/sdb1 bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.890075 秒,118 MB/秒
[root@xuegod110 ~]# ll -h /opt/sdb1
-rw-r–r-- 1 root root 100M 4月 4 14:16 /opt/sdb1
[root@xuegod110 ~]# mkfs.xfs /opt/sdb1
meta-data=/opt/sdb1 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@xuegod110 ~]# mkdir /sdb1
[root@xuegod110 ~]# mount /opt/sdb1 /sdb1/
[root@xuegod110 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 10G 6.0G 4.1G 60% /
tmpfs tmpfs 992M 11M 982M 2% /run
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt
/dev/sda1 xfs 197M 133M 65M 68% /boot
/dev/loop0 xfs 97M 5.2M 92M 6% /sdb1

2)清空删除分区残留的痕迹
一般情况下,我们将数据删除后,还有留有痕迹,可以找回。我们使用dd命令和zero文件,清空分区

[root@xuegod110 ~]# lsblk #sda4未挂载
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
├─sda3 8:3 0 10G 0 part /
└─sda4 8:4 0 100M 0 part
sr0 11:0 1 4.2G 0 rom /mnt
[root@xuegod110 ~]# mkfs.xfs /dev/sda4 #格式化分区
meta-data=/dev/sda4 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@xuegod110 ~]# mount /dev/sda4 /sda4 #挂载分区
[root@xuegod110 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
├─sda3 8:3 0 10G 0 part /
└─sda4 8:4 0 100M 0 part /sda4
sr0 11:0 1 4.2G 0 rom /mnt
[root@xuegod110 ~]# umount /dev/sda4 /sda4
[root@xuegod140 ~]# dd if=/dev/zero of=/dev/sda4 bs=10M count=10
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 2.44779 s, 42.8 MB/s

3)使用dd备份文件

[root@xuegod110 ~]# dd if=/etc/passwd of=/opt/passwd.bak
记录了4+1 的读入
记录了4+1 的写出
2284字节(2.3 kB)已复制,0.000243422 秒,9.4 MB/秒
[root@xuegod110 ~]# ll /opt/passwd.bak
-rw-r–r-- 1 root root 2284 4月 4 14:31 /opt/passwd.bak

4)将passwd文件,重定向到null

[root@xuegod140 ~]# cat /dev/null
[root@xuegod140 ~]# cat /etc/passwd > /dev/null
[root@xuegod140 ~]# cat /dev/null

5)使用dd命令,生成一个100M大小的文件

[root@xuegod140 ~]# dd if=/dev/zero of=/opt/a.txt bs=10M count=10
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 1.40438 s, 74.7 MB/s
[root@xuegod140 ~]# ll -h /opt/a.txt
-rw-r–r-- 1 root root 100M Apr 4 13:28 /opt/a.txt

6、&>和>&符号
&:表示等同于的意思
把正确和错误的消息输入到相同的文件
1>&2 :把标准输出重定向到标准错误
2>&1 :把标准错误重定向到标准输出
上述两种类型,可以总结为一个参数:&>

例:将错误和正确的信息重定向到a.txt

[root@xuegod110 ~]# ll xxx /etc/passwd &> a.txt
[root@xuegod110 ~]# cat a.txt
ls: 无法访问xxx: 没有那个文件或目录
-rw-r–r-- 1 root root 2284 4月 2 09:32 /etc/passwd

管道的使用

1、管道|命令的使用

  • 管道命令只处理前一个命令正确输出,不处理错误输出;
  • 管道右边的命令,必须能够接受标准输入的数据流命令才行;
  • 管道符可以把两条命令连起来,它可以链接多个命令使用

[root@xuegod140 ~]# cat /etc/passwd | grep “nologin|root” | wc -l
40

2、tee命令
功能:把数据重定向到给定文件和屏幕上。
参数:

  • a:向文件中重定向时使用追加模式
  • i:忽略中断(interrupt)信号

1)查看passwd内容,输入到a.txt并显示到屏幕

[root@xuegod140 ~]# cat /etc/passwd | tee a.txt | less
[root@xuegod140 ~]# diff /etc/passwd a.txt
[root@xuegod140 ~]# echo $?
0

2)查看hosts文件,追加到a.txt

[root@xuegod140 ~]# cat /etc/hosts | tee -a a.txt
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@xuegod140 ~]# diff /etc/passwd a.txt
46a47,48
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

which、whereis、locate、grep、find查找命令

1、which命令
查找命令是否存在,以及执行的到底是哪一个位置的命令。

例:查看find命令位于那个目录下

[root@xuegod140 ~]# which find
/usr/bin/find

2、whereis命令
用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

例:查看find命令相关的文件

[root@xuegod140 ~]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz /usr/share/man/man1p/find.1p.gz

3、locate命令
locate命令和slocate命令都用来查找文件或目录。
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。相关配置文件/etc/updatedb.conf,查看定时任务信息在/etc/cron.daily/mlocate

[root@xuegod140 opt]# locate a.txt
/home/zx/.a.txt.swp
/root/a.txt
/usr/share/doc/vim-common-7.4.160/README_extra.txt
/usr/share/gnupg/help.ca.txt
/usr/share/gnupg/help.da.txt
/usr/share/gnupg/help.ja.txt
/usr/share/libhangul/hanja/hanja.txt
/usr/share/systemtap/examples/io/eatmydata.txt
/usr/share/vim/vim74/doc/ft_ada.txt.gz
/usr/share/vim/vim74/doc/if_lua.txt.gz
/usr/share/vim/vim74/doc/os_amiga.txt.gz
/usr/share/vim/vim74/doc/uganda.txt.gz
[root@xuegod140 opt]# touch a.txt
[root@xuegod140 opt]# locate a.txt | grep /opt/
[root@xuegod140 opt]# updatedb
[root@xuegod140 opt]# locate a.txt | grep /opt/
/opt/a.txt

4、grep命令
过滤,它能够使用正则表达式来搜索文本,并把结果打印出来。
参数:

  • v:取反
  • i:忽略大小写
  • ^#:以#开头
  • #$:以#结尾
  • ^$:空行
  • n:过滤的内容加上行号
  • |:或者
  • c:过滤内容有几行

参数从上倒下以此演示:

[root@xuegod140 ~]# ps -aux | grep vim
root 4909 0.5 0.1 151520 5200 pts/0 S+ 19:33 0:00 vim a.txt
root 4911 0.0 0.0 112704 968 pts/1 S+ 19:33 0:00 grep --color=auto vim
[root@xuegod140 ~]# ps -axu | grep vim | grep -v grep #不显示包含grep的行
root 4909 0.1 0.1 151520 5200 pts/0 S+ 19:33 0:00 vim a.txt
[root@xuegod140 ~]# echo aabbccAAABBBCCC > a.txt
[root@xuegod140 ~]# cat a.txt | grep -i a #有颜色区分,aaAAA
aabbccAAABBBCCC
[root@xuegod140 ~]# cat a.txt | grep a #颜色区分,aa
aabbccAAABBBCCC
[root@xuegod140 ~]# cat /etc/login.defs | grep -c ^# #以#开头有几行
45
[root@xuegod140 ~]# cat /etc/login.defs | grep -c e$ #以e结尾有几行
4
[root@xuegod140 ~]# cat /etc/login.defs | grep -c ^$ #总共有几行空行
10
[root@xuegod140 ~]# cat /etc/passwd | grep -n root #过滤的内容加上行号
1:root❌0:0:root:/root:/bin/bash
10:operator❌11:0:operator:/root:/sbin/nologin
[root@xuegod140 ~]# grep -c “nologin|root” /etc/passwd #统计过滤内容有几行
40
[root@xuegod140 ~]# grep “nologin|root” /etc/passwd | wc -l #统计过滤内容有几行
40
[root@xuegod140 ~]# egrep -c “nologin|root” /etc/passwd #高级过滤不需要加转义符
40

5、find命令
作用:在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
参数:

  • name:按照文件名查找
  • perm:按照权限查找
  • size:按照文件大小查找;+n大于多少;-n小于多少;n表示数字
  • mtime:按照文件更改时间查找;+n表示多少天以前;-n表示多少天以内;n表示数字
  • user:按照文件属主来查找
  • group:按照文件所属组查找
  • type:按照文件类型查找;b块设备文件;d目录;c字符设备文件;p管道文件;l链接文件;f普通文件
  • exec:对匹配的文件执行该参数所给出的其它Linux命令,相应命令的形式为’命令 {} ; {}表示查到的内容
  • maxdepth n:查找目录的深度;n表示数字。1表示1级目录
  • a:and 并且
  • o:or 或者
  • +:超过
  • -:低于
    1)查找当前目录下所有txt格式的文件有几个

[root@xuegod140 ~]# find ./ -name “*.txt” | wc -l
10

2)使用perm权限查找

[root@xuegod140 ~]# find ./ -perm 755 | wc -l
81
[root@xuegod140 ~]# find ./ -perm -755 | wc -l #权限前面加-,表示不低于755
82
[root@xuegod140 ~]# find ./ -perm 644 | wc -l
65
[root@xuegod140 ~]# mkdir 1755
[root@xuegod140 ~]# chmod 1755 1755/
[root@xuegod140 ~]# find ./ -perm 1755
./1755

3)使用size查找文件大小

[root@xuegod140 ~]# find ./ -size +20k -a -size -50k | wc -l #大于20k,小于50k的文件有几个
4

4)使用mtime查找更改时间

[root@xuegod140 ~]# find ./ -mtime +3 -a -mtime -10 | wc -l #更改时间是3天以前,10天以内的文件有几个
18

5)对查找的内容进行ll显示

[root@xuegod140 ~]# find ./ -name “*.txt” -exec ls -l {} ;
-rw-r–r--. 1 root root 2 Mar 15 22:43 ./.cache/tracker/db-version.txt
-rw-r–r--. 1 root root 11 Mar 15 22:43 ./.cache/tracker/db-locale.txt
-rw-r–r--. 1 root root 40 Mar 15 22:43 ./.cache/tracker/parser-sha1.txt
-rw-r–r-- 1 root root 11 Apr 3 23:14 ./.cache/tracker/locale-for-miner-user-guides.txt
-rw-r–r-- 1 root root 11 Apr 3 23:14 ./.cache/tracker/locale-for-miner-apps.txt
-rw-r–r--. 1 root root 10 Mar 15 22:43 ./.cache/tracker/last-crawl.txt
-rw-r–r--. 1 root root 6 Mar 15 22:43 ./.cache/tracker/first-index.txt
-rw-r–r-- 1 root root 16 Apr 4 19:34 ./a.txt
-rw-r–r-- 1 root root 53 Apr 4 13:13 ./ok.txt
-rw-r–r-- 1 root root 48 Apr 4 13:13 ./err.txt

对查找到的内容需要ll显示的,可以简写如下:

[root@xuegod140 ~]# find ./ -name “*.txt” -ls

6)将查找的内容移动到/opt/目录下

[root@xuegod140 ~]# find ./ -name a.txt -exec cp {} /opt/aa.txt ;
[root@xuegod140 ~]# ll /opt/
total 8
-rw-r–r-- 1 root root 16 Apr 4 20:11 aa.txt

7)将查找的内容删除

[root@xuegod140 ~]# find ./ -name “.txt" -exec rm -rf {} ;
[root@xuegod140 ~]# ls "
.txt”
ls: cannot access *.txt: No such file or directory

对查找到的内容进行删除,可以简写如下:

[root@xuegod140 ~]# find ./ -name “*.txt” -delete

8)查找/bin目录下权限等于755的可执行文件,统计个数

[root@xuegod140 ~]# find /bin/ -maxdepth 1 -perm 755 | wc -l
1560

9)查找所有属于zx用户的文件,并把这些文件放到/opt/zx目录下,目录需要提前创建好

[root@xuegod140 opt]# mkdir zx
[root@xuegod140 ~]# find / -user zx -exec cp -a {} /opt/zx/ ;

cp: 无法以目录"/home/zx" 来覆盖非目录"/opt/zx/zx"
互劢: 同一个目录下,可以创建文件 zx和文件夹 zx 吗?同一个目录下创建的文件名和目录名一样吗?
答:不可以
解决:
[root@xuegod140 ~]# find / -user zx #发现
[root@xuegod140~]# ll /var/spool/mail/zx #查看这个文件
[root@xuegod140~]# ll /home/zx
发现/var/spool/mail/zx 和/home/zx 的名字是一样的。 而两者都要复制到/opt/zx/下,先复制了/var/spool/mail/zx,所以/home/zx 就不能复制了。
[root@xuegod140~]# mv /var/spool/mail/zx /var/spool/mail/zx.mail
[root@xuegod140 ~]# rm -rf /opt/zx/*
[root@xuegod140 ~]# find / -user zx -exec cp -a {} /opt/zx/ ;
[root@xuegod140 ~]# mv /var/spool/mail/zx.mail /var/spool/mail/zx #再修改过来

6、xargs命令
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一

  • d:指定分隔符
  • n:一次传递几个参数

[root@xuegod140 ~]# echo 123@456@789 | xargs -d ‘@’ -n 1 echo
123
456
789
[root@xuegod140 ~]# echo 123@456@789 | xargs -d ‘@’ -n 2 echo
123 456
789
[root@xuegod140 ~]# echo 123@456@789 | xargs -d ‘@’ -n 3 echo
123 456 789

命令判断

三个特殊符号:
;:分号,不考虑指令的相关性,连续执行,不保证命令全部执行成功
&&:逻辑与,只有在前面命令执行成功后,才会执行后面的命令。
||:逻辑或,如果前面的命令执行成功了,后面的命令就不执行。如果前面执行不成功,才会执行后面的命令

[root@xuegod140 ~]# ls /etc/passwd ; ls xxx ; ls /etc/hosts
/etc/passwd
ls: cannot access xxx: No such file or directory
/etc/hosts
[root@xuegod140 ~]# ls /etc/passwd && ls xxx && ls /etc/hosts
/etc/passwd
ls: cannot access xxx: No such file or directory
[root@xuegod140 ~]# ls /etc/passwd || ls xxx || ls /etc/hosts
/etc/passwd
[root@xuegod140 ~]# ls xxx || ls /etc/hosts
ls: cannot access xxx: No such file or directory
/etc/hosts

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值