文件描述符+updatedb+>>+>+2>+locate+grep+whereis+which+grep

文件描述符:是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的文件是0,第二个是1,依此类推。也可以理解为是一个文件的身份ID

STDIN 标准输入    默认的设备是键盘    文件编号为:0  
STDOUT 标准输出  默认的设备是显示器  文件编号为:1  ,也可以重定向到文件
STDERR 标准错误   默认的设备是显示器  文件编号为:2  ,也可以重定向到文件
eg:查看一个进程打开的哪些文件
从第三个终端上,可以看出打开一个/etc/passwd使用了4个文件。可以查看一个进程打开文件的个数。/proc目录下存在着许多的进程。fd是专门存放文件描述符的目录
终端一:
[root@break ~]# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
终端二:
[root@break ~]# ps -aux | grep passwd
root       6137  0.0  0.2 151640  5344 pts/4    S+   22:18   0:00 vim /etc/passwd
终端三:
[root@break ~]# ls /proc/6137/fd
0  1  2  4
[root@break ~]# cd /proc/6137/fd
[root@break fd]# ll
总用量 0
lrwx------. 1 root root 64 3月  27 22:19 0 -> /dev/pts/4
lrwx------. 1 root root 64 3月  27 22:19 1 -> /dev/pts/4
lrwx------. 1 root root 64 3月  27 22:18 2 -> /dev/pts/4
lrwx------. 1 root root 64 3月  27 22:19 4 -> /etc/.passwd.swp
#一个进程打开的文件个数是有限的,那么该如何查看呢?
ulimit -n :查看进程最多打开的文件
ulimit -n +数字:设置进程打开文件的最大个数
[root@break ~]# ulimit -n 
1024
[root@break ~]# ulimit -n 2048
[root@break ~]# ulimit -n 
2048

文件的重定向

>:表示输出到指定的文件。若文件存在,则覆盖
>>:追加
#将cpu信息保存到一个文件中
[root@break ~]# cat /proc/cpuinfo > cpu.txt
[root@break ~]# cat cpu.txt 
processor	: 0
vendor_id	: GenuineIntel
#将内核信息追加到cpu.txt
[root@break ~]# uname -a
Linux break.cn 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@break ~]# uname -a >> cpu.txt 
[root@break ~]# tail -1 cpu.txt 
Linux break.cn 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@break ~]# cat cpu.txt 
#输入重定向
[root@break ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@break ~]# grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

系统默认为我们备份了/etc/passwd-和/etc/shadow-文件。

vimdiff /etc/passwd /etc/passwd-

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

#表示将eof后面的内容,保存进入a.txt
[root@break ~]# cat > a.txt <<eof
> 1
> 2
> 3
> eof
[root@break ~]# cat a.txt 
1
2
3
[root@break ~]# cat > a.txt <<cc
> 4
> 5
> cc
[root@break ~]# cat a.txt 
4
5
eof经常用在shell脚本中
[root@break ~]# sh a.sh 
asdf
asdf
dfsa
fdas
sdfa

在这里插入图片描述

012

2>:错误重定向符号
1<:<标准输入
0>:>标准输出
#将错误信息重定向
[root@break ~]# ls /etc/passwd asfdasdfasdfas 2> b.txt
/etc/passwd
[root@break ~]# cat b.txt 
ls: 无法访问asfdasdfasdfas: 没有那个文件或目录

null和zero空文件。
/dev/null是一个黑洞文件,/dev/zero可以看作一个空白的文件,可以产生固定大小的文件
dd用来创建一个文件,if表示输入,of表示输出,bs表示每一块的大小,count表示块的数量。
[root@break test]# dd if=/dev/zero of=b.txt bs=34M count=23
记录了23+0 的读入
记录了23+0 的写出
819986432字节(820 MB)已复制,21.7099 秒,37.8 MB/秒
#将错误信息和正确信息都放到1.txt中,&理解为等同于的意思
[root@break test]# ll /etc/ asdff >1.txt 2>&1
[root@break test]# ll /etc/ asdff 2>1.txt 1>&2
解释以下内容:将正确信息和错误信息都放到黑洞中
[root@break test]# cat /etc/passwd >/dev/null 2>&1

