跟高手学习LINUX笔记-11

喜夏-厌秋 提交于 2020-02-29 12:02:57

第11节重定向和文件的查找
11.1文件描述符 0、1、2
先来几句在linux圈内的名言
1、执行命令后没有信息提示最好的提示
2、在linux系统中一切皆文件
3、搞linux运维的一定要会看懂日志与报错信息,哪怕它是英文的
11.1 文件描述符定义
文件描述符:也就是系统内核为了高效管理系统中的文件,给每个打开的文件分配一个非负整数,便于管理
常用的文件描述符:
0-->标准输入,默认是键盘、鼠标
1-->标准输出,默认是显示器
2-->错误输出,默认是显示器
单个进程最多可以打开多少个文件是有限制的,可以这样处理:
例1:
[root@node-1 ~]# ulimit -n
1024
[root@node-1 ~]#ulimit -n 20480 #临时修改一个进程最多可以同时打开的文件数为20480
[root@node-1 ~]# vim limits.conf 和 nproc.conf
#可以通过修改这两个文件后重启生效
11.2重定向的含义-管道的使用-tee命令
11.2.1 输出重定向
定义:将命令的输出结果本来显示在显示器,现重新定向保存到指定的文件里
重定向输出使用”>” “>>” 操作符号
语法:
> 文件名 #表示将标准输出的内容,写到后面的文件中,如果此文件名已经存在,将会覆盖原文件中的内容
>> 文件名 #表示将标准输出的内容,追加到后面的文件中。若重定向的输出的文件不存在,则会新建该文件
此项内容在RHCSA中涉及,比较重要
例1:查看当前主机的内存信息保存到meminfo.txt中
[root@node-1 ~]# cat /proc/cpuinfo > cpu.txt
例2:将内核的版本信息追加到cpu.txt
[root@node-1 ~]# uname -r >> meminfo.txt
[root@node-1 ~]# cat meminfo.txt
total used free shared buff/cache available
Mem: 1.8G 85M 1.6G 9.4M 98M 1.6G
Swap: 2.0G 0B 2.0G
3.10.0-1062.12.1.el7.x86_64
例3:清空文件meminfo.txt内容
[root@node-1 ~]# > meminfo.txt
曾经遇到接手一位客户的技术管理过的机器,这位技术神人走之前不光运行了history -c 还 > .bash_history
11.2.2 输入重定向
输入的内容方式不再从键盘上输入了,举三个有用的例子
例4:
[root@node-1 ~]# grep Mem meminfo.txt
Mem: 1.8G 85M 1.6G 9.4M
98M 1.6G
例5:往mysql指定数据库中导入数据
[root@node-1 ~]#mysql -u root -p123456 hellodb < hellodb.sql
例6:以<<EOF开始,以EOF结尾的特殊符号之间是输入内容 。
[root@node-1 ~]# [root@node-1 ~]# cat > aa.txt << EOF

123
321
456
654
EOF
[root@node-1 ~]# cat aa.txt
123
321
456
654
实际上成对的EOF可以用其他符号代替,但必须成对出现
11.2.3 错误重定向
作用:错误信息不再只显示在显示器上而是保存到特定文件中
操作符:
错误重定向:2>
标准输入: 1<
标准输出: 0>
例7:错误重定向的用法
[root@node-1 ~]# ls /etc/passwd 111 > error.txt
ls: cannot access 111: No such file or directory
只显示在显示器上
[root@node-1 ~]# cat error.txt
/etc/passwd
将错误重定向在指定的文件中
[root@node-1 ~]# ls /etc/passwd 111 2> error.txt
/etc/passwd
[root@node-1 ~]# cat error.txt
ls: cannot access 111: No such file or directory

