重定向和文件查找 红太狼 2022-02-24 14:16 476阅读 0赞 # **目录** # * 文件描述符 * 重定向的含义 * 管道的使用、tee命令 * which、whereis、locate、grep、find查找命令 * 命令判断 # 文件描述符 # 文件描述符:是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行 I/O 操作 的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被迚程所打开的文件,程序刚 刚启动的时候,第一个打开的文件是 0,第二个是 1,依此类推。也可以理解为是一个文件的身份 ID 用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标,显示器)![在这里插入图片描述][20190404123034535.png] 这三个文件描述符对应了我们三个目标文件 ![在这里插入图片描述][20190404123319679.png] 我们每使用一个进程,都会在/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)在脚本里,通过输入重定向来打印菜单消息** 编写脚本的时候,如使用如下两种输入都可以,但是可以看出第一种更加方便 > ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg0MzY5OQ_size_16_color_FFFFFF_t_70] > ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg0MzY5OQ_size_16_color_FFFFFF_t_70 1] > 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 [20190404123034535.png]: /images/20220224/3edf6de69e86494bb458c184d19d1012.png [20190404123319679.png]: /images/20220224/4e102f69644a4a48ad0f989e1809a1e1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg0MzY5OQ_size_16_color_FFFFFF_t_70]: /images/20220224/1e0cd1dab2284ebfa6bc8aaba4e0c569.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg0MzY5OQ_size_16_color_FFFFFF_t_70 1]: /images/20220224/82cd9ff031b447119eebefdbe4f88b20.png
相关 转发和重定向 一、概念: 转发:由服务器端进行的页面跳转。 重定向:由浏览器端进行的页面跳转。 二、转发和重定向的作用: 在Servlet中实现页面的跳转有两种方式:转发和重 一时失言乱红尘/ 2024年04月01日 17:45/ 0 赞/ 40 阅读
相关 管道和重定向 [Linux进程管理][Linux] 管道和重定向 重定向 利用`>`可以使本应该输出在屏幕上的输出信息移到了一个文本文件中去保存,以便以后方便查看。 例如: 小灰灰/ 2022年12月19日 11:50/ 0 赞/ 102 阅读
相关 转发和重定向 1.转发 当客户端发送一个请求到服务器后,Web服务器调用内部的方法在容器内部完成请求处理和转发动作。可以共享request范围内的数据,客户端的URL地址不 爱被打了一巴掌/ 2022年07月11日 08:20/ 0 赞/ 201 阅读
相关 重定向和转发 代码实现方式: 重定向response.sendRedirect("success.jsp"); 转发:request.getRequestDispatcher("suc 古城微笑少年丶/ 2022年06月10日 14:43/ 0 赞/ 380 阅读
相关 重定向和管道 在linux系统中,正确输出的编号为1,错误输出编号为2! find /etc -name passwd > file \\重定向正确输出 ![这里写图片描述][Sou 「爱情、让人受尽委屈。」/ 2022年06月07日 04:54/ 0 赞/ 217 阅读
相关 C语言--文件重定向 C语言文件重定向 1.定义 2.重定向运算符 (1)重定向运算符 (2)重定向输入 (3)重定向输出 ( 我就是我/ 2022年03月22日 06:26/ 0 赞/ 249 阅读
相关 重定向和文件查找 目录 文件描述符 重定向的含义 管道的使用、tee命令 which、whereis、locate、grep、find查找命令 命令判断 红太狼/ 2022年02月24日 14:16/ 0 赞/ 477 阅读
相关 转发和重定向 区别 先来说说两者区别: 1. 转发是服务器行为,重定向是客户端行为 2. 转发是一次请求,重定向至少是两次请求 3. 转发浏览器url的地址栏不变,重定向url 偏执的太偏执、/ 2022年02月22日 21:18/ 0 赞/ 287 阅读
相关 【Linux】 文件重定向 了解重定向 首先我们关闭文件描述符1,看下面代码: include <stdio.h> include <sys/types.h> includ 骑猪看日落/ 2021年11月27日 05:56/ 0 赞/ 324 阅读
还没有评论,来说两句吧...