tee管道命令,读取标准输入的数据,并将其内容输出成文件。

tee:a参数表示追加到某个文件中。

#将磁盘信息写入1.file
[root@break test]# df -h | tee 4.txt
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  4.7G  5.4G   47% /
devtmpfs                 975M     0  975M    0% /dev
tmpfs                    992M     0  992M    0% /dev/shm
tmpfs                    992M   11M  981M    2% /run
tmpfs                    992M     0  992M    0% /sys/fs/cgroup
/dev/sr0                 4.2G  4.2G     0  100% /mnt
/dev/sda1                197M  135M   62M   69% /boot
tmpfs                    199M   32K  199M    1% /run/user/1000
tmpfs                    199M     0  199M    0% /run/user/0
[root@break test]# cat 4.txt 
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  4.7G  5.4G   47% /
devtmpfs                 975M     0  975M    0% /dev
tmpfs                    992M     0  992M    0% /dev/shm
tmpfs                    992M   11M  981M    2% /run
tmpfs                    992M     0  992M    0% /sys/fs/cgroup
/dev/sr0                 4.2G  4.2G     0  100% /mnt
/dev/sda1                197M  135M   62M   69% /boot
tmpfs                    199M   32K  199M    1% /run/user/1000
tmpfs                    199M     0  199M    0% /run/user/0
[root@break test]# df -h | tee 1.file
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  4.7G  5.4G   47% /
devtmpfs                 975M     0  975M    0% /dev
tmpfs                    992M     0  992M    0% /dev/shm
tmpfs                    992M   11M  981M    2% /run
tmpfs                    992M     0  992M    0% /sys/fs/cgroup
/dev/sr0                 4.2G  4.2G     0  100% /mnt
/dev/sda1                197M  135M   62M   69% /boot
tmpfs                    199M   32K  199M    1% /run/user/1000
tmpfs                    199M     0  199M    0% /run/user/0
#将磁盘信息追加写入一个日志文件中。
[root@break test]# df -h | tee -a 1.file

查找命令的使用

which:查看可执行文件的信息
whereis:查看可执行文件的位置及相关文件
locate:配合数据库,来快速查找文件位置
grep: 过滤匹配
find:查找相关文件
locate:这个命令和find -name差不多,但是他会更加快速,因为find查找的是具体的目录文件,
locate:查找的是数据库/var/lib/mlocate,配置文件为/etc/updatedb.conf。查看定时任务的信息在/etc/cron.daily/mlocate中。

命令的例子:

[root@break test]# which cd
/usr/bin/cd
[root@break test]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
#使用locate时候,他会找自己的数据库中找内容,如果对于一个新的文件,还没有来的及mlocate.db保存,则找不到,这个时候就需要使用updatedb来强制更新数据库mlocate.db
[root@break test]# locate 2.back
/root/test/2.back
[root@break test]# touch 12.txt
[root@break test]# locate 12.txt
/usr/share/doc/git-1.8.3.1/RelNotes/1.7.12.txt
/usr/share/vim/vim74/doc/usr_12.txt.gz
[root@break test]# updatedb 
[root@break test]# locate 12.txt
/root/test/12.txt
/usr/share/doc/git-1.8.3.1/RelNotes/1.7.12.txt
/usr/share/vim/vim74/doc/usr_12.txt.gz

作用:过滤,它能够使用正则表达式来搜索文本,并把结果打印出来
参数:
| 或者的意思
-v 取反
-i 忽略大小写
^# 以#开头
#$ 以#结尾
^$ 空行
-n 对过滤的内容加上行号

[root@break test]# cat /etc/passwd | grep -n root
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值