11.2.4/dev/null与/dev/zero的作用
/dev/null:写入此文件的内容会永久消失
/dev/zero:会提供无限的空字符,在扩展swap时可以用到
例8:
[root@node-1 ~]# crontab -l
/3 * /sbin/ntpdate -u times.aliyun.com &> /dev/null
[root@node-1 ~]# dd if=/dev/zero of=allswap bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 2.73801 s, 196 MB/s
[root@node-1 ~]# mkswap allswap && swapon -a
[root@node-1 ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 85M 1.1G 9.3M 624M 1.5G
Swap: 2.5G 0B 2.5G
11.2.5 管道 | 的使用
语法:command-a | command-b | command-c | ......
注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出
2、管道右边的命令,必须能够接收标准输入的数据流命令才行
3、管道符可以把两条命令连起来,它可以链接多个命令使用
4、前一个命令的输出是作为后面命令的输入来用的
例9:
[root@node-1 ~]# yum list |grep jdk
copy-jdk-configs.noarch 3.3-10.el7_5 base
java-1.6.0-openjdk.x86_64 1:1.6.0.41-1.13.13.1.el7_3 base
java-1.6.0-openjdk-demo.x86_64 1:1.6.0.41-1.13.13.1.el7_3 base
......
11.2.6 tee命令的用法
功能:读取标准输入的数据,并将其内容输出成文件。
语法:tee [-a][文件...]
参数:
默认是覆盖指定文件的内容
-a, --append 内容追加到给定的文件而非覆盖
例10:
[root@node-1 ~]# df -hT | tee -a meminfo.txt
[root@node-1 ~]# cat meminfo.txt
total used free shared buff/cache available
Mem: 1.8G 85M 1.6G 9.4M 98M 1.6G
Swap: 2.0G 0B 2.0G
3.10.0-1062.12.1.el7.x86_64
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 899M 0 899M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.4M 901M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 18G 2.3G 16G 13% /
/dev/sda1 xfs 497M 141M 357M 29% /boot
tmpfs tmpfs 182M 0 182M 0% /run/user/0

11.3 which-whereis-locate-grep-find查找命令
11.3.1 which-whereis-locate-grep find命令使用
查找文件一般有以下几个命令:
which 查看可执行文件的位置(三星重要)
grep 过滤匹配或正则表达式;一个文件搜索工具(五星重要)
find 根据不同的条件查找相关文件(五星重要)
在实际工作中常用到which grep/egrep find
1)which 用法
which 命令:查找此命令在系统中的位置
[root@node-1 ~]# which ntpdate
/usr/sbin/ntpdate
2)grep查找使用
作用:过滤或使用正则表达式来搜索文本;把结果显示出来
主要参数:
-v 取反
-i 忽略大小写
^# 以#开头
#$ 以#结尾
^$ 空行
-n 对过滤的内容加上行号
| 或者的意思
例11:
[root@node-1 ~]# ps -aux | grep sshd | grep -v grep
root 894 0.0 0.2 112920 4328 ? Ss 19:30 0:00 /usr/sbin/sshd -D
root 1009 0.0 0.3 157336 6004 ? Ss 19:35 0:00 sshd: root@pts/0
[root@node-1 ~]# grep nologin$ /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
.....
ntp:x:38:38::/etc/ntp:/sbin/nologin

[root@node-1 ~]#grep -v ^# /etc/ssh/sshd_config
这样还会有空白行存在

[root@node-1 ~]#egrep -v "^#|^$" /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
......
Subsystem sftp /usr/libexec/openssh/sftp-server

[root@node-1 ~]#grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

3)find命令使用(必会,参数比较多)
格式:find pathname -options [-print]
命令字 路径名称 选项 输出
参数:
pathname:所查找的目录路径,不输入代表当前目录例如用 .. 来表示上层目录,用 / 来表示根目录。可以是绝对路径也可以是相对路径
find命令选项:
-name  按照文件名查找文件--“名字”
-perm  按照文件权限来查找文件。666 777 等
-user  按照文件属主来查找文件--“用户名”
-group  按照文件所属的组来查找文件--“组名称”
-mtime -n / +n  按照文件的更改时间来查找文件,

  • n 表示文件更改时间距现在n天以内
  • n 表示文件更改时间距现在n天以前
    -type  查找某一类型的文件
    b - 块设备文件
    d - 目录
    c - 字符设备文件
    p - 管道文件
    l- 符号链接文件
    f - 普通文件
    -size n 查找符合指定的文件大小的文件;+n表示大于此数值,-n表示大于此数值;后面可以带单位:+20K
    -exec 对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为' 命令 {} \;,注意{ }和 \;之间的空格,{}代表查到的内容
    -a and 与运算;条件同时成立才能有进一步操作
    -o or 或运算;条件成立其中一个就可以有进一步操作
    ! not 非运算;条件不成立才能有进一步操作
    例12:
    [root@node-1 ~]#find /etc -name *.conf
    /etc/resolv.conf
    /etc/pki/ca-trust/ca-legacy.conf
    /etc/yum/pluginconf.d/fastestmirror.conf
    ......
    [root@node-1 ~]#find / -user wangtao -exec cp -a {} /root/findresults/ \;
    #参数: -a #复制时,保留原来文件的所有属性
    [root@node-1 ~]#last -f /var/log/wtmp | awk '{print $3}' | sort | uniq -c
    3 192.168.101.116
    1 192.168.101.18
    6 192.168.26.1
    21 boot
    12 Sat
    2 Thu
    1 Tue
    作用:查询曾经登录过此机器的IP及次数
    11.4 命令判断
    11.4.1 用到的三个特殊符号: ; && ||
    前面已经讲过此三个符号的用法,在此说明一下
    ; 命令按从左到右的顺序执行,不考虑失败与否
    && 前一个命令执行成功才会执行后一个命令
    最常用的是源码安装软件的时候:make && make install
    || 前一个命令执行失败才会执行后一个命令

【这几天作为党员参加了社区安全防疫工作中了,更新确实有些慢,实在对不住】

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!