文件管理
touch:无中生有,万象更新
#当一个文件不存在时,touch可以创建一个空文件
#当一个文件存在时,touch这个文件可以更新文件的时间
[root@zyq ~]# cd /opt/
[root@zyq opt]# touch zzz
[root@zyq opt]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 28 11:23 zzz
[root@zyq opt]# touch zzz
[root@zyq opt]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 28 11:24 zzz
[root@zyq opt]#
stat:查看文件的详细信息,包括文件名、时间戳
[root@zyq opt]# ls
zzz
[root@zyq opt]# stat zzz
File: zzz
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 50701281 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:usr_t:s0
Access: 2023-06-28 11:24:28.259746622 +0800
Modify: 2023-06-28 11:24:28.259746622 +0800
Change: 2023-06-28 11:24:28.259746622 +0800
Birth: 2023-06-28 11:23:54.816445269 +0800
[root@zyq opt]#
rm:remove删除文件
例:
-r 删除目录时必须带上-r选项
[root@zyq ~]# rm -r /zzz/
rm: descend into directory '/zzz/'? yy^H
rm: descend into directory '/zzz/www'? y
rm: descend into directory '/zzz/www/hhh'? y
rm: remove directory '/zzz/www/hhh/1234'? y
rm: remove directory '/zzz/www/hhh'? y
rm: remove directory '/zzz/www'? y
rm: remove directory '/zzz/'? y
[root@zyq ~]# y
-f 删除文件或目录时,不再询问是否删除
# 注意事项:删除文件时一定不要带-r选项,以免误删
[root@zyq opt]# ls
zzz
[root@zyq opt]# rm -f zzz
[root@zyq opt]# ls
[root@zyq opt]#
cp:copy复制
例:
-a 打包复制,常用于备份
-r 递归复制,复制目录时必须使用此选项
[root@zyq ~]# ls
1 2 3 4 5 6 7 8 9 anaconda-ks.cfg
[root@zyq ~]# cp -r {1..3} /opt/
[root@zyq ~]# ls /opt/
1 2 3
[root@zyq ~]#
-p 复制时保留原权限
# 注意事项:一对一时,源文件和目标文件类型必须一致,对一时,最后一个参数必须是目录
mv:move移动
例:
剪切,把一个文件剪切到另一个目录中
[root@zyq ~]# ls
1 2 anaconda-ks.cfg
[root@zyq ~]# ls 1/
test
[root@zyq ~]# mv 1/test 2/
[root@zyq ~]# ls 2/
test
[root@zyq ~]#
重命名,在同一个目录中将文件名字改掉
[root@zyq ~]# ls
1 2 anaconda-ks.cfg
[root@zyq ~]# mv 1 zzz
[root@zyq ~]# ls
2 anaconda-ks.cfg zzz
[root@zyq ~]#
压缩、解压缩命令
压缩格式
gz、bz2、xz、zip、Z
gzip
gzip #压缩后的文件以.gz结尾
[root@zyq ~]# ls
2 5 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]# gzip 5
[root@zyq ~]# ls
2 5.gz 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]#
-d #解压缩,解压完成后会删除原文件
[root@zyq ~]# ls
2 5.gz 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]# gzip -d 5.gz
[root@zyq ~]# ls
2 5 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]#
-c #将结果输出至标准输出
gunzip # 解压
[root@zyq ~]# ls
2 5.gz 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]# gunzip 5.gz
[root@zyq ~]# ls
2 5 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]#
zcat #不解压的情况下查看文本文件的内容
[root@zyq ~]# echo '123456' > 5
[root@zyq ~]# gzip 5
[root@zyq ~]# ls
2 5.gz 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]# zcat 5.gz
123456
[root@zyq ~]#
bzip2
bzip2 #压缩后的文件以.bz2结尾
#bzip2是一款比gzip有着更大压缩比的压缩工具,使用格式近似
[root@zyq ~]# which bzip2 #系统中没有此命令
/usr/bin/which: no bzip2 in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
#挂载后下载
[root@zyq ~]# mount /dev/cdrom /mnt/
mount: /mnt: /dev/sr0 already mounted on /mnt.
[root@zyq ~]# ls /mnt/BaseOS/Packages/bzip2-
bzip2-1.0.8-8.el9.x86_64.rpm bzip2-libs-1.0.8-8.el9.i686.rpm bzip2-libs-1.0.8-8.el9.x86_64.rpm
[root@zyq ~]# rpm -ivh /mnt/BaseOS/Packages/bzip2-1.0.8-8.el9.x86_64.rpm
warning: /mnt/BaseOS/Packages/bzip2-1.0.8-8.el9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:bzip2-1.0.8-8.el9 ################################# [100%]
[root@zyq ~]#
-d #解压缩,解压完成后会删除原文件
-# ##用1-9代替,指定压缩比,默认为6
-k #keep,压缩时保留原文件
bunzip #解压
bzcat #不解压的情况下查看文本文件的内容
xz
xz #压缩后的文件以.xz结尾
#比bzip2有着更大压缩比的压缩工具,使用格式近似
-d #解压缩,解压完成后会删除原文件
unxz #解压
xzcat #不解压的情况下查看文本文件的内容
zip
zip #既归档又压缩的工具。zip可以压缩目录
[root@zyq ~]# zip 5.zip 5
adding: 5 (stored 0%)
[root@zyq ~]# ls
2 5 5.zip 6 7 8 9 anaconda-ks.cfg zzz
[root@zyq ~]#
#gz、bz2、xz都只能压缩文件,zip压缩后不会删除原文件
-d #解压缩,解压完成后会删除原文件
unzip #解压
tar
tar:压缩或解压缩文件或目录
-zcf 以gzip格式压缩文件
-jcf 以bzip2格式压缩文件
-Jcf 以xz格式压缩文件
xf 解压用tar命令进行归档的压缩文件
# 注意事项:Linux中没有后缀的概念,不要被文件名所误导,必要时使用file命令查看文件的格式。
-c #创建归档文件
-f file.tar #操作的归档文件
-x #还原归档
-v #显示归档过程
-p #归档时保留权限信息。只有管理员才有权限用此选项
-C #将展开的归档文件保存至指定目录下
--delete #从归档文件中删除文件
--xattrs #在归档时保留文件的扩展属性信息
-tf /path/to/file.tar #不展开归档,直接查看归档了哪些文件
cat:连接1个或多个文件的内容并显示
-n:显示行号
注意事项:
应避免使用cat命令打开巨大文件,只用其打开小文件,比如配置文件
less:全屏查看文件内容
空格键:往后翻一屏
b:往前翻一屏
/+关键字:查找关键字所在的行
n:next找下一个
N:找上一个
q:退出less命令
head:头,默认显示文件的前10行
-#:这里的#是一个数字,查看文件的前#行
tail:尾部,默认显示文件的最后10行
-#:这里的#是一个数字,查看文件的最后#行
-f:动态查看日志文件的内容
文本处理
cut:用于指定列的内容
-d:指定字段分隔符
-f:指定要显示的字段
#注意事项:只能用于比较规则的文本
[root@zyq ~]# ls
anaconda-ks.cfg
[root@zyq ~]# cp /etc/passwd .
[root@zyq ~]# ls
anaconda-ks.cfg passwd
[root@zyq ~]# head -3 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@zyq ~]# head -3 passwd | cut -d: -f1
root
bin
daemon
[root@zyq ~]# head -3 passwd | cut -d: -f1-3
root:x:0
bin:x:1
daemon:x:2
[root@zyq ~]# head -3 passwd | cut -d: -f1,3
root:0
bin:1
daemon:2
[root@zyq ~]#
df:用于查看系统的挂载分区使用情况
-h:用容易识别的单位显示大小
[root@zyq ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 1.6G 9.1M 1.6G 1% /run
/dev/mapper/rhel-root 17G 1.1G 16G 7% /
/dev/sda1 1014M 184M 831M 19% /boot
tmpfs 791M 0 791M 0% /run/user/0
[root@zyq ~]#
awk:用于显示指定的内容
awk #用于显示指定列的内容,基于列的文本报告工具
-F:指定字段分隔符,默认分隔符为空格,在处理文本时会将多个空格视为一个空格去处理
语法:awk -F'字段分隔符' '{print $指定的列}' 要处理的文件名
eg:awk -F':' '{print $1,3}' /etc/passwd
[root@zyq ~]# head -3 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@zyq ~]# head -3 passwd | awk -F: '{print $1,$3}'
root 0
bin 1
daemon 2
[root@zyq ~]# head -3 passwd | awk -F: '{print $1":"$3}'
root:0
bin:1
daemon:2
[root@zyq ~]#
# awk 默认分隔符为空格,在处理文本时会将多个空格视为一个空格
[root@zyq ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 1.6G 9.1M 1.6G 1% /run
/dev/mapper/rhel-root 17G 1.1G 16G 7% /
/dev/sda1 1014M 184M 831M 19% /boot
tmpfs 791M 0 791M 0% /run/user/0
[root@zyq ~]# df -h | awk '{print $2}'
Size
4.0M
3.9G
1.6G
17G
1014M
791M
[root@zyq ~]#
sed:在不进入文件的情况下进行文件内容的查找、修改操作
语法:sed '查找或修改指令' 要处理的文件名
-i:在确保修改指令无误的情况下使用此选项真正去修改文件内容
[root@zyq ~]# sed -i 's/root/123/2' passwd
[root@zyq ~]# grep root passwd
root:x:0:0:123:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@zyq ~]# sed -i 's/root/123/' passwd
[root@zyq ~]# grep root passwd
123:x:0:0:123:/root:/bin/bash
[root@zyq ~]# grep 123 passwd
123:x:0:0:123:/root:/bin/bash
operator:x:11:0:operator:/123:/sbin/nologin
[root@zyq ~]#
eg:在/root/passwd文件中查找包含root的行
cp /etc/passwd /root/passwd
sed -n '/root/p' /root/passwd
# 注意事项:在使用sed进行文本查找时,必须使用-n选项关闭默认的打印功能,然后在匹配到内容后使用p命令进行打印匹配的内容
[root@zyq ~]# ls
anaconda-ks.cfg passwd
[root@zyq ~]# sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@zyq ~]#
eg:在/root/passwd文件中替换所有的root为123
sed 's/root/123/g' /root/passwd
[root@zyq ~]# sed 's/root/123/g' passwd
123:x:0:0:123:/123:/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:/123:/sbin/nologin
......
# 生成多行文件的方式:
第1种方式:
多次执行 echo '内容' >> 文件名
第2种方式:使用cat命令的特殊用法
cat > 文件名 <<EOF
文件内容
文件内容
文件内容
...
EOF
[root@zyq ~]# cat > abc <<EOF
> 1 5 9
> 3 6 8
> 10 4 7
> 3
> 2 3 5
> 4 12 8
> EOF
[root@zyq ~]# cat abc
1 5 9
3 6 8
10 4 7
3
2 3 5
4 12 8
[root@zyq ~]#
文本排序
sort
sort #默认升序,不是按数值大小排列
[root@zyq ~]# cat abc
1 5 9
3 6 8
10 4 7
3
2 3 5
4 12 8
[root@zyq ~]# sort abc
10 4 7
1 5 9
2 3 5
3
3 6 8
4 12 8
[root@zyq ~]#
-n #根据数值大小进行排序
[root@zyq ~]# cat abc
1 5 9
3 6 8
10 4 7
3
2 3 5
4 12 8
[root@zyq ~]# sort -n abc
1 5 9
2 3 5
3
3 6 8
4 12 8
10 4 7
[root@zyq ~]#
-r #逆序排序
[root@zyq ~]# sort abc
10 4 7
1 5 9
2 3 5
3
3 6 8
4 12 8
[root@zyq ~]# sort -nr abc
10 4 7
4 12 8
3 6 8
3
2 3 5
1 5 9
[root@zyq ~]#
-t #字段分隔符
-k #以哪个字段为关键字进行排序
[root@zyq ~]# cat abc
1 5 9
3 6 8
10 4 7
3
2 3 5
4 12 8
[root@zyq ~]# sort -t' ' -k2 -n abc
3
2 3 5
10 4 7
1 5 9
3 6 8
4 12 8
[root@zyq ~]#
-u #去重,排序后相同的行只显示一次
[root@zyq ~]# sort -n abc
1 5 9
2 3 5
3
3
3 6 8
4 12 8
10 4 7
[root@zyq ~]# sort -nu abc
1 5 9
2 3 5
3 6 8
4 12 8
10 4 7
[root@zyq ~]#
-f #排序时忽略字符大小写
uniq:报告重复行
uniq #连续且完全相同方为重复
-c #显示文件中行重复的次数
[root@zyq ~]# sort -n abc
1 5 9
2 3 5
3
3
3 6 8
4 12 8
10 4 7
[root@zyq ~]# sort -n abc | uniq -c
1 1 5 9
1 2 3 5
2 3
1 3 6 8
1 4 12 8
1 10 4 7
[root@zyq ~]#
-d #只显示重复的行
-u #只显示未重复的行
[root@zyq ~]# sort -n abc
1 5 9
2 3 5
3
3
3 6 8
4 12 8
10 4 7
[root@zyq ~]# sort -n abc | uniq -u
1 5 9
2 3 5
3 6 8
4 12 8
10 4 7
[root@zyq ~]# sort -n abc | uniq -d
3
[root@zyq ~]#
文本统计
wc:word count,统计文本内容的数量
例:
-c:character,统计字符的数量
-w:word,统计单词数量
-l:line,统计文本行数
[root@zyq ~]# cat abc
1 5 9
3 6 8
10 4 7
3
2 3 5
4 12 8
3
[root@zyq ~]# wc -c abc
37 abc
[root@zyq ~]# wc -w abc
17 abc
[root@zyq ~]# wc -l abc
7 abc
[root@zyq ~]# cat abc | wc -l
7
[root@zyq ~]# cat abc | wc -w
17
[root@zyq ~]# cat abc | wc -c
37
[root@zyq ~]#
du:disk usage,查询指定文件或目录所占用的磁盘空间
例:
-s:summary,概要信息
-h:human,用人类容易识别的单位显示大小
[root@zyq ~]# ls
abc anaconda-ks.cfg passwd
[root@zyq ~]# du -sh /tmp/
4.0K /tmp/
[root@zyq ~]# du -sh /etc/
20M /etc/
[root@zyq ~]#
主机名管理
#主机名管理
hostname:查看主机名
hostnamectl:永久设置主机名
hostnamectl set-hostname 主机名
hostname #查看或临时修改主机名,重开终端有效,重启失效
hostnamectl #查看或永久修改主机名,重开终端生效,重启依然有效
#其它
time #显示命令的执行时间,例如time ls /etc
[root@zyq ~]#
[root@zyq ~]# sleep 3
[root@zyq ~]# time sleep 3
real 0m3.015s
user 0m0.000s
sys 0m0.001s
[root@zyq ~]#
clear #清屏
whoami #显示当前登录用户
w #显示当前在线用户并显示其在运行的命令
who #查看当前在线用户
[root@zyq ~]# whoami
root
[root@zyq ~]# who
root pts/0 2023-06-29 09:43 (192.168.227.1)
[root@zyq ~]# w
15:44:23 up 4:06, 1 user, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 09:43 7.00s 0.09s 0.00s w
[root@zyq ~]#
which #显示指定命令的绝对路径
[root@zyq ~]# which cd
/usr/bin/cd
[root@zyq ~]#
date #显示或设置日期与时间
#不带参数的date用于显示当前系统日期与时间
-s #以字符串方式设置时间
#格式化输出时间:+
%Y #年
%m #月
%d #日
%H #时
%M #分
%S #秒
ldd #查看指定程序有哪些依赖库文件
程序组成
二进制程序
库文件
配置文件
帮助文件
命令提示符更改颜色
vi .bashrc
PS1='\[\e[32;1m\][\u@\h \W]\$:\[\e[0m\] '
添加此行,颜色参数可调整
bash
文本查找
grep 、egrep、 fgrep
grep
grep #根据模式搜索文本,并将符合模式的文本行显示出来。
#使用基本正则表达式定义的模式来过滤文本的命令。
Pattern(模式) #文本字符和正则表达式的元字符组合而成的匹配条件
-i #忽略大小写
[root@zyq ~]# ls
123 abc anaconda-ks.cfg passwd zzz
[root@zyq ~]# grep 'appstream' anaconda-ks.cfg
[root@zyq ~]# grep -i 'appstream' anaconda-ks.cfg
repo --name="AppStream" --baseurl=file:#/run/install/sources/mount-0000-cdrom/AppStream
[root@zyq ~]#
--color #匹配到的内容高亮显示
-v #显示没有被模式匹配到的行
[root@zyq ~]# grep '123' passwd
123:x:0:0:123:/root:/bin/bash
operator:x:11:0:operator:/123:/sbin/nologin
[root@zyq ~]# grep -v '123' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
......
-o #只显示被模式匹配到的字符串
-E #使用扩展正则表达式。grep -E相当于使用egrep
-q #静默模式,不输出任何信息
# 检查grep命令查找本本内容是否正确
#echo $? 查看命令状态
#1
#0
[root@zyq ~]# cat zzz
hello li
123
#zbcd
[root@zyq ~]# grep -q 'hello' zzz
[root@zyq ~]# grep npc zzz
[root@zyq ~]# echo $?
1
[root@zyq ~]# grep -q 'hello' zzz
[root@zyq ~]# echo $?
0
[root@zyq ~]#
-A 1 #被模式匹配到的内容以及其后面一行的内容都显示出来,
#如果把1改成2就表示被模式匹配到的内容以及其后面2行的内容均显示出来
-B 1 #被模式匹配到的内容以及其前面一行的内容都显示出来,
#如果把1改成2就表示被模式匹配到的内容以及其前面2行的内容均显示出来
-C 1 #被模式匹配到的内容以及其前后的行各显示1行,如果把1改成2
#就表示被模式匹配到的内容以及其前后的行各显示2行。
[root@zyq ~]# cat zzz
hello li
123
#zbcd
[root@zyq ~]# grep 'hello' zzz
hello li
[root@zyq ~]# grep -A2 'hello' zzz
hello li
123
[root@zyq ~]# grep -B1 'hello' zzz
hello li
[root@zyq ~]# grep -C1 'hello' zzz
hello li
123
[root@zyq ~]#
fgrep #不支持正则表达式,执行速度快
命令帮助
内部命令
help COMMAND #命令
#外部命令
COMMAND --help
#在线文档
info COMMAND
#命令手册 manual
man COMMAND
#文档
/usr/share/doc
命令补全tab
yum -y install bash-completion*
文件查找
在文件系统上查找符合条件的文件
locate
#语法:
locate KEYWORD
#非实时,模糊匹配,查找是根据全系统文件数据库进行的,查找的速度快
#依赖于事先构建的索引。索引的构建是在系统较为空闲时自动进行(周期性任务)
updatedb #手动生成文件数据库
#索引构建过程需要遍历整个根文件系统,极消耗资源
find
find #实时查找,精确性强,遍历指定目录中所有文件完成查找,
#查找速度慢,支持众多查找标准。
#语法:find [OPTION...] 查找路径 查找标准 查找到以后的处理动作
查找路径 #默认为当前目录
查找标准 #默认为指定路径下的所有文件
-name 'filename' #对文件名作精确匹配.支持glob通配符机制
[root@zyq ~]# ls
123 abc anaconda-ks.cfg passwd zzz
[root@zyq ~]# find / -name 123
/root/123
[root@zyq ~]# find -name 123
./123
[root@zyq ~]#
-iname 'filename' #文件名匹配时不区分大小写
-regex pattern #基于正则表达式进行文件名匹配.以pattern
#匹配整个文件路径字符串,而不仅仅是文件名称
-user username #根本属主来查找
-group groupname #根据属组来查找
-uid #根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
-gid #根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
-nouser #查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
-nogroup #查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
-type #根据文件类型来查找(f,d,c,b,l,p,s)
-size #根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M,
#+表示大于,-表示小于
[+|-]
#K、#M、#G
#Unit表示(从#-1到#之间的范围大小)
-#Unit表示(从0到#-1的范围大小)
+#Unit表示(大于#的所有)
-mtime #修改时间
-ctime #改变时间
-atime #访问时间
+5 #5天前
-5 #5天以内
-mmin #多少分钟修改过
-cmin #多少分钟改变过
-amin #多少分钟访问过
+5 #5分钟前
-5 #5分钟以内
-perm mode #根据权限精确查找
-perm -mode #文件权限能完全包含此mode时才符合条件
-perm /mode #9位权限中有任何一位权限匹配都视为符合查找条件
#组合条件:
-a
-o
-not
!
例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
#处理动作:默认为显示到屏幕上
-print #显示
-ls #类似ls -l的形式显示每一个文件的详细信息
-delete #删除查找到的文件
-fls /path/to/somefile #查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; #对查找到的每个文件执行COMMAND,每次操作都需要用户确认
-exec COMMAND {} \; #对查找到的每个文件执行COMMAND,操作不需要确认
#注意:find传递查找到的文件至后面指定的命令时,查找到所有
#符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,
#此时命令执行可能会失败。而xargs可规避此问题。
xargs #通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可
[root@localhost ~]# ls
initial-setup-ks.cfg zzz
[root@localhost ~]# ll zzz/
总用量 4
-rw-------. 1 root root 1378 9月 28 19:38 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 10月 4 16:20 root
[root@localhost ~]#
#-name (-iname)
[root@localhost ~]# find zzz/ -name root
zzz/root
[root@localhost ~]# touch zzz/zhangsan
[root@localhost ~]# ls zzz/
anaconda-ks.cfg root zhangsan
[root@localhost ~]# touch zzz/Zhangsan
[root@localhost ~]# ls zzz/
anaconda-ks.cfg root zhangsan Zhangsan
[root@localhost ~]# find zzz/ -iname zhangsan
zzz/zhangsan
zzz/Zhangsan
[root@localhost ~]#
#-user、-group
[root@localhost ~]# find zzz/ -user root
zzz/
zzz/root
zzz/anaconda-ks.cfg
zzz/zhangsan
zzz/Zhangsan
[root@localhost ~]# find zzz/ -group root
zzz/
zzz/root
zzz/anaconda-ks.cfg
zzz/zhangsan
zzz/Zhangsan
[root@localhost ~]#
#-type
[root@localhost ~]# find zzz/ -type f
zzz/anaconda-ks.cfg
zzz/zhangsan
zzz/Zhangsan
[root@localhost ~]# find zzz/ -type d
zzz/
zzz/root
[root@localhost ~]#
#-size
[root@localhost ~]# find zzz/ -size -1k
zzz/zhangsan
zzz/Zhangsan
[root@localhost ~]# find zzz/ -size +1k
zzz/anaconda-ks.cfg
[root@localhost ~]#
重定向与管道符
#系统设定:
默认输入设备 #标准输入,STDIN,0 (键盘)
默认输出设备 #标准输出,STDOUT,1 (显示器)
标准错误输出 #STDERR,2 (显示器)
#I/O重定向:
>:覆盖输出
>>:追加输出
[root@zyq ~]# cat zzz
zzz
[root@zyq ~]# echo '111' > zzz
[root@zyq ~]# cat zzz
111
[root@zyq ~]# echo '111' >> zzz
[root@zyq ~]# cat zzz
111
111
[root@zyq ~]# echo '111' >> zzz
[root@zyq ~]# cat zzz
111
111
111
[root@zyq ~]#
2> #重定向错误输出
[root@zyq ~]# ls zzz haha > zzz 2> 123
[root@zyq ~]# ls
123 anaconda-ks.cfg passwd zzz
[root@zyq ~]# cat zzz
zzz
[root@zyq ~]# cat 123
ls: cannot access 'haha': No such file or directory
[root@zyq ~]#
2>> #追加重定向错误输出
&> #覆盖重定向标准输出或错误输出至同一个文件
[root@zyq ~]# ls
123 anaconda-ks.cfg passwd zzz
[root@zyq ~]# ls zzz haha &> abc
[root@zyq ~]# cat abc
ls: cannot access 'haha': No such file or directory
zzz
[root@zyq ~]#
&>> #追加重定向标准输出或错误输出至同一个文件
[root@zyq ~]# ls haha &>> zzz
[root@zyq ~]# cat zzz
111
111
111
ls: cannot access 'haha': No such file or directory
[root@zyq ~]# ls haha &> zzz
[root@zyq ~]# cat zzz
ls: cannot access 'haha': No such file or directory
[root@zyq ~]#
< #输入重定向
[root@zyq ~]# cat abc
ls: cannot access 'haha': No such file or directory
zzz
[root@zyq ~]# cat zzz
ls: cannot access 'haha': No such file or directory
[root@zyq ~]# cat > zzz < abc
[root@zyq ~]# cat zzz
ls: cannot access 'haha': No such file or directory
zzz
[root@zyq ~]#
<< #Here Document
| #管道 前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程 的子shell进程中执行
命令1 | 命令2 | 命令3 | ...
[root@zyq ~]# echo "hello world"
hello world
[root@zyq ~]# echo "hello world" | tee zzz
hello world
[root@zyq ~]# cat zzz
hello world
[root@zyq ~]#